From 4bcb138f8b0cd3d6f0839e14cfb741edf229a610 Mon Sep 17 00:00:00 2001 From: estorozhenko Date: Sun, 6 Sep 2026 13:51:02 +0000 Subject: [PATCH] Initial commit: Hermes skill mtproto-proxy --- SKILL.md | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 SKILL.md diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..e52be76 --- /dev/null +++ b/SKILL.md @@ -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 : \ + -e MTP_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 + +# Ссылка для подключения (отображается в логах) +# https://t.me/proxy?server=&port=&secret= +``` + +### 5. Генерация ссылки для подключения + +Ссылка для Telegram вида: +``` +https://t.me/proxy?server=&port=&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 : \ + -e MTP_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` — для управления конфигом агента \ No newline at end of file