You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Жёсткий (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-бэкенда.