Диагностика

VLESS Reality: пинг есть, а коннект через раз — где искать

Диагностика по цепочке host↔inbound: SNI-override с опечаткой, fingerprint randomized и хвостовая запятая в address. В логах при этом пусто.

8 мин чтения

Классический «трёхдневный неуловимый» баг

Нода жива: isConnected, порт открыт, xray в аптайме. Пинг до сервера идёт. Но клиент подключается через раз, соединение рвётся, а в логах ноды — тишина. Это почти всегда рассинхрон одного звена в цепочке Reality-хендшейка, а не «протокол виноват» и не «сеть шалит».

Модель такая. Endpoint = адрес + порт + инбаунд, это одна «дверь». Обрыв живёт внутри одной цепочки, которая обязана сходиться насквозь:

клиент → host (порт / sni / pbk / sid) → inbound (порт / serverNames / privateKey / shortId) → нода

Разъехалось одно звено — Reality рвётся. При этом TCP-пинг остаётся живым: обрыв происходит на уровне TLS-хендшейка, ниже видимости обычного мониторинга.

Порядок диагностики

1. Сервер вообще жив? Нода isConnected, xrayUptime > 0. Порт слушает: bash -c 'cat </dev/null >/dev/tcp/HOST/PORT'. Reality отвечает: openssl s_client -connect host:port -servername <SNI> — должен вернуть сертификат маскировочной цели.

2. SNI-аудит host↔inbound — первым делом. Поле sni хоста — это override, а не дубликат: пустое — клиент наследует SNI из serverNames инбаунда, и рассогласование невозможно в принципе. Заполненное с опечаткой — клиент шлёт чужой SNI, нода ждёт свой, Reality рвётся молча. Классика — опечатка в TLD: инбаунд настроен на www.example-shop.de, в хосте вписано example-shop.ru. Одного символа достаточно, чтобы локация «не работала», и по логам это не ловится — только сверкой двух полей. Поэтому держите host.sni пустым, не копируйте значение «для надёжности».

3. Fingerprint = chrome? randomized — грабли, а не «более скрытный вариант»: uTLS периодически генерирует ClientHello, который Reality-dest отвергает. Получаете handshake fail «через раз» при живой ноде. Первый шаг при таком симптоме — найти выбивающийся randomized среди chrome.

4. Дубль endpoint? Два видимых хоста на один адрес:порт — клиент мечется между ними.

5. Ключи сходятся? Публичный ключ хоста должен равняться производной от приватного ключа инбаунда. Дериватся локально: xray x25519 -i <privateKey> — сверьте с тем, что уходит клиенту.

Поле address: тихий отказ из-за запятой

Отдельный источник отказа при полностью исправной ноде — формат поля address у хоста. Это CSV-строка доменов. Хвостовая запятая ("a.tld, b.tld,") означает, что клиент попытается отрезолвить пустой хвост как hostname — и упадёт. Разделитель только запятая (пробел после — ок), без запятой в конце, все домены должны резолвиться.

Подводные камни

Вывод. «Пинг есть — коннекта нет» в Reality почти всегда решается сверкой цепочки host↔inbound, а не сменой протокола. Два самых частых корня: SNI-override с опечаткой и fingerprint randomized. Держите host.sni пустым и fingerprint chrome — целый класс неуловимых обрывов исчезает.

Как подключиться за 2 минуты
Частые вопросы

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

Почему нода живая, пинг проходит, а клиент подключается через раз
Это почти всегда рассинхрон одного звена в цепочке host↔inbound Reality-хендшейка — обрыв происходит на уровне TLS-хендшейка, ниже видимости обычного мониторинга, и в логах ноды остаётся тишина.
Как опечатка в поле SNI хоста может незаметно ломать коннект
Поле sni хоста — это override: если оно заполнено с опечаткой (например, неверный TLD), клиент шлёт чужой SNI, нода ждёт свой, и Reality молча рвётся — по логам это не ловится, только сверкой полей вручную.
Почему fingerprint randomized может вызывать обрывы соединения
Randomized заставляет uTLS периодически генерировать ClientHello, который Reality-dest иногда отвергает, из-за чего handshake fail случается «через раз» при живой ноде — первым делом стоит проверить, нет ли randomized среди chrome.
Как хвостовая запятая в поле address хоста может обрывать подключение
Address — это CSV-строка доменов, и хвостовая запятая означает, что клиент попытается отрезолвить пустой хвост как hostname и упадёт — разделитель только запятая, без запятой в конце.
Как проверить, что публичный ключ хоста соответствует приватному ключу инбаунда
Публичный ключ деривуется локально командой xray x25519 -i с приватным ключом инбаунда, и результат нужно сверить с тем, что уходит клиенту.
Похожее

Ещё в базе знаний

Подключите рабочий VPN

Инструкции базы знаний написаны под ключи VPN PRO: ключ выдаёт Telegram-бот за минуту, работоспособность гарантируем. Промокод VPN10 — 10 дней бесплатно, без карты.

Промокод VPN10 — 10 дней бесплатно · до 31 августа · передавайте друзьям