Skip to content

Repository files navigation

English  |  Русский

MTProxy — обход блокировок Telegram

Сценарий развертывания MTProxy

Автоматизированная установка MTProxy на Ubuntu 22.04 / 24.04 LTS с Fake TLS обфускацией,
мультисекретами пользователей, watchdog и защитой от DPI

License: MIT Platform Version FakeTLS DPI

Спонсоры проекта

💬 Чат ВЕГА

Самый многофункциональный AI-чат в мире
с бесплатным Автопилотом — все модели AI,
генерация фото, видео, музыки и сайтов. Персонализированный чат под вас.



Изучить ВЕГА

🔌 API VEGA

Все endpoint OpenRouter в России + каталог
MCP, SKILL, приложений и SKILL API VEGA
для создания своих AI-приложений без ограничений.



Перейти к API


🔒 Только официальный код

Сборка из исходников Telegram без бинарников и патчей. Прозрачно, проверяемо, без сюрпризов.

🧩 Ставится на рабочий сервер

Не ломает окружение: изолированный пользователь mtproxy, отдельный порт, не трогает существующие сервисы. Можно ставить рядом с сайтом, ботом, VPN.

🔄 Поставил и забыл

Watchdog, автообновление конфига и бинарника, flock-защита от гонок, восстановление после перезагрузки — работает годами без ручного участия.


🚀 Быстрый старт

git clone https://github.com/lingeniare/MTProxy.git && cd MTProxy && sudo bash install_mtproxy.sh

После завершения скрипт выведет готовую ссылку tg://proxy?... и QR-код.
Откройте ссылку на телефоне — Telegram подхватит прокси автоматически.


⚙️ Что выполняет сценарий

# Действие
1 Устанавливает системные зависимости (включая cron, если отсутствует)
2 Настраивает синхронизацию времени (NTP) — сдвиг часов ломает MTProto-рукопожатие
3 Создает изолированного системного пользователя mtproxy
4 Компилирует MTProxy из официального репозитория Telegram
5 Загружает и валидирует конфигурационные файлы Telegram
6 Подбирает правдоподобный домен для Fake TLS из 11 «нейтральных» (проверка DNS + TLS 1.3 с валидным сертификатом, с учётом JA4/ECH) и генерирует секреты
7 Автоматически определяет NAT-конфигурацию для облачных VPS
8 Регистрирует systemd-сервис через wrapper /etc/mtproxy/run.sh (секреты не попадают в unit) с автозапуском, расширенным hardening и ограничением restart-storm
9 Настраивает watchdog: проверка каждые 2 минуты с защитой flock и автоперезапуском при 3 неудачах подряд
10 Настраивает ограничение частоты соединений через iptables
11 Создает задания планировщика: ежедневное обновление конфигурации Telegram и еженедельное обновление бинарника (с flock, валидацией и откатом, бэкап в $INSTALL_DIR)
12 Открывает порт в межсетном экране и сохраняет правила на случай перезагрузки

🕵️ Почему не www.google.com?

Fake TLS подделывает TLS-рукопожатие под указанный домен. Если домен — google.com, а IP сервера не принадлежит Google, DPI тривиально выявляет подмену по несовпадению SNI ↔ владелец адреса (проверка JA4/ECH) — следом идёт активное зондирование и блокировка.

Поэтому установщик выбирает домен из 11 «нейтральных» сервисов (Microsoft, Discord CDN, Cloudflare, Bing, Adobe, Spotify, Dropbox и др.), проверяя DNS + TLS 1.3 с валидным chain-of-trust (curl --tlsv1.3 --fail, fallback HEAD для CDN). Свой список можно задать через --domain-list.

💡 Порт тоже маскировка. TLS-трафик на нестандартном порту выделяется из фона. Флаг --port 443 маскирует прокси под обычный HTTPS.


👥 Управление пользователями

У каждого пользователя — собственный секрет (/etc/mtproxy/secrets.d/<имя>.secret). Отзыв доступа одного не затрагивает остальных.

mtproxy-user.sh add alice     # создать пользователя и получить ссылку
mtproxy-user.sh link alice    # показать ссылку повторно
mtproxy-user.sh list          # список пользователей
mtproxy-user.sh del alice     # отозвать доступ

🛡️ Архитектура безопасности

