mirror of
https://gitverse.ru/kpa39l/mtproto-proxy.git
synced 2026-09-29 09:15:03 +00:00
132 lines
5.1 KiB
Markdown
132 lines
5.1 KiB
Markdown
---
|
||
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` — для управления конфигом агента |