VPSРейтинг
VPN6 марта 2026 · обновлено 4 сентября 2026 · 15 мин чтения

VLESS + Xray + Reality на VPS: личный прокси, который не блокируют

Reality делает TLS-рукопожатие неотличимым от обычного HTTPS: прокси прикрывается чужим сайтом и не нуждается ни в своём домене, ни в своём сертификате. Поднимем его через панель 3X-UI примерно за 15 минут и подключим клиентов по QR-коду. Инструкция обновлена под 3X-UI 3.7 и Xray-core 26.7, сентябрь 2026.

1. Как работает Reality

WireGuard и OpenVPN строят собственный туннель со своим рукопожатием, и DPI узнаёт его по первым пакетам. Reality не придумывает свой TLS, а показывает чужой.

Что видит DPI при Reality-соединении

1

TLS-запрос к настоящему сайту

Клиент начинает рукопожатие с SNI сайта-маски, например www.samsung.com. Для DPI это обычный запрос к доверенному домену.

2

Сервер прогоняет рукопожатие через сайт-маску

Так он делает на каждом входящем соединении, ещё до всякой проверки: сам подключается к сайту-маске и пересылает рукопожатие туда. Сканер или браузер, не знающий ключа, получает подлинный сертификат этого сайта и его страницу, как при обычном заходе. Отсюда и требование к цели: чем ближе она к VPS, тем быстрее подключается клиент.

3

Своего сервер узнаёт внутри рукопожатия

Свой клиент прячет метку в служебном поле рукопожатия, зашифровав её общим с сервером ключом — наружу этот ключ не передаётся. Сервер метку узнаёт и на ходу подменяет сертификат сайта своим временным, подписанным тем же ключом; клиент проверяет подпись. Со стороны и метка, и подпись — случайные байты, и подменить сертификат посередине нельзя.

4

Flow xtls-rprx-vision убирает второе шифрование

Уже зашифрованные TLS-данные идут без второго слоя шифрования: ниже нагрузка на процессор, а вложенный TLS не выдаёт себя характерными размерами записей.

Итог

Заблокировать такое соединение по сигнатуре значит заблокировать сам сайт-маску. Свой домен и свой сертификат прокси не нужны.

Чего Reality не скрывает

  • ритм и объём трафика: постоянный поток к одному адресу не похож на чтение сайта;
  • репутацию подсети: диапазоны хостингов известны и отслеживаются целиком;
  • число параллельных соединений к одному SNI.

Именно по этим признакам Reality и ловят в России. Что тогда менять — в пункте «Работало, а теперь нет»; как отличить фильтрацию протокола от блокировки самого адреса — в отдельной статье почему VLESS перестал работать в России.

2. Требования к VPS

ПараметрМинимумРекомендуется
CPU1 vCPU1–2 vCPU
RAM512 МБ1 ГБ
Диск5 ГБ SSD10 ГБ SSD
ОСUbuntu 22.04Ubuntu 24.04 LTS
ВиртуализацияKVM или OpenVZKVM (нужен для BBR)
РасположениеВне РФЕвропа (DE, NL, FI)
IPv4Белый, без NATБелый, без NAT
Порт 443СвободенСвободен

Почему локация решает

Каждое рукопожатие идёт через сайт-маску, поэтому задержка от VPS до неё добавляется к времени подключения. Нужен сервер в крупном европейском дата-центре: там легко найти подходящую цель в соседней сети. Хороший ориентир: от VPS до цели не больше 30 мс.

Если сервера ещё нет

VPN: от 1 ГБ RAM, 1 ядра и 10 ГБ SSD · Европа

Локация здесь не пожелание, а требование: Reality маскируется под сторонний сайт, и задержка до него должна быть минимальной. Цены в подборке европейские.

В каталоге под эти требования подходит 50 тарифов, самый дешёвый за 490 ₽/мес (HostKey, 1 ГБ, 40 ГБ SSD).

3. Установка 3X-UI

3X-UI — это веб-панель для Xray. Один скрипт ставит ядро, панель и systemd-сервис. Команды даны для root: под обычным пользователем добавляйте sudo.

