Skip to content

XKeen SmartRoute v2.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 14:28
· 8 commits to master since this release

Добавлено

  • Жёсткий (per-профильный) kill-switch теперь работает на KeeneticOS.
    Последний оставшийся пробел платформенного паритета из релиза 2.0.0.
    KeeneticOS не имеет системного dnsmasq вообще (DNS роутера — NDM'овский
    ndnproxy, уже занявший порт 53) — в отличие от OpenWrt, где жёсткий
    слой просто вешает ipset-директиву на уже существующий LAN-резолвер,
    здесь буквально не на что было вешать наблюдение за доменами. Новый
    бэкенд (ks_apply_keenetic) поднимает отдельный, выделенный экземпляр
    Entware dnsmasq-full исключительно как наполнитель ipset: PREROUTING
    перенаправляет LAN-трафик на порт 53 на этот теневой экземпляр вместо
    ndnproxy напрямую, тот транзитом пересылает каждый запрос на
    127.0.0.1:53 (ответ клиенту не меняется) и попутно заносит
    резолвленные IP отслеживаемых доменов в тот же ipset, на который
    смотрит REJECT-правило FORWARD. Подробности механики —
    docs/functionality_doc/kill-switch.md.

Исправлено

  • Два бага всплыли только под реальным трафиком на живом Keenetic Hero
    4G+/KN-2311, не в код-ревью: iptables REDIRECT переписывает адрес
    назначения на адрес входящего интерфейса, а не на 127.0.0.1
    теневой dnsmasq, слушавший только loopback, вообще не видел
    LAN-запросы (тихий таймаут без единой ошибки). REJECT-правило на
    FORWARD, добавленное в конец цепочки, никогда не срабатывало —
    собственные цепочки NDM (_NDM_FORWARD и др.) уже принимали обычный
    LAN→WAN трафик раньше в той же цепочке. Оба исправлены вставкой в
    начало соответствующей цепочки вместо добавления в конец.
  • Упавший теневой dnsmasq — реальный отказ, которого нет на OpenWrt: без
    защиты DNS-редирект, оставшийся взведённым на мёртвый процесс,
    заблокировал бы DNS всей LAN, а не только kill-switch-профилей.
    Редирект теперь взводится только после подтверждения, что
    свежезапущенный экземпляр реально поднялся; новый боевой хук + cron
    раз в минуту (только KeeneticOS) самолечит упавший процесс. Проверено
    вживую: kill -9 теневого процесса — DNS продолжила резолвиться
    (fail-open сработал), вотчдог перезапустил его на следующем тике.
  • Гонка при перестройке правил, обнаруженная тем же вотчдогом: ручное
    включение/выключение kill-switch, пересекшееся по времени с
    cron-тиком, могло оставить дублированные iptables-правила. Добавлен
    тот же mkdir-мьютекс, что уже использует genroute.sh's regen-лок,
    плюс обёртка iptables -w (тот же класс фикса, что уже применён к
    redirect.sh в 2.0.0, легаси xtables-лок общий на весь роутер).
  • Восстановление kill-switch при переустановке (install.sh) теперь
    работает на обеих платформах — раньше на KeeneticOS вместо этого
    просто логировалось предупреждение "пока не поддержано".
    uninstall.sh теперь корректно сворачивает состояние жёсткого
    kill-switch на KeeneticOS (теневой процесс, ipset, обе цепочки,
    боевой хук) — раньше эта секция вообще не знала о существовании
    KeeneticOS-бэкенда.