Настройка ruantiblock для совместной работы с прокси сервером sing‑box - gSpotx2f/ruantiblock_openwrt GitHub Wiki
Прокси сервер sing-box поддерживает некоторые популярные протоколы проксификации и обфускации трафика (для обхода продвинутых методов блокировки средствами DPI), в том числе Shadowsocks, VLESS, VMess, Hysteria2, Trojan и прочие. Доступен в репозитории OpenWrt начиная с версии 23.05..
opkg update
opkg install sing-box
Для работы в связке с 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
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
Во-первых, необходимо создать новый неуправляемый сетевой интерфейс 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
В настройках ruantiblock включаем режим VPN, задаём VPN-интерфейс tun1
:
uci set ruantiblock.config.proxy_mode='2'
uci set ruantiblock.config.if_vpn='tun1'
uci commit ruantiblock
service ruantiblock restart
Здесь 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
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
В настройках 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