Table of Contents
- 1. Установка sing-box:
- 2.1 Конфигурация sing-box с tun интерфейсом:
- 2.2 Включение и запуск sing-box:
- 2.3 Настройка межсетевого экрана для режима tun:
- 2.4 Настройка ruantiblock в режиме VPN
- 3.1 Конфигурация sing-box с прозрачным прокси TProxy:
- 3.2 Включение и запуск sing-box:
- 3.3 Настройка ruantiblock в режиме прозрачного прокси:
Прокси сервер sing-box поддерживает некоторые популярные протоколы проксификации и обфускации трафика (для обхода продвинутых методов блокировки средствами DPI), в том числе Shadowsocks, VLESS, VMess, Hysteria2, Trojan и прочие. Доступен в репозитории OpenWrt начиная с версии 23.05..
1. Установка sing-box:
OpenWrt >= 25.12:
apk update
apk add sing-box
OpenWrt <= 24.10:
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'
Также, если необходимо, для пользовательских списков (на примере list1):
uci set ruantiblock.list1.u_proxy_mode='2'
uci set ruantiblock.list1.u_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'
Также, если необходимо, для пользовательских списков (на примере list1):
uci set ruantiblock.list1.u_proxy_mode='3'
uci set ruantiblock.list1.u_t_proxy_type='1'
uci set ruantiblock.list1.u_t_proxy_port_tcp='1100'
Применение настроек:
uci commit ruantiblock
service ruantiblock restart