Зачем поднимать свой узел вместо публичных
Публичные списки прокси страдают двумя проблемами:
- Перегрузка и бан IP: публичный адрес попадает в блэклисты ТСПУ за несколько дней, а пропускная способность бесплатного сервера делится между тысячами пользователей.
- Рекламные каналы: владельцы публичных нод привязывают спонсорские каналы, которые висят вверху списка чатов.
Собственный VPS на Ubuntu/Debian решает обе задачи. Для комфортной работы 10–20 человек хватит самой дешевой виртуальной машины за $1.5–$3 в месяц.
Требования к серверу
- ОС: Ubuntu 22.04 / 24.04 LTS или Debian 12
- Ресурсы: 1 vCPU, 512 МБ RAM, 5–10 ГБ диска
- Локация: Нидерланды, Германия, Финляндия или Казахстан (минимальный RTT до дата-центров Telegram DC2/DC4)
- Сеть: Статический IPv4, открытый порт
443/tcp
Генерация секрета с FakeTLS
В 2026 году классические секреты без маскировки или с префиксом dd быстро определяются DPI. Нужен секрет с префиксом ee и валидным SNI-доменом с поддержкой TLS 1.3 (например, cloudflare.com, yandex.ru, sberbank.ru или google.com).
Мы используем nineseconds/mtg (v2) — самую эффективную и стабильную реализацию MTProxy на Go.
Сгенерируйте секрет одной командой:
docker run --rm nineseconds/mtg:2 generate-secret --hex cloudflare.com
Вывод будет выглядеть примерно так:
eef0d27c62b508f760b292e76f571e21b7636c6f7564666c6172652e636f6d
(где 636c6f7564... — hex-представление имени домена cloudflare.com). Сохраните этот ключ.
Развертывание через Docker Compose
1. Подготовка системы и фаервола
Подключитесь к VPS по SSH и откройте порт 443:
sudo apt update && sudo apt install -y docker.io docker-compose
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable
2. Конфигурация docker-compose.yml
Создайте рабочую директорию и файл конфигурации:
mkdir -p ~/mtproxy && cd ~/mtproxy
nano docker-compose.yml
Вставьте конфигурацию (замените ВАШ_СЕКРЕТ на сгенерированный выше):
version: '3.8'
services:
mtg:
image: nineseconds/mtg:2
container_name: tg-mtg
restart: always
network_mode: host
command: >
simple-run
-n 1.1.1.1:53
-i prefer-ipv4
0.0.0.0:443
eef0d27c62b508f760b292e76f571e21b7636c6f7564666c6172652e636f6d
Важно по
network_mode: host: работа напрямую в хост-сети избавляет от накладных расходов Docker NAT и гарантирует корректную передачу реального IP клиента.
3. Запуск и проверка логов
docker-compose up -d
docker-compose logs -f
Если в логах появилась строка Listening on 0.0.0.0:443, сервис успешно принимает соединения.
Формирование ссылки для подключения
Ссылка для добавления в клиент формируется по стандарту:
tg://proxy?server=IP_СЕРВЕРА&port=443&secret=ВАШ_СЕКРЕТ
Или в формате HTTPS-редиректа:
https://t.me/proxy?server=IP_СЕРВЕРА&port=443&secret=ВАШ_СЕКРЕТ
Отправьте полученную строку в «Избранное» (Saved Messages) и нажмите по ней. Telegram откроет модальное окно подключения с отображением пинга.
Возможные проблемы и диагностика
- Порт 443 уже занят: если на сервере уже работает Nginx/Caddy, повесьте
mtgна порт8443или2053, либо используйте фронтенд с SNI-мультиплексированием. - Провайдер блокирует порт 443 к зарубежным IP: смените порт на
8443или4433в конфиге и правилахufw. - «Соединение…» висит бесконечно: проверьте
docker-compose logs— если входящих запросов нет, проблема в локальном провайдере хостинга (проверьте Security Groups в панели хостера, например на Hetzner или AWS).