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>
91 lines
7 KiB
Markdown
91 lines
7 KiB
Markdown
---
|
||
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
|