Обновить систему и запустить официальный установщик
# NEEDRESTART_MODE=a нужен, чтобы обновление не встало на фиолетовом
# экране со списком служб: они перезапустятся сами
apt update && NEEDRESTART_MODE=a apt upgrade -y

bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

Что спросит установщик, по порядку

Database Selection → Choose [1]:Enter. SQLite подходит всем, кроме установок на сотни клиентов. PostgreSQL (вариант 2) ставится и настраивается автоматически, но для личного прокси избыточен.
Would you like to customize the Panel Port settings? [y/n]:n, и панель получит случайный порт из диапазона 1024–62000. Случайный порт лучше: его не найдут сканеры по стандартному номеру.
Choose an option (default 2 for IP):1) Let’s Encrypt на домен, 2) Let’s Encrypt на IP-адрес, 3) свои файлы сертификата, 4) без SSL. Вариантам 1 и 2 нужен открытый порт 80. Что выбрать, разобрано ниже.
Вариант 2: Is <IP> the correct incoming public IPv4 address for this server? [Default y]:Enter, если адрес совпадает с адресом вашего сервера. Дальше два вопроса: IPv6 (пусто, если его нет) и порт для проверки ACME (Enter, будет 80). Выпуск занимает несколько секунд.
Вариант 4: Bind the panel to 127.0.0.1 only? [y/N]:y. Панель перестанет быть доступной из интернета, а установщик тут же напечатает готовую команду ssh -L для входа с вашего компьютера.

Какой вариант SSL выбрать

Если порт 80 открыт, берите вариант 2: сертификат на IP выпускается сразу, живёт 6 дней и продлевается сам. Если открыть 80 порт нельзя или панель не должна торчать наружу, берите вариант 4 и отвечайте y на привязку к 127.0.0.1. На работу самого прокси выбор не влияет: Reality сертификатом панели не пользуется.

Вход в панель, привязанную к 127.0.0.1 (выполнять на своём компьютере)
# Пробросить порт панели на локальный 2222
ssh -L 2222:127.0.0.1:ПОРТ_ПАНЕЛИ root@IP_СЕРВЕРА

# Затем открыть в браузере
# http://localhost:2222/ВЕБ-ПУТЬ/

Что покажет в конце

Username / PasswordСлучайные строки по 10 символов
PortПорт панели
WebBasePathСлучайные 18 символов, часть адреса панели
DatabaseВыбранная база: SQLite или PostgreSQL
Access URLПолный адрес: схема, IP, порт и веб-путь
API TokenТокен для API, обычному пользователю не нужен

Данные не потеряются

Всё, что показано в конце установки, сохраняется в файл /etc/x-ui/install-result.env с правами 600, читать его может только root. Забыли адрес или пароль: cat /etc/x-ui/install-result.env. Сбросить логин и пароль можно через меню x-ui, пункт 7.

Проверка после установки
# Статус сервиса
systemctl status x-ui --no-pager

# Меню управления: обновление, порт, логи, firewall
x-ui

# Текущие настройки панели без меню
x-ui settings

Если панель не открылась

У многих провайдеров, в том числе Hetzner, Selectel, AWS и DigitalOcean, есть свой сетевой firewall на уровне панели управления. Он режет трафик до того, как тот дойдёт до VPS, и про UFW ничего не знает. Откройте нужный порт там: раздел Firewall, Security Groups или «Правила сети». Диагностика в разделе «Если не работает».

4. Настройка VLESS Reality inbound

Панель переведена на русский: язык выбирается прямо на экране входа, а позже в «Настройки панели» → «Язык интерфейса». Названия полей ниже даны по русскому интерфейсу.

Откройте Входящие и нажмите Создать подключение. Форма разбита на вкладки, нужны три.

ВкладкаПолеЗначение
ОсновноеПримечаниеЛюбое имя, например reality-443
ОсновноеПротоколVLESS
ОсновноеПорт443
ПотокТранспортRAW (бывший TCP)
БезопасностьПереключательReality
БезопасностьuTLSchrome, при замедлениях firefox
БезопасностьЦель (Target)Сайт-маска с портом: www.samsung.com:443
БезопасностьSNIТот же домен без порта
БезопасностьКлючи, Short IDs, SpiderXПанель заполняет сама при выборе Reality

