VPSРейтинг
Сеть17 марта 2026 · обновлено 3 сентября 2026 · 13 мин чтения

MTProto-прокси на VPS: свой Telegram-прокси за 10 минут

Поднимаем личный MTProto-прокси на базе mtg — современной реализации с поддержкой FakeTLS. Трафик выглядит как HTTPS, прокси работает без регистрации на сторонних сервисах. Но сначала о том, где это в 2026 году ещё работает, а где уже нет.

⚠️ Если вы из России — прочитайте это перед установкой

В 2026 году ТСПУ (российский DPI) прошёл два шага против MTProto-прокси: с 1 апреля — распознавание FakeTLS по отпечатку TLS-рукопожатия самого клиента Telegram (JA3/JA4), с конца мая — статистический анализ соединения: размеры пакетов, тайминги, длительность сессий. Второй шаг серверными настройками не обходится: он смотрит не на маскировку, а на поведение трафика. Этот гайд даст вам рабочий сервер, но клиент из РФ к нему, скорее всего, либо не подключится, либо отвалится в течение нескольких часов. Подробная хронология со ссылками — в разделе 10.

Когда этот гайд подходит:

  • Вы и ваши пользователи не в России (например, в стране, где Telegram блокируется на уровне корпоративной сети или мобильного оператора)
  • Корпоративный фильтр режет UDP/нестандартные порты, но пропускает TLS на 443
  • Тестирование/исследование — для понимания протокола

Для устойчивого обхода блокировок из РФ в 2026: VLESS + Reality (маскировка под HTTPS реального сайта) или AmneziaWG (мимикрия трафика под DNS/QUIC, см. статью про WireGuard).

1. Зачем свой прокси

Публичные MTProto-прокси из интернета — удобны, но непредсказуемы: они падают без предупреждения, перегружаются, а иногда собирают метаданные. Собственный прокси на VPS лишён этих проблем при условии, что вы попадаете в его реалистичный сценарий применения (см. блок-предупреждение в начале статьи).

🔒 Приватность

Только вы контролируете сервер. Никаких третьих сторон, никакой телеметрии.

⚡ Скорость

Публичные прокси перегружены. Ваш — только для вас и тех, кому вы дали ссылку.

🛡️ Под вашим контролем

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

👥 Для всей семьи

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

2. Как работает mtg и FakeTLS

mtg (github.com/9seconds/mtg) — неофициальная реализация MTProto-прокси на Go от независимого разработчика. Актуальная версия — 2.2.8 (7 апреля 2026). Официальный прокси Telegram (TelegramMessenger/MTProxy) написан на C, тоже умеет FakeTLS и до сих пор получает коммиты (последние — август 2026), но релизов у него так и не было с 2018 года, а его официальный Docker-образ собран криво (см. раздел 11). Кроме mtg есть ещё активные реализации — прежде всего telemt на Rust: она умеет то же плюс спонсорский канал и несколько пользователей. Мы берём mtg: минимальный конфиг из двух строк, готовые бинарники и образ, встроенная самопроверка.

Поддерживает режим FakeTLS: при подключении клиент и прокси имитируют TLS-хендшейк с SNI-именем легитимного сайта. Для DPI, который смотрит на сигнатуру протокола, соединение выглядит как обычный HTTPS к этому сайту. Есть и вторая линия — доппельгангер: mtg умеет подстраивать задержки и размеры TLS-записей под статистику настоящего сайта. По умолчанию эта подсистема простаивает: ей нужен список адресов для замера (шаг 6 раздела 4). Но полной невидимости FakeTLS не даёт: российский ТСПУ с весны 2026 ловит его по отпечатку клиентского приветствия и по статистике потока (см. раздел 10), корпоративные NGFW умеют то же в меньших масштабах.

Схема соединения
Telegram-клиент──── TLS (маскировка) ────▶mtg на VPS──── MTProto ────▶Серверы Telegram
DPI видит: TLS к домену из секрета ·  Реально: MTProto внутри TLS-обёртки

Секрет — строка, которая авторизует клиентов и содержит имя домена для маскировки. Секрет в формате ee... (начинается с ee) — это FakeTLS-режим. Простой hex-секрет (без ee) — старый MTProto без маскировки: mtg v2 такие секреты не принимает и с ними не запускается.

