Настройка ruantiblock для совместной работы с прокси сервером sing‑box - gSpotx2f/ruantiblock_openwrt GitHub Wiki

Прокси сервер sing-box поддерживает некоторые популярные протоколы проксификации и обфускации трафика (для обхода продвинутых методов блокировки средствами DPI), в том числе Shadowsocks, VLESS, VMess, Hysteria2, Trojan и прочие. Доступен в репозитории OpenWrt начиная с версии 23.05..

1. Установка sing-box:

    opkg update
    opkg install sing-box

2.1 Конфигурация sing-box с tun интерфейсом:

Для работы в связке с ruantiblock необходимо задать в настройках sing-box создание виртуального сетевого интерфейса для локальных клиентов в секции inbounds. Этот тип подключения, по сути, аналогичен VPN туннелю 3-го уровня (OpenVPN, Wireguard, PPTP и пр.). Соответственно, ruantiblock будет настроен в режиме VPN с перенаправлением трафика заблокированных хостов на интерфейс sing-box.

  • Бэкап стандартного конфига:

    cp /etc/sing-box/config.json /etc/sing-box/config.json.bak
    
  • Создание собственного конфига /etc/sing-box/config.json:

    {
      "log": {
        "level": "warn"
      },
      "inbounds": [
        {
          "type": "tun",
          "tag": "tun-in",
          "interface_name": "tun1",
          "inet4_address": "172.19.0.1/30",
          "auto_route": false,
          "strict_route": false,
          "sniff": true,
          "sniff_override_destination": true
        }
      ],
      "outbounds": [
        {
          "type": "shadowsocks",
          "tag": "ss-out",
          "server": "<SERVER>",
          "server_port": <PORT>,
          "method": "<METHOD>",
          "password": "<PASSWORD>"
        }
      ],
      "route": {
        "auto_detect_interface": true
      }
    }
    

    В этом примере важна секция inbounds с блоком типа tun ("type": "tun"). Этот блок отвечает за поднятие виртуального сетевого интерфейса tun1, на который sing-box будет принимать пакеты локальных клиентов. Секция outbounds определяет настройки для соединения с удалённым прокси сервером, через который пойдёт трафик до заблокированных сайтов. В примере - секция для протокола Shadowsocks (подстановки <SERVER>, <PORT>, <METHOD>, <PASSWORD> необходимо заменить соответствующими параметрами вашего shadowsocks сервера). Примеры секций для других протоколов можно найти в документации sing-box.

  • Проверка созданного конфига:

    sing-box --config=/etc/sing-box/config.json check
    

2.2 Включение и запуск sing-box:

    uci set sing-box.main.enabled="1"
    uci set sing-box.main.user="root"
    uci commit sing-box
    service sing-box enable
    service sing-box start

2.3 Настройка межсетевого экрана для режима tun:

Во-первых, необходимо создать новый неуправляемый сетевой интерфейс OpenWrt (SING_BOX_TUN) и связать его с виртуальным сетевым интерфейсом sing-box (tun1, который был задан в конфиге ранее):

    uci batch << EOI
    set network.SING_BOX_TUN='interface'
    set network.SING_BOX_TUN.proto='none'
    set network.SING_BOX_TUN.device='tun1'
    set network.SING_BOX_TUN.defaultroute='0'
    set network.SING_BOX_TUN.delegate='0'
    set network.SING_BOX_TUN.auto='1'
    EOI
    uci commit network
    service network restart

Во-вторых, добавить новую зону межсетевого экрана sing_box для интерфейса SING_BOX_TUN (разрешить входящий и исходящий трафик, маскарадинг и перенаправление из зоны lan):

    section_name=$(uci add firewall zone)
    uci batch << EOI
    set firewall.${section_name}.name='sing_box'
    set firewall.${section_name}.input='ACCEPT'
    set firewall.${section_name}.output='ACCEPT'
    set firewall.${section_name}.forward='ACCEPT'
    set firewall.${section_name}.masq='1'
    add_list firewall.${section_name}.network='SING_BOX_TUN'
    EOI
    section_name=$(uci add firewall forwarding)
    uci batch << EOI
    set firewall.${section_name}.src='lan'
    set firewall.${section_name}.dest='sing_box'
    EOI
    uci commit firewall
    service firewall restart

2.4 Настройка ruantiblock в режиме VPN

В настройках ruantiblock включаем режим VPN, задаём VPN-интерфейс tun1:

    uci set ruantiblock.config.proxy_mode='2'
    uci set ruantiblock.config.if_vpn='tun1'
    uci commit ruantiblock
    service ruantiblock restart

3.1 Конфигурация sing-box с прозрачным прокси TProxy:

Здесь sing-box будет принимать соединения в качестве локального прозрачного прокси. Ruantiblock будет настроен в режиме прозрачного прокси для заворачивания трафика заблокированных сайтов в sing-box.

  • Бэкап стандартного конфига:

    cp /etc/sing-box/config.json /etc/sing-box/config.json.bak
    
  • Создание собственного конфига /etc/sing-box/config.json:

    {
      "log": {
        "level": "warn"
      },
      "inbounds": [
        {
          "type": "tproxy",
          "tag": "tproxy-in",
          "listen": "0.0.0.0",
          "listen_port": 1100,
          "sniff": false
        },
      ],
      "outbounds": [
        {
          "type": "shadowsocks",
          "tag": "ss-out",
          "server": "<SERVER>",
          "server_port": <PORT>,
          "method": "<METHOD>",
          "password": "<PASSWORD>"
        }
      ],
      "route": {
        "auto_detect_interface": true
      }
    }
    

    Секция inbounds с блоком типа tproxy ("type": "tproxy") определяет параметры прозоачного прокси для входящих соединений. Прокси должен принимать соединения на всех адресах ("listen": "0.0.0.0"), это необходимо для приёма соединений как удалённых хостов из домашней сети, так и локальных приложений самого роутера. Параметры секции outbounds аналогичны описанным в разделе для tun конфигурации выше.

  • Проверка созданного конфига:

    sing-box --config=/etc/sing-box/config.json check
    

3.2 Включение и запуск sing-box:

    uci set sing-box.main.enabled="1"
    uci set sing-box.main.user="root"
    uci commit sing-box
    service sing-box enable
    service sing-box start

3.3 Настройка ruantiblock в режиме прозрачного прокси:

В настройках ruantiblock включаем режим прозрачного прокси, задаём тип прокси 1 (tproxy) и TCP-порт прокси:

    uci set ruantiblock.config.proxy_mode='3'
    uci set ruantiblock.config.t_proxy_type='1'
    uci set ruantiblock.config.t_proxy_port_tcp '1100'
    uci commit ruantiblock
    service ruantiblock restart
⚠️ **GitHub.com Fallback** ⚠️