Свой MTProto-прокси для Telegram на mtg с маскировкой FakeTLS

Запуск mtg 2 в Docker: генерация секрета FakeTLS, config.toml, контейнер на порту 443, ссылка tme_url, QR-код через qrencode, обновление, удаление и типичные ошибки. Debian 12, Ubuntu 24.04.

27 октября 2026 г.·5 мин чтения·mtproto, telegram, mtg, docker

MTProto-прокси понимает собственный протокол Telegram, и его поддерживают все официальные клиенты. Открыл одну ссылку — и мессенджер работает через ваш сервер, без VPN и сторонних программ. Ниже поднимаем прокси на mtg — одной из самых известных реализаций — с маскировкой FakeTLS и получаем ссылку, которую можно раздать близким. Инструкция для mtg 2.x на Debian 12 и Ubuntu 24.04.

Почему свой, а не из бесплатных списков

Публичные прокси из каналов работают, но ими одновременно пользуются тысячи людей: они медленные, живут недолго и быстро блокируются, потому что адреса опубликованы. Свой прокси на VPS принадлежит только вам, его адрес нигде не светится, а скорость упирается только в канал сервера.

Что именно делает прокси: трафик между приложением и серверами Telegram зашифрован самим мессенджером, прокси лишь пересылает его дальше. Переписку он не видит, даже если им пользуются другие.

Как работает FakeTLS

Обычное соединение с MTProto-прокси распознаётся по характерному началу обмена, и системы фильтрации это умеют. FakeTLS оформляет подключение как обычный TLS к известному сайту, например www.microsoft.com, — со стороны это визит на этот сайт. Тот же приём, что у Reality.

Какой сайт изображать, зашито в секрете — ключе, по которому Telegram подключается. Секрет FakeTLS начинается с ee, а в конце закодировано имя сайта. Плюс у mtg есть domain fronting: если на порт стучится не Telegram, а проверяющая система или браузер, mtg не рвёт соединение, а прозрачно передаёт его настоящему сайту. Проверяющий получает подлинный сертификат Microsoft.

Что нужно

  • Сервер на tanaka.host с Debian 12 или Ubuntu 24.04. Нагрузка минимальная.
  • Вход по SSH под root.
  • Свободный порт 443. Если на нём уже сайт или VPN — другой порт, см. раздел ошибок.

1. Docker

mtg удобнее всего в Docker: легко обновить и удалить без следов. Подробнее — установка Docker.

# Устанавливаем Docker официальным скриптом с сайта Docker
curl -fsSL https://get.docker.com | sh

# Проверяем, что Docker работает
docker --version

2. Секрет

Генерирует сам mtg; в конце команды — сайт для маскировки:

# Генерируем секрет FakeTLS для маскировки под www.microsoft.com
docker run --rm nineseconds/mtg:2 generate-secret --hex www.microsoft.com

Вывод — длинная hex-строка, начинающаяся с ee. Скопируйте её.

Какой сайт выбрать. Крупный зарубежный сайт по HTTPS. Разработчик mtg советует выбирать сайт, который логично связан с вашим сервером, и не брать google.com: список сетей Google общеизвестен, подмена заметна. Есть свой домен на этом же сервере — используйте его.

Секрет — пароль от прокси. Любой, у кого есть секрет и адрес, подключится. Не публикуйте его в открытых каналах.

3. Файл настроек

Вместо ВАШ_СЕКРЕТ подставьте строку из шага 2:

# Папка для настроек прокси
mkdir -p /opt/mtg

# Файл настроек с секретом и портом
cat > /opt/mtg/config.toml <<'EOF'
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:443"
EOF

Две строки: secret и bind-to — принимать подключения на 443, как обычный HTTPS-сайт. Остальные параметры у mtg разумны по умолчанию.

4. Запуск

# Запускаем mtg в фоне с автозапуском после перезагрузки сервера
docker run -d --name mtg-proxy --restart=unless-stopped \
  -v /opt/mtg/config.toml:/config.toml \
  -p 443:443 \
  nineseconds/mtg:2