Выбор домена для маскировки

Домен в секрете — это не просто имя в TLS-хендшейке. mtg умеет domain fronting: если клиент не прошёл проверку секрета (чужой запрос, скан, повтор старого), mtg открывает настоящее соединение с этим доменом и байт в байт отдаёт его ответ. Значит, домен должен быть реально доступен с вашего VPS по 443 порту, иначе защита от сканирования не работает.

Брать google.com или microsoft.com — плохая идея, хотя так написано в половине инструкций: цензору достаточно одного DNS-запроса, чтобы увидеть, что ваш IP не принадлежит сетям Google. Автор mtg советует обратное: домен должен иметь отношение к вашему адресу. Минимальный вариант — сайт вашего же хостера, он хотя бы в одной сети с вашим IP. В BEST_PRACTICES (март 2026) он идёт дальше: правильный вариант — свой домен, направленный на IP этого VPS, с настоящим сайтом и сертификатом за mtg. Встроенная проверка mtg doctor (раздел 4) прямо сверяет, резолвится ли домен из секрета в IP сервера.

Учтите: если домен указывает на этот же VPS, а mtg занял 443, то фолбэк замкнётся на сам прокси. Веб-сервер в такой схеме сажают на отдельный порт и указывают его в конфиге: [domain-fronting] → ip = "127.0.0.1", port = 8080.

3. Требования

ПараметрМинимумПримечание
ОСUbuntu 22.04 / 20.04Или любой Debian-based
CPU / RAM1 vCPU / 512 МБmtg: ~20–50 МБ idle, до 100–150 МБ под нагрузкой
Трафик100 ГБ/месОколо 50 активных пользователей: 1–2 ГБ на человека
Порт443 (рекомендуется)Или любой другой открытый порт
Расположение VPSЗа пределами РФНидерланды, Германия, Финляндия — ближайшие площадки
Docker или wget/curlDocker — для способа 1wget/curl — для способа 2 (бинарник)

Если сервера ещё нет

VPN: от 1 ГБ RAM, 1 ядра и 10 ГБ SSD · Европа

Прокси только пересылает пакеты, и мощность здесь ничего не решает. Жёсткое требование одно: не российский дата-центр.

В каталоге под эти требования подходит 50 тарифов, самый дешёвый за 490 ₽/мес (HostKey, 1 ГБ, 40 ГБ SSD).

4. Способ 1: Docker (рекомендуется)

Docker-способ проще всего: не нужно следить за версиями, обновления делаются одной командой. Используем образ от автора mtg: nineseconds/mtg:2.

Перед началом: проверьте что порт 443 свободен

sudo ss -tlnp | grep ':443 '

Если вывод пустой — порт свободен, продолжайте. Если что-то слушает (Nginx, Apache, Caddy и т. п.) — используйте порт 8443 вместо 443 во всех командах ниже, иначе контейнер уйдёт в перезапуск с ошибкой address already in use.

Шаг 1: установить Docker

Установить Docker Engine на Ubuntu
curl -fsSL https://get.docker.com | sudo sh

Проверьте что Docker работает:

Проверить версию Docker
docker --version

Шаг 2: сгенерировать секрет

Секрет — ваш «пароль» прокси, и в нём же зашит домен для маскировки. Подставьте свой домен по правилам из раздела 2 (минимум — сайт вашего же хостера, не google.com), запустите один раз и сохраните вывод.

Сгенерировать FakeTLS-секрет (флаг --hex для hex-формата)
FRONT_DOMAIN=example.com

docker run --rm nineseconds/mtg:2 generate-secret --hex "$FRONT_DOMAIN"

Вывод будет одной строкой, примерно такой (ваш секрет будет другим):

ee2ae24a08127d98ca953e5e11345e23ba6578616d706c652e636f6d

Секрет начинается с ee — признак FakeTLS-режима. Дальше 32 символа случайного ключа, а хвост (6578616d706c652e636f6d) — hex-кодировка домена example.com. Длина зависит от домена: 34 символа плюс по два на каждый его символ.

Шаг 3: создать конфигурацию

Создайте директорию и файл конфига одной командой. Замените ВАШ_СЕКРЕТ на значение из шага 2:

Создать /etc/mtg/config.toml
sudo mkdir -p /etc/mtg
sudo tee /etc/mtg/config.toml << 'EOF'
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:443"
EOF

Шаг 4: запустить контейнер

Запустить mtg (автоматически перезапускается после перезагрузки VPS)
docker run -d \
  --name mtg \
  --restart unless-stopped \
  -v /etc/mtg/config.toml:/config.toml \
  -p 443:443 \
  nineseconds/mtg:2

Убедитесь что контейнер запустился:

Проверить статус и логи
docker ps --filter name=mtg
docker logs mtg

В колонке STATUS должно быть Up N seconds. При нормальном старте docker logs mtg не выводит ничего — это не ошибка, mtg молчит, пока всё в порядке. Если в статусе Restarting — в логах будет причина: чаще всего это занятый порт или неправильный формат секрета.

Флаг --restart unless-stopped

Контейнер автоматически перезапустится после перезагрузки VPS и при падении. Флаг unless-stopped отличается от always тем, что не запускается, если вы вручную остановили контейнер командой docker stop mtg.

Шаг 5: проверить конфигурацию

У mtg есть встроенная самопроверка — она делает то, что иначе пришлось бы выяснять по симптомам: сверяет часы, пробует достучаться до дата-центров Telegram и до домена маскировки.

Самопроверка конфигурации (занимает 10–30 секунд)
docker run --rm \
  -v /etc/mtg/config.toml:/config.toml \
  nineseconds/mtg:2 doctor /config.toml

Как читать вывод

  • Time skewness — часы сервера. Если тут ❌, MTProto-хендшейк будет разваливаться; лечится timedatectl set-ntp true.
  • Native network connectivity — доступность дата-центров Telegram. Одиночный ❌ на DC 203 — это CDN-кластер (91.105.192.100:443): переписка через прокси работать будет, а медиа из CDN может не грузиться; причина обычно в маршрутизации хостера. На отсутствие IPv6 не грешите — у каждого DC mtg пробует и IPv4, и IPv6 и засчитывает первый успешный адрес.
  • Fronting domain connectivity — домен из секрета должен быть достижим, иначе не заработает domain fronting.
  • SNI-DNS match — самый строгий пункт: домен должен резолвиться в IP этого сервера. ❌ здесь ожидаем у всех, кроме тех, кто направил на VPS собственный домен; это не поломка, а напоминание, насколько маскировка правдоподобна.

Шаг 6 (необязательно): доппельгангер

FakeTLS прячет сигнатуру протокола, но не ритм трафика. За ритм отвечает отдельная подсистема: mtg ходит по указанным HTTPS-адресам, замеряет паузы между пакетами и подгоняет под них свои. Без списка адресов ей нечего замерять, поэтому в минимальном конфиге её нет. Допишите в конец конфига два-три адреса того же домена, что в секрете, — лучше «тяжёлых», вроде картинки или скрипта:

Дописать в /etc/mtg/config.toml (обратите внимание: tee -a, а не tee)
sudo tee -a /etc/mtg/config.toml << 'EOF'

[defense.doppelganger]
urls = [
  "https://example.com/",
  "https://example.com/static/main.js",
]
EOF

Перезапустите прокси: docker restart mtg (для способа 2 — sudo systemctl restart mtg). Первый обход mtg делает сразу после старта, дальше — раз в 6 часов; статистику он начинает применять, набрав около сотни замеров. От отпечатка клиента это не спасает, но против анализа по размерам пакетов и таймингам — единственное, что в mtg есть.

5. Способ 2: бинарник + systemd

Если Docker не нужен или не установлен — скачайте готовый бинарник и настройте systemd-сервис. Не нужно ничего компилировать.

Шаг 1: скачать бинарник

Скачайте последний релиз с github.com/9seconds/mtg/releases/latest. На сентябрь 2026 актуальная версия — 2.2.8 (вышла 7 апреля 2026). Замените VERSION на номер последнего релиза, если вышел новее (например, 2.2.9):

Скачать и установить бинарник mtg
VERSION=2.2.8
ARCH=linux-amd64

