REALITY handshake failed: причины ошибки и порядок проверок
Ошибка REALITY handshake failed возникает при сбое TLS-рукопожатия. Разбираем причины: неверные ключи, shortId, serverName, проблемы с сетью и DNS. Пошаговая диагностика и типичные ошибки.
Содержание
Что такое REALITY и почему возникает handshake failed?
REALITY — это технология маскировки VLESS-соединений под обычный TLS-трафик. Она разработана для Xray-core и также поддерживается sing-box. В отличие от классического TLS, REALITY не требует установки собственного сертификата на сервере: сервер перенаправляет рукопожатие к реальному сайту (параметр dest) и использует его сертификат для проверки со стороны клиента.
Ошибка REALITY handshake failed появляется, когда клиент не может завершить TLS-клиентское приветствие. Это означает, что между клиентом и сервером не установлено зашифрованное соединение. При этом TCP-соединение может быть установлено, но на TLS-уровне происходит сбой. Такая ошибка может быть вызвана как неправильной конфигурацией, так и сетевыми проблемами (блокировкой, DPI, DNS).
Первичная диагностика: собираем логи
Начните с проверки логов на клиенте и на сервере. На клиенте в v2rayN или Nekoray включите подробный уровень логирования (debug). В конфигурации Xray можно установить "log": {"loglevel": "debug"}. Ищите строки, содержащие REALITY или handshake. Например, клиент может вывести reality: handshake failed с указанием причины.
На сервере смотрите журнал Xray или sing-box. Если ошибка появляется на сервере, значит клиент достучался до сервера, но сервер не смог согласовать параметры REALITY. Отсутствие логов на сервере при ошибке на клиенте указывает на то, что трафик не достигает сервера или блокируется на сетевом уровне.
Также полезно включить логи доступа (access log) на сервере, чтобы видеть, откуда приходят запросы.
Проверка серверной конфигурации REALITY
Основные параметры на стороне сервера в конфигурации Xray (аналогично в sing-box):
privateKey— приватный ключ REALITY, генерируется вместе сpublicKey. Пара должна быть согласованной.shortIds— список коротких идентификаторов. Если на клиенте заданshortId, он должен быть в этом списке. Можно оставить пустую строку, если идентификатор не используется.serverNames— список имён, с которыми клиент будет сверять сертификат (например,example.com). Клиент должен отправить SNI, совпадающий с одним из этих имён.dest— адрес реального сайта для проксирования TLS-рукопожатия (например,www.google.com:443). Если dest недоступен, рукопожатие может не состояться.
Чаще всего handshake failed возникает из-за несовпадения shortId. Проверьте, что на сервере и клиенте указан один и тот же короткий ID (или пустая строка). Убедитесь, что privateKey и publicKey образуют корректную пару. Ключи генерируются командой xray x25519 или sing-box generate reality-keypair.
Важно: REALITY может работать на любом порту, но для маскировки под HTTPS чаще используется 443. На сервере также должны быть открыты соответствующие порты в файрволе.
Проверка клиентских параметров REALITY
На клиенте в конфигурации VLESS (в v2rayN это параметры в окне настройки, в Nekoray — в редакторе, в sing-box — JSON) должны быть:
publicKey— публичный ключ, соответствующий приватному ключу сервера.shortId— тот же shortId, что и на сервере (может быть пустым).serverName— имя для проверки сертификата, должно совпадать с одним изserverNamesна сервере. Обычно это домен из dest.fingerprint— отпечаток TLS-клиента (например,chrome). Рекомендуется указывать реальный отпечаток для лучшей маскировки.
Если хотя бы один из параметров не совпадает, клиент получает ошибку. Проверьте, нет ли лишних пробелов или неверного регистра в hex-представлении shortId. Также обратите внимание на правильность адреса сервера (host/port).
Пример конфигурации клиента (vless:// строка):
vless://uuid@server:443?encryption=none&security=reality&sni=example.com&fp=chrome&pbk=ПубличныйКлюч&sid=КороткийId#profileСети и DNS: неочевидные причины
Даже если конфигурация верна, ошибка может возникать из-за сети. Провайдеры могут блокировать TLS-соединения с необычными SNI или использовать DPI для обнаружения REALITY. Проверьте доступность сервера с вашего IP: telnet ваш_сервер 443 или curl -v https://ваш_сервер (если на сервере порт 443 и сервер отвечает). Если соединение не устанавливается, это явно сетевая проблема.
DNS-проблемы тоже приводят к handshake failed. Если клиент резолвит домен на неправильный IP (например, из-за загрязнения DNS), он не попадает на сервер. Попробуйте использовать IP-адрес напрямую в конфигурации, либо настройте DoH или DoT на клиенте. Также следите за временем на устройстве: если системные часы сильно отличаются от времени сервера, TLS-сертификаты могут быть недействительны, что вызовет ошибку.
Пошаговый порядок проверки (чек-лист)
- Проверьте логи на клиенте и сервере — найдите точную строку ошибки.
- Убедитесь, что сервер запущен и слушает нужный порт (например,
netstat -tulpn | grep 443). - Проверьте соответствие publicKey и privateKey — они должны быть из одной пары.
- Проверьте совпадение shortId (или пустую строку) на клиенте и сервере.
- Проверьте serverName на клиенте и serverNames на сервере — они должны совпадать.
- Проверьте доступность порта снаружи (файрвол, NAT, ограничения провайдера).
- Проверьте DNS-резолв домена — попробуйте пропинговать или зарезолвить через
nslookup. - Попробуйте подключение с другого устройства или через другую сеть, чтобы исключить локальные проблемы.
Типичные ошибки и как их исправить
Ошибка 1: shortId не совпадает. Исправление: сгенерируйте одинаковый shortId на сервере и клиенте или удалите его (пустая строка).
Ошибка 2: неверный ключ. Убедитесь, что privateKey и publicKey из одной пары. Сгенерируйте новые ключи и обновите обе стороны.
Ошибка 3: неверный serverName. Проверьте, что в конфигурации клиента указано имя, которое есть в списке serverNames на сервере. Иногда точно нужен домен из параметра dest.
Ошибка 4: блокировка порта провайдером. Используйте нестандартный порт (например, 8443) или включите маскировку под другой протокол.
Ошибка 5: неправильная конфигурация в клиенте. Например, в v2rayN поле settings для REALITY может перезаписываться. Проверьте, что все поля заполнены в правильном разделе.
Часто задаваемые вопросы
Вопрос: Можно ли использовать REALITY без собственного сертификата?
Ответ: Да, REALITY использует сертификат реального сайта (dest), поэтому свой сертификат на сервере не нужен.
Вопрос: Что делать, если ошибка только на части устройств?
Ответ: Скорее всего, на устройстве неправильные системные часы или проблемы с DNS. Проверьте время и DNS.
Вопрос: Работает ли REALITY в sing-box?
Ответ: Да, sing-box поддерживает REALITY, но параметры называются по-другому (например, reality в security). Смотрите документацию sing-box.
Вопрос: Как сгенерировать ключи REALITY?
Ответ: Для Xray используйте команду xray x25519, для sing-box — sing-box generate reality-keypair.
Проверено на практике
- Дата проверки: 2026-04-27
- Среда: Xray-core v1.8.x, sing-box v1.10.x, v2rayN 7.x
- Версии: Xray-core 1.8.0, sing-box 1.10.0
Мини-чеклист
- Проверьте логи на клиенте и сервере.
- Убедитесь, что сервер слушает нужный порт.
- Проверьте соответствие privateKey и publicKey.
- Проверьте совпадение shortId.
- Проверьте serverName и serverNames.
- Проверьте доступность порта снаружи.
- Проверьте DNS-резолв.
- Попробуйте подключение с другого устройства.
Частые ошибки
- [object Object]
- [object Object]
- [object Object]
- [object Object]
- [object Object]
Источники и документация
FAQ
Можно ли использовать REALITY без собственного сертификата?
Да, REALITY использует сертификат реального сайта (dest), поэтому свой сертификат на сервере не нужен.
Что делать, если ошибка только на части устройств?
Скорее всего, на устройстве неправильные системные часы или проблемы с DNS. Проверьте время и DNS.
Работает ли REALITY в sing-box?
Да, sing-box поддерживает REALITY, но параметры называются по-другому. Смотрите документацию sing-box.
Как сгенерировать ключи REALITY?
Для Xray используйте команду xray x25519, для sing-box — sing-box generate reality-keypair.
Нужен быстрый рабочий доступ?
Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.
Получить доступ