MyTetra Share
Делитесь знаниями!
MTProto-прокси с помощью mtg (реализация на Go, поддержка FakeTLS)
Время создания: 31.03.2026 14:19
Раздел: Компьютер - Web / Internet - Отключение блокировок
Запись: xintrea/mytetra_syncro/master/base/1774955948r9npa6pp8o/text.html на raw.githubusercontent.com

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


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

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


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

mtg (github.com/9seconds/mtg) — неофициальная реализация MTProto-прокси на Go от независимого разработчика. Официальный прокси Telegram (TelegramMessenger/MTProxy) написан на C — он тоже поддерживает FakeTLS, но развивается значительно медленнее (единственный релиз v1 в 2018, последние коммиты — ноябрь 2025). mtg написан на Go, активно обновляется и де-факто стал стандартом для самостоятельного развёртывания MTProto-прокси.

Поддерживает режим FakeTLS: при подключении клиент и прокси имитируют TLS-хендшейк с SNI-именем легитимного сайта (например, google.com). Для систем глубокой инспекции пакетов (DPI) соединение выглядит как обычный HTTPS к google.com — отличить невозможно без мониторинга IP-адресов конечных серверов.


Схема соединения


Telegram-клиент ──── TLS (маскировка) ────▶ mtg на VPS ──── MTProto ────▶ Серверы Telegram


DPI видит: TLS к google.com ·  Реально: MTProto внутри TLS-обёртки


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


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

Домен в секрете — только имя хоста для TLS-хендшейка, реального соединения с ним нет. Используйте крупные популярные сайты: google.com, cloudflare.com, microsoft.com. Их TLS-трафик точно не блокируется ни одним провайдером.


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



Параметр

Минимум

Примечание

ОС

Ubuntu 22.04 / 20.04

Или любой Debian-based

CPU / RAM

1 vCPU / 512 МБ

mtg потребляет ~20–50 МБ RAM

Трафик

100 ГБ/мес

При 50 активных пользователях

Порт

443 (рекомендуется)

Или любой другой открытый порт

Расположение VPS

За пределами РФ

Нидерланды, Германия, Финляндия

Docker или Go 1.21+

Для Docker-способа

Или только wget для бинарника


Конфликт порта 443 с Nginx

Если на VPS уже работает Nginx или Apache на порту 443 — используйте порт 8443 вместо 443. Он тоже хорошо проходит через корпоративные сети и редко блокируется. Всё что описано ниже — просто замените 443 на 8443.


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

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


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

Установить Docker Engine на Ubuntu:


curl -fsSL https://get.docker.com | sudo sh

sudo systemctl enable --now docker


Проверьте что Docker работает (можно проверить версию Docker):


docker --version



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

Секрет — ваш «пароль» прокси. Команда ниже генерирует FakeTLS-секрет с маскировкой под google.com. Запустите один раз и сохраните вывод.



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


docker run --rm nineseconds/mtg:2 generate-secret --hex google.com



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



ee4a7b3f1c8d2e9a5f6c0b4d8e1a3f7b2c676f6f676c652e636f6d



Секрет начинается с ee — признак FakeTLS-режима. Последние символы (676f6f676c652e636f6d) — hex-кодировка домена google.com. Итого ~54 символа.

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

Создать директорию и файл конфига:



sudo mkdir -p /etc/mtg



Создайте файл конфига, подставив ваш секрет из шага 2. Надо создать файл /etc/mtg/config.toml и заменить в нем SECRET на ваш секрет:



secret = "ВАШ_СЕКРЕТ_ИЗ_ШАГА_2"

bind-to = "0.0.0.0:443"



Быстрый способ создать файл config.toml сразу с секретом (замените ВАШ_СЕКРЕТ):



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



В колонке STATUS должно быть написано "Up N seconds".


Флаг --restart unless-stopped

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


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

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


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

Скачать mtg v2.2.3 для Linux AMD64:



VERSION=2.2.3

wget -O /tmp/mtg.tar.gz "https://github.com/9seconds/mtg/releases/download/v${VERSION}/mtg-${VERSION}-linux-amd64.tar.gz"

tar -xf /tmp/mtg.tar.gz -C /tmp

sudo install -m 755 /tmp/mtg-${VERSION}-linux-amd64/mtg /usr/local/bin/mtg

rm -rf /tmp/mtg.tar.gz /tmp/mtg-${VERSION}-linux-amd64



Проверить что mtg установлен:



mtg --version



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


Сгенерировать FakeTLS-секрет (сохраните вывод):



mtg generate-secret --hex google.com



Шаг 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.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



В выводе должно быть Active: active (running).


LimitNOFILE

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


6. Спонсорский канал (adtag)

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


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

Функция adtag есть только в официальном C-реализации Telegram — TelegramMessenger/MTProxy. В mtg v2 эта возможность отсутствует: соответствующего параметра в конфиге нет. Если спонсорский канал нужен — придётся использовать официальный MTProxy вместо mtg.


Официальный MTProxy с adtag

Официальный MTProxy написан на C (последние коммиты — ноябрь 2025, но единственный релиз — v1 от 2018 года). Adtag в нём работает. Установка через Docker:


Шаг 1. Запустите контейнер без TAG — контейнер автоматически сгенерирует SECRET и выведет tg://-ссылку в логи:



Первый запуск — получить SECRET из логов


docker run -d --name mtproxy --restart unless-stopped -p 443:443 -v proxy-config:/data telegrammessenger/proxy:latest


# Посмотреть логи — там будет tg://-ссылка с секретом

docker logs mtproxy



Шаг 2. В @MTProxybot: команда /newproxy → отправьте боту tg://-ссылку из логов → бот зарегистрирует прокси и выдаст TAG (adtag).


Шаг 3. Перезапустите контейнер с TAG:



Перезапуск с TAG


docker stop mtproxy && docker rm mtproxy

docker run -d --name mtproxy --restart unless-stopped -p 443:443 -v proxy-config:/data -e TAG=ВАШ_TAG_ИЗ_MTPROXYBOT telegrammessenger/proxy:latest



Флаг -v proxy-config:/data обязателен — в нём сохраняется SECRET между перезапусками, поэтому tg://-ссылка остаётся прежней.

Сравнение: mtg vs официальный MTProxy



Параметр

mtg v2

Официальный MTProxy

FakeTLS

✅ есть

✅ есть (недокументирован)

Adtag (спонсор)

❌ нет

✅ есть

Язык / поддержка

Go, активно (v2.2.3, март 2026)

C, редко (коммиты в 2025, релиз v1 2018)

Установка

Просто

Просто (Docker)


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

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

Открыть порт 443 (TCP) в UFW:



sudo ufw allow 443/tcp

sudo ufw status



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


Docker и UFW

Docker пробрасывает порты напрямую через iptables, обходя UFW. Это значит, что при использовании Docker-способа порт 443 будет доступен снаружи даже без правила UFW. Тем не менее, добавить правило UFW рекомендуется — для единообразия и документирования открытых портов.


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

mtg умеет автоматически определить внешний IP и сформировать готовую ссылку.


Docker-способ


Получить ссылку подключения (запускает отдельный временный контейнер)



docker run --rm -v /etc/mtg/config.toml:/config.toml nineseconds/mtg:2 access /config.toml



Бинарник-способ


Получить ссылку подключения



mtg access /etc/mtg/config.toml



Вывод — JSON. IP определяется автоматически через ifconfig.co. Ищите поле tme_url в блоке ipv4:



{

"ipv4": {

"ip": "1.2.3.4",

"port": 443,

"tg_url": "tg://proxy?server=1.2.3.4&port=443&secret=7iBa...",

"tg_qrcode": "https://api.qrserver.com/...",

"tme_url": "https://t.me/proxy?server=1.2.3.4&port=443&secret=7iBa...",

"tme_qrcode": "https://api.qrserver.com/..."

},

"secret": { "hex": "ee...", "base64": "7iBa..." }

}



Скопируйте значение tme_url — ссылка вида https://t.me/proxy?... работает на всех платформах. Секрет в URL отображается в base64-формате (7iBa...) — это то же самое, что hex-секрет ee..., просто другая кодировка. Telegram принимает оба формата.



Ссылка вручную

Если команда access показала неправильный IP или не сработала — составьте ссылку вручную:



https://t.me/proxy?server=IP_ВАШЕГО_VPS&port=443&secret=ВАШ_СЕКРЕТ



Узнать внешний IP VPS:



curl -4 ifconfig.me



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



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


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

Обновить mtg до последней версии образа



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 (бинарник)


Скачать новую версию и перезапустить сервис



VERSION=2.2.3 # замените на актуальную версию

wget -O /tmp/mtg.tar.gz "https://github.com/9seconds/mtg/releases/download/v${VERSION}/mtg-${VERSION}-linux-amd64.tar.gz"

tar -xf /tmp/mtg.tar.gz -C /tmp

sudo systemctl stop mtg

sudo install -m 755 /tmp/mtg-${VERSION}-linux-amd64/mtg /usr/local/bin/mtg

sudo systemctl start mtg

rm -rf /tmp/mtg.tar.gz /tmp/mtg-${VERSION}-linux-amd64



Диагностика подключения

Если Telegram не может подключиться — проверьте порт снаружи с другого компьютера:

Проверить доступность порта с другого компьютера



nc -zv IP_ВАШЕГО_VPS 443



Если nc не установлен:



sudo apt install -y netcat-openbsd



Успешный вывод:



Connection to IP 443 port [tcp/https] succeeded!



Частые причины проблем:


  • Порт не открыт в UFW: sudo ufw allow 443/tcp
  • Контейнер/сервис упал: docker ps / systemctl status mtg
  • Неправильный IP в ссылке: curl -4 ifconfig.me — проверить внешний IP
  • Порт занят другим процессом: sudo ss -tlnp | grep :443
  • Секрет скопирован с лишними пробелами: Пересоздайте config.toml, проверьте секрет


Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования