FakeTLS: как прокси притворяется сайтом
Что значит префикс ee в секрете и почему от выбора домена маскировки зависит, доживёт ли прокси до вечера.
Содержание
FakeTLS — режим MTProto-прокси, в котором соединение выглядит как обычный заход на HTTPS-сайт. Включает его одна деталь в секрете — префикс ee. Ниже — что стоит за этим префиксом, как проходит рукопожатие, как выбирать домен маскировки и какие ошибки чаще всего ломают режим.
Что значит префикс ee
Секрет прокси — последний параметр ссылки. Если он начинается с ee, прокси работает в режиме FakeTLS. Дальше идут 16 байт ключа (32 шестнадцатеричных символа), а в конце — домен маскировки, записанный в hex.[1]
[1] Запись «ee + ключ + домен» совпадает с примером из документации mtg: секрет для google.com.
Пример из документации mtg — секрет для google.com:
ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d
Первые два символа — режим, следующие 32 — ключ, остальное — слово google.com байтами. Домен читается одной командой:
echo 676f6f676c652e636f6d | xxd -r -p
Как проходит рукопожатие
Обычное соединение с HTTPS-сайтом начинается с сообщения ClientHello, в котором клиент называет нужный сайт в поле SNI. FakeTLS повторяет эту форму, поэтому для фильтра первые пакеты выглядят как обычный вход на сайт.
- Клиент отправляет ClientHello с доменом из секрета. В нём есть данные, по которым прокси опознаёт «своего» клиента.
- Прокси проверяет их и отвечает так, как отвечал бы TLS-сервер.
- Дальше по установленному соединению идёт обычный поток MTProto, упакованный в записи, похожие на TLS.
- Если пришёл не клиент прокси, а случайный посетитель, сканер или проверяющий, прокси не раскрывается: он передаёт соединение настоящему сайту и возвращает его настоящий ответ.
Последний пункт — защита от активной проверки. mtg называет это domain fronting: если запрос отклонён, прокси подключается к сайту-прикрытию и ретранслирует трафик, поэтому проверяющий видит ответ настоящего сайта. Telemt делает то же самое по настройке mask: неопознанные соединения идут на реальный веб-сервер.
Что видит фильтр
Для оборудования ТСПУ и систем DPI FakeTLS-соединение — это:
- соединение с IP-адресом вашего сервера на порту 443;
- ClientHello с именем популярного сайта в SNI;
- ответ, похожий на ответ TLS-сервера;
- дальше — поток зашифрованных записей, как у любого HTTPS.
Чтобы отличить такое соединение от настоящего, фильтру нужно искать тонкие расхождения: несоответствие домена и IP-адреса, нетипичные расширения в ClientHello, статистику потока. А просто закрыть «всё, что похоже на HTTPS с популярным сайтом», нельзя без вреда для обычных пользователей.
Как выбрать домен маскировки
Домен — слабое место режима. От него зависит, заметит ли провайдер несоответствие. Из рекомендаций авторов реализаций складывается такой список:
- обычный сайт, который не заблокирован в вашей сети. Если домен недоступен у оператора, соединение к нему выглядит подозрительно, а ссылка может не заработать (рекомендация telemt);
- домен, связанный с адресом сервера. README mtg предупреждает: провайдеры могут заметить, что
google.comведёт на IP, который Google не принадлежит. Совет — выбирать домен хостинга, на котором стоит VPS (например,digitalocean.comдля сервера у DigitalOcean); - лучше всего — свой домен. В BEST_PRACTICES mtg рекомендуется зарегистрировать домен и направить его на VPS: тогда DNS и SNI совпадают, а проверка не находит расхождений;
- не копировать сайт из своей подсети. По тем же рекомендациям, такая проверка по DNS проста, а адрес можно забанить;
- не брать крупный бренд. Крупный сайт легко проверить по DNS — ответы не совпадут с вашим сервером.
Важно
Если вы не уверены, README mtg советует не менять дополнительные настройки: «если не уверены, ничего не трогайте».
Как проверить выбранный домен
Прежде чем зашивать домен в секрет, проверьте его так, как это сделал бы провайдер:
- Домен открывается из вашей сети. Если у оператора он недоступен, соединение к нему выглядит странно:
curl -I https://домен/должен вернуть ответ. - Рукопожатие проходит на ваш адрес. Команда
curl -v -I --resolve домен:443:IP https://домен/принудительно ведёт запрос на нужный IP-адрес и показывает TLS-рукопожатие, цепочку доверия и срок действия сертификата. - Сертификат действителен. В FAQ telemt в качестве примера упомянут сертификат, срок действия которого истёк 1 марта 2026 года, и отмечено, что актуальность сайта нужно проверять отдельно.
- DNS совпадает с адресом сервера. Идеально, если имя указывает именно на ваш VPS; худший вариант — чужой крупный сайт.
Проверку стоит повторять: сайты меняют сертификаты и адреса, а домен, который сегодня выглядит правдоподобно, через месяц может перестать открываться.
Пример: подготовка домена по шагам
Схема, которую рекомендуют в BEST_PRACTICES mtg, сводится к тому, чтобы всё, что может проверить провайдер, совпадало между собой:
- Зарегистрируйте свой домен и направьте его A-записью на IP-адрес VPS. Теперь DNS-ответ для этого имени указывает на ваш сервер.
- Поставьте перед прокси правдоподобный сайт: несколько обычных HTML-страниц и сертификат от Let's Encrypt или другого удостоверяющего центра.
- Сгенерируйте секрет под этот домен:
mtg generate-secret --hex ваш-домен.example. - Запустите прокси на порту 443. Обычные посетители и проверяющие увидят сайт, а клиенты со ссылкой — прокси.
- Проверьте подключение с телефона по мобильному интернету, а не по домашнему Wi‑Fi.
Это сложнее, чем взять чужой популярный домен, зато исчезает главный повод для подозрений: имя в SNI, DNS-ответ и содержимое страницы совпадают.
Настройки маскировки в реализациях
Программы по-разному решают две задачи: как отвечать чужим и как выглядеть правдоподобно.
- mtg. Чужие запросы перенаправляются на сайт-прикрытие (domain fronting). Дополнительно есть режим «двойник» — раздел
[defense.doppelganger], который повторяет тайминги настоящего сайта. По README, адреса для двойника стоит брать с того же домена, под который вы маскируетесь. - telemt. В разделе
[censorship]задаютсяtls_domain,mask = true(передавать неопознанные соединения на реальный веб-сервер) иtls_emulation = true. Если клиент приходит со старым доменом, поведение определяет параметрunknown_sni_action.
Отпечаток клиента
ClientHello любого клиента — браузера или Telegram — содержит набор параметров: список поддерживаемых шифров, расширения и их порядок. Вместе они образуют «отпечаток»: у разных программ он разный. Если ClientHello, который отправляет Telegram, заметно отличается от браузерного, фильтр может использовать это как признак.
Поэтому, по FAQ telemt, устойчивость маскировки зависит от версии клиента, и разработчики советуют обновлять Telegram: в новых версиях отпечаток исправлен. На практике это значит, что одна и та же ссылка может работать у вас и не работать у знакомого со старой версией приложения.
Типичные ошибки
- Секрет введён без ee или обрезан. Клиент подключается в другом режиме или не подключается. Секрет вводят целиком.
- Домен не соответствует серверу. Самый частый случай — популярный бренд на чужом адресе.
- Заблокированный в сети домен. Прокси вроде работает, но соединение часто обрывается.
- Смена домена без перевыпуска ссылок. Старые ссылки дают ошибку. В telemt для таких клиентов есть настройка
unknown_sni_actionсо значениямиmaskиreject_handshake. - Нестандартный порт. Порт 443 выглядит естественнее для HTTPS.
- Устаревший клиент. По FAQ telemt, в новых версиях Telegram исправлен TLS-отпечаток, поэтому клиент стоит обновлять.
Где режим перестаёт работать
FakeTLS не делает прокси невидимым. Telemt в своём FAQ прямо перечисляет случаи, когда он не работает:
- нет IP-связи с целевым хостом;
- заблокированы TCP, TLS, порт или SNI;
- включена фильтрация высокоэнтропийного трафика;
- DPI распознаёт FakeTLS по SNI, ALPN и энтропии.
Отдельно: аккаунт Telegram привязан к «домашнему» дата-центру, поэтому прокси должен иметь доступ ко всей инфраструктуре Telegram, а не к её части.
Поэтому FakeTLS — это не «режим навсегда», а один из слоёв защиты. Против блокировки по адресу он бессилен, а на мобильном интернете с белыми списками прокси вообще недоступен.
Что FakeTLS не скрывает
Маскировка касается формы соединения, а не вашего присутствия в сети. Провайдер по-прежнему видит, что вы подключаетесь к IP-адресу конкретного сервера, и сколько данных передаёте. Сам прокси видит ваш IP-адрес, как и любой посредник. Содержимое переписки защищено ключом Telegram независимо от режима — но и от режима FakeTLS не зависит. Поэтому «невидимым» прокси назвать нельзя: он лишь труднее для распознавания по форме.
Как проверить, что режим включён
- Посмотрите на секрет: он должен начинаться с
eeи быть заметно длиннее 32 символов. - Расшифруйте хвост командой
xxd -r -pи убедитесь, что это нужный домен. - На сервере с mtg выполните
mtg doctor /путь/к/config.toml: команда проверяет конфигурацию и связность. - На сервере с telemt проверьте TLS-рукопожатие с сайтом-прикрытием:
curl -v -I --resolve домен:443:IP https://домен/покажет цепочку сертификатов и срок действия.
Если прокси с ee перестал работать
Режим включён, секрет правильный, а прокси не подключается? Перебирайте причины от простых к сложным:
- Проверьте, что домен из секрета по-прежнему открывается и сертификат на нём действителен.
- Убедитесь, что клиент обновлён: в новых версиях Telegram исправлен TLS-отпечаток.
- Проверьте прокси в другой сети: если там он работает, адрес не заблокирован, а проблема в конкретной сети.
- Если не работает нигде, адрес сервера, скорее всего, закрыт: поможет только смена IP-адреса или нового прокси.
- На своём сервере посмотрите журнал: у mtg —
mtg doctor, у telemt — состояние службы и ошибка «Unknown TLS SNI» для старых ссылок.
FakeTLS и другие режимы
| Режим | Префикс | Что прячет | Слабое место |
|---|---|---|---|
| Обычный | нет | Содержимое потока | Начало соединения и ритм пакетов узнаваемы |
| Padding | dd | Размеры пакетов частично | Начало соединения прежнее |
| FakeTLS | ee | Протокол: выглядит как TLS | Домен, адрес, порт, отпечаток клиента |
В документации Telegram для владельцев прокси советуют по возможности включать и padding, и TLS emulation: режимы дополняют друг друга.
Частые вопросы
Что значит ee в секрете прокси?
Префикс ee включает режим FakeTLS. После него идут 16 байт ключа (32 шестнадцатеричных символа) и домен маскировки в hex. Клиент начинает соединение как обычный TLS-обмен с этим доменом.
Чем FakeTLS отличается от VPN?
FakeTLS — режим MTProto-прокси: он маскирует соединение с прокси под HTTPS, но работает только для Telegram. VPN пропускает через себя трафик всего устройства и использует собственные протоколы.
Нужен ли для FakeTLS-прокси настоящий сайт?
Для работы прокси — нет, он сам отвечает на рукопожатие. Но авторы mtg советуют поставить перед прокси правдоподобный сайт со своим доменом и сертификатом: тогда имя в SNI, DNS и ответ сервера совпадают, и проверка не находит несоответствий.
Что будет, если сменить домен маскировки?
Все ранее выданные ссылки перестанут работать, потому что домен зашит в секрет. По FAQ telemt, клиенты со старой ссылкой получают ошибку «Unknown TLS SNI»; ссылки придётся перевыпустить.