Почему Роскомнадзор не может заблокировать Telegram?

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
Информация в этой заметке для многих будет не нова, каждый второй комментатор на iXBT — специалист высшей категории во всех областях сразу (это комплимент), они всё это знают лучше самого сервиса Telegram и Роскомнадзора. Но есть читатели, которые до сих пор не поняли, как Telegram удаётся обходить блокировки. Для них я попытаюсь это объяснить простым языком, как вы это любите.


Механизм обхода блокировок в Telegram появился задолго до того, как публичная конфликтная ситуация вошла в активную фазу. Суть публичного конфликта я описывать не буду — она не важна в контексте этой заметки. Разработчики Telegram придумали изящную схему — они используют службы push-уведомлений от Apple и Google для передачи дополнительных IP-адресов своих дата-центров (серверов).

Чтобы описать все тонкости процесса наглядно, я ограничусь только версией Telegram для iOS, исходные коды которой доступны, и Apple Push Notification service (APNs) — службой push-уведомлений Apple.

У каждой программы, которая работает со своими серверами, должна быть своя отправная точка — адрес или адреса основных серверов, к которым нужно подключиться. Естественно, у Telegram они тоже есть. Вот они:


Адреса IPv4: 149.154.175.50, 149.154.167.51, 149.154.175.100, 149.154.167.91, 149.154.171.5. Они заблокированы Роскомнадзором по решению Генпрокуратуры. И, естественно, недоступны у большинства российских пользователей.


А вот их эквиваленты IPv6 не заблокированы: 2001:b28:f23d:f001::a, 2001:67c:4e8:f002::a, 2001:b28:f23d:f003::a, 2001:67c:4e8:f004::a, 2001:b28:f23f:f005::a. Причина проста — Роскомнадзор и их система «Ревизор» так и не научились работать с IPv6. Это классические дармоеды, которые даже при должном финансировании не смогли за несколько лет реализовать такую поддержку. И, естественно, если ваш провайдер и ваше оборудование поддерживает IPv6, то никаких проблем с доступом по этим адресам у вас не будет. Следовательно, никаких проблем с доступом к Telegram. Это первая и основная причина, почему Telegram для iOS до сих пор работает у многих пользователей.


У Apple есть специальный сервер APNs (Apple Push Notification service). В любом момент сервер владельца ПО может послать любому экземпляру своей программы push-уведомление.

При первом запуске программы с поддержкой push-уведомления APNs выдаёт программе токен — идентификатор конкретного экземпляра программы на устройстве пользователя. Этот токен программа должна отправить на сервер разработчика ПО, где он будет храниться и использоваться. Используя этот токен, сервер разработчика в любой момент может сформировать специальное небольшое сообщение и отправить его серверу APNs. Сервер APNs в свою очередь отправит сообщение конкретной программе конкретного устройства, ориентируясь на этот токен.



Сервер Telegram использует такие сообщения не только для оповещения о событиях, но и чтобы передать клиентам информацию о новых IP-адресах дата-центров. Вот, как выглядит извлечение информации о новом IP-адресе из такого push-уведомления:


Тут есть один очень важный нюанс в одном этапе. Программа Telegram не сможет передать серверу разработчика токен, если IP-адреса сервера заблокированы. А значит сервер Telegram не будет иметь возможности отправить push-уведомление (с обновлённым IP-адресом дата-центра) на это устройство, потому что его токен неизвестен. Т.к. IPv6 адреса не заблокированы, всё прекрасно работает там, где провайдер и клиентское сетевое оборудование поддерживает IPv6.

Т.е. всё упирается в блокировку базовых IPv6-адресов серверов Telegram. Как только она будет выполнена (а на данный момент она не выполнена), все новые экземпляры программы Telegram (свежая установка) перестанут работать. Во-первых, программа не сможет подключиться к серверам Telegram, потому что они будут заблокированы. Во-вторых, программа не сможет получить новые адреса дата-центров через push-уведомления, потому что программа опять же не сможет отправить токен на сервер Telegram для получения подобных уведомлений.

Программы, которые уже установлены у клиентов, и которые успели передать токен серверу Telegram, смогут получить push-уведомления с новыми адресами дата-центров и будут продолжать работать.

Что нужно сделать, чтобы погасить Telegram (версию для iOS) в России полностью:

  1. Заблокировать все базовые IP-адреса серверов Telegram. В том числе и те, которые приходят в push-уведомлениях (их в реальности немного). Это самый важный пункт. Роскомнадзор этого не сделала (IPv6-адреса серверов Telegram не заблокированы).
  2. Обязать Apple удалить приложение Telegram из российского App Store. Роскомнадзор этого не сделала, программа до сих пор не удалена, хоть Apple в этом плане всегда идёт на уступки во всех странах (бизнес, ничего личного).
  3. Обязать Apple отключить push-уведомления, адресованные программе Telegram для российских IP-адресов. Это не совсем обычное требование, но выполнимое. Если Apple не озвучит приемлемые сроки реализации, Роскомнадзор должна отключить доступ к APNs серверам Apple (там всего несколько адресов, это тривиально), т.е. глобально отключить push-уведомления для iOS-устройств. Роскомнадзор этого не сделала.


Что же мы видим? Роскомнадзор не выполнила ни один пункт для достижения поставленной задачи (но при этом они зачем-то погасили огромное множество вторичных ресурсов в сети, которые не относятся к задаче, зачем-то погасили некоторые VPN-сервисы и пр., а сам сервис Telegram не использует никаких мощных методов для обхода блокировок; более того, Роскомнадзор не выполнила самый первый пункт, который никак не зависит от сторонних сервисов, но при этом приступила к блокировке сторонних ресурсов). Почему? У Роскомнадзора мощнейший финансовый, технический и административный ресурс, 3000 сотрудников. Может они классические дармоеды, у которых не хватает компетенции это сделать? А может у них нет реальной задачи блокировки Telegram (а господин Дуров пишет наивные сообщения о том, чтобы им присылали инсайды о действиях Роскомнадзора, прекрасно понимая, что нужно для блокировки)?