# Проверяем, что контейнер работает
docker ps

В выводе — mtg-proxy со статусом Up и портом 0.0.0.0:443->443/tcp. --restart=unless-stopped поднимет прокси после перезагрузки.

Порт внутри и снаружи контейнера должен совпадать. В README mtg прокси внутри слушает 3128, а наружу пробрасывается 443. Работать будет, но команда access из следующего шага выдаст ссылку с портом 3128, и Telegram к ней не подключится. Поэтому здесь и bind-to, и -p — на 443.

Если включён брандмауэр:

ufw allow 443/tcp

5. Ссылка для подключения

# Выводим ссылки для подключения к прокси
docker exec mtg-proxy /mtg access /config.toml

В блоке ipv4 — адрес, порт и ссылки:

  • tme_url — https://t.me/proxy?..., открывается и в браузере, и в Telegram; её удобнее всего рассылать.
  • tg_url — tg://proxy?..., сразу открывает Telegram.

QR-код без сторонних сервисов. В ответе есть и ссылки на QR, но они генерируются внешним сайтом, и секрет уходит туда же. Нарисуйте QR в терминале:

apt install -y qrencode
qrencode -t ansiutf8 'ссылка_tme_url'

6. Подключение Telegram

Откройте tme_url на устройстве с Telegram — например, отправьте себе в «Избранное» и нажмите. Telegram покажет данные прокси, подтвердите. Вручную: Настройки → Данные и память → Прокси → добавить, тип MTProto, адрес сервера, порт 443, секрет.

Рекламный тег и установка без терминала

  • Рекламный тег (продвижение канала через @MTProxybot) mtg 2 не поддерживает. Автор mtg для этого советует проект telemt.
  • Без терминала прокси для Telegram ставит AmneziaVPN 5.0.0.5+ на вкладке «Сервисы» — см. документацию Amnezia. Если вы уже подняли VPN через Amnezia, это быстрее всего.

Обновление и удаление

Настройки и секрет в /opt/mtg/config.toml, поэтому ссылка после обновления не меняется:

# Скачиваем новую версию mtg
docker pull nineseconds/mtg:2

# Удаляем старый контейнер и запускаем новый с теми же настройками
docker rm -f mtg-proxy
docker run -d --name mtg-proxy --restart=unless-stopped \
  -v /opt/mtg/config.toml:/config.toml \
  -p 443:443 \
  nineseconds/mtg:2

Удалить полностью: docker rm -f mtg-proxy и rm -rf /opt/mtg. Все ссылки перестанут работать.

Частые ошибки

Контейнер не запускается, порт 443 занят. Кто его держит:

# Кто слушает порт 443
ss -lntp | grep ':443 '

Если веб-сервер или VPN — возьмите другой порт, например 8443: в конфиге bind-to = "0.0.0.0:8443", при запуске -p 8443:8443. Ссылка из шага 5 сама получит новый порт.

В ссылке порт 3128. Внутри контейнера прокси слушает 3128, снаружи другой порт. Сверьте bind-to и -p: оба числа в -p должны совпадать с портом в bind-to. Пересоздайте контейнер, как в разделе об обновлении.

Telegram не подключается. По порядку:

  • docker ps — у mtg-proxy статус Up.
  • Порт открыт в брандмауэре.
  • В ссылке правильный IP и порт.

Всё в порядке, а подключения нет — возможно, провайдер режет соединения с этим сайтом-маскировкой или портом. Сгенерируйте секрет с другим сайтом, замените в конфиге, пересоздайте контейнер, раздайте новые ссылки.

Посмотреть, что происходит.

# Последние 50 строк журнала прокси
docker logs --tail 50 mtg-proxy

Пустой журнал — не поломка: mtg пишет только заметные события, ошибки и блокировки адресов.

Нужен прокси не только для Telegram — смотрите 3proxy с HTTP и SOCKS5; общая диагностика — в статье VPN не подключается.