Поиск
Показаны результаты для тегов 'haproxy'.
Найдено 1 результат
-
Всем привет! Пройдемся по теории. Один из основных способов маскировки, это использование 443 порта и использование Reality Но, чтобы не светить ваш сервер, к которому подключается клиент, он тоже должен работать на этом порту. А еще, чтобы и ваша панель и страница подписок - тоже должны быть на 443 порту. А самое главное, в рамках одного сервера, вы можете разделить по поддоменам панель и страницу подписки. Перейдем к делу. С этой задачей, удобно для нас всех поможет справиться haproxy. Это своеобразные аналог nginx. Но по мне, немного попроще. Задача его обрабатывать внутренние порты, и с одного внешнего (443) перенаправлять на внутренние в соответствии с тем, что требует входящее соединение. На самом деле, это лучше делать этапом 0 в создании сервера на Marzban. 1. Установим haproxy. apt install -y haproxy 2. Сразу настроим конфиг: nano /etc/haproxy/haproxy.cfg 3. По умолчанию видим такой набор: Но нам этого мало. 3.1. Добавляем в конец документа: listen front mode tcp bind *:443 tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } use_backend panel if { req.ssl_sni -m end panel.domain.com } use_backend sub if { req.ssl_sni -i end sub.other-domain.com } use_backend reality if { req.ssl_sni -m end discord.org } default_backend reality backend panel mode tcp server srv1 127.0.0.1:10000 backend sub mode tcp server srv1 127.0.0.1:10000 backend reality mode tcp server srv1 127.0.0.1:12000 send-proxy Сразу давайте разберемся в понятиях этого содержимого 3.2. Если у вас каждая нода - как отдельный инбаунд, то создавать придется несколько backend и frontend, например так. А еще по той простой причине что для каждого сервера нужно искать свой SNI (я писал об этом в прошлой статье) use_backend reality-1 if { req.ssl_sni -i end telegram.org } use_backend reality-2 if { req.ssl_sni -i end discordapp.com } use_backend reality-3 if { req.ssl_sni -i end cdn.debian.org} и вторая часть: backend reality-1 mode tcp server srv1 127.0.0.1:12001 send-proxy-v2 tfo backend reality-2 mode tcp server srv1 127.0.0.1:12002 send-proxy-v2 tfo backend reality-3 mode tcp server srv1 127.0.0.1:12003 send-proxy-v2 tfo 3.3. Проброс сертификатов. Чтобы наши сертификаты, пробрасывались ко всем соединениям, нам нужно указать корректные пути: ca-base /var/lib/marzban/certs/fullchain.pem crt-base /var/lib/marzban/certs/key.pem 3.3.1. А что если у вас другой домен 2-го уровня для вашей сабки? Да ничего страшного, мы пробрасываем для него отдельный путь для сертификатов на фронтенд: frontend front_sub bind *:443 ssl crt-list /root/.acme.sh/sub_other_example.com/sub_other_domain.com.pem mode tcp При условии что мы указали примерно так: use_backend sub if { req.ssl_sni -i end sub.other-domain.com } Сохранили документ. Перезапустили сервис: systemctl restart haproxy 4. Настройка Marzban .env nano /opt/marzban/.env Опишу ключевые моменты. 4.1. Меняем адрес прослушивания. Почему это важно? Когда параметр UVICORN_HOST указан со значением 0.0.0.0 - это значит, что он будет слушать любое обращение по нему. Поэтому мы указываем только слушать внутренний порт, который уже указывали в haproxy Указываем соответственно и наш порт. из конфига выше. Не забудьте в контейнер прогрузить свои сертификаты: UVICORN_SSL_CERTFILE = "/var/lib/marzban/certs/fullchain.pem" UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/key.pem" после изменений, делаем: marzban restart -n 5. Настройка Xray Config В принципе, мы меняем только порт и указываем конкретный listen. Остальные параметры могут остаться без изменений. Учтите, что ваши параметры reality должны совпадать с haproxy { "tag": "VLESS_TCP_REALITY", "listen": "127.0.0.1", "port": 12000, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "tcpSettings": { "acceptProxyProtocol": true }, "security": "reality", "realitySettings": { "show": false, "dest": "discord.org:443", "xver": 0, "serverNames": [ "discord.org" ], "privateKey": "XYX6m0Mj3faUstoEm5NBdegeXkHG6ZB78xzBv2n3ZUA", "shortIds": [ "6ba85179e30d4fc1" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } } А теперь главный момент! Заходим в настройки хоста, и принудительно прописываем 443 порт! на этом все. Аналогичный конфиг вы должны будет поднять на каждой используемой NODE (узле) Если вы используете только TLS с CDN, например vless/vmess/trojan WebSocket + CDN, то вам нужно будет использовать опцию fallback xray-core (через создание fallback инбаунда) Если нужна будет статья на эту тему, можно будет написать, но позже. Но нужно понимать, что fallback будет требовать дополнительных ресурсов!