VLESS Reality не работает: диагностика
Вчера подключалось, сегодня нет. Причин может быть с десяток, и почти все они видны за 10 минут, если идти по порядку: от сервера к сети и от простого к сложному. Не начинайте с переустановки всего подряд: так легко потерять рабочие ключи и не узнать, что на самом деле сломалось.
Дело не в хостинге
OBLAKO не запрещает Reality: личный VPN с собственным доменом в SNI разрешён правилами. Исключение одно: если сервер отдаёт сертификат популярного чужого сайта, система выключает его автоматически, а в панели появляется баннер «Обнаружена проблема SNI». Если баннера нет, причину ищите в сети или в настройках, по шагам ниже.
Инструкция подходит для Xray, установленного вручную, и для панели 3x-ui. Команды выполняются на сервере по SSH, если не сказано иначе.
Шаг 1. Сервер вообще работает?
Откройте панель OBLAKO и посмотрите статус сервера. Если там Остановлен или Приостановлен, дело не в Reality: сервер выключен вручную или закончился оплаченный срок. Что происходит после окончания срока, описано в статье Что будет, если не продлить сервер.
Если сервер работает, но по SSH не пускает, зайдите через вкладку Консоль в карточке сервера. Через неё видно, загрузилась ли система и не закончилось ли место на диске:
df -h /Заполненный на 100% диск ломает Xray, nginx и продление сертификатов одновременно. Чаще всего место съедают логи.
Шаг 2. Запущен ли Xray и слушает ли он порт 443
systemctl status xray --no-pager
ss -tlnp | grep ':443'Должна быть строка active (running), а порт 443 должен занимать процесс xray. Если на 443 сидит nginx или ничего не сидит, клиенты попадают не туда.
У 3x-ui служба называется x-ui, а Xray запускается как её дочерний процесс xray-linux-amd64. В выводе ss имя обрезается до xray-linux-amd6, это нормально.
Если служба падает, проверьте конфиг. Xray сам покажет строку с ошибкой:
xray run -test -c /usr/local/etc/xray/config.jsonДля 3x-ui конфиг и бинарник лежат в другом месте:
/usr/local/x-ui/bin/xray-linux-amd64 run -test -c /usr/local/x-ui/bin/config.jsonЧастые причины после обновления: пустое поле decryption (ошибка please add/set "decryption":"none" to every settings) и запрещённый теперь VLESS без защиты в исходящих подключениях (ошибка vless without TLS or other encryption is prohibited). Что поменялось в последних версиях, собрано в статье XHTTP и VLESS Encryption.
Шаг 3. Что пишет лог в момент подключения
Откройте лог и попробуйте подключиться с телефона:
journalctl -u xray -fДля 3x-ui смотрите journalctl -u x-ui -f: панель пишет сообщения Xray в свой журнал с пометкой XRAY.
По реакции лога уже понятно направление:
| Что видно | Что это значит |
|---|---|
| Ничего не появляется | Соединение до сервера не доходит. Переходите к шагу 5 |
Записи accepted и адреса сайтов | Сервер работает, проблема на стороне клиента или устройства |
REALITY: processed invalid connection from АДРЕС: причина | Соединение дошло, но не прошло проверку Reality: не тот ключ, Short ID или SNI. Шаг 4 |
invalid request user id | Reality пройден, но такого UUID на сервере нет. Шаг 4 |
is rejected since the client flow is empty | На сервере у пользователя включён Vision, а в ссылке нет flow. Шаг 4 |
Эти сообщения Xray пишет на уровне info. Если в конфиге стоит "loglevel": "warning", их не будет видно. На время диагностики поставьте "info" и перезапустите Xray, потом верните обратно.
Шаг 4. Совпадают ли параметры у клиента и сервера
Сравните ссылку в приложении с конфигом сервера. Должно совпадать всё:
- UUID клиента есть в списке пользователей сервера;
- pbk (публичный ключ) соответствует приватному ключу сервера. Если ключи перегенерировали, все старые ссылки умерли;
- sid (Short ID) есть в
shortIdsсервера; - sni входит в
serverNames; - flow: если на сервере у пользователя
xtls-rprx-vision, в ссылке должен быть тот жеflow; - порт и адрес указывают на этот сервер, а не на старый IP.
Самая частая ошибка в 3x-ui: ссылка скопирована, когда панель была открыта через SSH-туннель, и в ней адрес 127.0.0.1. Такая ссылка с телефона никуда не ведёт.
Время на устройстве влияет, только если на сервере в realitySettings задан maxTimeDiff. Тогда при расхождении часов больше заданного клиент получает отказ. Включите на телефоне автоматическую установку времени.
Ещё одна причина: старая версия приложения. В Reality есть параметр minClientVer, который отсекает клиентов со старым ядром, а Xray с 26.7.11 по 26.9.7 по умолчанию не пускал клиентов старше 26.3.27. Если сервер на такой версии, обновите Xray: начиная с 26.9.8 ограничения по умолчанию нет. И в любом случае обновите приложение до последней версии из официального магазина или с GitHub.
Шаг 5. Доходит ли соединение до сервера
Если лог пустой при попытке подключиться, проверьте TCP-доступность порта с того устройства и из той сети, где не работает. На компьютере с Windows:
Test-NetConnection IP_СЕРВЕРА -Port 443На macOS и Linux:
nc -vz -w 5 IP_СЕРВЕРА 443Затем повторите проверку из другой сети: с мобильного интернета вместо домашнего Wi-Fi или наоборот, попросите знакомого из другого города. Сочетание результатов подсказывает причину:
- Порт закрыт отовсюду, включая сети за пределами России: проблема на сервере. Проверьте файрвол (
ufw status) и шаг 2. - Порт закрыт из России, открыт из-за рубежа: похоже на блокировку IP. Подтвердить её и понять масштаб поможет статья Как понять, что IP сервера заблокирован, там же разобраны трассировки.
- Порт открыт, но клиент не подключается или подключается и сразу замирает: соединение рвут уже после установки. Шаг 6.
Шаг 6. Режут по содержимому, а не по адресу
Признаки фильтрации по содержимому:
- соединение устанавливается, первые килобайты проходят, потом всё зависает;
- сайт-маскировка в браузере по
https://ВАШ_ДОМЕНоткрывается, а через клиент не работает; - не работает только у одного оператора или только на мобильном интернете.
Здесь чаще всего виновато имя в SNI. Если ваш сервер маскируется под чужой известный сайт, в 2026 году в России это главный повод для блокировки. Переход на свой домен описан в статье Блокировки VLESS Reality и self-steal, а требования к имени собраны в статье Как выбрать SNI для Reality.
Если SNI уже свой, попробуйте по очереди:
- Сменить отпечаток в ссылке:
fp=firefoxилиfp=safariвместоchrome. - Добавить второй вход через XHTTP за nginx: такой трафик выглядит как обычные HTTP-запросы к вашему сайту.
- Попробовать протокол на UDP, если оператор не режет QUIC: варианты описаны в статье Hysteria2 и TUIC на VPS.
Шаг 7. Не работает только на мобильном интернете
Если дома всё в порядке, а на мобильной сети не открывается ни один зарубежный сервер, а не только ваш, скорее всего, оператор включил режим белых списков. В этом режиме к зарубежным IP не пропускается почти ничего, и настройки Reality не помогут. Как проверить, что это именно белые списки, и как работает схема с промежуточным российским сервером, читайте в статье Белые списки и каскад серверов.
Если IP всё-таки заблокирован
Блокировка IP не лечится настройками. Варианты:
- заказать новый сервер и перенести настройки. С self-steal это быстро: поменять A-запись домена на новый IP, скопировать конфиг Xray и выпустить сертификат. Ссылки у клиентов при этом не меняются, если в них указан домен, а не IP;
- держать запасной сервер заранее и раздать клиентам обе ссылки или подписку.
Новый сервер заказывается в панели, тарифы на странице VPS. Старый удалите, когда перенесёте всё нужное, см. Как удалить VPS.
Короткий чек-лист
- Сервер в статусе «Работает», диск не заполнен.
xrayзапущен и держит порт 443, конфиг проходитxray run -test.- В логе видно попытку подключения.
- UUID, pbk, sid, sni, flow и адрес в ссылке совпадают с сервером, приложение обновлено.
- Порт 443 открыт из нужной сети.
- SNI свой, а не чужого крупного сайта.
- На мобильном интернете нет режима белых списков.