Skip to content

XKeen SmartRoute v2.0.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 13:40
· 12 commits to master since this release

Полноценная поддержка 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 не успевал за переходом suexec под тяжёлой
    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 (существовал, но нигде не был на него ссылки).