From 6ba6a02ae913e00d3ebbcce6f0a2421277ddff01 Mon Sep 17 00:00:00 2001 From: admin1350 <147304099+admin1350@users.noreply.github.com> Date: Wed, 18 Mar 2026 01:13:41 +0300 Subject: [PATCH] add MTProto faketls in docker and haproxy --- README.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 47860bd..331438d 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,16 @@ # mtproto-docker-haproxy # Гайд как сбалансировать нагрузку на mtproto (гайд c faketls и без него) -## 0. Если нету докера ставим скприптом на все ноды +## 0. Если нету докера ставим скриптом на все ноды ```bash curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh ``` -## 1. Поднимаем в докере mtproto +--- +## 1. Поднимаем в докере MTProto ### 1.1 Генерация единого секрета, по которому будут подключатся клиенты ```bash +# на всякий случай ставим xxd не везде он есть +apt install xxd head -c 16 /dev/urandom | xxd -ps ``` ### 1.2 Запуск MTProto ноды (без faketls) @@ -18,6 +21,25 @@ docker run -d --name mtproto-proxy --restart always \ -e AES_PWD=$(openssl rand -hex 16) \ telegrammessenger/proxy:latest ``` +### 1.3 Запуск MTProto ноды c faketls +Описание как это работает: +Секрет для Fake-TLS состоит из трех частей: + * Префикс ee (включает режим Fake-TLS). + * Твой текущий секрет: ТВОЙ_СЕКРЕТ_ИЗ_ШАГА_1.3.1. +#### 1.3.1 Как сделать свой домен для Fake-TLS +Используем python (для примера взял `music.yandex.ru`) +```bash +docker run --rm nineseconds/mtg:2 generate-secret --hex music.yandex.ru +``` +#### 1.3.2 Поднимаем MTProto +```bash +docker run -d \ + --name mtproto-proxy \ + --restart unless-stopped \ + -p 443:443 \ + nineseconds/mtg:2 \ + simple-run -n 1.1.1.1 -i prefer-ipv4 0.0.0.0:443 секрет_из_пункта_1.3.1 +``` P.S: `-p 443:443` порт, на который будет стучатся балансировщик. -p 8888:8888: Внутренний порт статистики (опционально). --- @@ -26,7 +48,7 @@ P.S: `-p 443:443` порт, на который будет стучатся ба ```bash sudo apt update && sudo apt install haproxy -y ``` -### 2.2 Настройка конфига c rounrobin +### 2.2 Базовая Настройка конфига c rounrobin (Советую использовать настройку в пункте 2.3) * В конец файла `/etc/haproxy/haproxy.cfg ` добавляем то что написано снизу, конечно же меняя ip нод на свои то что нужно добавить в конец файла `/etc/haproxy/haproxy.cfg`: @@ -44,10 +66,8 @@ backend mtproto_nodes server node1 1.1.1.1:443 check server node2 2.2.2.2:443 check server node3 3.3.3.3:443 check - ``` -### 2.3 Если работает не очень стабильно, то можно использовать с leastconn. -сам файл будет выглядеть так: +### 2.3 Немного хитрая настройка rounrobin (советую испоьзовать ее) ```haproxy frontend mtproto_in bind *:443 @@ -57,9 +77,38 @@ frontend mtproto_in backend mtproto_nodes mode tcp - balance leastconn - option tcp-check - server node_local 1.1.1.1:443 check inter 2s rise 2 fall 3 + balance roundrobin + # Проверка доступности каждые 2 секунды (inter 2s) + # Если 2 проверки успешны — нода UP (rise 2) + # Если 3 проверки провалены — нода DOWN (fall 3) + server node1 1.1.1.1:443 check inter 2s rise 2 fall 3 server node2 2.2.2.2:443 check inter 2s rise 2 fall 3 server node3 3.3.3.3:443 check inter 2s rise 2 fall 3 ``` + +#### 2.3.1 Если у вас есть основные и бекап ноды и хотите сбалансировать нагрузку, то исользуйте данный конфиг +```haproxy +frontend mtproto_in + bind *:443 + mode tcp + option tcplog + default_backend mtproto_nodes + +backend mtproto_nodes + mode tcp + balance roundrobin + server node1 1.1.1.1:443 check weight 100 inter 2s rise 2 fall 3 + server node2 2.2.2.2:443 check weight 100 inter 2s rise 2 fall 3 + #Резервная нода, начнет работать когда упадут 1 и 2. + server node3 3.3.3.3:443 check backup inter 2s rise 2 fall 3 +``` +p.s-2. bind *:443 тут вы указываете порт который буде открываться как раз с сервера на котором haproxy + +### 2.4 Перезапускаете HAProxy +```bash +systemctl restart haproxy +``` +--- + +### 3. Подключаемся +https://t.me/proxy?server=ip-server&port=443&secret=Секрет_который_вы_сгенерировали_ранее