SNI
Server Name Indication — «указание имени сервера»
Имя сайта, которое клиент открыто называет в начале защищённого соединения — ещё до шифрования.
Что это
SNI — расширение протокола TLS. В самом первом сообщении (ClientHello) клиент называет имя сайта, к которому подключается. Это нужно, чтобы один IP-адрес обслуживал много HTTPS-сайтов и сервер сразу знал, какой сертификат показать. Расширение описано в RFC 6066; его первая редакция вышла в 2003 году.
Почему это важно для фильтрации
ClientHello уходит до того, как включится шифрование, и в исходной схеме имя сайта передаётся открытым текстом. Поэтому наблюдатель на пути — оператор или оборудование DPI — видит, на какой домен идёт соединение, хотя не видит содержимого. Блокировка «по имени» построена именно на этом.
Расширения Encrypted SNI и Encrypted Client Hello закрывают поле, но работают только с TLS 1.3 и требуют поддержки с обеих сторон. По данным Википедии, российские провайдеры начали блокировать ESNI в октябре 2020 года.
SNI в секрете прокси
В режиме FakeTLS клиент прокси в ClientHello называет домен — тот, что зашит в секрете сразу после ключа. Для фильтра это выглядит как заход на этот сайт. Домен записан в секрете шестнадцатеричными цифрами:
ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d
Как прочитать домен
Подчёркнутая часть — это байты строки google.com в hex. Расшифровать их можно одной командой:
echo 676f6f676c652e636f6d | xxd -r -p
Как проверить SNI самому
Посмотреть, что сервер отвечает на конкретное имя в SNI, можно утилитой OpenSSL: параметр -servername задаёт то имя, которое клиент назовёт в ClientHello.
openssl s_client -connect IP-АДРЕС:443 -servername домен
Если домен перестал открываться
Домен маскировки должен оставаться правдоподобным: если сайт исчез, заблокирован у оператора или у него истёк сертификат, соединение к нему перестаёт выглядеть естественно. Тогда выбирают другой домен, создают новый секрет и перевыпускают ссылки.
Какой домен годится
Домен должен быть обычным сайтом, который не блокируется в вашей сети. В README mtg отдельно предупреждают: провайдеры могут заметить несоответствие, например google.com на IP-адресе, который Google не принадлежит, поэтому домен лучше связать с адресом сервера. Смена домена в telemt делает все выданные ссылки нерабочими, их придётся перевыпустить.