· 13 мин чтения

MTProto-прокси через mtg v2: лёгкая альтернатива официальному прокси

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. И вот что мне в нём нравится на практике:

Важно: версия 2 находится в активной разработке, а вот версия 1 переведена в режим поддержки — новых фич там не будет. Поэтому ставим только v2.

Требования к серверу

MTProto-прокси почти не грузит железо, а mtg на Go — тем более. Ему хватает совсем скромных ресурсов. Ориентировочная табличка из нашей практики:

ПользователейvCPURAMТрафик/мес
до 501512 МБ50 ГБ
50–50011 ГБ500 ГБ
500–500021–2 ГБ2–5 ТБ
5000–200002–42–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-хостов образ выручает.

Безопасность и защита от злоупотреблений

Любой открытый прокси — приманка для ботов и перекупщиков. Если сервер не «прикрыть», он быстро попадёт в чужие рассылки и деградирует. Наш чек-лист:

Кейс: переезд офиса с официального 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-прокси или перенесу со старого 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.

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды для руководителей IT и системных администраторов. Это не просто теория! Здесь вы найдёте всё: безопасность, 1С, миграции, резервные копии и проверенные лайфхаки из наших реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.