Files
rag-pipeline-docker/references/mtproto-alexbers-caddy.md
T
2026-09-06 13:51:06 +00:00

3.4 KiB
Raw Blame History

MTProto Proxy via alexbers/mtprotoproxy + Caddy TLS

Отличие от seriyps/mtproto-proxy

Существующий скилл mtproto-proxy описывает образ seriyps/mtproto-proxy с Fake TLS и переменными MTP_*. Это другой образ. alexbers/mtprotoproxy использует:

  • Python-конфиг (config.py) вместо переменных окружения
  • Реальные TLS-сертификаты (через nginx/Caddy reverse proxy) вместо Fake TLS
  • network_mode: host вместо bridge

Docker Compose (с Caddy)

services:
  mtproto:
    image: alexbers/mtprotoproxy
    restart: always
    network_mode: host
    volumes:
      # Сертификаты от Caddy (LetsEncrypt)
      - /opt/caddy/caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/domain.ru:/certs:ro
      # Конфиг
      - ./mtproto:/config
    command: python3 mtprotoproxy.py /config/config.py

config.py

# MTProto proxy config
PORT = 443  # or whatever port Caddy forwards TLS to
USERS = {
    "tg": "ee" + "32-hex-chars-secret"
}
# Optional: stats reporting
# SECRET = 123456  # for stats (unsafe, optional)

TLS via Caddy

Caddy reverse proxy ставится перед MTProto:

labels:
  caddy: domain.ru
  caddy.reverse_proxy: / "{{upstreams 443}}"
  caddy.reverse_proxy.transport: http
  caddy.reverse_proxy.transport.tls: "insecure_skip_verify"

Caddy получает LetsEncrypt сертификаты и пробрасывает HTTPS-трафик на MTProto (который внутри слушает без TLS).

Ссылка для подключения

https://t.me/proxy?server=domain.ru&port=443&secret=eexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Секрет с префиксом ee — Telegram на клиенте сам определяет что это Fake TLS / реальный TLS.

Медленное подключение (3+ минуты) — возможные причины

  1. DNS resolver на сервере — MTProto прокси использует DNS для проверки Telegram API. Если DNS медленный или блокируется, задержка большая. Лечение: проверить /etc/resolv.conf, поставить 1.1.1.1 / 8.8.8.8.

  2. Caddy появляется раньше MTProto — если Caddy стартует быстрее, он выдаёт ошибку вместо прокси. Telegram клиент пытается переподключаться, что добавляет задержку. Лечение: настроить depends_on или restart политику.

  3. TCP keepalive — MTProto держит соединения. Если между клиентом и сервером есть NAT с таймаутом меньше 3 минут, соединение разрывается и восстанавливается. Это может выглядеть как "3 минуты подключается".

  4. Медленная загрузка сертификатов — если сертификаты лежат на WebDAV/Yandex Disk, mount может тормозить. Проверить mount и права доступа.

  5. Проверка: внутри контейнера docker exec mtproto cat /config/config.py, снаружи ss -tlnp | grep mtproto.