Настраивая 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 = ваш домен.