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

7 KiB
Raw Permalink Blame History

description
Сравнение 5 реализаций MTProto Proxy: telemt, mtg, mtprotoproxy, mtproto_proxy и mtproto.zig — маскировка, производительность, какой выбрать.

[!mirror] Резервное зеркало Актуальная версия этой страницы — на основной вики: 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.

Какой выбрать?

Для Telegram-бота с per-user ключами → telemt

Единственный с REST API. Создание/удаление юзеров без SSH и рестартов:

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.

Обёртки (НЕ отдельные проекты)

Эти проекты — скрипты/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