Механизм Реализация
Изоляция привилегий Выделенный системный пользователь mtproxy (без shell, без home)
Защита секретов /etc/mtproxy/secrets.d (0600, root:root) + wrapper /etc/mtproxy/run.sh — секреты подставляются в рантайме, не видны через systemctl cat / ps
Обфускация протокола Fake TLS с автовыбором из 11 доменов (DNS + TLS 1.3 + валидный сертификат, JA4/ECH)
Противодействие DPI Rate-limiting iptables hashlimit; опция порта 443
Мультисекреты Отдельный секрет на пользователя (secrets.d), точечный отзыв доступа
Hardening NoNewPrivileges, ProtectSystem=strict, PrivateTmp, LockPersonality, RestrictSUIDSGID, RemoveIPC, SystemCallArchitectures=native, лимиты TasksMax/MemoryMax
Watchdog systemd timer: проверка каждые 2 мин с flock, автоперезапуск после 3 неудач
Время NTP-синхронизация (timesyncd/chrony)
Устойчивость Сохранение правил через netfilter-persistent
Автообновление Конфиг — ежедневно, бинарник — еженедельно (с flock, валидацией и откатом)
NAT Автоматическое определение --nat-info для облачных окружений

🔧 Дополнительные параметры

Для большинства случаев параметры указывать не требуется. Значения по умолчанию оптимальны для небольших групп (до 5 человек).

Аргумент Описание По умолчанию
--domain, -D Домен для эмуляции TLS SNI автовыбор из встроенного списка с валидацией
--domain-list Свой список доменов через запятую для автовыбора (опционально)
--port Порт: auto, 443 (маскировка под HTTPS) или номер auto (случайный)
--tag, -P Тег из @MTProxybot (опционально)
--rate-limit Лимит новых соединений на IP 5/min
--rate-burst Допустимый всплеск 10
--tune-net Сетевой тюнинг sysctl: BBR, буферы, backlog выкл
--ipv6 Включить поддержку IPv6 (-6) и вывести IPv6-ссылку выкл

Переменные окружения:

Переменная Описание По умолчанию
FORCE_UNSHARE=auto|1|0 Режим PID namespace workaround: auto включает unshare, если pid_max > 65535 или ns_last_pid > 65535; 1 включает всегда; 0 отключает auto

🧩 Workaround для PID > 65535

На системах с большим kernel.pid_max (например 4194304) MTProxy может падать при старте:

mtproto-proxy: common/pid.c:42: init_common_PID: Assertion `!(p & 0xffff0000)' failed.

Причина: текущая версия mtproto-proxy ожидает PID в 16-битном диапазоне, а systemd может выдать PID > 65535.

Скрипт автоматически включает workaround через PID namespace (совместимо с Ubuntu 24.04 / systemd 255):

/usr/bin/unshare --pid --fork --mount-proc -- /opt/MTProxy/objs/bin/mtproto-proxy ...

Дополнительно в unit добавлены StartLimitIntervalSec=60 и StartLimitBurst=5 против restart-storm.

Как проверить, что workaround активен
  1. systemctl cat MTProxy — в ExecStart должен быть /etc/mtproxy/run.sh (с префиксом unshare, если активен); секреты (-S) не показываются.
  2. journalctl -u MTProxy -f — в логах PID обычно как [1], [2].
  3. systemctl status MTProxyMainPID будет у unshare/run.sh, дочерние mtproto-proxy работают в той же cgroup.

🖥️ Администрирование

systemctl status MTProxy          # статус службы
systemctl restart MTProxy         # перезапуск
journalctl -u MTProxy -f          # журнал в реальном времени
journalctl -t mtproxy-watchdog    # журнал watchdog
curl localhost:2398/stats         # диагностическая статистика

🔄 Обновление скрипта

cd MTProxy && git pull && sudo bash install_mtproxy.sh

Повторный запуск сохраняет порт, секрет и домен из текущей конфигурации. Ранее выданные ссылки останутся рабочими.


🗑️ Деинсталляция

sudo bash uninstall_mtproxy.sh

Удаляет сервис, watchdog, cron-задания, правила фаервола, пользователя и все файлы.


⚠️ Ограничения

MTProxy проксирует только текстовые сообщения и медиафайлы. Голосовые и видеозвонки не поддерживаются. Для звонков используйте WireGuard или AmneziaWG с раздельным туннелированием.


📋 Системные требования

  • Ubuntu 22.04 LTS / 24.04 LTS
  • Доступ с правами root
  • Сетевое подключение к интернету

❤️ Поддержать проект
Поддержать проект

Вклад в проектБезопасностьMIT License

© 2026 AI for people and business

About

Автоматическая установка и настройка MTProxy для Telegram

Topics

Resources

Contributing

Security policy

Stars

78 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages