Блокировки Telegram бывают двух разных видов, и их постоянно путают. Мы немного детальнее провели анализ и вот что выяснили.
Первый — когда провайдер смотрит, как выглядит соединение: изучает TLS-рукопожатие, ловит характерный первый пакет. Против этого работают zapret и подмена почерка клиента.
Второй — когда провайдеру всё равно, как выглядит трафик, потому что он режет сами адреса. Диапазоны датацентров Telegram известны и компактны, заблокировать их целиком дешевле, чем разбирать протокол. Тут никакая фрагментация пакетов не поможет — пакет просто не доедет.
WSS бьёт во вторую задачу. У Telegram, кроме адресов датацентров, есть веб-инфраструктура для браузерной версии — домены вида kws2.web.telegram.org, обычный порт 443, настоящие сертификаты. Резать их тем же топорным способом дороже: это тот же домен, которым пользуются миллионы. Идея простая не менять почерк соединения, а сменить адрес, куда стучимся.
📞 Два правила, которых нет в документации
Их пришлось выяснять измерениями, потому что Telegram спецификацию своих релеев не публиковал. Оба нарушаются молча: соединение живо, кадры уходят, ответа просто нет.
Первое. Самый первый кадр обязан содержать все 64 байта служебного заголовка. Порог точный: 63 байта — ответа не будет никогда, 64 — будет всегда.
Второе. В одном кадре должен ехать не больше одного MTProto-пакета. Релей разбирает первый и молча выбрасывает всё, что за ним. При этом разрезать один пакет на несколько кадров можно свободно, хоть по байту.
Второе правило неочевидно настолько, что мы сами сначала пришли к обратному выводу: проверки, где в кадре был один пакет, проходили прекрасно, и потеря второго не проявлялась.
🔐 Миф про «работает только DC2 и DC4»
Он кочует по всем источникам и неверен. Веб-релеи есть у всех датацентров с первого по пятый.
Заблуждение выросло из ошибки метода: у каждого датацентра свой входной адрес, и они не взаимозаменяемы. Если стучаться на адрес DC2 с именем
kws5, приходит редирект 302 — сервер прямым текстом говорит, что вы пришли не туда, и даже подсказывает правильное имя в заголовке. Инструмент, который держит один адрес на все датацентры, получает отказ и делает вывод «релея нет».Почему его всё-таки можно заблокировать
WSS поднимает цену блокировки, но не делает её невозможной.
👀 Слабых мест три, и все они видны провайдеру.
Адресов мало и они статичны. На все пять датацентров приходится три входных IPv4-адреса. Это не диапазон в тысячи адресов, а список из трёх строк — заблокировать его дешевле, чем что угодно другое. Запасных адресов Telegram не публикует, DNS отдаёт по одному на имя. Один из трёх в России уже закрыт.
Имя релея видно в открытую. TLS передаёт имя сервера в первом пакете нешифрованным, и
kws2.web.telegram.org читается любым DPI. Довод «это же тот самый домен, что и сайт» работает хуже, чем кажется: релеи живут на отдельных поддоменах, поэтому их можно резать по имени, не задевая сам web.telegram.org. Расплата за блокировку почти нулевая.Почерк соединения не браузерный. Приложение подключается своей криптобиблиотекой, а не так, как это делает Chrome. По отпечатку TLS-рукопожатия отличить «клиент, притворяющийся браузером» от настоящего браузера несложно. Плюс сам характер трафика: браузер открывает сайт и закрывает, а тут висит долгое соединение с непрерывным потоком бинарных кадров.
🐒 Когда WSS не поможет
У некоторых провайдеров закрыты не только адреса датацентров, но и сами веб-релеи. Замер в одной российской сети: релей DC2 открыт, релей DC1 закрыт, тот же релей по IPv6 закрыт, прямой адрес DC1 тоже закрыт. Один путь из четырёх.
Выглядит это обманчиво: фотографии грузятся, а эмодзи и реакции нет — они лежат на другом датацентре. Ошибок нет, скорость нормальная.
Проверить сеть можно в PowerShell:
tnc 149.154.167.220 -Port 443 — релей DC2 и DC4 tnc 149.154.174.100 -Port 443 — релей DC1 и DC3Смотрите строку TcpTestSucceeded. Пинг тут ничего не доказывает: провайдеры режут по порту, оставляя ICMP живым.
☺️ Скачать | ☺️ Premium (донаты) | ☺️ Android, MacOS и др. ссылки