cd /tmp
wget "https://github.com/9seconds/mtg/releases/download/v${VERSION}/mtg-${VERSION}-${ARCH}.tar.gz"
tar -xf "mtg-${VERSION}-${ARCH}.tar.gz"
sudo install -m 755 "mtg-${VERSION}-${ARCH}/mtg" /usr/local/bin/mtg
rm -rf "mtg-${VERSION}-${ARCH}" "mtg-${VERSION}-${ARCH}.tar.gz"
Проверить что mtg установлен
mtg --version

Шаг 2: сгенерировать секрет

Сгенерировать FakeTLS-секрет (домен — по правилам раздела 2)
FRONT_DOMAIN=example.com

mtg generate-secret --hex "$FRONT_DOMAIN"

Шаг 3: создать конфиг

Создать директорию и конфиг
sudo mkdir -p /etc/mtg
sudo tee /etc/mtg/config.toml << 'EOF'
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:443"
EOF

Шаг 4: создать systemd-сервис

/etc/systemd/system/mtg.service
sudo tee /etc/systemd/system/mtg.service << 'EOF'
[Unit]
Description=MTG MTProto Proxy
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mtg run /etc/mtg/config.toml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF
Включить и запустить сервис
sudo systemctl daemon-reload
sudo systemctl enable --now mtg
Проверить статус и конфигурацию
sudo systemctl status mtg
mtg doctor /etc/mtg/config.toml

В выводе должно быть Active: active (running). Как читать результат doctor — описано в разделе 4, там же — необязательный шаг 6 про доппельгангер.

LimitNOFILE

Параметр LimitNOFILE=65536 увеличивает лимит открытых файловых дескрипторов. Каждое соединение потребляет 2 дескриптора (клиент ↔ mtg и mtg ↔ Telegram). Без этого параметра при 500+ пользователях могут возникнуть ошибки «too many open files».

6. Настройка UFW

Если на сервере включён фаервол UFW — откройте порт прокси. Если UFW не используется, пропустите этот шаг.

Открыть порт 443 (TCP) в UFW
sudo ufw allow 443/tcp
sudo ufw status

Если используете порт 8443 вместо 443 — замените в команде выше.

Что делать с UFW в зависимости от способа установки

  • Docker-способ: правило UFW не обязательно (Docker сам пробрасывает порт через iptables в обход UFW), но лучше добавить — для единообразия и документирования открытых портов.
  • Бинарник + systemd: правило UFW обязательно, иначе 443 снаружи будет закрыт.

Важно: UFW работает внутри VPS. Если ваш провайдер использует отдельный сетевой firewall на уровне панели (Hetzner, Selectel, AWS, Vultr и др.) — там порт тоже надо открыть. Подробнее — в разделе «Если не подключается».

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

Самый простой способ — перейти по ссылке https://t.me/proxy?... с устройства, где открыт Telegram. Он автоматически откроет приложение с готовым диалогом добавления прокси.

🤖Android

Нажмите на ссылку t.me/proxy?... — Telegram откроется с кнопкой Подключить.

Ввести вручную

Настройки → Данные и память → Настройки прокси → Добавить прокси → MTProto → ввести сервер, порт, секрет.

🍎iPhone / iPad

Откройте ссылку t.me/proxy?... в браузере → Открыть в Telegram → Подключить.

Ввести вручную

Настройки → Данные и память → Прокси → Добавить прокси → MTProto → ввести сервер, порт, секрет.

🖥️Desktop (Windows / macOS / Linux)

Откройте ссылку https://t.me/proxy?... в браузере — откроется страница t.me с кнопкой Open in Telegram, после нажатия клиент покажет диалог добавления прокси.

Ввести вручную

Настройки → Продвинутые настройки → Тип соединения → Использовать пользовательский прокси → Добавить прокси → MTProto → ввести данные.

Проверка что прокси работает

После подключения в настройках прокси Telegram покажет статус «Подключено» и задержку в миллисекундах. Нормальная задержка — 30–150 мс. Если статус «Не удаётся подключиться» — проверьте что порт открыт в UFW и контейнер/сервис запущен.

9. Мониторинг и обновление

Просмотр логов

Docker: логи в реальном времени
docker logs -f mtg
Docker: последние 50 строк
docker logs --tail 50 mtg
Systemd: последние события
sudo journalctl -u mtg -f
Systemd: логи за сегодня
sudo journalctl -u mtg --since today

В логах обычно пусто: уровень по умолчанию — только предупреждения и ошибки. Это сделано намеренно, логи не должны содержать информацию о пользователях. Так что молчаливый journalctl — хороший знак, а не признак того, что мониторинг не работает.

Обновление mtg (Docker)

Обновить mtg до последней версии образа :2
docker pull nineseconds/mtg:2
docker stop mtg
docker rm mtg
docker run -d \
  --name mtg \
  --restart unless-stopped \
  -v /etc/mtg/config.toml:/config.toml \
  -p 443:443 \
  nineseconds/mtg:2

Обновление mtg (бинарник)

Подставьте свежую версию из релизов на GitHub:

Скачать последнюю версию и перезапустить сервис
VERSION=2.2.8
ARCH=linux-amd64

cd /tmp
wget "https://github.com/9seconds/mtg/releases/download/v${VERSION}/mtg-${VERSION}-${ARCH}.tar.gz"
tar -xf "mtg-${VERSION}-${ARCH}.tar.gz"
sudo systemctl stop mtg
sudo install -m 755 "mtg-${VERSION}-${ARCH}/mtg" /usr/local/bin/mtg
sudo systemctl start mtg
rm -rf "mtg-${VERSION}-${ARCH}" "mtg-${VERSION}-${ARCH}.tar.gz"

10. Если не подключается

В 90% случаев «прокси не работает» дело не в mtg, а в одной из пяти причин ниже. Проверяйте по порядку.

1. Firewall в панели провайдера

Это причина номер один. У Hetzner Cloud, Selectel, Yandex Cloud, AWS, DigitalOcean, Vultr и многих других есть отдельный сетевой firewall на уровне панели управления — он работает до того, как трафик достигнет UFW внутри ОС. Правило ufw allow 443/tcp на VPS его не открывает. Зайдите в панель провайдера → Firewall / Security Groups / Правила сети → добавьте входящее правило TCP 443 из 0.0.0.0/0.

Проверить доступность порта снаружи (с домашнего компьютера или другого сервера):

Linux / macOS
nc -zv IP_ВАШЕГО_VPS 443
Windows — PowerShell
Test-NetConnection -ComputerName IP_ВАШЕГО_VPS -Port 443

Успешный вывод nc: Connection to IP 443 port [tcp/https] succeeded!. PowerShell должен показать TcpTestSucceeded : True. Если видите Connection refused / TcpTestSucceeded : False с быстрым ответом — сервис на VPS не запущен. Если Connection timed out / долгое зависание — блокирует firewall (скорее всего в панели провайдера).

2. Блокировка в РФ (ТСПУ) — хронология 2026

Как менялась детекция в 2026 году

  • 1 апреля — массовое падение MTProto-прокси по всей стране. По разбору на Хабре от 3 апреля, ТСПУ стал ловить не сервер, а клиента: характерные особенности TLS-приветствия, которое шлёт сам Telegram, — то, что принято называть отпечатком JA3/JA4. Оно отличается от браузерного, и правило било по нему независимо от того, под какой домен маскируется прокси.
  • Конец мая — вторая волна, отказы почти одновременно у всех операторов. Здесь добавился статистический анализ: распределение размеров пакетов, тайминги, симметричность и время жизни соединения. По замерам Теплицы 27–31 мая из 27 проверенных конфигураций работали три; нестандартные порты преимущества не давали.
  • Лето — устойчивого отката назад не случилось. Отдельные прокси продолжают жить, но это уже не «настроил и забыл», а лотерея с горизонтом в часы или дни.

Что реально влияет, а что нет

  • Не помогает: перебор портов и поиск «незасвеченного» домена для секрета. Оба параметра описывают, как выглядит сервер, а детекция с апреля смотрит на отпечаток клиента и на статистику потока. Домен по правилам из раздела 2 выбирать всё равно нужно — но он защищает от сканирования и ручной проверки, а не от ТСПУ.
  • Может дать фору: свежий IP, не принадлежащий популярным у обходчиков подсетям, и небольшое число пользователей — сотня клиентов с одинаковым отпечатком на одном адресе видна сама по себе. Плюс заполненный [defense.doppelganger] (шаг 6 раздела 4) — единственная настройка mtg, которая вообще что-то делает против анализа статистики.
  • План Б обязателен — VLESS+Reality или AmneziaWG (см. блок наверху статьи).

Если задача — устойчиво иметь Telegram из РФ, MTProto-прокси в 2026 — не основной инструмент, а резервный. Основной — VLESS Reality.

3. Порт 443 уже занят другим сервисом

Если вы пропустили проверку в начале раздела 4 — контейнер уйдёт в перезапуск, systemd-сервис упадёт с bind: address already in use. Проверьте, что слушает порт:

Что слушает порт 443
sudo ss -tlnp | grep ':443 '

Вариант 1 — остановить конфликтующий сервис.
Вариант 2 — сменить порт mtg на 8443. Отредактируйте конфиг:

Изменить порт в /etc/mtg/config.toml
sudo sed -i 's|bind-to = "0.0.0.0:443"|bind-to = "0.0.0.0:8443"|' /etc/mtg/config.toml

Пересоздайте контейнер с новым пробросом порта (Docker-способ):

Docker — пересоздать с новым портом
docker stop mtg && docker rm mtg
docker run -d \
  --name mtg \
  --restart unless-stopped \
  -v /etc/mtg/config.toml:/config.toml \
  -p 8443:8443 \
  nineseconds/mtg:2

Или перезапустите systemd-сервис (бинарник-способ):

systemd — перезапуск после смены конфига
sudo systemctl restart mtg

Не забудьте открыть новый порт в firewall VPS и в панели провайдера, а также перегенерировать ссылку подключения (в ней теперь &port=8443).

4. VPS за NAT (серый IP)

У некоторых дешёвых тарифов VPS нет публичного IPv4 — вы получаете только «серый» адрес за NAT провайдера. curl -4 ifconfig.me в таком случае вернёт адрес NAT-шлюза, а порт снаружи не проброшен. Сверьте:

IP на интерфейсе vs внешний IP
ip -4 addr show scope global | grep inet
curl -4 ifconfig.me

Если IP на сетевом интерфейсе начинается с 10., 172.16–31. или 192.168., а ifconfig.me показывает другой адрес — у вас NAT. Либо попросите провайдера выдать «белый» IP, либо смените тариф.

5. У клиента нет IPv4

Встречается редко, но чинится. В ссылке на прокси стоит IPv4-адрес сервера, и клиент в IPv6-only сети (такие бывают у мобильных операторов) до него не дотянется. Лечится в два действия: прокси начинает слушать оба стека, а такому пользователю вы даёте вторую ссылку — с IPv6-адресом.

Сначала проверьте, есть ли у вашего VPS публичный IPv6:

Проверить наличие IPv6 на VPS
ip -6 addr show scope global

Если вывод пустой — у сервера нет IPv6, этот пункт не применим. Если адреса есть — действуйте по своему способу установки.

Способ 1 (Docker): на проброшенный порт (-p 443:443) IPv6-клиент рассчитывать не может: для этого в демоне должны быть включены ipv6 и ip6tables, а по умолчанию их нет. Плюс mtg внутри контейнера слушает только 0.0.0.0:443. Надёжный способ — убрать прослойку Docker через --network host и слушать сразу оба стека:

Docker — пересоздать с host-network для IPv6
sudo sed -i 's|bind-to = "0.0.0.0:443"|bind-to = "[::]:443"|' /etc/mtg/config.toml
docker stop mtg && docker rm mtg
docker run -d \
  --name mtg \
  --restart unless-stopped \
  --network host \
  -v /etc/mtg/config.toml:/config.toml \
  nineseconds/mtg:2

--network host отключает сетевую изоляцию контейнера — для MTProto-прокси это безопасно, потому что mtg слушает только заданный порт. Флаг -p с host-network не используется. Перед пересозданием убедитесь, что порт 443 на хосте свободен (sudo ss -tlnp | grep ':443 ').

Способ 2 (бинарник + systemd): меняете конфиг и перезапускаете сервис.

Слушать оба стека (IPv4 + IPv6)
sudo sed -i 's|bind-to = "0.0.0.0:443"|bind-to = "[::]:443"|' /etc/mtg/config.toml
sudo systemctl restart mtg

На Linux сокет [::] по умолчанию принимает и IPv4 тоже (net.ipv6.bindv6only = 0), так что старые ссылки продолжат работать.

Осталось забрать вторую ссылку: mtg access выведет теперь и блок ipv6 — его tme_url и отправляйте тем, у кого IPv4 нет. Для Docker к команде из раздела 7 допишите --network host: иначе временный контейнер не увидит IPv6 хоста и блока в выводе не будет.

Быстрый чек-лист

Не открыт порт в панели провайдераДобавить правило TCP 443 в Firewall/Security Group
Не открыт порт в UFW (для бинарника)sudo ufw allow 443/tcp
Контейнер/сервис в Restartingdocker logs mtg / sudo journalctl -u mtg -n 50
Порт 443 занят другим процессомsudo ss -tlnp | grep ':443 '
Неправильный IP в ссылкеcurl -4 ifconfig.me — сверить с панелью VPS
Секрет с переносом строки или пробеломcat /etc/mtg/config.toml — секрет должен быть одной строкой
Непонятно, рабочий ли конфигmtg doctor /etc/mtg/config.toml — см. раздел 4
Подключался — отвалился через часы (РФ)ТСПУ детектит FakeTLS с апреля 2026 — см. п. 2 выше
Не подключается из РФ к зарубежному IPВысокий риск ТСПУ-блокировки — рассмотрите VLESS Reality

11. Спонсорский канал и другие реализации

Telegram позволяет операторам MTProto-прокси привязать спонсорский канал: пользователи, подключённые через прокси, видят продвигаемый канал с меткой «Прокси-спонсор». Тег выдаёт бот @MTProxybot. Личному прокси это не нужно — поэтому раздел и стоит последним.

mtg v2 не поддерживает adtag

Автор убрал функцию из второй версии намеренно: adtag работает только через middle-прокси Telegram, а это лишний код, меньшая скорость и требование публичного IP. Параметра в конфиге просто нет. Остаются три варианта: замороженная mtg v1, официальный MTProxy на C и telemt на Rust.

Почему не официальный образ Telegram

Инструкции в интернете обычно предлагают образ telegrammessenger/proxy. Мы его проверили 3 сентября 2026 — в таком виде он не решает задачу:

  • Тег :2.0beta пересобран 1 апреля 2026, но в образе нет пакета iproute2. Стартовый скрипт вызывает ip route get, получает ip: command not found и падает с Cannot determine internal IP address. Контейнер не поднимается вообще.
  • Тег :latest (сборка февраля 2020) запускается, но это старый бинарник.
  • Главное: FakeTLS в официальном образе не включается ни на одном теге. Режим ee в MTProxy живёт за ключом -D <домен>, а стартовый скрипт образа его не передаёт — без него сервер отвергает TLS-подключения и остаются только классический и dd-режимы, то есть ровно то, что ТСПУ ловит первым.
  • Заодно: переменная SECRET у образа принимает строго 32 hex-символа. Популярный совет «передайте туда ee-секрет с доменом» приводит к Bad secret format и выходу с ошибкой.

Хотите именно официальный MTProxy — его собирают из исходников (make, зависимости libssl-dev и zlib1g-dev) и запускают с ключами -D домен, -S секрет и -P тег. Способ рабочий, но это отдельная история на полстатьи. Ниже — короткий путь.

telemt: adtag и FakeTLS сразу

telemt — реализация на Rust, которую в своём README рекомендует сам автор mtg. Умеет всё то же, что mtg, плюс спонсорский канал, несколько пользователей с отдельными секретами и HTTP-API для выдачи ссылок. Актуальная версия на сентябрь 2026 — 3.5.5.

telemt — замена mtg, а не дополнение к нему: порт 443 займёт кто-то один. Если mtg уже стоит, сначала уберите его — docker rm -f mtg для способа 1 или sudo systemctl disable --now mtg для способа 2. Правило фаервола менять не нужно: порт тот же.

Шаг 1. Скачать бинарник. Обратите внимание на выбор сборки:

Установить telemt в /usr/local/bin
ARCH=$(uname -m)
LIBC=$(ldd --version 2>&1 | grep -iq musl && echo musl || echo gnu)

cd /tmp
wget -qO- "https://github.com/telemt/telemt/releases/latest/download/telemt-${ARCH}-linux-${LIBC}.tar.gz" | tar -xz
sudo install -m 755 telemt /usr/local/bin/telemt
rm -f /tmp/telemt
telemt --version

Сборке gnu нужен glibc 2.34 и новее. На Ubuntu 22.04 это так, а на Ubuntu 20.04 она не запустится — команда выше определит систему как gnu, и вы получите version GLIBC_2.34 not found. Лечится подстановкой LIBC=musl вручную: статическая сборка работает везде.

Шаг 2. Сгенерировать секрет — здесь это обычные 16 байт без домена, домен задаётся отдельным полем конфига:

Секрет пользователя: 32 hex-символа
openssl rand -hex 16

Шаг 3. Зарегистрировать прокси в @MTProxybot и получить тег: команда /newproxy, затем адрес в виде IP_VPS:443, затем тот же секрет из шага 2. В ответ придёт TAG — 32 hex-символа.

Шаг 4. Создать конфиг. Подставьте свои секрет, тег и домен маскировки:

/etc/telemt/telemt.toml
sudo mkdir -p /etc/telemt
sudo tee /etc/telemt/telemt.toml << 'EOF'
[general]
use_middle_proxy = true
ad_tag = "ВАШ_TAG_ИЗ_MTPROXYBOT"
log_level = "normal"

[general.modes]
classic = false
secure = false
tls = true

[general.links]
show = "*"

[server]
port = 443

[server.api]
enabled = true
listen = "127.0.0.1:9091"
whitelist = ["127.0.0.1/32", "::1/128"]

[[server.listeners]]
ip = "0.0.0.0"

[censorship]
tls_domain = "example.com"
mask = true
tls_emulation = true
tls_front_dir = "tlsfront"

[access.users]
alice = "ВАШ_СЕКРЕТ_32_HEX"
EOF

classic и secure выключены намеренно: это старые режимы без маскировки, оставлять их — значит держать открытой самую заметную для DPI дверь. Домен в tls_domain подбирается по тем же правилам, что и для mtg (раздел 2), и его смена делает старые ссылки нерабочими.

Шаг 5. Завести пользователя и systemd-сервис:

Пользователь, права и юнит
sudo useradd -d /opt/telemt -m -r -U telemt
sudo chown -R telemt:telemt /etc/telemt

sudo tee /etc/systemd/system/telemt.service << 'EOF'
[Unit]
Description=Telemt MTProto Proxy
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=telemt
Group=telemt
WorkingDirectory=/opt/telemt
ExecStart=/usr/local/bin/telemt /etc/telemt/telemt.toml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now telemt
sudo systemctl status telemt

AmbientCapabilities=CAP_NET_BIND_SERVICE нужен потому, что сервис работает не от root, а порт 443 — привилегированный.

Шаг 6. Забрать ссылку. Составлять её руками не надо — telemt отдаёт готовую через локальный API:

Ссылки всех пользователей
curl -s http://127.0.0.1:9091/v1/users | grep -o 'tg://[^"]*'

Спонсорский канал требует публичного IP

В режиме use_middle_proxy = true прокси соединяется с middle-серверами Telegram, и они проверяют, что он доступен снаружи по своему адресу. За NAT или без проброшенного порта пул middle-серверов не поднимется — в логах будет All ME servers for DC failed at init. Без adtag это поле можно выключить, и прокси пойдёт к дата-центрам напрямую.

Что выбрать

Параметрmtg v2telemtОфициальный MTProxy
FakeTLS✅ из коробки✅ из коробки⚠️ только с ключом -D при сборке из исходников
Adtag (спонсор)❌ нет✅ есть✅ есть
Несколько секретов❌ один✅ по пользователям✅ несколько ключей -S
Язык / поддержкаGo, последний релиз — апрель 2026Rust, релизы почти еженедельноC, коммиты есть, релизов нет с 2018
УстановкаDocker или бинарникБинарник, Docker ComposeСборка из исходников; готовый образ нерабочий

12. Частые вопросы

Прокси упирается в канал и локацию, а не в процессор. Российская площадка задачу не решает.

Провайдеры под VPN →

Смотрите также