Настраивая VLESS или VMess, вы постоянно натыкаетесь на три похожих поля: адрес, SNI (в некоторых клиентах serverName) и маскировочный домен, он же Host. Они работают на разных уровнях, их значения могут совпадать, а могут и нет, и разбираться в них надо по отдельности.

Адрес: куда вы реально подключаетесь

Цель TCP-соединения. Это может быть IP или имя хоста; во втором случае клиент сначала разрешает его. Для узла за CDN здесь обычно стоит точка входа CDN, а не ваш собственный сервер.

Партнёрский материалОткуда взять ссылку на подписку?Партнёрский сервис даёт 1 ГБ высокоскоростного трафика Гонконга при регистрации — импорт в один клик.Получить быстрые серверы

SNI: имя, объявляемое при TLS-рукопожатии

В ClientHello есть открытое поле, сообщающее, какое имя хоста вам нужно; по нему сервер выбирает сертификат. Если SNI не совпадает с сертификатом, рукопожатие обрывается сразу, а в журнале появляется handshake failure или несовпадение имени в сертификате.

Важная деталь: SNI передаётся открытым текстом, так что промежуточное оборудование видит запрошенный домен. Именно за это цепляются многие системы блокировок, и именно поэтому REALITY одалживает имя настоящего сайта.

Host: домен на уровне HTTP

Это поле есть только у транспортов WebSocket и HTTP, и оно уходит в заголовок HTTP-запроса. CDN читает его, чтобы понять, с какого источника забирать содержимое, поэтому за CDN значение Host обязано совпадать с настроенным там доменом. Ошибётесь — CDN вернёт 404 или 502 ещё до того, как запрос дойдёт до вашего сервера.

Типичные сочетания

  • Напрямую к своему серверу: адрес = IP сервера, SNI = домен сертификата, Host обычно совпадает с SNI.
  • За CDN: адрес = подобранный IP CDN или имя хоста CDN, SNI = ваш домен, Host = ваш домен.
Не хватайтесь за allowInsecure, когда соединение не идёт. Этот флаг лишь отключает проверку сертификата в клиенте: рукопожатие пройдёт, но пройдёт и тот, кто сидит посередине. Лучше сверьте SNI с сертификатом, см. WebSocket + TLS + CDN.