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

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 не подключается.