todo/Zapret/mtproto/01-protocol.md
loop-uh 0ad0bcc8dd
Some checks failed
Published content check / validate (push) Failing after 5s
seo+зеркало: [!mirror]-плашка со ссылкой на вики и description во frontmatter всех заметок
Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу
wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout,
видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description —
1–2 предложения для meta description обоих сайтов.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 22:05:57 +03:00

108 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: "Протокол MTProto Proxy: режимы Classic, dd и FakeTLS, формат ee-секрета, устройство FakeTLS-handshake, Middle Proxy с Ad Tag и проблема DC203/CDN."
---
> [!mirror] Резервное зеркало
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret/mtproto/01-protocol](https://wiki.zapret.moe/Zapret/mtproto/01-protocol)
# Протокол MTProto Proxy
## Официальная спецификация
Протокол определён Telegram. Официальный репозиторий: [TelegramMessenger/MTProxy](https://github.com/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 часов:
```bash
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+).