Протокол MTProto Proxy

Официальная спецификация

Протокол определён Telegram. Официальный репозиторий: TelegramMessenger/MTProxy (C, GPLv2).

Три режима

Classic (без префикса)

  • Секрет: 32 hex-символа (16 байт)
  • Транспорт: Intermediate (0xeeeeeeee) с обфускацией AES-256-CTR
  • Добавлен: Май 2018 (первый коммит)
  • Защита от DPI: Слабая — паттерны пакетов легко детектируются
  • Статус: Устаревший, не использовать

Secure / dd (Padded Intermediate)

  • Секрет: dd + 32 hex-символа
  • Транспорт: Padded Intermediate (0xdddddddd) — добавляет 0-15 случайных байт к каждому пакету
  • Добавлен: Июль 2018
  • Защита от DPI: Средняя — маскирует характерные размеры пакетов
  • Статус: Можно использовать, но FakeTLS лучше

FakeTLS / ee (рекомендуемый)

  • Секрет: ee + 32 hex + hex-кодировка домена
  • Пример: ee0123...abcdef676f6f676c652e636f6d (google.com)
  • Транспорт: Весь трафик обёрнут в TLS 1.3 записи
  • Добавлен: Июль 2019 (флаг -D domain.com в официальном MTProxy)
  • Защита от DPI: Высокая — выглядит как обычный HTTPS

Важно: FakeTLS — это НЕ настоящий TLS. Это кастомный протокол, который выглядит как TLS на уровне байтов. Nginx/HAProxy не могут его терминировать.

Как работает FakeTLS handshake

Клиент → Сервер: Фейковый TLS ClientHello (517 байт)
  - SNI = домен из секрета (например, google.com)
  - Random содержит HMAC-SHA256 дайджест для верификации секрета

Сервер → Клиент: Фейковый ServerHello + ChangeCipherSpec
  - Имитирует ответ реального TLS-сервера
  - Размер ответа копирует реальный сертификат домена

Далее: "Application Data" записи (тип 0x17)
  - Внутри: зашифрованный MTProto трафик
  - Макс. размер записи: 16408 байт

DPI видит обычное TLS 1.3 соединение к google.com.

Формат секрета для клиента

Формат ee-секрета:
  ee + <16 байт секрета в hex> + <домен в hex>

Пример:
  Секрет сервера: 0123456789abcdef0123456789abcdef
  Домен: google.com

  ee0123456789abcdef0123456789abcdef676f6f676c652e636f6d
  ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
  ee   секрет (32 hex)                "google.com" в hex

Сервер использует только 16-байтный секрет (через -S), домен — через -D. Префикс ee — это клиентский маркер, сервер его не использует.

Middle Proxy

Два режима работы MTProxy:

Direct ModeMiddle Proxy Mode
СхемаКлиент → MTProxy → Telegram DCКлиент → MTProxy → Middle Proxies → Telegram DC
Ad TagНетДа (через @MTProxyBot)
ПроизводительностьВышеНиже (доп. hop)
ТребованияСекрет+ proxy-secret + proxy-multi.conf

Для работы Ad Tag нужен middle proxy. Файлы обновляются каждые 12 часов:

curl -sf https://core.telegram.org/getProxySecret -o proxy-secret
curl -sf https://core.telegram.org/getProxyConfig -o proxy-multi.conf

Все три режима — официальные

Все три режима реализованы в официальном TelegramMessenger/MTProxy:

  • Classic и dd — задокументированы в README
  • FakeTLS — добавлен в июле 2019 (флаг -D), но README не обновлён (последнее обновление README — декабрь 2018)

Поддержка всех трёх режимов есть во всех клиентах Telegram (iOS, Android, Desktop).

DC203/CDN

DC203 — CDN-датацентр Telegram для кэширования медиа из каналов с 100k+ подписчиков. Его IP не в публичном списке — старые прокси не знают куда подключаться.

Симптомы: текст работает, медиа из крупных каналов не грузится. Решение: обновить прокси до актуальной версии (mtg v2.1.12+, telemt v3.0+).