splify2
Начало

Как это работает#

Путь пакета#

  1. DNS. Устройство в сети спрашивает имя. Вопрос приходит к резолверу ядра steer. Если имя есть в списке правила, резолвер отвечает служебным адресом из 198.18.0.0/15 и запоминает пару «служебный → настоящий». Остальные имена получают настоящий ответ.
  2. Метка. Первый пакет соединения проходит цепочки nftables ядра steer: адрес назначения ищется в наборах правил сверху вниз, и совпавшее правило ставит пакету метку своего выхода.
  3. DNAT. Служебный адрес меняется на настоящий по карте резолвера — приложение об этом не узнаёт.
  4. Маршрут. По метке ip rule отправляет пакет в таблицу маршрутизации выхода, где маршрут по умолчанию ведёт в его устройство: wg0, туннель VLESS, hysteria2, xsteer. Пакет без метки идёт обычным путём, напрямую.

Всё это — средства ядра Linux. Процесс нужен только туннелям протоколов, и то как устройство TUN, а не прокси на каждое соединение.

Спека#

Ядро steer настраивается одним файлом — спекой (/etc/steer/spec.yaml или spec.json):

Раздел Что описывает
lan, clients чей трафик забирать: устройства раздачи, клиенты по адресу или MAC
lists куда: файлы доменов и адресов, наборы sing-box .srs, сужение по протоколу и портам
outputs через что: интерфейс, туннель по подписке, группа выходов, zapret, напрямую
rules какой трафик каких клиентов в какой выход; проверяются сверху вниз
dns режим (fake-IP или настоящие адреса), свои серверы DNS у правил

steer apply применяет спеку одной транзакцией: либо новые правила встают целиком, либо остаются прежние. Панель splify2 и коннектор пишут спеку сами — руками её трогать не нужно.

Выходы и отказы#

  • Сторож проверяет выходы и переключает трафик на первое живое устройство или узел.
  • Группа собирает выходы: order — первый живой, latency — самый быстрый с допуском, manual — выбор человека, balance — новые соединения по весам.
  • on_fail решает, что делать, когда не работает ничего: остановить трафик правила (drop, по умолчанию), пустить напрямую (direct) или через zapret.

Панель и коннектор#

splify2 — страница LuCI и объект rpcd: каталог сервисов со списками, которые обновляются сами, редактор правил, выходы и подписки. Она пишет спеку и читает состояние ядра через его сокет.

steer-box-connector занимает место пакета sing-box: podkop или forkop пишут конфиг sing-box и запускают службу как обычно, а коннектор переводит конфиг в спеку и ведёт свой экземпляр ядра. TPROXY и прозрачный прокси не используются.