Протокол 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 Mode | Middle 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+).