|
||||||||||||||||||||||||||||||||||||
|
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 лишён этих проблем 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. Требования
Конфликт порта 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
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 Просмотр логов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! Частые причины проблем
|
||||||||||||||||||||||||||||||||||||
|
Так же в этом разделе:
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|