mtproto-docker-haproxy
Гайд как сбалансировать нагрузку на mtproto (гайд c faketls и без него)
0. Если нету докера ставим скриптом на все ноды
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
1. Поднимаем в докере MTProto
1.1 Генерация единого секрета, по которому будут подключатся клиенты
# на всякий случай ставим xxd не везде он есть
apt install xxd
head -c 16 /dev/urandom | xxd -ps
1.2 Запуск MTProto ноды (без faketls)
docker run -d --name mtproto-proxy --restart always \
-p 443:443 -p 8888:8888 \
-e SECRET=ТВОЙ_СЕКРЕТ_ИЗ_ШАГА_1.1 \
-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)
docker run --rm nineseconds/mtg:2 generate-secret --hex music.yandex.ru
1.3.2 Поднимаем MTProto
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: Внутренний порт статистики (опционально).
2. Установка и настройка HAProxy.
2.1 Установка
sudo apt update && sudo apt install haproxy -y
2.2 Базовая Настройка конфига c rounrobin (Советую использовать настройку в пункте 2.3)
- В конец файла
/etc/haproxy/haproxy.cfgдобавляем то что написано снизу, конечно же меняя ip нод на свои
то что нужно добавить в конец файла /etc/haproxy/haproxy.cfg:
frontend mtproto_in
bind *:443
mode tcp
option tcplog
default_backend mtproto_nodes
backend mtproto_nodes
mode tcp
balance roundrobin
# Проверка доступности порта (check)
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 Немного хитрая настройка rounrobin (советую испоьзовать ее)
frontend mtproto_in
bind *:443
mode tcp
option tcplog
default_backend mtproto_nodes
backend mtproto_nodes
mode tcp
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 Если у вас есть основные и бекап ноды и хотите сбалансировать нагрузку, то исользуйте данный конфиг
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
systemctl restart haproxy
3. Подключаемся
https://t.me/proxy?server=ip-server&port=443&secret=Секрет_который_вы_сгенерировали_ранее
хиттрое создание прокси для домена nextcloud.lord-mikrotik.ru docker run -d --name mtproto-proxy --restart unless-stopped -p 10443:443 nineseconds/mtg:2 simple-run -n 1.1.1.1 -i prefer-ipv4 0.0.0.0:443 ee89188e830faaf1e96d640163b51193946d757369632e79616e6465782e7275