steer-box-connector#
Замена пакета sing-box для podkop и
forkop на OpenWrt, работающая на ядре
steer.
podkop и forkop пишут конфиг sing-box и запускают службу sing-box как обычно. Коннектор
переводит этот конфиг в спеку steer, а маршрутизацию ведёт ядро steer средствами ядра Linux: списки доменов через
fake-IP, наборы nftables и таблицы маршрутизации. TPROXY и прокси в пространстве пользователя
для каждого соединения не нужны — через процессы идут только туннели с протоколами, DNS и входы
mixed. Сами podkop и forkop не меняются и ставятся из своих выпусков.
Что умеет#
- CLI sing-box, которым пользуются podkop и forkop:
run,version,check,format,merge,generate,rule-set,tools fetch. - Выходы: direct, интерфейс (WireGuard, AmneziaWG), VLESS/Reality (в том числе xhttp и шифрование
VLESS
encryption), hysteria2, trojan, shadowsocks, socks, http, vmess; группы selector и urltest. - Selector держит туннель только к выбранному узлу, как sing-box. Выбор со страницы forkop или podkop (Clash API) переключает туннель и сохраняется до перезагрузки.
- DNS: udp, tcp, DoT, DoH (HTTP/1.1 и HTTP/2), fake-IP, правила
dns.rules, bootstrap. - Clash API (выходы, задержки, соединения, трафик), вход mixed (SOCKS4/5, HTTP), наборы правил remote и local.
- Трафик самого роутера к именам из списков идёт тем же выходом, что трафик LAN.
route-optionsсoverride_port— на нём держится проверка FakeIP в браузере у podkop и forkop.- Страница LuCI Services → Steer Connector: состояние, нужные пакеты steer и их установка, каким sing-box представляться, уровень журнала, поле метки и приоритет правил.
Перезапуск на роутере с aarch64 (сотня имён в fake-IP): DNS отвечает через ~0.9 с, трафик идёт через ~1.2 с.
Пока не умеет#
- действие
rejectи блокировку QUIC; - выход direct с
routing_mark(zapret у forkop); multiplexу выходов;- серверный режим forkop, кроме сервера socks;
- плагины shadowsocks, транспорт quic (V2Ray), выходы других типов (tuic, anytls, shadowtls,
wireguard и прочие), прежнюю запись сервера DNS через
address, серверы DNSquicиh3; sing-box generate tls-keypairиsing-box rule-set compile.
О первых трёх коннектор предупреждает в журнале при запуске: правила с reject и routing_mark он
снимает, а соединения multiplex идут без него. Конфиг с плагином shadowsocks, транспортом quic,
выходом другого типа или прежней записью DNS sing-box check не принимает — служба не стартует, и
forkop или podkop показывает причину. С сервером
forkop vless, vmess, trojan, hysteria2, shadowsocks, mtproxy, tailscale или из JSON коннектор не
запускается вовсе: sing-box check и sing-box run отказывают с причиной («вход типа «vless»
коннектор пока не поддерживает», «endpoints[0]: tailscale коннектор не поддерживает»), и forkop
с включённым сервером не стартует. Сервер socks принимает соединения (CONNECT, с паролем и без,
без UDP); правило с условиями по адресу назначения к ним не применяется: соединение идёт по
правилу, у которого из условий только этот вход, а нет такого — в route.final.
В диагностике forkop остаются два ⚠ — «Rules proxy counters» и «Additional marking rules found». Это проверки механики TPROXY, которой коннектор не пользуется, а не поломка.
Установка#
Нужен пакет steer-core той же версии и модули протоколов, которые использует конфиг
(steer-vless, steer-hysteria2, steer-proxy). Проще всего — тестовый набор из выпуска:
tar -xzf steer-box-connector-test-<версия>.tar.gz
cd steer-box-connector-test-<версия>
sh install.sh
install.sh сам выбирает архитектуру (DISTRIB_ARCH) и формат (apk или opkg) и заменяет пакет
sing-box коннектором. Работающие forkop и podkop он на время установки останавливает, а потом
запускает снова.
Ядро steer коннектор ведёт своим экземпляром, поэтому при установке служба steer (например, от
splify2) останавливается и выключается; её спека в /etc/steer остаётся на месте. При удалении
коннектора пакеты steer-* остаются, а служба — выключенной: вернуть её —
/etc/init.d/steer enable && /etc/init.d/steer start.
Проверено на OpenWrt 25.12 (apk) с podkop 0.7.22 и forkop 2.0.0. На opkg не проверялось.
Со страницы Services → Steer Connector пакеты steer ставятся по сети. Версии берутся из
перечня выпусков splify2/releases — version.json с
raw.githubusercontent.com, jsDelivr или splify2.github.io, по порядку; предварительная версия
помечена в списке. Пакет качается по адресам из перечня (сначала выпуск в splify2/releases, потом
выпуск steer) и сверяется с его sha256, если на роутере есть sha256sum: не сошлось — следующий
адрес. Перечень не ответил — список версий из выпусков GitHub splify2/steer; файла нет в
перечне — пакет по ссылке выпуска steer.
Пакеты steer и коннектор зависят друг от друга с точной версией. Поэтому версия, отличная от версии коннектора, ставится целиком: каждый установленный пакет steer этой версией и коннектор той же версии с его выпуска. Выпуска коннектора этой версии нет — не ставится ничего.
Вернуть обычный sing-box (apk)#
/etc/init.d/forkop stop # или podkop
apk del steer-box-connector
apk add sing-box
/etc/init.d/forkop start
Сначала остановите forkop или podkop: без sing-box их правила оставляют роутер без сети, и пакет sing-box не скачается.
Сборка#
git clone --recursive https://github.com/splify2/steer-box-connector
cd steer-box-connector
sh build.sh # пакеты коннектора под все архитектуры steer (STEER_ARCH=<арх> — одну)
sh build.sh --bundle # плюс тестовый набор с пакетами steer той же версии
Нужен docker: сборка идёт в образе сборщика steer (steer/build/ext-build.sh) теми же целями
zig и загрузчиками musl, что пакеты steer. Версия коннектора — версия steer в подмодуле:
коннектор связан с libsteer и требует steer-core той же версии. Предварительные выпуски одной
версии различаются коммитом steer — он в строке Revision: вывода sing-box version; ставить
коннектор нужно с steer-core той же сборки, из того же набора.
Устройство#
| Каталог | Что там |
|---|---|
src/ |
sing-box: CLI, перевод конфига в спеку steer, DNS, Clash API, mixed, наборы правил |
files/ |
служба /etc/init.d/sing-box, настройки, метод rpcd, правило fw4 для туннелей sbx* |
luci/ |
страница Services → Steer Connector |
scripts/ |
скрипты пакета |
bundle/ |
install.sh и README.txt тестового набора |
steer/ |
подмодуль ядра steer |
Сообщить о проблеме#
Приложите вывод sing-box version, logread -e sing-box | tail -200 и архитектуру
(DISTRIB_ARCH из /etc/openwrt_release). Ключи и адреса серверов из конфига перед отправкой
уберите.
Лицензия#
GPL-3.0, как у steer.