Что такое MTProto? MTProto — это собственный бинарный протокол Telegram, разработанный командой Дурова. Он работает поверх TCP (реже UDP и HTTP) и отвечает за шифрование, аутентификацию и доставку сообщений между клиентом и серверами Telegram.
В отличие от HTTPS-based мессенджеров, MTProto не «прячется» под стандартный веб-трафик — у него собственная структура пакетов, что делает его относительно легко идентифицируемым для DPI (Deep Packet Inspection) систем.
Зачем нужен прокси
Telegram-клиент устанавливает соединение напрямую с серверами Telegram (149.154.x.x и 91.108.x.x). В странах с интернет-цензурой (Иран, Россия 2018–2020, Китай и др.) эти IP-диапазоны блокируются на уровне провайдера.
MTProto Proxy — это специализированный ретранслятор: клиент подключается к прокси-серверу, а тот уже от своего имени общается с Telegram. С точки зрения провайдера — клиент общается с каким-то случайным сервером, не связанным с Telegram.
Но здесь возникает проблема: даже если IP не заблокирован, DPI может распознать трафик MTProto по сигнатуре и заблокировать его.

Обфускация: зачем и как
Проблема без обфускации
«Голый» MTProto имеет узнаваемые черты:
- Первые байты соединения содержат предсказуемые паттерны
- Длины пакетов и тайминги специфичны
- Рукопожатие (handshake) имеет характерную структуру
Современные ТСПУ (технические средства противодействия угрозам) умеют детектировать MTProto именно по этим признакам, даже не зная IP назначения.
Что делает обфускация
Обфускация в контексте MTProto Proxy — это трансформация трафика таким образом, чтобы он выглядел как случайный поток байт (или имитировал другой протокол). Ключевые задачи:
- Скрыть сигнатуру первого пакета — рукопожатие не должно быть узнаваемым
- Убрать статистические паттерны — распределение длин пакетов и энтропия байт не должны выдавать протокол
- Предотвратить активное зондирование — если цензор отправит на порт «мусор», прокси не должен ответить ничем осмысленным

Режимы подключения MTProto Proxy
1. abridged (без обфускации)
Самый простой режим. Заголовок пакета — 1 или 4 байта длины. Легко обнаруживается.
2. intermediate
Всегда 4 байта длины, выравнивание убрано. Чуть лучше, но всё ещё узнаваем.
3. padded intermediate
Добавляет случайный padding к пакетам — это уже мешает анализу по длинам, но сигнатура начала соединения остаётся.
4. full
Исторический режим с 12-байтовым заголовком и CRC32. Практически не используется.
5. secret с обфускацией (он же faketls / dd-секрет)
Самый продвинутый режим. Именно о нём речь дальше.
Как работает обфускация с dd-секретом
Структура секрета
Секрет MTProto прокси — это 16 байт в hex (32 символа). Когда перед ним добавляется префикс dd, это сигнализирует клиенту использовать полную обфускацию.
Обычный секрет: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
С обфускацией: dda1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6

FakeTLS — имитация HTTPS
Наиболее современная техника — FakeTLS. Прокси и клиент имитируют TLS handshake (как будто устанавливается HTTPS-соединение), а настоящий MTProto-трафик «прячется» внутри этой обёртки.
Секрет в этом случае содержит ещё и имя домена:
ee<hex_секрет><домен_в_hex>
Пример: секрет с доменом cloudflare.com будет выглядеть как ee + 32 hex + hex(«cloudflare.com»).
Что происходит при подключении:
Клиент → Прокси:
ClientHello (TLS 1.3)
SNI: cloudflare.com ← имя домена из секрета
Прокси → Клиент:
ServerHello
Certificate (фейковый)
Далее: весь трафик выглядит как зашифрованный TLS
DPI видит «обычное» TLS-соединение к известному CDN. Попытка активного зондирования ничего не даст — прокси ответит корректным (хотя и фейковым) TLS-потоком.
Математика обфускации (упрощённо)
При установке соединения с обфускацией:
- Клиент генерирует 64 случайных байта (nonce)
- Из этих байт + секрет прокси выводятся два ключа AES-256-CTR — один для исходящего, другой для входящего трафика
- Весь последующий трафик шифруется этими ключами поверх основного MTProto-шифрования
- Первые байты соединения выглядят как случайный шум — никакой предсказуемой структуры
Это двойное шифрование: сначала MTProto шифрует содержимое сообщений, потом обфускация шифрует транспортный слой.

Серверная часть: как устроен прокси
Популярные реализации
| Реализация | Язык | Особенности |
|---|---|---|
MTProxy (официальный, Telegram) | C | Эталонная реализация, высокая производительность |
mtprotoproxy | Python | Простота настройки, меньше производительность |
MTProxybot-совместимые | Go, Rust | Сторонние, часто с доп. функциями |
Что делает прокси-сервер
- Слушает порт (обычно 443, чтобы выглядеть как HTTPS)
- Получает соединение от клиента
- Расшифровывает обфускацию — разворачивает внешний слой
- Аутентифицирует клиента по секрету
- Проксирует MTProto-трафик к реальным серверам Telegram
- Изолирует клиентов — каждый клиент видит только свой трафик
Конфигурация (пример для официального MTProxy)
./mtproto-proxy \
-u nobody \
-p 8888 \ # внутренний порт управления
-H 443 \ # внешний порт
-S <секрет> \ # 32 hex символа
--aes-pwd <файл> # файл с ключами Telegram
Активное зондирование и защита от него
Цензоры используют не только пассивный DPI, но и активное зондирование: когда обнаруживается «подозрительное» соединение, специальные боты подключаются к серверу и пробуют разные протоколы.
Защита в обфусцированном MTProto Proxy:
- Без правильного секрета — прокси не отвечает ничем осмысленным или имитирует ошибку TLS
- Replay-защита — каждый nonce используется один раз; повторное воспроизведение перехваченного трафика не работает
- Тайм-аут без данных — если клиент не прислал валидное рукопожатие за N секунд, соединение сбрасывается без какого-либо ответа
Ограничения и слабые места
- IP-блокировка: обфускация прячет протокол, но не IP. Если сервер попадёт в чёрный список — ничего не поможет
- Корреляционные атаки: при наблюдении за трафиком одновременно с обеих сторон можно установить факт использования прокси по таймингам
- Домен в FakeTLS: если указанный домен (например,
cloudflare.com) заблокирован — SNI-фильтр может отрезать соединение ещё до анализа содержимого - Нет собственного шифрования содержимого: прокси-сервер видит MTProto-трафик (но не сами сообщения — они зашифрованы ключами Telegram)
MTProto Proxy с обфускацией — это многослойная система обхода блокировок:
Сообщение Telegram
→ MTProto шифрование (ключи Telegram)
→ Обфускация (AES-CTR, ключи из секрета)
→ FakeTLS обёртка (имитация HTTPS)
→ TCP/IP (к прокси-серверу)
Каждый слой решает свою задачу: MTProto защищает содержимое от Telegram-сервера, обфускация прячет факт использования протокола от провайдера, FakeTLS делает трафик неотличимым от обычного HTTPS для систем цензуры.