В данном гайде будем устанавливать пакет sing-box на OpenWRT на примере стабильной 22.03.5. Рекомендуется роутер минимум с 128 МБ RAM (256 предпочтительно) и памятью более 16 Мб, так же будет описан способ установки sing-box в оперативную память (подходит для устройств с малым количеством ПЗУ <16 Мб)
Sing-Box — это бесплатная прокси-платформа с открытым исходным кодом, которая позволяет пользователям обходить интернет-цензуру и получать доступ к заблокированным веб-сайтам. Это альтернатива V2ray и XRAY. Его можно использовать с различными клиентами V2Ray на таких платформах, как Windows, macOS, Linux, Android и iOS.
Помимо поддержки протоколов Shadowsocks, Trojan, Vmess и Socks, он также поддерживает новые протоколы, такие как ShadowTLS, Hysteria и NaiveProxy.
Руководство будет включать:
Установку из репозитория
Настройку sing-box для shadowsocks (на примере Outline VPN)
Установку sing-box в оперативную память и настройку автозапуска
1. Установка sing-box
Для версии OpenWRT 22.03.5 необходимо добавить репозиторий командой:
sed -i 's/option check_signature/# option check_signature/g' /etc/opkg.conf
echo "src/gz custom_generic https://raw.githubusercontent.com/lrdrdn/my-opkg-repo/main/generic" >> /etc/opkg/customfeeds.conf
echo "src/gz custom_arch https://raw.githubusercontent.com/lrdrdn/my-opkg-repo/main/$(grep "OPENWRT_ARCH" /etc/os-release | awk -F '"' '{print $2}')" >> /etc/opkg/customfeeds.conf
На версии SNAPSHOT sing-box есть в стандартном репозитории OpenWRT.
Обновляем список пакетов:
opkg update
Далее устанавливаем необходимые для работы sing-box модули ядра и пакет совместимости с iptables:
opkg install kmod-inet-diag kmod-netlink-diag kmod-tun iptables-nft
Ждём завершения установки, пакеты заняли около 1Мб памяти.
Далее переходим к установке sing-box
opkg install sing-box
Пакет занимает около 10Мб, поэтому установить его на устройства с 16 Мб ПЗУ не удастся без дополнительных манипуляций (об этом в п.3 этой статьи).
Если пакет успешно установлен, переходим к настройке соединения, если нет - переходим к п.3.
2. Настройка sing-box для shadowsocks
Далее переходим к файлу конфигурации, по умолчанию это /etc/sing-box/config.json, но при установке доступен /etc/sing-box/config.json.example
/etc/sing-box/config.json нужно создать самостоятельно.
На сайте проекта sing-box и vpnrouter.homes доступны многочисленные примеры конфигураций для различных протоколов.
Я приведу пример файла config.json для настройки Outline VPN (выпуск ключей и их расшифровку на пароль и тип шифрования из формата base64 я рассматривал здесь).
Пример config.json:
{
"log": {
"disabled": false,
"level": "warn",
"output": "/tmp/sing-box.log",
"timestamp": true
},
"dns": {
"servers": [{
"tag": "local",
"address": "217.218.127.127",
"detour": "direct"
},
{
"tag": "google",
"address": "udp://8.8.8.8"
}, {
"tag": "block",
"address": "rcode://success"
}
],
"rules": [{
"geosite": "category-ads-all",
"server": "block"
}, {
"domain_suffix": ".ir",
"server": "local"
}],
"final": "google",
"strategy": "prefer_ipv4",
"disable_cache": false,
"disable_expire": false
},
"inbounds": [{
"type": "mixed",
"tag": "mixed-in",
"listen": "127.0.0.1",
"listen_port": 1080,
"tcp_fast_open": true,
"sniff": true,
"sniff_override_destination": true,
"set_system_proxy": false
}, {
"type": "tun",
"tag": "tun-in",
"interface_name": "tun0",
"inet4_address": "172.19.0.1/30",
"inet6_address": "fdfe:dcba:9876::1/128",
"stack": "gvisor",
"mtu": 9000,
"auto_route": true,
"strict_route": false,
"endpoint_independent_nat": false,
"sniff": true,
"sniff_override_destination": true
}],
"outbounds": [{
"type": "shadowsocks",
"tag": "shadowsocks-out",
"server": "$SHADOWSOCKS-SERVER-IP",
"server_port": $PORT,
"method": "chacha20-ietf-poly1305",
"password": "$PASSWORD"
},
{
"type": "direct",
"tag": "direct"
}, {
"type": "block",
"tag": "block"
},
{
"type": "dns",
"tag": "dns-out"
}
],
"route": {
"geoip": {
"download_url": "https://github.com/SagerNet/sing-geoip/releases/latest/download/geoip.db",
"download_detour": "direct"
},
"geosite": {
"download_url": "https://github.com/SagerNet/sing-geosite/releases/latest/download/geosite.db",
"download_detour": "direct"
},
"rules": [{
"protocol": "dns",
"outbound": "dns-out"
},
{
"geoip": "private",
"outbound": "direct"
},
{
"geosite": "category-ads-all",
"outbound": "block"
},
{
"domain_keyword": [
"yektanet",
"adengine.telewebion.com"
],
"outbound": "block"
},
{
"domain_suffix": [
".ir",
"aparat.com",
"digikala.com",
"telewebion.com",
"varzesh3.com"
],
"outbound": "direct"
},
{
"port": [
22,
3389
],
"outbound": "direct"
}
],
"final": "shadowsocks-out",
"auto_detect_interface": true
}
}
Конфигурация пишет в лог /tmp/sing-box.log предупреждения и ошибки, поднимает socks proxy на порту 1080, поднимает туннель tun0 с помощью kmod-tun, параметр "auto_route": true определяет shadowsocks как маршрут по умолчанию, замените значение на false если это не требуется.
В раздел outbounds нужно ввести параметры вашего прокси: IP, порт и пароль (в случае использования иного shadowsocks сервера, проверьте правильность выбранного шифрования).
Далее проверяем работоспособность конфигурации:
sing-box check -c /etc/sing-box/config.json
Если всё правильно команда не выдаст ошибок.
Далее проверяем работу прокси:
sing-box run -c /etc/sing-box/config.json
Если параметр "auto_route": true то работоспособность можно проверить открыв любой сайт определяющий ваш IP, либо в параллельной вкладке запускаем команду:
wget -qO- http://ipecho.net/plain | xargs echo
Если всё работает команда выдаст IP вашего прокси.
Если "auto_route": false, добавьте маршрут для проверки соединения и запустите проверку:
ip route add 34.160.111.0/24 dev tun0
wget -qO- http://ipecho.net/plain | xargs echo
После чего маршрут можно удалить:
ip route del 34.160.111.0/24
Если всё сработало, можем добавить sing-box в автозапуск, для этого вводим команды:
/etc/init.d/sing-box enable
/etc/init.d/sing-box start
На этом настройка sing-box завершена, для настройки точечного обхода блокировок рекомендую статьи:
Точечный обход блокировок на роутере OpenWrt c помощью BGP / Хабр (habr.com) С помощью BGP (bird2).
Точечный обход блокировок PKH на роутере с OpenWrt с помощью WireGuard и DNSCrypt / Хабр (habr.com) (путём скачивания списков и настройкой маршрутов в iptables, nftables).
3. Установка sing-box в оперативную память
Если установить sing-box в ПЗУ не удалось (а это вполне вероятный сценарий для большинства роутеров среднего ценового сегмента), возможно произвести установку в ОЗУ и подгружать пакет при запуске устройства.
Установленный и запущенный sing-box занимает около 35 Мб ОЗУ.
Для начала нам необходимо установить в ПЗУ модули ядра и iptables-nft
opkg install kmod-inet-diag kmod-netlink-diag kmod-tun iptables-nft
Это должно занять около 1Мб памяти, после чего установим sing-box в ОЗУ:
opkg install sing-box -d ram
Если всё успешно установилось, далее нужно будет создать папку конфигурации:
mkdir /etc/sing-box
После чего помещаете ваш файл config.json из п.2 в /etc/sing-box/config.json
Проверяем работу прокси (более подробно в п.2):
/tmp/usr/bin/sing-box run -c /etc/sing-box/config.json
Если всё заработало, далее настраиваем автозапуск sing-box.
Для автоматической установки пакета при загрузке системы в файл /etc/rc.local добавляем строки перед exit 0
opkg update
opkg install sing-box -d ram
exit 0
при помощи текстового редактора, либо через Luci
Сохраняем изменения и создаём службу автозапуска для sing-box.
Создаём файл /etc/init.d/sing-box следующего содержания:
#!/bin/sh /etc/rc.common
#
# Copyright (C) 2022 by nekohasekai <contact-sagernet@sekai.icu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
START=99
USE_PROCD=1
##### ONLY CHANGE THIS BLOCK ######
PROG=/tmp/usr/bin/sing-box # Положение sing-box в ОЗУ
RES_DIR=/etc/sing-box/ # resource dir / working dir / the dir where you store ip/domain lists
CONF=./config.json # where is the config file, it can be a relative path to $RES_DIR
##### ONLY CHANGE THIS BLOCK ######
start_service() {
sleep 10 # Ожидание скачивания пакета sing-box при загрузке системы
procd_open_instance
procd_set_param command $PROG run -D $RES_DIR -c $CONF
procd_set_param user root
procd_set_param limits core="unlimited"
procd_set_param limits nofile="1000000 1000000"
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
procd_close_instance
iptables -I FORWARD -o tun+ -j ACCEPT
echo "sing-box is started!"
}
stop_service() {
service_stop $PROG
iptables -D FORWARD -o tun+ -j ACCEPT
echo "sing-box is stopped!"
}
reload_service() {
stop
sleep 5s
echo "sing-box is restarted!"
start
}
Делаем файл исполняемым:
chmod +x /etc/init.d/sing-box
После чего добавляем в автозапуск:
/etc/init.d/sing-box enable
/etc/init.d/sing-box start
На этом настройка окончена.
P.S. 35 Мб это достаточно большой объём занимаемой оперативной памяти для роутера со 128 Мб, так что решение что называется на грани.
Комментарии (4)
atrost
22.08.2023 12:30+1Ещё интересное наблюдение, если в родной сервер caddy2-naive долбиться через foxyproxy (https proxy), с которым раньше использовал dumbproxy, которое также "не отвечает" - то прокси не работает. Так что только родной плагин.
XOR2048
Печально, что Trojan, чистый Shadowsocks и VMess уже могут заблокировать...
Но NaiveProxy смотрится очень интересно для запуска на OpenWRT.
Есть отличная статья, где можно узнать про разные подобные протоколы и что с ними можно сделать)
P.S - статья по настройке очень интересная, спасибо Вам за нее!
Andrevich Автор
Спасибо за оценку!
atrost
Пока поднял NaïveProxy и mieru
NaïveProxy - очень маленький расход аккумулятора, что важно для мобильных устройств;
mieru - построен на kcp - очень хороший пинг, но аккумулятор жрет как не в себя - так что только для игр, и то иногда.
Подключение через ddns freemyip.com. В дальнейшем - двойная маршрутизация с использованием хостинга из России.