todo/Zapret/mtproto/02-implementations.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

91 lines
7 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: "Сравнение 5 реализаций MTProto Proxy: telemt, mtg, mtprotoproxy, mtproto_proxy и mtproto.zig — маскировка, производительность, какой выбрать."
---
> [!mirror] Резервное зеркало
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret/mtproto/02-implementations](https://wiki.zapret.moe/Zapret/mtproto/02-implementations)
# 5 независимых реализаций MTProto Proxy
Все пять проектов — **полностью разный код**, написанный с нуля на разных языках. Реализуют один и тот же протокол MTProto Proxy.
## Сводная таблица
| | **telemt** | **mtg** | **mtprotoproxy** | **mtproto_proxy** | **mtproto.zig** |
|---|---|---|---|---|---|
| **Язык** | Rust + Tokio | Go | Python (asyncio) | Erlang/OTP | Zig (без GC, пре-аллокация) |
| **Репо** | telemt/telemt | 9seconds/mtg | alexbers/mtprotoproxy | seriyps/mtproto_proxy | sleep3r/mtproto.zig |
| **Версия** | 3.4.15 (июнь 2026) | 2.1.13 (фев 2026) | v1.1.1 (май 2022, коммиты до 2026) | 0.7.4 (фев 2026) | 1.0.1 (июнь 2026) |
| **Лицензия** | — | MIT | MIT | Apache 2.0 | MIT |
| **REST API** | Полный CRUD `/v1/users` | Нет | Нет | Нет | Нет (CLI `mtbuddy`) |
| **Мультиюзер** | Да + per-user лимиты | 1 секрет = 1 инстанс | Да (config.py) | Да (sys.config) | Да + per-user секреты/лимиты |
| **Hot-reload** | API (без рестарта) | Нельзя | SIGUSR2 | systemctl reload | SIGHUP (юзеры+конфиг; запрещён при workers>1) |
| **Маскировка при зондах** | TCP Splice → реальный сайт | Domain Fronting (байт-идентичный) | Редирект на TLS_DOMAIN | Ничего (закрывает conn) | `mask` → реальный домен + nginx decoy (реальный серт) |
| **Traffic mimicry** | Нет | Doppelganger (только в master, не в релизе) | Нет | Нет | DRS + ServerHello desync (частично) |
| **SOCKS5 upstream** | Да (+SOCKS4) | Да | Да | Нет | Да (+HTTP CONNECT, +WG/AmneziaWG туннель) |
| **Proxy Protocol** | Да | v1/v2 | v1/v2 | Нет | Нет (есть `public_port` для HAProxy/Nginx) |
| **Prometheus** | Да (порт 9090, выкл. по умолч.) | Да (из коробки) | Да | Да | Да (выкл. по умолч.) |
| **Ad Tag** | Per-user (через API) | Нет (убрано в v2) | Общий | Общий | Общий (`tag` / `ad_tag`) |
| **Anti-replay** | Sliding window | Stable Bloom filter | OrderedDict FIFO | ETS-таблицы | Хеш-таблица, TTL 60 мин |
| **Производительность** | ~5-15k conn/1CPU | ~10-20k conn | ~4k юзеров/1CPU | 90k conn/4CPU | SO_REUSEPORT мультиворкер, пре-аллокация |
| **Memory leak** | Да (#390, не исправлен) | Исторические OOM — исправлены | Пул соединений (#298) | 100% CPU (#104) | Нет известных |
### Уникальное у `mtproto.zig`: обход DPI «под ключ»
Остальные четыре — это **только прокси**: обход DPI на уровне ОС (дробление пакетов, zapret) настраиваешь сам, отдельно. `mtproto.zig` через `mtbuddy install` ставит это автоматически:
| Техника | telemt | mtg | mtprotoproxy | mtproto_proxy | mtproto.zig |
|---|---|---|---|---|---|
| **TCPMSS-дробление ClientHello** | сам | сам | сам | сам | **ставит сам** (`--tcpmss 88`) |
| **nfqws TCP desync (zapret)** | сам | сам | сам | сам | **ставит сам** (`mtbuddy nfqws`) |
| **IPv6-hopping при бане** | Нет | Нет | Нет | Нет | **Да** (`--ipv6-hop`) |
| **VPN-туннель upstream (WG/AmneziaWG)** | Нет | Нет | Нет | Нет | **Да** (`type = "tunnel"`) |
Подробный разбор техник и настроек — в [[mtproxy/mtproto-zig|MTProxy и mtproto.zig: как пережить ТСПУ]].
## Какой выбрать?
### Для Telegram-бота с per-user ключами → **telemt**
Единственный с REST API. Создание/удаление юзеров без SSH и рестартов:
```bash
curl -X POST http://127.0.0.1:9091/v1/users \
-d '{"username":"user_123", "expiration_rfc3339":"2026-04-14T00:00:00Z"}'
```
### Для максимального обхода DPI → **mtg**
Doppelganger (в master, планируется v2.2) имитирует статистические характеристики TLS-трафика реального сайта — размеры записей, тайминги. Уникальная фича.
### Для простоты → **mtprotoproxy**
Один файл Python (~2400 строк), минимум зависимостей. Работает без pip-пакетов.
### Для высоких нагрузок → **mtproto_proxy** (Erlang)
90k соединений / 1 Gbps на 4 ядрах. Erlang OTP супервизоры — краш одного соединения не роняет сервер.
### Для обхода DPI «под ключ» → **mtproto.zig** (Zig)
Единственный, кто **сам** ставит OS-level обход (TCPMSS-дробление + zapret/nfqws desync), маскировку nginx и IPv6-hopping — одной командой `mtbuddy install`, без ручной возни с iptables. Плюс статический бинарь без зависимостей и без GC. Если нужен «поставил и работает» против ТСПУ — это он. Разбор: [[mtproxy/mtproto-zig|MTProxy и mtproto.zig]].
## Обёртки (НЕ отдельные проекты)
Эти проекты — скрипты/Dockerfile вокруг **telemt**. Свой код не содержат:
| Обёртка | Что делает |
|---|---|
| An0nX/telemt-docker | Docker build telemt (distroless, ~3.75 MB) |
| itcaat/mtproto-installer | curl\|bash установщик telemt + Traefik |
| nolaxe/install-MTProxy | Bash-менеджер (install/uninstall/status) |
Если нужен telemt — ставьте telemt напрямую.
## Официальный TelegramMessenger/MTProxy
- Язык: C, GPLv2
- Поддерживает все 3 режима (Classic, dd, FakeTLS через `-D`)
- Фактически заброшен (README не обновлялся с 2018, последний фикс — ноябрь 2025)
- Лимит 16 секретов (хардкод, нужен патч для увеличения)
- Нет Docker, нет API
- **Не рекомендуется** — используйте telemt или mtg