~ / blog / telemt-mtproxy

Партизанский MTProxy: поднимаем Telemt с маскировкой под обычный сайт

// 26.03.2026 · ~10 мин чтения · root@beit24
// содержание
  1. Проблема: DPI видит MTProxy
  2. Решение: Telemt
  3. Установка и настройка
  4. Проброс через MikroTik
  5. Проверка маскировки
  6. Полезные команды
  7. Ограничения
// 01 — проблема

Обычный MTProxy палится

Стандартный MTProxy с Fake TLS маскирует протокол — DPI смотрит на пакеты и видит TLS. Это работает, пока к твоему серверу не придёт краулер и не попробует подключиться напрямую.

Краулер делает примерно так:

bash
# Краулер проверяет твой IP: curl -v --resolve 1c.ru:443:ВАШ_IP https://1c.ru/ # Обычный mtg отвечает: Connection reset / мусор # Вывод краулера: это не 1c.ru → блокируем

Итог — IP в бане, прокси не работает. Нужно что-то умнее.

// 02 — решение: telemt

Telemt — прокси который прикидывается сайтом

Telemt написан на Rust + Tokio. Ключевая фича — transparent TCP splice. Если клиент приходит без секрета (краулер, DPI), Telemt не дропает соединение, а прозрачно перенаправляет его на реальный сайт.

Особенностьmtg (старый)Telemt
Active probing❌ Дропает✅ Проксирует реальный сайт
ЯзыкGoRust + Tokio
Несколько пользователейОдин секретКаждому свой
Статус проекта🔴 Заброшен🟢 Активно развивается
ℹ️
Краулер получает настоящий ответ от реального сайта с настоящим сертификатом. Никакого MITM — Telemt просто склеивает TCP-потоки.
// 03 — установка

Установка шаг за шагом

1

Установить Docker

bash
apt update && apt install -y docker.io docker-compose
2

Создать папку и сгенерировать секрет

bash
mkdir -p /root/mtproxy-telemt && cd /root/mtproxy-telemt
openssl rand -hex 16
# Пример вывода: 1986dadc5e9ced8d0c1712edddcf0f39
ℹ️
Команда генерирует 16 случайных байт в hex — итого 32 символа. Это и есть твой секрет. Сохрани его — он понадобится в config.toml в поле user1 и в итоговой ссылке для Telegram.
3

Создать config.toml

tomlconfig.toml
show_link = ["user1"]

[general]
prefer_ipv6      = false
fast_mode        = true
use_middle_proxy = false

[general.modes]
classic = false
secure  = false
tls     = true   # только Fake TLS

[server]
port             = 443
listen_addr_ipv4 = "0.0.0.0"
listen_addr_ipv6 = "::"

[censorship]
tls_domain    = "lemanapro.ru"   # сайт-маскировка
mask          = true
mask_port     = 443
fake_cert_len = 2048

[access.users]
user1 = "СЕКРЕТ_ИЗ_ШАГА_2"   # 32 символа hex

[[upstreams]]
type    = "direct"
enabled = true
weight  = 10
⚠️
Выбор tls_domain: используй популярный российский сайт. Хорошие варианты: lemanapro.ru, 1c.ru, mvideo.ru. Плохие: google.com, gov.ru, example.com.
4

Создать docker-compose.yml

yamldocker-compose.yml
services:
  telemt:
    image: ghcr.io/telemt/telemt:latest
    container_name: telemt
    restart: unless-stopped
    environment:
      RUST_LOG: "info"
    volumes:
      - ./config.toml:/app/config.toml:ro
    ports:
      - "443:443/tcp"
    cap_drop: [ALL]
    cap_add:  [NET_BIND_SERVICE]
    read_only: true
    ulimits:
      nofile:
        soft: 65536
        hard: 65536
    tmpfs:
      - /tmp:rw,nosuid,nodev,noexec,size=16m
⚠️
Используй именно образ ghcr.io/telemt/telemt:latest. Образ whn0thacked/telemt-docker:latest падает с segfault на современных ядрах.
5

Запустить и получить ссылку

bash
docker-compose up -d docker-compose logs | grep "tg://"
ℹ️
В ссылке будет server=172.18.0.2 — внутренний IP контейнера. Замени его на публичный IP сервера вручную.
// 04 — проброс через mikrotik

Нестандартный порт через NAT

Если сервер за MikroTik и ты хочешь использовать нестандартный порт снаружи (например 7443) — добавь DST-NAT правило:

IP → Firewall → NAT → добавить правило:

ПараметрЗначение
Chaindstnat
Protocoltcp
Dst. Port7443
Actiondst-nat
To AddressIP сервера
To Port443

Итоговая ссылка для Telegram:

text
# Без MikroTik (прямое подключение): tg://proxy?server=0.0.0.0&port=443&secret=ee1986...7275 # Через MikroTik (внешний порт 7443): tg://proxy?server=0.0.0.0&port=7443&secret=ee1986...7275
// 05 — проверка маскировки

Тест active probing

Проверяем что краулер получит настоящий сайт:

bash
curl -v -I --resolve lemanapro.ru:7443:0.0.0.0 https://lemanapro.ru:7443/

Ожидаемый результат:

✓ OK Trying 0.0.0.0:7443 — подключение идёт через твой сервер
✓ OK HTTP/1.1 200 OK — маскировка работает, сайт отвечает
✓ OK IP сервера в Set-Cookie — трафик идёт через прокси
// 06 — полезные команды
bash
# Логи в реальном времени docker-compose logs -f # Перезапустить docker-compose restart # Остановить docker-compose down # Обновить образ docker-compose pull && docker-compose up -d
// 07 — ограничения

Что не работает через MTProxy

📞
Звонки Telegram не работают через MTProxy. Это архитектурное ограничение самого Telegram — звонки используют P2P/UDP, которые MTProxy физически не может проксировать. Источник: github.com/telemt/telemt

MTProxy работает только для:

  • Текстовых сообщений
  • Медиафайлов (фото, видео, документы)
  • Каналов и групп
  • Ботов

Для звонков нужен SOCKS5 прокси — он не обфусцируется так же хорошо, но звонки через него работают.