Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
router:x-ray [2025/12/16 21:34] – создано mirocowrouter:x-ray [2026/03/26 10:44] (текущий) mirocow
Строка 1: Строка 1:
-{{tag>[router]}}+{{tag>[router vless proxy xrayui xray]}}
  
-====== XRAYUI: плагин XRAY-Core для роутеров ASUS ======+====== XRAY Server / XRAYUI ======
  
 +  * https://github.com/DanielLavrushin/asuswrt-merlin-xrayui - Клиент на роутер
 +  * https://github.com/XTLS/Xray-core - Само приложение Xray 
 +
 +====== asuswrt-merlin-xrayui / Client ======
 +
 +  * [[xrayui]]
 +
 +==== Установка ====
  
 <code bash> <code bash>
 $ wget -O /tmp/asuswrt-merlin-xrayui.tar.gz https://github.com/DanielLavrushin/asuswrt-merlin-xrayui/releases/latest/download/asuswrt-merlin-xrayui.tar.gz && rm -rf /jffs/addons/xrayui && tar -xzf /tmp/asuswrt-merlin-xrayui.tar.gz -C /jffs/addons && mv /jffs/addons/xrayui/xrayui /jffs/scripts/xrayui && chmod 0777 /jffs/scripts/xrayui && sh /jffs/scripts/xrayui install $ wget -O /tmp/asuswrt-merlin-xrayui.tar.gz https://github.com/DanielLavrushin/asuswrt-merlin-xrayui/releases/latest/download/asuswrt-merlin-xrayui.tar.gz && rm -rf /jffs/addons/xrayui && tar -xzf /tmp/asuswrt-merlin-xrayui.tar.gz -C /jffs/addons && mv /jffs/addons/xrayui/xrayui /jffs/scripts/xrayui && chmod 0777 /jffs/scripts/xrayui && sh /jffs/scripts/xrayui install
 </code> </code>
 +
 +=== Ошибка ===
 +
 +<code>
 +Entware is not installed or opkg binary is not accessible.
 +Please install Entware first: https://github.com/Entware/Entware/wiki/Install-on-ASUSWRT
 +</code>
 +
 +=== Entware ===
 +
 +<code bash>
 +$ amtm
 +i
 +ep
 +</code>
 +
 +==== Удаление ====
 +
 +<code bash>
 +$ /jffs/scripts/xrayui uninstall
 +</code>
 +
 +==== Обновление ====
 +
 +<code bash>
 +$ wget -O /tmp/asuswrt-merlin-xrayui.tar.gz https://github.com/DanielLavrushin/asuswrt-merlin-xrayui/releases/latest/download/asuswrt-merlin-xrayui.tar.gz && rm -rf /jffs/addons/xrayui && tar -xzf /tmp/asuswrt-merlin-xrayui.tar.gz -C /jffs/addons && mv /jffs/addons/xrayui/xrayui /jffs/scripts/xrayui && chmod 0777 /jffs/scripts/xrayui && sh /jffs/scripts/xrayui update
 +</code>
 +
 +===== 3X-UI / Panel / Server =====
 +
 +  * https://github.com/AghayeCoder/tx-ui
 +
 +<code bash>
 +$ openssl req -x509 -keyout /etc/ssl/certs/3x-ui.key -out /etc/ssl/certs/3x-ui.pem -newkey rsa:4096 -sha256 -days 3650 -nodes -new
 +$ openssl x509 -noout -sha256 -fingerprint -in /etc/ssl/certs/3x-ui.pem
 +</code>
 +
 +<code bash>
 +$ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
 +</code>
 +
 +==== Настройки / Подключения ====
 +
 +
 +=== Схема: Пользователь -> Nginx (443 порт) -> Xray ===
 +
 +Это классическая схема «проксирование через WebSocket + TLS» (часто называемая WS + TLS или VLESS+WS+TLS).
 +
 +Как это работает:
 +
 +  * Пользователь подключается к вашему домену (например, yourdomain.com) по стандартному HTTPS-порту 443.
 +  * Nginx, получив запрос, проверяет его.
 +  * Ключевой момент: 
 +  * Вы настраиваете в nginx правило, чтобы запросы, приходящие на определённый путь (например, **/graphql, /ray, /ws**), пересылались (проксировались) на локальный порт, где работает Xray (например, 127.0.0.1:10000).
 +  * Обычный веб-трафик (запрос к сайту) идёт к вашему сайту или отдаёт fake page, а трафик по секретному пути — к Xray.
 +  * Со стороны интернета весь трафик выглядит как обычный HTTPS, что обеспечивает высокую степень маскировки и обхода блокировок.
 +
 +Зачем это нужно:
 +
 +  * Маскировка: Трафик Xray выглядит как обычный веб-серфинг.
 +  * Надёжность: Используется порт 443, который почти всегда открыт.
 +  * Безопасность: TLS-шифрование завершается на nginx.
 +  * Разделение: На одном IP-адресе можно одновременно держать и сайт, и прокси-сервис.
 +
 +=== Схема: Пользователь -> Nginx (2053 порт) -> Панель 3x-ui ===
 +
 +
 +Это схема для доступа к веб-панели управления Xray.
 +
 +Как это работает:
 +
 +  * Панель 3x-ui по умолчанию слушает свой порт (например, 2053) и отдаёт веб-интерфейс.
 +  * Вы НЕ открываете порт 2053 напрямую в фаерволе. Вместо этого вы настраиваете nginx как обратный прокси.
 +  * Nginx слушает порт 2053 на внешнем интерфейсе, принимает входящие соединения и передаёт их на внутренний порт панели 3x-ui (например, 127.0.0.1:2053).
 +  * Важное преимущество: Вы можете легко добавить к этому соединению аутентификацию (логин/пароль) на уровне nginx (auth_basic) или даже TLS-сертификат, чтобы шифровать доступ к самой панели, что сильно повышает безопасность.
 +
 +==== Протоколы ====
 +
 +^ Протокол     ^ Транспорт                           ^ Модуль nginx                             ^ Особенности настройки                                                                ^
 +| **VLESS**        | TCP‑TLS, WS‑TLS, gRPC‑TLS, H2‑TLS   | http, stream (для TCP)                  | Полная поддержка через proxy_pass (WS) или grpc_pass (gRPC).                         |
 +| **VMess**        | TCP‑TLS, WS‑TLS, gRPC‑TLS, H2‑TLS   | http, stream (для TCP)                  | Аналогично VLESS, требует правильных заголовков и пути.                              |
 +| **Trojan**       | TCP‑TLS, WS‑TLS, gRPC‑TLS, H2‑TLS | http, stream (для TCP)                  | Часто используется как fallback‑протокол; проксируется как обычный TLS‑трафик.       |
 +| **Shadowsocks**  | TCP‑TLS, WS‑TLS, gRPC‑TLS (с obfs) | http (если с TLS), stream (чистый TCP)  | Без obfs легко обнаруживается; в режиме TLS настраивается как обычный HTTPS‑прокси.  |
 +| **mKCP**         | (KCP over UDP) UDP | stream (с указанием udp)                | Требует модуля ngx_stream_proxy_module с поддержкой UDP.                             |
 +| **HTTP**         | Upgrade (WebSocket) | WS‑TLS http                             | Стандартная настройка WebSocket‑прокси с заголовками Upgrade, Connection.            |
 +| **xHTTP**        | (HTTP/2, HTTP/3) | H2‑TLS, QUIC                            | http (HTTP/2), экспериментальный модуль http3                                        |
 +
 +==== Настройки ====
 +
 +=== nginx ===
 +
 +<code>
 +    location /grpc {
 +       # 1. Безопасность и основные настройки
 +       limit_except GET POST { deny all; } # Разрешаем только методы gRPC
 +       client_max_body_size 0;
 +    
 +       # 2. Критически важные заголовки для gRPC
 +       grpc_set_header Content-Type application/grpc;
 +       grpc_set_header TE trailers; # Обязательно для gRPC
 +       grpc_set_header Host $host;
 +       grpc_set_header X-Real-IP $remote_addr;
 +       grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +       grpc_set_header X-Forwarded-Proto $scheme;
 +    
 +       # 3. Оптимизация таймаутов (более реалистичные значения)
 +       grpc_read_timeout 30m; # Для долгих потоков
 +       grpc_send_timeout 30m;
 +       grpc_connect_timeout 5s; # Быстрое отсечение недоступных серверов
 +    
 +       # 4. Оптимизация буферизации и производительности
 +       grpc_buffer_size 128k; # Увеличиваем буфер для gRPC потоков
 +       grpc_next_upstream error timeout http_502 http_503;
 +       grpc_next_upstream_timeout 0;
 +       grpc_next_upstream_tries 2;
 +    
 +       # 5. keepalive для upstream соединений (важно для Docker!)
 +       set $upstream_grpc proxy-grpc;
 +       grpc_pass grpc://$upstream_grpc;
 +    
 +       # 6. Для отладки (можно отключить в проде)
 +       # access_log /var/log/nginx/grpc_access.log upstream_time;
 +       # error_log /var/log/nginx/grpc_error.log debug;
 +    }
 +</code>
 +
 +<code>
 +    # Xray grpc
 +    location /grpc {
 +        # Защита от больших тел запросов
 +        client_max_body_size 0;
 +
 +        # Настройки таймаутов для gRPC (чтобы не рвалось соединение)
 +        grpc_read_timeout 1h;
 +        grpc_send_timeout 1h;
 +        client_body_timeout 1h;
 +
 +        # Обязательные заголовки
 +        grpc_set_header X-Real-IP $remote_addr;
 +        grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +
 +        # Пробрасываем на апстрим
 +        grpc_pass grpc://proxy-grpc;
 +    }
 +</code>
 +
 +==== Обязательные настройки ====
 +
 +  * Отключает Flow Cache и NAT Acceleration
 +  * Корректно перезапускает сетевой стек
 +  * Безопасен для запуска при старте
 +
 +<code bash>
 +$ cat > /jffs/scripts/init-start << 'EOF'
 +#!/bin/sh
 +
 +# Отключаем аппаратное ускорение (Flow Cache / CTF) на Broadcom-роутерах
 +# Необходимо при использовании Xray / TPROXY / iptables-перехвата трафика
 +
 +logger -t "DISABLE-HW-ACC" "Отключение аппаратного ускорения (Flow Cache и NAT Acceleration)..."
 +
 +# Отключаем Cut-Through Forwarding (Flow Cache)
 +nvram set ctf_disable=1
 +
 +# Отключаем fast NAT forwarding
 +nvram set nf_nat_fastforward=0
 +
 +# Сохраняем настройки
 +nvram commit
 +
 +# Перезапускаем firewall (вместо полной перезагрузки)
 +service restart_firewall
 +
 +logger -t "DISABLE-HW-ACC" "Аппаратное ускорение отключено. Сетевой стек перезапущен."
 +EOF
 +
 +$ chmod +x /jffs/scripts/init-start
 +</code>
 +
 +<code bash>
 +$ cat > /jffs/scripts/nat-start << 'EOF'
 +#!/bin/sh
 +
 +# Ждём, пока Xray UI применит свои правила (обычно 5–10 секунд после старта)
 +sleep 10
 +
 +# Удаляем старые правила (на случай повторного запуска)
 +iptables -t mangle -D PREROUTING -s 192.168.0.0/16 -j RETURN 2>/dev/null
 +iptables -t mangle -D PREROUTING -s 10.0.0.0/8 -j RETURN 2>/dev/null
 +iptables -t mangle -D PREROUTING -s 172.16.0.0/12 -j RETURN 2>/dev/null
 +iptables -t mangle -D PREROUTING -d 192.168.0.0/16 -j RETURN 2>/dev/null
 +iptables -t mangle -D PREROUTING -d 10.0.0.0/8 -j RETURN 2>/dev/null
 +iptables -t mangle -D PREROUTING -d 172.16.0.0/12 -j RETURN 2>/dev/null
 +iptables -t mangle -D PREROUTING -d 127.0.0.0/8 -j RETURN 2>/dev/null
 +
 +# Вставляем исключения В САМОЕ НАЧАЛО цепочки mangle
 +iptables -t mangle -I PREROUTING 1 -s 192.168.0.0/16 -j RETURN
 +iptables -t mangle -I PREROUTING 1 -s 10.0.0.0/8 -j RETURN
 +iptables -t mangle -I PREROUTING 1 -s 172.16.0.0/12 -j RETURN
 +iptables -t mangle -I PREROUTING 1 -d 192.168.0.0/16 -j RETURN
 +iptables -t mangle -I PREROUTING 1 -d 10.0.0.0/8 -j RETURN
 +iptables -t mangle -I PREROUTING 1 -d 172.16.0.0/12 -j RETURN
 +iptables -t mangle -I PREROUTING 1 -d 127.0.0.0/8 -j RETURN
 +
 +# Логируем
 +logger -t "XRAY-FIX" "Локальные сети исключены из TPROXY через iptables (nat-start)."
 +EOF
 +
 +$ chmod +x /jffs/scripts/nat-start
 +$ iptables -t mangle -L PREROUTING -n --line-numbers
 +</code>
 +