Reality и маскировка

VLESS-мост между нодами: почему Reality отвергает транзит

Vision-flow конструируется из клиентского хоста, которого у внутреннего моста нет. Рабочий вариант — plain VLESS/TCP с security none.

5 мин чтения Обновлено · Dele Deleev

Симптом

Строите транзит между двумя своими нодами: вход → внутренний bridge → выход. Инъекция служебного пользователя в bridge-инбаунд то не работает вовсе, то Reality на промежуточном узле молча отвергает соединение. Прямые пользовательские подключения при этом в порядке.

Причина: flow берётся из хоста, которого у моста нет

Три варианта моста, разобранные на практике:

  1. Shadowsocks-bridge — панель не инжектит пользователей в shadowsocks-инбаунд, механизма нет.
  2. VLESS+Reality-bridge — инъекция работает, но Reality отвергает пустой flow. А vision-flow (xtls-rprx-vision) панель конструирует из клиентского хоста. У внутреннего моста хоста нет → flow приходит пустым → Reality рвёт соединение.
  3. VLESS/TCP с security: none — пустой flow валиден, инъекция служебного пользователя проходит, мост работает.

То есть vision-flow, обязательный для Reality, собирается из клиентской записи-хоста. Безхостовый служебный инбаунд получить его не может в принципе.

Решение

  • Для внутреннего служебного моста между нодами — plain VLESS/TCP (security: none): flow пустой и валидный, инъекция работает.
  • Полезная проверка при отладке транзита: сверить сертификат Reality входного узла снаружи и с localhost. Расхождение означает перехват на сетевом уровне — см. гайд про DNAT-перехват порта.
  • Компромисс надо осознавать: голый VLESS/TCP без TLS на внутреннем плече раскрывает метаданные плеча (пользовательские данные всё равно идут под HTTPS). При желании плечо позже харденится отдельным TLS или WireGuard.

Вывод. Некоторые параметры протокола конструируются на определённом уровне абстракции и недоступны на других. Reality vision-flow привязан к клиентскому хосту, поэтому его нельзя «просто задать» на служебном безхостовом инбаунде. Когда автоматизация не может сформировать обязательное поле — выбирайте транспорт, для которого это поле не требуется или валидно пустым, вместо борьбы со слоем, который поле не отдаёт.

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

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

Почему Reality отвергает соединение на внутреннем мосту между нодами?
Vision-flow (xtls-rprx-vision), обязательный для Reality, панель конструирует из клиентского хоста. У внутреннего служебного моста хоста нет, поэтому flow приходит пустым, и Reality рвёт соединение.
Работает ли Shadowsocks как мост между нодами?
Нет, панель не инжектит пользователей в shadowsocks-инбаунд — механизма для этого просто нет.
Какой транспорт рабочий для внутреннего служебного моста между нодами?
Рабочий вариант — plain VLESS/TCP с security: none: пустой flow в этом случае валиден, и инъекция служебного пользователя проходит нормально.
Как проверить, не перехватывается ли трафик моста на сетевом уровне?
Полезно сверить сертификат Reality входного узла снаружи и с localhost — расхождение означает перехват на сетевом уровне.
Есть ли минус у VLESS/TCP без TLS на внутреннем плече моста?
Да, голый VLESS/TCP без TLS раскрывает метаданные плеча, хотя пользовательские данные всё равно идут под HTTPS. При желании плечо позже можно захардить отдельным TLS или WireGuard.
Похожее

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

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

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

Гарантия работоспособности · оплата СБП, картой МИР или криптовалютой