Руками заполняются только Цель и SNI. Пару ключей x25519, Short IDs и путь SpiderX панель генерирует в момент выбора Reality, трогать их не нужно.

Как выбрать сайт-маску

Цель должна поддерживать TLS 1.3, HTTP/2 и обмен ключами X25519, иметь действующий сертификат и открываться с самого VPS: рукопожатие через неё идёт с сервера, клиент к ней не обращается. Со стороны клиента важно другое — чтобы его оператор не резал этот SNI. Проверять вручную не нужно: рядом с полем Цель есть две кнопки.

СканироватьПроверяет введённую цель и показывает версию TLS, ALPN, обмен ключами, сертификат и задержку. Вердикт «Подходит» означает, что все условия выполнены.
Найти целиПеребирает готовый список кандидатов. В поле можно ввести домен, IP или подсеть вида 203.0.113.0/24: панель просканирует до 256 адресов и покажет соседей вашего дата-центра, годных под маску.

Какие цели не брать

Xray-core пишет в лог предупреждение, если SNI содержит apple, icloud, microsoft или заканчивается на .ru, .cn, .ir. Формально предупреждение написано про китайский фильтр, но причина общая: это самые заезженные маски, и они повышают риск блокировки IP сервера. По той же причине не стоит брать сайты за Cloudflare: сертификат CDN, приходящий с адреса вне сетей CDN, легко проверяется со стороны.

Учтите: в готовом списке кнопки «Найти цели» есть и microsoft, и cloudflare, их брать не нужно. Рабочие варианты: www.samsung.com:443, www.nvidia.com:443, www.intel.com:443, www.sony.com:443. Лучше всё же найти цель в сети своего дата-центра кнопкой «Найти цели».

Ручная проверка цели с сервера, если кнопкой пользоваться не хочется
openssl s_client -connect www.samsung.com:443 -servername www.samsung.com \
  -tls1_3 -alpn h2 </dev/null 2>/dev/null \
  | grep -E "New, TLSv1.3|ALPN protocol|Server Temp Key"

# Годная цель отвечает всеми тремя строками:
#   Server Temp Key: X25519, 253 bits
#   New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
#   ALPN protocol: h2
# Пустой вывод или меньше трёх строк: цель не годится, берите другую.

Два поля, которые можно не трогать

  • mldsa65 Seed и mldsa65 Verify на вкладке «Безопасность»: постквантовая подпись Reality. Кнопка «Получить новый Seed» заполняет оба поля, публичная часть уезжает в ссылку параметром pqv. Клиенты на свежем Xray-core её понимают, без неё Reality тоже работает.
  • Шифрование и Расшифрование на вкладке «Протокол»: собственное шифрование VLESS, включая постквантовое mlkem768. Для связки Reality + RAW оно избыточно, оставьте none. Пригодится, если переедете на XHTTP: там flow xtls-rprx-vision доступен только при включённом шифровании VLESS.

Нажмите Создать. Панель применит конфигурацию к Xray сама, перезапускать ничего не нужно.

6. Подключение клиентов

Клиент должен работать на свежем Xray-core

Начиная с Xray-core 26.7.11 Reality-сервер по умолчанию принимает только клиентов на Xray-core 26.3.27 и новее. Сегодняшний установщик ставит 26.7.28, так что правило действует сразу. Остальные отклоняются молча: ссылка верная, а соединение уходит в таймаут. Под правило попадают приложения на других ядрах, sing-box и Mihomo (это Hiddify и часть программ для iOS), и просто давно не обновлявшиеся клиенты. На Xray-core собраны v2rayN, v2rayNG и Happ, их достаточно держать в актуальной версии. Если нужен именно sing-box, откройте inbound и поставьте «Мин. версия клиента» = 1.0.0. Но это не бесплатно: сервер начнёт принимать и устаревшие TLS-отпечатки, а само ядро пишет в лог, что такая правка повышает риск блокировки IP.

Windows: v2rayN

Качать с github.com/2dust/v2rayN/releases, актуальная версия 7.24.9. Два варианта сборки: v2rayN-windows-64.zip (привычный вид Windows) и v2rayN-windows-64-desktop.zip (новый интерфейс). Язык переключается в настройках, пункт Language, с перезапуском. Названия пунктов ниже даны для русского интерфейса.

  1. 1Распакуйте архив и запустите v2rayN.exe
  2. 2Скопируйте vless:// ссылку из панели в буфер обмена
  3. 3В окне программы: Серверы → Импорт ссылок общего доступа из буфера обмена (или Ctrl+V)
  4. 4Правой кнопкой по добавленной строке → Сделать активным
  5. 5В строке состояния внизу окна или в меню значка в трее выберите Установить системный прокси. Чтобы завернуть весь трафик системы, а не только браузерный, включите там же TUN

Android: v2rayNG или Happ

Только GitHub, никаких сторонних APK

Официального v2rayNG в Google Play нет с 2025 года. В выдаче и в самом магазине попадаются клоны под тем же именем, внутри которых бывают закладки, читающие ваши ключи и трафик. Верный признак подделки: на стороннем сайте версия «новее», чем в релизах на GitHub. Единственный источник: github.com/2dust/v2rayNG/releases. Нужен файл под архитектуру телефона, почти всегда это v2rayNG_2.2.6_arm64-v8a.apk. Рядом лежат подпись .sig и ключ v2rayN-public-key.asc. Проверка: сначала gpg --import v2rayN-public-key.asc, затем gpg --verify файл.apk.sig файл.apk. Нужен GnuPG 2.4 и новее, ключ у 2dust нового формата. Правильный ответ содержит строку Good signature from "2dust <2dust-noreply@github.com>" — на русской локали она же выглядит как «Действительная подпись пользователя»; предупреждение ниже, что ключ не заверен третьей стороной, это норма. Строка BAD signature означает подменённый файл.

v2rayNG 2.2.6

  • 1.Скачать APK с github.com/2dust/v2rayNG/releases
  • 2.Нажать + → Импорт из QR-кода
  • 3.Включить переключатель сверху и разрешить создание VPN-профиля

Happ 4.3

  • 1.Установить из Google Play или взять APK с github.com/Happ-proxy/happ-android
  • 2.Добавить конфигурацию через QR-код или ссылку
  • 3.Нажать подключение

iOS: OneXray или Shadowrocket, а для аккаунта не из России — ещё Happ и Streisand

С российским Apple ID выбор сузился до двух приложений

Apple по требованию Роскомнадзора вычистила из российского App Store и Happ, и Streisand, и V2Box. Мы проверили витрины: карточки Happ и Streisand открываются в США, Германии, Турции и Казахстане и отдают 404 в российской, V2Box — то же самое. v2RayTun пропал не только из российской витрины: его сейчас нет ни в одной. Уже установленные приложения продолжают работать, но не обновляются. С российским аккаунтом на 3 сентября 2026 ставятся два варианта: платный Shadowrocket, который нужно держать обновлённым, и бесплатный OneXray на Xray-core (издатель Yuan Dev LLC, исходный код на github.com/OneXray/OneXray). Бесплатные приложения на других ядрах в витрине тоже есть — например Karing на sing-box, — но сервер с настройками по умолчанию их не примет: смотрите предупреждение в начале раздела.

Не ищите Happ поиском в российском App Store. По запросу выдаются «Happ VPN», «Happ VPN ++», «Happ VPN Official» и подобное от посторонних издателей — это чужие приложения, к оригиналу отношения не имеющие. Настоящий Happ выпускает Flyfrog LLC, настоящий Streisand — ARCADIA ODYSSEY INC.; в российской витрине обоих издателей нет вовсе. С v2RayTun то же самое: под этим именем в российской выдаче лежит приложение постороннего издателя.

Shadowrocket

App Store, платный

Доступен с российским Apple ID. Много протоколов и тонкая маршрутизация. Держите обновлённым: старые версии сервер отклоняет

OneXray

App Store, бесплатно

Издатель Yuan Dev LLC, открытый код. Работает на Xray-core. Доступен с российским Apple ID

Happ

App Store, бесплатно

Издатель Flyfrog LLC. Работает на Xray-core. Нужен аккаунт другой страны

Streisand

App Store, бесплатно

Издатель ARCADIA ODYSSEY INC. Поддерживает VLESS Reality. Нужен аккаунт другой страны

Порядок одинаковый: установить приложение, добавить конфигурацию через QR-код из панели, разрешить создание VPN-профиля, подключиться. Если приложение уходит в таймаут при верной ссылке, дело в ядре: смотрите предупреждение в начале раздела.

Проверить подключение

Откройте 2ip.ru или whoer.net: должен показываться IP вашего VPS. Утечки DNS проверяются на browserleaks.com/dns: в списке не должно быть серверов вашего домашнего провайдера.

7. UFW и безопасность сервера

Прокси смотрит в интернет, и панель тоже, если вы не привязали её к 127.0.0.1. Минимум: закрытый firewall и вход по SSH-ключу.

UFW: сначала правила, потом включение
# SSH. Добавить ДО включения UFW, иначе потеряете доступ.
# Если SSH на своём порту, укажите его вместо 22
ufw allow 22/tcp

# Порт прокси из настроек inbound
ufw allow 443/tcp

# Порт 80 нужен только для продления Let's Encrypt (варианты SSL 1 и 2)
ufw allow 80/tcp

# Порт панели: открыть только со своего адреса.
# Свой IP: curl ifconfig.me на домашнем компьютере.
# Дома адрес обычно динамический: сменится — панель перестанет открываться.
# Лечится через консоль провайдера: ufw status numbered, затем
# ufw delete НОМЕР и правило заново с новым адресом.
# Если панель привязана к 127.0.0.1, эта строка не нужна вовсе
ufw allow from ВАШ_ДОМАШНИЙ_IP to any port ПОРТ_ПАНЕЛИ

# ufw enable под SSH переспросит: Proceed with operation (y|n)?
# Отвечайте y, правило для 22 порта уже добавлено выше
ufw enable
ufw status verbose

UFW не единственный firewall

UFW работает внутри VPS. У многих провайдеров (Hetzner, Selectel, Yandex Cloud, AWS, DigitalOcean) есть ещё и сетевой firewall в панели управления, он срабатывает раньше. Те же порты нужно открыть и там. В самой 3X-UI правила тоже редактируются: меню x-ui, пункт 23 (Firewall Management).

SSH-ключи вместо пароля

На своём компьютере
ssh-keygen -t ed25519 -C "vps-proxy"
ssh-copy-id root@IP_СЕРВЕРА

# Убедиться, что ключ доехал (команда запускается локально)
ssh root@IP_СЕРВЕРА "cat /root/.ssh/authorized_keys 2>/dev/null | grep -c ssh-ed25519"
# Ожидаем число 1 или больше. Ноль значит, что ключ не скопировался.
# Файл читается через cat, чтобы ответ был ровно одним числом
# и когда файла ещё нет: grep по несуществующему пути молчит.

Про cloud-init на Ubuntu

В облачных образах лежит файл /etc/ssh/sshd_config.d/50-cloud-init.conf (иногда с другим именем) со строкой PasswordAuthentication yes. Он подключается после основного конфига и перекрывает правки в нём: отредактируете только sshd_config, и вход по паролю останется включённым.

Отключить вход по паролю (на сервере)
# 1. Откройте ВТОРУЮ сессию SSH и убедитесь, что вход по ключу работает.
#    Первую не закрывайте, пока не проверите.

# 2. Убрать override cloud-init
rm -f /etc/ssh/sshd_config.d/50-cloud-init.conf

# 3. Выставить две настройки. В свежей Ubuntu обе строки
#    закомментированы, поэтому правка через nano требует убрать #.
#    Эти четыре команды делают то же самое при любом состоянии файла:
sed -i 's|^#*PasswordAuthentication.*|PasswordAuthentication no|' /etc/ssh/sshd_config
grep -q '^PasswordAuthentication no' /etc/ssh/sshd_config || echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
sed -i 's|^#*PermitRootLogin.*|PermitRootLogin prohibit-password|' /etc/ssh/sshd_config
grep -q '^PermitRootLogin prohibit-password' /etc/ssh/sshd_config || echo 'PermitRootLogin prohibit-password' >> /etc/ssh/sshd_config

systemctl restart ssh

# 4. Проверить итоговые значения, а не содержимое файлов
sshd -T | grep -iE "passwordauthentication|permitrootlogin"
# Ожидаем ровно две строки:
#   passwordauthentication no
#   permitrootlogin without-password
# Второе значение не опечатка: sshd печатает старое название
# для prohibit-password, это одно и то же.
# Если видите passwordauthentication yes, остался ещё один
# файл с настройкой: grep -r PasswordAuth /etc/ssh/

