Этот проект позволяет развернуть персональный MTProto-прокси для Telegram на базе Telemt с автоматической выдачей конфигураций через Telegram-бота. Прокси работает в двух режимах: обычный secure (простой) или с маскировкой Fake TLS (для обхода DPI). Бот управляет пользователями, добавляя их в конфиг Telemt и перезагружая сервис, а также присылает администратору уведомления о новых подключениях.
- 🚀 Быстрое развёртывание через Docker Compose
- 🤖 Telegram-бот для самообслуживания (любой пользователь может получить ссылку с ограничением по времени)
- 🔔 Уведомления администратору о каждом новом пользователе
- 🛡️ Два режима работы Telemt:
- Обычный secure-режим (
tls=false,secure=true) — надёжно и просто, не требует домена - Fake TLS (
tls=true,secure=false) — маскировка трафика под обычный HTTPS-сайт (для обхода блокировок)
- Обычный secure-режим (
- 📦 Лёгкая настройка через переменные окружения
- Сервер с Ubuntu/Debian (или любая ОС с Docker)
- Установленные Docker и Docker Compose
- Домен (если нужен реальный SSL через Traefik) или просто IP-адрес сервера
- Telegram-бот (токен от @BotFather)
git clone https://github.com/yourusername/telemt-proxy-bot.git
cd telemt-proxy-botСкопируйте пример файла .env и отредактируйте его:
cp .env.example .env
nano .envМинимальное содержимое .env:
BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
ADMIN_IDS=52405316 # ваши Telegram ID (через запятую)
PROXY_DOMAIN=mtp.ach-play.ru # домен или IP вашего сервера
RATE_LIMIT_MINUTES=60 # интервал между запросами (в минутах)Если вы планируете использовать режим Fake TLS, добавьте также:
MASK_DOMAIN=www.google.com # домен для маскировкиВ папке telemt находится файл telemt.toml. Выберите один из двух режимов, отредактировав его.
listen = "0.0.0.0:443"
tls = false
telegram = [
"149.154.175.50:443",
"149.154.167.51:443",
"149.154.175.100:443",
"149.154.167.91:443",
"149.154.171.5:443"
]
[access]
users = {} # бот будет добавлять сюда новых пользователейВ этом режиме ссылки будут иметь префикс dd (например, tg://proxy?server=...&secret=dd...).
listen = "0.0.0.0:443"
tls = true
telegram = [
"149.154.175.50:443",
"149.154.167.51:443",
"149.154.175.100:443",
"149.154.167.91:443",
"149.154.171.5:443"
]
[censorship]
tls_domain = "www.google.com" # обязательно укажите тот же домен, что в MASK_DOMAIN
mask = true
mask_port = 443
fake_cert_len = 2048
[access]
users = {}В этом режиме ссылки будут иметь префикс ee и содержать закодированный домен маскировки (например, ee<секрет><домен в hex>).
docker-compose up -dПроверьте логи:
docker-compose logs -fНапишите вашему боту команду /start, затем /new. Вы получите ссылку вида:
tg://proxy?server=mtp.ach-play.ru&port=443&secret=dd55f5ae8ff423e5e77951760066a2d816
или, если включён Fake TLS:
tg://proxy?server=mtp.ach-play.ru&port=443&secret=ee55f5ae8ff423e5e77951760066a2d8167777772e676f6f676c652e636f6d
Скопируйте ссылку и вставьте в настройках прокси Telegram (Настройки → Данные и память → Прокси-сервер → Включить прокси → Вставить ссылку). Если всё настроено верно, прокси включится.
.
├── .env # переменные окружения
├── docker-compose.yml # композ-файл с сервисами telemt и бота
├── telemt/
│ └── telemt.toml # конфигурация Telemt
└── bot/
├── Dockerfile
├── requirements.txt
└── bot.py # основной код бота
- Команда
/new— генерирует новый 16-байтовый секрет, добавляет его в[access.users]конфига, посылает сигнал SIGHUP Telemt для перезагрузки, формирует ссылку и отправляет пользователю. - Rate limit: не чаще одного раза в
RATE_LIMIT_MINUTES(по умолчанию 60). - Уведомления администратору (указан в
ADMIN_IDS) при каждой выдаче ссылки. - Команда
/stats(доступна только администраторам) показывает количество пользователей в конфиге.
Если вы хотите перейти из обычного режима в Fake TLS или наоборот:
- Измените
telemt/telemt.toml(включите/выключитеtlsи настройте секцию[censorship]). - В файле
.envдобавьте или удалите переменнуюMASK_DOMAIN. - Перезапустите стек:
docker-compose down
docker-compose up -dБот автоматически определит наличие MASK_DOMAIN и будет генерировать ссылки с соответствующим префиксом (ee или dd).
- Убедитесь, что порт 443 открыт в фаерволе и доступен извне:
telnet ваш-сервер 443
- Проверьте логи Telemt:
Ищите ошибки вроде
docker-compose logs telemt
Telegram handshake timeoutилиinvalid secret. - Убедитесь, что секрет в ссылке совпадает с тем, что добавил бот в
telemt.toml:cat telemt/telemt.toml
- Если используется Fake TLS, проверьте, что
MASK_DOMAINсовпадает сtls_domainв конфиге.
- Проверьте логи бота:
docker-compose logs bot. - Убедитесь, что токен бота правильный.
- Проверьте, что файл
telemt.tomlдоступен для записи боту (права 666 или владелец совпадает с пользователем контейнера).
- В конфиге бота используется сигнал SIGHUP. Если он не работает, можно заменить
container.kill(signal.SIGHUP)наcontainer.restart()в функцииreload_telemt. Но это приведёт к разрыву текущих соединений.
- Ограничьте доступ к серверу по SSH (ключи, не пароль).
- Используйте файрвол (ufw), открыв только порты 22 и 443.
- Не публикуйте токен бота и приватные ключи.
- Регулярно обновляйте образы Docker.
MIT
- Telemt — быстрый и гибкий MTProxy
- pyTelegramBotAPI — удобная библиотека для ботов
Если у вас возникли вопросы или предложения, создавайте Issue или пишите в Telegram. Приятного использования!