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
Яндекс индекс цитирования