✓ Делать

  • Панель на 127.0.0.1 или порт только со своего IP
  • Вход по SSH-ключу, пароль отключён
  • Прокси на 443 порту
  • Обновлять панель и ядро: x-ui, пункт 2
  • Включить BBR: x-ui, пункт 26
  • Ссылки передавать защищённым каналом

✗ Не делать

  • Оставлять порт панели открытым всему интернету
  • Брать целью apple, icloud, microsoft и домены .ru
  • Переносить параметры из ссылки руками
  • Ставить APK и сборки со сторонних сайтов
  • Менять порт прокси на нестандартный

Полезные пункты меню x-ui

Нумерация 3X-UI 3.x (в версиях 2.x она была другой)
2    обновить панель
7    сбросить логин и пароль
8    сменить веб-путь панели
10   сменить порт панели
11   показать текущие настройки
14   перезапустить панель
17   логи
23   правила firewall
26   включить BBR

8. Если не работает

Почти все проблемы сводятся к восьми причинам. Проверяйте по порядку.

1. Не открывается панель

Причина номер один, и обычно это firewall провайдера, а не UFW.

На сервере: сервис жив и порт слушается
systemctl status x-ui --no-pager
ss -tlnp | grep ':ПОРТ_ПАНЕЛИ'
С домашнего компьютера: доступен ли порт снаружи
# Linux и macOS: -w 5 ограничивает ожидание пятью секундами
nc -zv -w 5 IP_ВАШЕГО_VPS ПОРТ_ПАНЕЛИ

# Windows, PowerShell
Test-NetConnection -ComputerName IP_ВАШЕГО_VPS -Port ПОРТ_ПАНЕЛИ

succeeded! — порт открыт, дело не в сети.
Connection refused, отказ сразу: сервис на VPS не запущен.
timed out через 5 секунд: режет firewall, чаще всего в панели провайдера. Добавьте там входящее правило TCP на порт панели, лучше только со своего адреса.

2. Клиент не подключается

  • Ядро клиента. Сервер по умолчанию принимает только Xray-core 26.3.27 и новее. Обновите клиент, возьмите другой на Xray-core или поставьте в inbound «Мин. версия клиента» = 1.0.0.
  • Порт закрыт. Проверьте с домашнего компьютера: nc -zv -w 5 IP 443, в Windows — Test-NetConnection -ComputerName IP -Port 443. Порт открывается и в UFW, и в панели провайдера.
  • Xray не слушает. На сервере: ss -tlnp | grep ':443 '. Пусто означает, что inbound выключен переключателем или Xray не стартовал. Если 443 занял чужой процесс — чаще всего Nginx или Caddy, — освободите порт: Reality лучше оставить на 443. Панель при этом работает как обычно и показывает статус Xray «Ошибка».
  • Часы. Сверка времени включается полем «Макс. разница во времени (мс)» в inbound и по умолчанию выключена. Если вы его заполняли, проверьте время на сервере: timedatectl.
  • Ссылка устарела. После правки inbound возьмите её из панели заново.
  • Расходится flow. Даёт таймаут при верной во всём остальном ссылке. Разбор по сообщениям из лога — в следующем пункте.

3. Ошибки flow в логе

Причину отказа Xray клиенту не сообщает: тот видит только обрыв или таймаут, одинаковый на все случаи жизни. Настоящая причина остаётся в логе сервера. 3X-UI забирает вывод ядра себе и пишет его вместе со своими сообщениями, помечая строки ядра префиксом XRAY: — отдельного файла у Xray здесь нет.

Искать надо именно в файле панели. В системный журнал все строки ниже не попадают: панель считает оборванное соединение рядовым событием и понижает его до уровня debug, а в журнал отдаёт только то, что важнее. Поэтому ни journalctl, ни пункт 17 меню x-ui их не покажут. В файл пишется всё.

Читать сообщения ядра (нужен root)
# Последние сообщения ядра
grep XRAY /var/log/x-ui/3xui.log | tail -50

# Смотреть вживую и одновременно пробовать подключиться клиентом.
# --line-buffered обязателен: без него grep копит вывод и на экране
# ничего не появляется
tail -f /var/log/x-ui/3xui.log | grep --line-buffered XRAY

Уровень логирования самого Xray по умолчанию warning, и все сообщения ниже приходят именно на нём — поднимать его до debug незачем. Пять строк, которые стоит узнавать в лицо:

СообщениеЧто случилось и что делать
is rejected since the client flow is emptyСамая частая. У клиента в панели проставлен Flow, а подключение пришло без него: значит в ссылке нет xtls-rprx-vision. Обычно ссылку собирали руками или переносили по частям. Возьмите её из панели заново.
is not able to use the flow xtls-rprx-visionОбратный случай: flow пришёл в ссылке, а в карточке клиента поле пустое. Откройте клиента, вкладка «Учетные данные», выставьте Flow и заново возьмите ссылку.
xtls-rprx-vision doesn't support UDPКлиент отправил UDP напрямую, а не завёрнутым в XUDP. Включите в клиенте Mux (XUDP) либо оставьте UDP вне прокси. На доступ к сайтам это не влияет.
failed to use xtls-rprx-vision, found outer tls versionВнешний TLS оказался не 1.3. С Reality невозможно в принципе: он всегда работает по TLS 1.3. Значит inbound на самом деле переключён на обычный TLS — проверьте вкладку «Безопасность».
XTLS only supports TLS and REALITY directly for now.Flow остался на транспорте, где нет своего TLS: WebSocket, gRPC, HTTPUpgrade, mKCP. Через обычную форму так не соберёшь, но можно через «Расширенный шаблон» или API. Верните RAW или снимите flow.

Отдельно про QUIC: строка «XTLS rejected UDP/443 traffic»

Эту строку пишет не сервер, а само приложение в свой лог, и на уровне info — в журнале VPS её не будет. И это не поломка. С обычным xtls-rprx-vision клиент намеренно не пускает в туннель UDP на 443 порт, то есть QUIC и HTTP/3. Браузер видит, что QUIC не отвечает, и откатывается на TCP — со стороны это выглядит как заминка на первых секундах у YouTube и сервисов Google. Если QUIC нужен внутри туннеля, откройте карточку клиента, вкладка «Учетные данные», и выберите второе значение поля Flow — xtls-rprx-vision-udp443, — после чего заново возьмите ссылку.

Менять что-то ещё не нужно, и это не оплошность инструкции. В конфигурации самого ядра значение с -udp443 запрещено: Xray с ним просто не стартует, оно допустимо только на стороне клиента. Панель это разводит сама — в ссылку уходит полное значение, а ядру она подставляет обычный xtls-rprx-vision. Поэтому руками в JSON инбаунда этот флоу вписывать нельзя.

4. Подключение есть, интернета нет или он медленный

  • Цель не подходит. Нажмите «Сканировать» рядом с полем Цель: нужны TLS 1.3, ALPN h2, обмен ключами X25519 и живой сертификат.
  • Цель отдаёт ошибку. Проверьте с сервера: curl -I https://ЦЕЛЬ. Reality должен пересылать чужой трафик на работающий сайт.
  • Замедление со стороны оператора. Отдельный случай, разобран в следующем пункте.
  • Утечка DNS. В настройках клиента включите отправку DNS через прокси, проверьте на browserleaks.com/dns.
  • Маршрутизация в клиенте. Режим должен быть глобальным, а не «в обход локальных сетей».

5. Работало, а теперь нет: фильтрует оператор

Настройки фильтрации у операторов меняют волнами, и Reality на 443 порту переживает их лучше остальных вариантов, но не всегда. Признак тот же: клиент показывает «Подключено», а страницы не грузятся.

