Настройка и установка mtproto.zig с шифрованием и обходом DPI.
Вариант А — конечный MTProto-сервер с нуля
apt update apt install -y curl
curl -fsSL https://raw.githubusercontent.com/sleep3r/mtproto.zig/main/deploy/bootstrap.sh | sudo bash
Потом устанавливаем сам прокси:
sudo mtbuddy install --port 443 --domain rutube.ru --middle-proxy --yes
Официальный README указывает установку через bootstrap.sh, затем mtbuddy install; в конце mtbuddy печатает готовую tg://-ссылку. Там же указано, что --domain вшивается в ссылки, поэтому его лучше выбирать один раз. (ссылка на репу GitHub)
sudo mtbuddy status sudo mtbuddy config validate sudo mtbuddy config doctor --network sudo systemctl status mtproto-proxy --no-pager
Получить актуальную ссылку можно так:
sudo mtbuddy links
nano /opt/mtproto-proxy/config.toml
Минимально нормальные параметры:
[server] port = 443 public_ip = "example.com" #ваш домен, подставляется вместо IP public_port = 443 max_connections = 800 workers = 0 idle_timeout_sec = 120 handshake_timeout_sec = 15 handshake_flood_guard_enabled = false [upstream] type = "auto" #direct нужен, если поднято соединение awg и сервер не может достучаться до DC Telegram [censorship] tls_domain = "rutube.ru" #после установки менять запрещено, иначе перетрутся ссылки mask = true desync = true drs = true fast_mode = true mask_port = 8443 [general] use_middle_proxy = true [access.users] user = "ТВОЙ_32_HEX_SECRET"
sudo mtbuddy config validate sudo systemctl restart mtproto-proxy sudo mtbuddy links
Вариант Б — front-прокси перед MTProto
Данный вариант будет предпочтительней, так как он позволяет налету менять IP в случае их бана со стороны РКН.
Telegram-клиент
↓
front VPS с чистым IP :443
↓
backend MTProto-сервер :443
↓
Telegram DCapt update apt install -y haproxy
nano /etc/haproxy/haproxy.cfg
global
log /dev/log local0
maxconn 50000
daemon
defaults
log global
mode tcp
option tcplog
timeout connect 5s
timeout client 5m
timeout server 5m
frontend mtproto_in
bind *:443
default_backend mtproto_backend
backend mtproto_backend
server mtproto IP_конечного_сервера:443 checkhaproxy -c -f /etc/haproxy/haproxy.cfg
systemctl restart haproxy systemctl enable haproxy ss -ltnp | grep ':443'
DNS
Создаёшь новый поддомен, например:
mtp2.example.ru → IP_FRONT_СЕРВЕРА
На backend-сервере 130.49.219.132 в /opt/mtproto-proxy/config.toml ставишь:
[server] public_ip = "mtp2.example.ru" public_port = 443
sudo mtbuddy config validate sudo systemctl restart mtproto-proxy sudo mtbuddy links
Пользователям отдаёшь новую ссылку из mtbuddy links.
В дополнение: настройка nfqws
Он делает TCP desync — fake packets + TTL-limited splits против stateful DPI. В README mtproto.zig он отдельно указан как один из DPI-модулей, а команда для донастройки после установки — sudo mtbuddy setup nfqws.
sudo mtbuddy setup nfqws sudo mtbuddy setup recovery sudo mtbuddy config doctor --network sudo systemctl restart mtproto-proxy
sudo mtbuddy status systemctl list-units | grep -Ei 'nfqws|zapret|mtproto|recovery' systemctl list-timers | grep -Ei 'nfqws|zapret|mtproto|recovery'
Дальше проверь, появились ли правила в firewall:
sudo iptables -t mangle -S | grep -Ei 'NFQUEUE|nfqws|443|tcp' sudo iptables -t nat -S | grep -Ei '443|nfqws' sudo nft list ruleset | grep -Ei 'NFQUEUE|nfqws|443|queue'
sudo journalctl -u mtproto-proxy -f
sudo tcpdump -ni any tcp port 443