todo/Zapret/mtproto/01-protocol.md
loop-uh 737f065567 Вики переехала на wiki2.zapret.moe: домен заменён во всём хранилище
wiki.zapret.moe заблокирован в России, читатели до редиректа не доходят. Во всех заметках, плашках [!mirror], ссылках и скриптах домен заменён на wiki2.zapret.moe; в AGENTS.md записано правило — ссылаться только на wiki2. Скрипт статистики считает своими заходы с обоих доменов. Чужие незакоммиченные правки в nuc/ в коммит не попали — только замена домена.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 15:15:27 -04:00

4.9 KiB
Raw Permalink Blame History

description
Протокол MTProto Proxy: режимы Classic, dd и FakeTLS, формат ee-секрета, устройство FakeTLS-handshake, Middle Proxy с Ad Tag и проблема DC203/CDN.

[!mirror] Резервное зеркало Актуальная версия этой страницы — на основной вики: wiki2.zapret.moe/Zapret/mtproto/01-protocol

Протокол 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

!wiki-anim-faketls-handshake.svg

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+).