MTProto-прокси через mtg v2: лёгкая альтернатива официальному прокси
Привет! Я, Семёнов Евгений Сергеевич, директор ITFresh. Классический MTProxy от самих разработчиков Telegram — вещь надёжная, но, честно говоря, тяжёлая в обслуживании: его надо собирать из исходников, подтягивать файлы proxy-secret и proxy-multi.conf, следить за их обновлением. И вот на одном из проектов я окончательно пересел на mtg — компактный MTProto-прокси на Go от разработчика с ником 9seconds. Один статический бинарник, крохотный config.toml, встроенный fake-TLS, защита от активного зондирования — и никакой возни со сборкой. В этом гайде я покажу, как развернуть mtg второй версии на обычном VPS: от установки до готовой ссылки-приглашения для сотрудников.
Почему именно mtg, а не официальный MTProxy
Давайте сразу расставим точки над «i». mtg — это, как выражается сам автор, «максимально бескомпромиссный» (highly opinionated) прокси. Его идея проста: минимальный, ничем не раздутый сервис, который тянет разумный масштаб в 10–20 тысяч одновременных соединений, не умеет управлять пользователями, но идеально закрывает единственную задачу — дать доступ к Telegram. И вот что мне в нём нравится на практике:
- Один бинарник. Скачал из релизов, положил в
/usr/local/bin— и всё. Никакогоbuild-essential,libssl-devи трёхминутной компиляции. - Только fake-TLS. Устаревшие режимы (простой и secured) во второй версии прямо запрещены. Это правильно: сегодня без маскировки под HTTPS прокси живёт недолго.
- Anti-replay из коробки. Защита от active probing — той самой техники, которой DPI-системы «прощупывают» подозрительные соединения.
- Блоклисты FireHOL. Можно на лету резать подключения с известных «грязных» IP.
- Готовые ссылки. Команда
accessсама генерируетtg://proxy,https://t.me/proxyи QR-коды.
Важно: версия 2 находится в активной разработке, а вот версия 1 переведена в режим поддержки — новых фич там не будет. Поэтому ставим только v2.
Требования к серверу
MTProto-прокси почти не грузит железо, а mtg на Go — тем более. Ему хватает совсем скромных ресурсов. Ориентировочная табличка из нашей практики:
| Пользователей | vCPU | RAM | Трафик/мес |
|---|---|---|---|
| до 50 | 1 | 512 МБ | 50 ГБ |
| 50–500 | 1 | 1 ГБ | 500 ГБ |
| 500–5000 | 2 | 1–2 ГБ | 2–5 ТБ |
| 5000–20000 | 2–4 | 2–4 ГБ | без лимита |
Локации мы в ITFresh берём в Нидерландах, Финляндии или Германии — там провайдеры лояльны к прокси-трафику. Hetzner, Netcup, OVH проверены. И да, обязательно нужен белый IP (IPv4, а лучше и IPv6 в придачу).
Установка mtg v2
Актуальный релиз на момент написания — v2.2.8 (апрель 2026). Ставим готовый бинарник, без всякой сборки.
# Debian 12 / Ubuntu 22.04+
cd /tmp
VER=2.2.8
curl -LO https://github.com/9seconds/mtg/releases/download/v${VER}/mtg-${VER}-linux-amd64.tar.gz
tar xf mtg-${VER}-linux-amd64.tar.gz
install -m 0755 mtg-${VER}-linux-amd64/mtg /usr/local/bin/mtg
# Проверяем версию
mtg --version
Для ARM-серверов (например, Ampere/Graviton) берите ассет mtg-${VER}-linux-arm64.tar.gz. Любителям Go подойдёт и go install github.com/9seconds/mtg/v2@latest, но для прода я предпочитаю фиксированную версию из релизов.
Генерация secret для fake-TLS
Вот здесь начинается самое интересное. У mtg secret устроен по стандарту fake-TLS: префикс ee, затем 16 случайных байт и hex-кодированное доменное имя маскировки. Никаких dd-режимов — только полноценная маскировка под HTTPS. Генерируется одной командой:
# Домен-маска подбираем «жирный» и общедоступный по TLS 1.3
mtg generate-secret --hex google.com
Флаг --hex выдаёт secret в привычном hex-виде, начинающемся с ee — например: ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d (последние символы — это hex(google.com)). Без флага mtg выдаст более короткий base64-вариант вроде 7ibaERuTSGPH1RdztfYnN4tnb29nbGUuY29t — оба формата рабочие, клиент понимает и тот и другой.
Домен маскировки — критичный момент. Берите сайт, который заведомо поддерживает TLS 1.3 и до которого «не жалко» имитировать трафик: google.com, www.microsoft.com, storage.googleapis.com. Для наблюдателя ваше соединение будет неотличимо от обычного захода на этот сайт.
Быстрый запуск: simple-run
Если нужно просто проверить, что всё работает, до всяких конфигов и systemd, — есть режим simple-run. Он поднимает прокси в одну команду:
# mtg simple-run <bind-to> <secret>
mtg simple-run 0.0.0.0:443 ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d
Полезные флаги: -c — лимит одновременных подключений, -t — таймаут, -a — адрес для статистики. Это отличный способ убедиться, что порт открыт и клиент цепляется. Но для боевого использования мы, конечно, оформляем конфиг-файл.
Боевой конфиг: config.toml
Минимальный рабочий конфиг — всего два поля: secret и bind-to. Но я всегда добавляю сетевые таймауты, anti-replay и блоклист — это тот минимум-плюс, который спасает сервер от «нагрева» ботами.
# /etc/mtg.toml
secret = "ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d"
bind-to = "0.0.0.0:443"
concurrency = 8192
prefer-ip = "prefer-ipv6"
[network.timeout]
tcp = "5s"
idle = "5m"
[defense.anti-replay]
enabled = true
max-size = "1mib"
[defense.blocklist]
enabled = true
urls = ["https://iplists.firehol.org/files/firehol_level1.netset"]
Пара слов о ключах. bind-to принимает только литеральные IP (звёздочка и hostname отклоняются). concurrency — жёсткий потолок соединений, всё сверх него отбрасывается. [defense.anti-replay] держит кэш отпечатков соединений и глушит попытки повторного зондирования, а [defense.blocklist] тянет списки «плохих» IP в формате FireHOL. Перед запуском полезно прогнать mtg doctor /etc/mtg.toml — он проверит конфиг на ошибки.
Systemd-юнит
По доброй традиции оборачиваем прокси в systemd: автозапуск, автоперезапуск при падении, аккуратные логи. Ничего лишнего.
# /etc/systemd/system/mtg.service
[Unit]
Description=mtg — MTProto proxy (fake-TLS)
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mtg run /etc/mtg.toml
Restart=on-failure
RestartSec=5
DynamicUser=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now mtg
systemctl status mtg
Обратите внимание на AmbientCapabilities=CAP_NET_BIND_SERVICE — она позволяет непривилегированному процессу (через DynamicUser) слушать 443-й порт без запуска от root. Мелочь, а безопаснее.
Ссылка-приглашение через access
А вот и главное удобство mtg. Не надо вручную клеить строку из IP, порта и secret — за вас это делает команда access:
mtg access /etc/mtg.toml
На выходе — JSON, где уже готовы адреса для IPv4 и IPv6, ссылки tg://proxy?... и https://t.me/proxy?..., а также QR-коды. Копируете ссылку t.me/proxy, кидаете сотруднику в корпоративный чат — один клик, и Telegram сам настраивает прокси. Именно так мы и раздаём доступ: без скриншотов, без инструкций «куда вписать secret».
Вариант с Docker
Если у вас всё живёт в контейнерах — mtg есть и в виде официального образа nineseconds/mtg:2. Запуск буквально в одну строку:
docker run -d --name mtg --restart unless-stopped \
-p 443:443 \
-v /etc/mtg.toml:/config.toml:ro \
nineseconds/mtg:2 run /config.toml
Секрет можно сгенерировать тем же образом: docker run --rm nineseconds/mtg:2 generate-secret --hex google.com. Я всё же чаще ставлю нативный бинарник через systemd — проще отлаживать и меньше накладных расходов, — но для docker-хостов образ выручает.
Безопасность и защита от злоупотреблений
Любой открытый прокси — приманка для ботов и перекупщиков. Если сервер не «прикрыть», он быстро попадёт в чужие рассылки и деградирует. Наш чек-лист:
- Firewall. Наружу открыт только 443 (плюс IPv6-аналог). SSH — на нестандартном порту и строго по ключу.
- anti-replay + blocklist. Уже в конфиге выше — не отключайте, это половина защиты от зондирования.
- fail2ban. Прикрываем SSH от брутфорса.
- Смена secret. Раз в 2–3 месяца генерируем новый secret, обновляем
config.toml, перезапускаем сервис и рассылаем свежую ссылку черезaccess. - Мониторинг. В mtg есть секция
[stats.prometheus]— поднимаете эндпоинт на127.0.0.1и снимаете метрики. Живые соединения по-быстрому смотрю черезss -tn state established '( sport = :443 )' | wc -l.
Кейс: переезд офиса с официального MTProxy на mtg
Реальная история из практики. Весной 2026-го к нам пришёл клиент — торговая компания, ~180 сотрудников, у которых на старом VPS крутился классический MTProxy. Проблема была не в блокировках, а в обслуживании: сервер собран из исходников года три назад, proxy-multi.conf давно не обновлялся, secret — простой dd-режим без fake-TLS, и Telegram у части людей начал «отваливаться». Мы за один вечер подняли рядом mtg v2 на новом VPS Hetzner (1 vCPU, 2 ГБ RAM), настроили fake-TLS с маской на storage.googleapis.com, включили anti-replay и блоклист FireHOL, собрали access-ссылку и залили её на внутренний портал компании. На следующее утро сотрудники просто кликнули по новой ссылке — старый сервер погасили через сутки. Итог: ~170 активных подключений, стабильный fake-TLS, обслуживание свелось к одной команде обновления бинарника. Счёт за миграцию — 15 000 руб. разово плюс аренда VPS.
Обслуживание
- Обновление mtg — просто заменить бинарник новой версией из релизов и
systemctl restart mtg. Никакихproxy-multi.conf, как в официальном прокси, тянуть не нужно — mtg держит адреса Telegram внутри. - Раз в месяц
apt upgradeсистемы и перезапуск. - Логи —
journalctl -u mtg -n 200 -f. - Подозрение на утечку secret — генерируем новый, правим конфиг, рассылаем свежую ссылку через
access.
Подниму mtg-прокси или перенесу со старого MTProxy
Поможем с выбором VPS, установкой mtg v2, настройкой fake-TLS, anti-replay и блоклистов, сделаем ссылку-приглашение и рассылку для сотрудников. Актуально для компаний, где Telegram — рабочий инструмент, от 10 до 2000 пользователей. Возьмём на себя и регулярное обслуживание: обновления, смену secret, мониторинг. Не хотите держать это на себе — сравните штатного админа и IT-аутсорсинг: часто отдать инфраструктуру на обслуживание выгоднее, чем содержать её силами одного сотрудника.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — mtg MTProto Proxy
- Чем mtg отличается от официального MTProxy?
- mtg — компактный прокси на Go в один статический бинарник, без сборки из исходников и без файлов proxy-secret/proxy-multi.conf. Поддерживает только fake-TLS, имеет anti-replay и блоклисты FireHOL из коробки.
- Какой формат secret у fake-TLS в mtg?
- Secret начинается с префикса ee, за ним 16 случайных байт в hex и hex-кодированное имя домена-маски. Генерируется командой
mtg generate-secret --hex google.com. Есть и короткий base64-вариант — оба рабочие. - Нужно ли собирать mtg из исходников?
- Нет. Скачиваете готовый бинарник из релизов на GitHub (актуально v2.2.8) или запускаете Docker-образ nineseconds/mtg:2. Сборка нужна, только если хотите собрать сами через mise.
- Как выдать пользователю ссылку на прокси?
- Команда
mtg access /etc/mtg.tomlвыводит JSON с готовыми ссылками tg://proxy и https://t.me/proxy для IPv4 и IPv6, плюс QR-коды. Копируете ссылку и отправляете сотруднику. - Сколько подключений держит mtg?
- Автор заявляет разумный масштаб порядка 10–20 тысяч одновременных соединений. Для офиса на 50–600 человек с запасом хватает 1 vCPU и 1 ГБ RAM.
