Files
2026-09-06 13:51:02 +00:00

132 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: mtproto-proxy
description: >-
Deploy MTProto proxy (Telegram proxy) via Docker on a VPS. Uses
seriyps/mtproto-proxy image with Fake TLS support, configurable ports,
secret rotation, and Docker-based deployment.
tags:
- mtproto
- telegram
- proxy
- docker
- fake-tls
category: devops
---
# MTProto Proxy — Telegram Proxy via Docker
## When to Use This Skill
Use this skill when you need to:
- Deploy a Telegram MTProto proxy on a VPS for bypassing blocking
- Configure Fake TLS (секрет с префиксом `ee`) для маскировки под HTTPS
- Заменить или добавить MTProto рядом с существующими XRay/AmneziaWG прокси
- Регенерировать секрет прокси (ротация ключей)
- Проксировать Telegram, когда прямые MTProto подключения заблокированы
## Deploy
### 1. Выбор порта
MTProto proxy должен работать на порту, **не занятом другими сервисами**:
```bash
# Проверить занятые порты
ssh root@VPS_IP "ss -tlnp"
```
Рекомендуемые незанятые порты, если 443/8443 заняты XRay:
- `2053` — Cloudflare alt HTTPS, проходит у большинства операторов
- `2096` — Cloudflare alt HTTPS
- `10000` — редко блокируется
- `30000-65535` — высокие порты, почти никогда не блокируются
### 2. Запуск контейнера
**Важно:** Образ `seriyps/mtproto-proxy` использует переменные окружения `MTP_PORT`, `MTP_SECRET`, `MTP_TAG` (не `SECRET`, не `TAG`). Скрипт `start.sh` внутри контейнера читает именно эти переменные.
```bash
# Сгенерировать секрет и tag
MTP_SECRET=$(head -c 16 /dev/urandom | xxd -ps)
MTP_TAG=$(head -c 16 /dev/urandom | xxd -ps)
# Запустить (без Fake TLS)
docker run -d --name mtproto-proxy \
--restart unless-stopped \
-p <PORT>:<PORT> \
-e MTP_PORT=<PORT> \
-e MTP_SECRET=$MTP_SECRET \
-e MTP_TAG=$MTP_TAG \
seriyps/mtproto-proxy
```
### 3. Fake TLS (рекомендуется)
Чтобы трафик маскировался под обычный HTTPS, добавь префикс `ee` к секрету:
```bash
MTP_SECRET=$(echo -n 'ee' && head -c 15 /dev/urandom | xxd -ps)
```
Итоговый секрет будет 32 hex-символа, начинается с `ee`.
### 4. Проверка
```bash
# Статус контейнера
docker ps --filter name=mtproto-proxy --format '{{.Names}} {{.Status}} {{.Ports}}'
# Логи
docker logs mtproto-proxy 2>&1
# Порт слушается
ss -tlnp | grep <PORT>
# Ссылка для подключения (отображается в логах)
# https://t.me/proxy?server=<IP>&port=<PORT>&secret=<SECRET>
```
### 5. Генерация ссылки для подключения
Ссылка для Telegram вида:
```
https://t.me/proxy?server=<SERVER_IP>&port=<PORT>&secret=<SECRET>
```
Если секрет с `ee` (Fake TLS), Telegram сам определит тип и подключится с маскировкой.
## Ротация секрета
```bash
docker rm -f mtproto-proxy
MTP_SECRET=$(echo -n 'ee' && head -c 15 /dev/urandom | xxd -ps)
MTP_TAG=$(head -c 16 /dev/urandom | xxd -ps)
docker run -d --name mtproto-proxy \
--restart unless-stopped \
-p <PORT>:<PORT> \
-e MTP_PORT=<PORT> \
-e MTP_SECRET=$MTP_SECRET \
-e MTP_TAG=$MTP_TAG \
seriyps/mtproto-proxy
```
## Pitfalls
1. **Переменные окружения — `MTP_*`, а не `SECRET`/`TAG`.** Скрипт `start.sh` читает `MTP_PORT`, `MTP_SECRET`, `MTP_TAG`. Если передать `SECRET=d3ff9c...`, контейнер запустится с дефолтным секретом из sys.config (`d0d6e111bada5511fcce9584deadbeef`), а не с твоим.
2. **Порт внутри контейнера — 1443 по умолчанию.** Если не задать `MTP_PORT`, контейнер слушает на 1443 внутри. При маппинге `-p 2053:1443` надо указывать порт 1443 справа, а не 2053.
3. **Порт в маппинге должен совпадать с MTP_PORT.** Если `MTP_PORT=2053`, то маппинг должен быть `-p 2053:2053`. Иначе порты не совпадут.
4. **Fake TLS секрет:** должен начинаться на `ee` (32 hex символа). Telegram на клиенте сам определяет тип секрета по префиксу.
5. **Не занимать порты XRay:** если на сервере уже стоит XRay Reality на 443/8443, выбирай другой порт.
6. **Firewall:** если включён ufw/iptables, не забудь открыть порт.
## Related Skills
- `networking-proxy` — umbrella для всех прокси/туннелей (XRay, AmneziaWG, Shadowsocks)
- `hermes-agent` — для управления конфигом агента