Прежде чем что-то менять, стоит понять, в чём дело: соединение опознали или заблокировали сам адрес сервера. Это разные вердикты, и второй настройками не лечится. Как отличить их за пять минут, разобрано в отдельной статье — почему VLESS перестал работать в России. Здесь — только сам порядок действий, когда вердикт уже известен.

  1. Смените сайт-маску (Target и SNI). Популярные цели выгорают быстрее всех. Как выбрать новую, описано в разделе 4.
  2. Смените uTLS на firefox. По наблюдениям тех, кто разбирал летние блокировки 2026 года, под ударом оказались прежде всего отпечатки chrome, safari и ios, а firefox и Edge встречаются в прокси-конфигах реже. Документального перечня нет, это догадка из практики, но смена бесплатна и занимает минуту. После неё заново скопируйте ссылку клиента.
  3. Смените транспорт на XHTTP. В inbound на вкладке «Поток» выберите Транспорт XHTTP, Безопасность оставьте Reality. XHTTP разбивает поток на отдельные HTTP-транзакции, и поведенческий анализ различает его хуже. Учтите: flow xtls-rprx-vision держится за транспортный TLS, поэтому на XHTTP панель его снимает — если только вы не включили собственное шифрование VLESS (поля «Шифрование» и «Расшифрование» на вкладке «Протокол»): оно даёт Vision тот самый недостающий слой, и тогда flow остаётся доступен.
  4. Смените хостинг или локацию. Если отвалилась вся подсеть, настройки не помогут: нужен другой провайдер, а не другой конфиг.
  5. Держите запасной протокол. В 3X-UI 3.7 встроен AmneziaWG: это WireGuard с изменённым рукопожатием, он поднимается отдельным inbound и не требует ни модуля ядра, ни Docker.

Порт менять не нужно

Совет «перевесить Reality на случайный высокий порт» устарел. С версии 26.3.23 Xray-core сам пишет в лог предупреждение: Reality на порту, отличном от 443, повышает вероятность блокировки IP сервера. Настоящий HTTPS живёт на 443, и трафик к 43821 порту сам по себе выглядит подозрительно.

6. Потерян доступ по SSH

Восстановление одно: консоль в панели провайдера, она же VNC или Serial Console.

Через консоль провайдера
sshd -T | grep -iE "passwordauthentication|permitrootlogin"
cat /root/.ssh/authorized_keys

# Временно вернуть вход по паролю
rm -f /etc/ssh/sshd_config.d/50-cloud-init.conf
sed -i 's|^#*PasswordAuthentication.*|PasswordAuthentication yes|' /etc/ssh/sshd_config
grep -q '^PasswordAuthentication yes' /etc/ssh/sshd_config ||
  echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
systemctl restart ssh

7. Сервис x-ui не запускается

Речь о самой панели. Занятый 443 сюда не относится: на нём падает Xray, а сервис x-ui продолжает работать — это пункт 2 выше.

Диагностика
journalctl -u x-ui -n 100 --no-pager
journalctl -u x-ui -f
  • Порт панели занят. Смените его: x-ui, пункт 10.
  • Битая конфигурация панели. Сброс: x-ui, пункт 9. Клиенты, inbound, логин и пароль останутся, но порт и веб-путь вернутся к значениям по умолчанию: новый адрес смотрите пунктом 11.

8. Серый IP за NAT

Сверить адрес интерфейса с внешним
ip -4 addr show scope global | grep inet
curl -4 ifconfig.me

Если на интерфейсе адрес из диапазонов 10., 172.16–31. или 192.168., а внешний другой, у вас NAT и входящие подключения не проходят. Нужен белый IPv4, обычно он покупается отдельно.

Быстрый чек-лист

Панель не открываетсяОткрыть порт в firewall провайдера и в UFW
Клиент: таймаутПроверить ядро клиента, затем nc -zv -w 5 IP 443
Клиент: таймаут, а порт открытgrep XRAY /var/log/x-ui/3xui.log — искать flow
YouTube тормозит на стартеНорма: QUIC не идёт. Нужен — flow xtls-rprx-vision-udp443
Клиент: ошибка рукопожатияКнопка «Сканировать» у поля Цель (раздел 4)
Подключился, сайты не грузятсяСменить маску, uTLS, транспорт (пункт 5 выше)
x-ui в failedjournalctl -u x-ui -n 100, обычно занят порт
Потерян SSHКонсоль провайдера, sshd -T
Серый IPcurl -4 ifconfig.me не совпадает с ip addr

9. Частые вопросы

Reality маскируется под сторонний сайт, и задержка до него должна быть минимальной. Российская площадка не подходит.

Провайдеры под VPN →

Смотрите также