Initial commit: Hermes skill mtproto-proxy

This commit is contained in:
estorozhenko
2026-09-06 13:51:02 +00:00
commit 4bcb138f8b
+132
View File
@@ -0,0 +1,132 @@
---
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` — для управления конфигом агента