Some checks failed
Published content check / validate (push) Failing after 5s
Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout, видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description — 1–2 предложения для meta description обоих сайтов. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
108 lines
5.5 KiB
Markdown
108 lines
5.5 KiB
Markdown
---
|
||
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+).
|