XKeen SmartRoute v2.0.0
Полноценная поддержка KeeneticOS — второй платформы проекта наравне с
OpenWrt. Всё в этом релизе проверено вживую на реальном железе (Keenetic
Hero 4G+ KN-2311 и OpenWrt 23.05/mt7621), включая полный цикл
uninstall → install тестовой ветки на обоих роутерах перед мержем.
Добавлено
- Установка на KeeneticOS одной командой.
install.shопределяет
платформу и на KeeneticOS ставит xkeen, xkeen-UI (порт 1000) и панель
smartroute-gateway (порт 1001, здесь — единственный полноценный UI, LuCI
на KeeneticOS нет) поверх уже поднятого пользователем Entware на внешнем
USB-накопителе. Подробная инструкция по подготовке флешки и Entware —
docs/install-keenetic.md. - Прозрачный перехват LAN-трафика на KeeneticOS — второй бэкенд
lib/redirect.sh(rd_write_iptables) поверх легасиiptables/
ip6tables, того же пространства правил, которым управляет NDM-firewall
самого роутера (в отличие от OpenWrt 22.03+, который перешёл на
nftables/fw4). Без этого перехвата не работает ни один
профиль/kill-switch — а штатныйxkeen -apна KeeneticOS оказался
рабочим, но именно поэтому его редиректы не может использовать fw4-путь,
которого там просто нет. Включение перехвата и защита от утечек
DNS/IPv6/QUIC работают идентично OpenWrt. - Kill-switch по умолчанию fail-open, с опциональной защитой от отказа
Xray. Раньше падение Xray-процесса означало полный обрыв интернета на
перехватываемых портах — по многочисленным просьбам это неверно понятое
поведение исправлено: по умолчанию перехват сам отключается, если Xray не
отвечает, и трафик идёт напрямую, как будто SmartRoute не установлено.
Старое поведение (жёсткий обрыв вместо утечки) осталось как отдельный
переключатель «Защита от отказа Xray» на вкладке «Защита от утечек» —
для тех, кому важнее ноль байт в обход правил, чем сохранение интернета.
Auto-resync при каждом старте/стопе/рестарте Xray плюс cron-вотчдог раз в
минуту (redirect.sh reapply) закрывают окно, где панель ещё показывает
«включено», а реальные правила уже не соответствуют состоянию Xray. - Мгновенная реакция на упавший активный сервер профиля. Раньше
сервер, выбранныйsr_pick_top1для профиля, при поломке продолжал
получать трафик до следующего планового пересчёта (cron, раз в 3
минуты) — теперьgateway/failover.go, и так уже опрашивавший
ObservatoryService каждые 20с, реагирует сразу: как только реально
используемый профилем сервер помечается «мёртв», сразу триггерится
пересчёт+рестарт (genroute.sh regen-fast), без ожидания следующего
тика. Окно обрыва сокращается с «до 3 минут» до ~20 секунд — рестарт
Xray для применения нового сервера по-прежнему нужен (живой балансировщик
Xray заблокирован апстрим-багом XTLS/Xray-core#6642), так что обрыв не
исчезает полностью, но становится намного короче.
Исправлено
- Гонка рестарта Xray стекала до 6 живых процессов после жёсткой
(по питанию) перезагрузки роутера, полностью обрывая интернет —
pgrep -x xrayне успевал за переходомsu→execпод тяжёлой
boot-time I/O-нагрузкой. Новыйsr_xray_pids()матчит по полной
командной строке, закрывая гонку. - Панель на KeeneticOS ощущалась «зависшей» — API-ответы кэшировались
браузером безCache-Control, а сохранение профиля синхронно ждало
рестарта Xray до минуты. Оба фикса перенесены и подтверждены на
KeeneticOS. install.shне работал на OpenWrt 25.12+ — этот релиз заменил
opkgнаapk, скрипт был жёстко завязан на первый.- Xray на KeeneticOS не перезапускался вообще после установки —
три независимых бага в одной секцииinstall.sh(устаревший формат
02_transport.json, отсутствующий пользовательxkeenдляsu,
сборка Xray, несовместимая с этим CPU); заодно устаревшийxray_s
(1.8.4) заменён на полноценныйxray-core(26.2.6). xkeen-UIникогда не ставился без интерактива — интерактивные
запросы и нестабильный спиннер апстрим-установщика блокировали
автоматическую установку.redirect.sh/killswitch.shмолча «успешно» ничего не делали на
KeeneticOS — обе команды писали вuci/nftables, которых там нет, и
завершались с кодом успеха, не применив ни одного правила.- Гонка блокировки
xtablesпри частых переключениях защит на
KeeneticOS — новый cron-вотчдог (раз в минуту) мог столкнуться с
ручным переключением тумблера за захват легасиxtables-лока; под
set -euэто обрывало пересборку цепочки правил на середине. Все
вызовыiptables/ip6tablesв KeeneticOS-бэкенде теперь ждут
освобождения лока вместо немедленного отказа. uninstall.shоставлял живыми iptables-правила перехвата на
KeeneticOS навсегда — в отличие от OpenWrt, гдеfw4просто
перестаёт грузить удалённый.nft-файл, на KeeneticOS правила
live-only и требуют явного снятия, покаredirect.shещё не удалён.
Обнаружено и исправлено во время полного цикла деинсталляции этой
ветки перед мержем.- Минимальная поддерживаемая версия OpenWrt в требованиях исправлена на
22.03+ (было ошибочно указано 21.02+ — nftables/fw4 стал дефолтом
только в 22.03).
Изменено
install.sh:REPO_RAWтеперь переопределяем через переменную
окружения — можно install-тестировать ещё не смёрженную ветку целиком,
не трогая сам скрипт.docs/install-keenetic.mdдополнен и добавлен в индекс документации
обоих README (существовал, но нигде не был на него ссылки).