Skip to content

Repository files navigation

DPIlamain — nfqws2-watchdog для Keenetic / Netcraze / Entware

DPIlamain — watchdog, автоматическое восстановление и recovery-пакет для nfqws2-keenetic на роутерах Keenetic и Netcraze с Entware. Подходит для отдельного Wi‑Fi телевизора, Google TV, Android TV и гостевого сегмента с anti-DPI обходом.

CI Release Platform License

Установка · Диагностика · Восстановление · Безопасность · Последний релиз

DPIlamain — NFQUEUE watchdog

Подержите моё пиво

🍺 Подержите моё пиво — здесь действительно не просят денег; лучший вклад — помочь следующему человеку не потерять сотни часов.

Это не VPN и не новая стратегия обхода. Проект следит, чтобы уже установленный nfqws2 оставался запущен, имел ровно один процесс и активные правила NFQUEUE. Если движок сломался, watchdog аккуратно перезапускает его. Автоматическое обновление по умолчанию отключено (AUTO_UPGRADE=0); если администратор явно включил его, после трёх подтверждённых сбоев watchdog может проверить и запросить у opkg обновление цели с точным именем nfqws2-keenetic. Перед записью создаётся backup.

Почему это работает без VPN

ТВ / телефон
      │
      ▼
политика Keenetic/Netcraze → iptables NFQUEUE → nfqws2 → провайдер → сайт

Upstream nfqws2 обрабатывает выбранные первые пакеты TCP/QUIC так, чтобы сетевой DPI потерял контекст распознавания, а настоящий сервер продолжил видеть корректное соединение. Трафик не отправляется на чужой VPN-сервер: внешний IP и страна не меняются, подписка и удалённая инфраструктура не нужны. Поэтому это обычно быстрее туннеля, но не даёт анонимности и не обходит геоблокировку по IP.

DPIlamain не выбирает стратегию обхода и не подменяет upstream. Он следит за процессом nfqws2, pidfile и правилами NFQUEUE, выполняет ограниченный restart, делает проверяемые snapshots и оставляет автоматические обновления выключенными до явного решения администратора.

Что решает проект

Ситуация Что произойдёт
nfqws2 упал Один контролируемый restart
Процесс есть, правил NFQUEUE нет Сбой обнаруживается и считается нездоровым состоянием
Ошибка повторяется После трёх проверок upgrade остаётся выключенным по умолчанию
Администратор включил upgrade Выполняется dry-run точной цели nfqws2-keenetic
Обновление сломалось Backup сохраняется, повторные обновления блокируются на 24 часа
Роутер перезагрузился Watchdog запускается Entware init-скриптом
Entware пришлось переустановить Конфиг и списки восстанавливаются из проверяемого snapshot
Не хватает пакета doctor показывает код ошибки и точную команду исправления

Требования

  • Keenetic или Netcraze с Entware, смонтированным в /opt;
  • компонент прошивки «Модули ядра подсистемы Netfilter»;
  • установленный по инструкции upstream nfqws2-keenetic;
  • Entware-пакеты busybox, iptables, ca-certificates, wget-ssl, flock;
  • минимум 8 МиБ свободного места в /opt для автоматического обновления;
  • рабочая политика доступа nfqws/NFQWS, если обработка нужна не всей сети.

Watchdog не ставит Entware, не форматирует накопитель и не меняет настройки KeeneticOS/NetcrazeOS. Установка с нуля описана в инструкции для новичка.

🍺 Быстрый старт

До распаковки или запуска root-установщика подготовьте ровно три файла:

  • nfqws2-watchdog_1.0.0-4_all.ipk;
  • nfqws2-recovery-kit-1.0.0-4.tar.gz;
  • SHA256SUMS.txt.

Оба артефакта должны относиться к одному release, а сам SHA256SUMS.txt получите по отдельному доверенному каналу. Manifest, скачанный рядом с файлами из того же недоверенного источника, обнаруживает случайное повреждение, но сам по себе не аутентифицирует release.

Не распаковывайте kit на тесном разделе /opt: архив уже содержит .ipk, а распаковка создаёт ещё одну его копию. Сначала в Entware shell проверьте RAM-backed /tmp; продолжайте только после строки OK:

unset STAGE
TMP_FREE_KIB=$(df -Pk /tmp | awk 'NR > 1 { value=$4 } END { print value }')
case "$TMP_FREE_KIB" in
  ''|*[!0-9]*) echo 'STOP: cannot read free space in /tmp' >&2; false ;;
  *)
    if [ "$TMP_FREE_KIB" -ge 16384 ]; then
      echo "OK: /tmp has $TMP_FREE_KIB KiB free"
    else
      echo "STOP: /tmp needs at least 16384 KiB free" >&2
      false
    fi
    ;;
esac &&
STAGE=$(mktemp -d /tmp/nfqws2-release.XXXXXX) &&
chmod 700 "$STAGE" &&
printf 'Upload all three release files to: %s\n' "$STAGE"

Загрузите в напечатанный приватный каталог все три файла, не перезагружая роутер: /tmp очищается при reboot. В той же shell-сессии выполните:

cd "$STAGE"
/opt/bin/busybox sha256sum -c SHA256SUMS.txt
/opt/bin/busybox tar -xzf nfqws2-recovery-kit-1.0.0-4.tar.gz
cd nfqws2-recovery-kit-1.0.0-4
./install.sh

Продолжайте только если обе строки проверки — для IPK и recovery-kit — завершились OK. При несовпадении или отсутствии отдельно доверенного manifest ничего не распаковывайте и не запускайте от root; используйте полный verified installation flow. Если /tmp меньше 16 МиБ, освободите RAM или используйте отдельный временный накопитель достаточного размера — не расходуйте защищаемый остаток 8 МиБ на /opt.

Если установщик сообщил о недостающих Entware-пакетах:

./install.sh --fix-deps

Этот режим запрашивает установку только перечисленных зависимостей; общий opkg upgrade не выполняется. Однако opkg update обновляет индексы всех настроенных feeds, а зависимости разрешаются глобально по их совокупности. Точное имя пакета ограничивает цель операции, но не доказывает происхождение пакета. Неподписанный HTTP-feed или недоверенный custom feed может подставить пакет либо зависимость с maintainer scripts, выполняемыми от root. Перед --fix-deps проверьте каждый настроенный feed, транспорт и политику подписи. Репозиторий upstream установщик молча не добавляет.

После установки ожидается финальная строка SUMMARY ... fail=0, затем путь к созданному recovery-snapshot.

Как устроен watchdog

Раз в пять минут проверяются три независимых признака:

  1. Pidfile указывает на живой PID с точной идентичностью nfqws2.
  2. pidof видит ровно тот же единственный процесс nfqws2.
  3. В iptables есть NFQUEUE-правило с номером очереди из nfqws2.conf.

Код возврата S51nfqws2 status не считается доказательством здоровья: некоторые версии upstream печатают состояние, но всегда завершаются успешно.

Алгоритм восстановления:

здоров ────────────────> сброс счётчика ошибок
   │
   └─ сбой ─> restart ─> проверка
                         │
                         ├─ здоров ─> готово
                         └─ снова сбой ─> +1 к счётчику
                                           │
                                           └─ 3 сбоя
                                               ├─ cooldown / мало места ─> стоп
                                               └─ opkg update → поиск кандидата
                                                   → opkg --noaction
                                                   → backup → точечный upgrade
                                                   → проверка

Ограничители по умолчанию:

  • AUTO_UPGRADE=0: пакетные обновления полностью отключены;
  • restart не чаще одного раза в 15 минут при постоянной аварии;
  • обновление не чаще одного раза в 24 часа;
  • перед обновлением обязательно создаётся локальный backup;
  • обновление запрещено при свободном месте меньше 8 МиБ;
  • при явном AUTO_UPGRADE=1 сначала выполняются opkg update, проверка доступной версии и opkg --noaction upgrade nfqws2-keenetic;
  • роутер не перезагружается;
  • политики, Wi‑Fi, DNS, VPN-профили и домашняя сеть не меняются.

Параметры находятся в /opt/etc/nfqws2-watchdog.conf.

Предупреждение об AUTO_UPGRADE=1. opkg update освежает все настроенные feeds, а resolver рассматривает их глобально. Точное имя nfqws2-keenetic задаёт scope операции, но не provenance. Не включайте режим, пока не проверены все feeds: неподписанный HTTP/custom feed способен поставить код с root maintainer scripts.

Doctor: нормальная диагностика зависимостей

Полная проверка:

/opt/sbin/nfqws2-doctor full

Только зависимости:

/opt/sbin/nfqws2-doctor deps

Проверка перед установкой/обновлением:

/opt/sbin/nfqws2-doctor preflight

Вывод содержит коды из текущей карты E000E505, статусы [OK], [WARN], [FAIL] и строку FIX. В частности, E108 означает отсутствие пакета flock, а E208 — отсутствие исполняемого /opt/bin/flock на preflight. E109 отделяет сбой запроса базы opkg от реально отсутствующего пакета; E110 проверяет реально используемые applet'ы BusyBox (stat, tar, gzip, dd, mkfifo, sha256sum), включая stat -t/-Lt и совпадение lock/fd identity, до snapshot и установки. E209 и E210 проверяют приватные file/directory metadata. E212 показывает состояние AUTO_UPGRADE (0 — безопасный default). E216 проверяет, что /opt/etc/nfqws2 является реальным каталогом с root:root 0755; обычный drift выдаётся как [WARN], а symlink, отсутствие или не-каталог — как [FAIL]. E213E215 также проверяют owner/mode каталога списков и самих списков. E304/E305 отделяют операционные ошибки pidof/iptables-save, а E403 — неизвестное состояние daemon от обычного stopped. Doctor старается выводить только структурную диагностику, но не является анализатором секретов: перед публикацией отчёт всё равно нужно проверить глазами.

Расшифровка кодов есть в Troubleshooting.

Snapshot и восстановление

Создать snapshot:

/opt/sbin/nfqws2-recovery snapshot

Проверить архив без изменения системы:

/opt/sbin/nfqws2-recovery verify /absolute/path/to/snapshot.tar.gz

Восстановить конфигурацию:

/opt/sbin/nfqws2-recovery restore /absolute/path/to/snapshot.tar.gz --yes

Snapshot содержит только:

  • /opt/etc/nfqws2/nfqws2.conf;
  • user.list, auto.list, exclude.list, ipset.list, ipset_exclude.list;
  • /opt/etc/nfqws2-watchdog.conf;
  • manifest со схемой и версиями пакетов.

Snapshot намеренно содержит доменные/IP-списки и полный nfqws2.conf, включая добавленные вами комментарии и custom-параметры. Считайте его чувствительным и не публикуйте. Wi‑Fi-пароли, учётная запись роутера, список клиентов и полный конфиг прошивки специально не собираются, но инструмент не может доказать, что вы сами не вписали секрет в один из сохраняемых файлов.

При создании snapshot рядом обязательно записывается файл <snapshot>.sha256. Если sidecar присутствует, verify и restore сначала сверяют checksum замороженной входной копии и только затем переходят к gzip/tar. Для старого или внешнего архива без sidecar остаётся bounded структурная проверка с явным предупреждением checksum=absent: adjacent integrity-проверки не было, а authentication автора этот статус тем более не устанавливает.

checksum=verified означает совпадение SHA-256 замороженной копии с sidecar, то есть integrity comparison, а не authentication. Checksum обнаруживает повреждение или подмену только тогда, когда ожидаемое значение получено отдельно по доверенному каналу. Sidecar рядом с архивом не является цифровой подписью и сам по себе не подтверждает автора; content-trust=unchecked остаётся явным.

verify также проверяет структуру, типы, размеры, whitelist/schema/scope, но не устанавливает авторство содержимого. Восстанавливайте только snapshot, который создали сами и хранили в доверенном месте: upstream читает nfqws2.conf как shell-конфигурацию. При restore имена членов архива не распаковываются напрямую: разрешённые файлы ограниченно читаются как поток в закрытый staging и заменяются атомарно по одному файлу. Перед первой заменой создаются unpacked rollback-state и portable pre-restore backup, включая существование и точные metadata /opt/etc/nfqws2. На успешном пути этот каталог до записи нормализуется в root:root 0755. При обычной ошибке либо перехватываемом SIGHUP, SIGINT или SIGTERM exit-trap сначала возвращает дочерние файлы, а прежние metadata родительского каталога — последними, затем восстанавливает состояние служб. Это попытка восстановления, а не гарантия crash durability.

Новый snapshot создаётся только в приватном каталоге /opt/var/backups/nfqws2-recovery; после создания его можно скопировать наружу. Замороженный input, prepared staging и rollback-state находятся в приватном /opt/var/lib/nfqws2-watchdog/recovery-work с root:root 0700, а не в /tmp. Обычная операция удаляет transaction-каталог. Если rollback или восстановление состояния служб фатально не завершилось, recovery оставляет его и печатает путь для ручного восстановления; этот каталог также содержит чувствительные данные.

8 МиБ — защищаемый остаток, а не требование заранее иметь место под все теоретические максимумы. Recovery измеряет реальные файлы и на каждой фазе ограничивает запись текущим свободным местом выше этого остатка. Поэтому маленький конфиг обычно работает и при примерно 10 МиБ свободного /opt; большой config, archive или rollback корректно остановит операцию раньше. Лимиты 8 МиБ для gzip, 32 МиБ для tar, 24 МиБ для суммы members и отдельные per-file caps при этом не увеличиваются. Точный необходимый запас зависит от несжатого размера текущего и восстанавливаемого наборов, tar overhead и обязательного pre-restore backup.

Граница crash/power-loss. SIGKILL, потерю питания и внезапное исчезновение накопителя перехватить нельзя. Замена каждого отдельного файла атомарна, но весь multi-file restore не имеет persistent transaction journal или fsync-barriers. После аварии могут остаться смесь старых и новых файлов и остановленные либо частично возвращённые службы; durability завершённого restore не обещается. После повторного mount сохраните копии уцелевших pre-restore backup и приватного recovery-work, вручную проверьте/восстановите согласованный набор из доверенного snapshot и только затем выполните nfqws2-doctor full. Подробный порядок — в документе восстановления.

После успешного restore /opt/etc/nfqws2 имеет root:root 0755, конфиги — root:root 0600; статические списки user.list, exclude.list, ipset.list, ipset_exclude.listroot:<service> 0440; изменяемый сервисом auto.list<service>:<service> 0600. <service> определяется из конфигурации upstream.

Полный сценарий после потери Entware: docs/RECOVERY.md.

Команды управления

# Состояние daemon + nfqws2
/opt/etc/init.d/S52nfqws2-watchdog status

# Одна проверка и, при необходимости, восстановление
/opt/sbin/nfqws2-watchdog once

# Только чтение состояния, без restart/update
/opt/sbin/nfqws2-watchdog dry-run

# Read-only baseline VK-300; stable/deviation следует структурному health
/opt/sbin/nfqws2-watchdog baseline

# Пасхалки только печатают текст и ничего не форсируют
/opt/sbin/nfqws2-watchdog rain
/opt/sbin/nfqws2-watchdog force

# Перезапуск самого watchdog
/opt/etc/init.d/S52nfqws2-watchdog restart

# Последние события
tail -n 50 /opt/var/log/nfqws2-watchdog.log

Подробная системная справка устанавливается вместе с пакетом:

man 8 nfqws2-watchdog

Если на минимальной Entware нет просмотрщика man, сама страница всё равно лежит в /opt/share/man/man8/nfqws2-watchdog.8.

Лог ограничен 128 КиБ плюс одна ротированная копия. Он содержит операционные поля состояния, причины, версии и пути служебных backup; перед публикацией лог нужно проверить глазами, как любой диагностический материал.

Совместимость

Upstream nfqws2-keenetic официально описывает установку на Keenetic и Netcraze с Entware. Этот пакет имеет архитектуру all: собственные файлы — POSIX shell, а подходящий бинарник nfqws2 предоставляет upstream-репозиторий для архитектуры роутера.

Проверяемые условия важнее логотипа на корпусе:

  • /opt/bin/opkg работает;
  • /opt/bin/busybox исполняется и предоставляет проверенные stat, tar, gzip, dd, mkfifo, sha256sum; nfqws2-doctor проверяет точные используемые формы;
  • Entware BusyBox предоставляет stat -t (GNU-опция stat -c не требуется), либо доступен ограниченный LC_ALL=C ls -ldn fallback;
  • nohup и cksum не требуются;
  • S51nfqws2 установлен;
  • ядро предоставляет NFQUEUE;
  • аппаратное ускорение не обходит нужный путь Netfilter;
  • upstream-пакет поддерживает архитектуру устройства.

Проект собран для Entware на Keenetic/Netcraze. OpenWrt имеет другие пути и init, поэтому этот .ipk нельзя считать OpenWrt-пакетом без отдельной адаптации.

Частые поисковые вопросы

YouTube на Keenetic не работает или снова начал тормозить — поможет?

Если рабочая стратегия nfqws2 уже была настроена, а сломался сервис, процесс, правила или вышло исправление upstream — да, watchdog закрывает именно этот класс проблем. Он не придумывает новую стратегию для конкретного провайдера.

Как сделать YouTube только для телевизора через отдельный Wi‑Fi?

Создайте отдельный сегмент/SSID, назначьте его политике доступа NFQWS, а основную домашнюю сеть оставьте на обычной политике. Watchdog не меняет сегменты сам.

Работает ли на Google TV, Android TV, Smart TV и телефоне?

Роутер обрабатывает трафик сегмента, поэтому ОС клиента не важна. Клиент должен быть действительно подключён к сегменту/политике, которую обрабатывает nfqws2.

Это бесплатный VPN для телевизора?

Нет. nfqws2 модифицирует пакеты для противодействия DPI и не меняет публичный IP на иностранный. Геоблокировки и сервисы, требующие IP другой страны, останутся.

Может ли watchdog понять, что конкретный ролик не воспроизводится?

Надёжно — нет. Проверка HTTPS с самого роутера не доказывает воспроизведение QUIC в приложении ТВ и даёт ложные срабатывания. Домены, которые стали недоступны, обрабатывает штатный $MODE_AUTO upstream; watchdog контролирует инфраструктуру.

Подойдёт ли Netcraze?

Да, если на модели есть Entware, Netfilter/NFQUEUE и работает nfqws2-keenetic. Doctor покажет конкретно, чего не хватает.

Можно ли без Entware?

Не этим пакетом. Реальные варианты — приложение на Android/Google TV, отдельный OpenWrt-шлюз или штатная VPN-политика Keenetic/Netcraze. Подробнее: docs/ALTERNATIVES.md.

Shadowsocks, WireGuard или OpenVPN лучше?

Это другая архитектура: они туннелируют/проксируют трафик и требуют живого сервера или провайдера. nfqws2 не требует удалённого сервера, но и не меняет страну/IP.

Удаление

Из recovery-kit:

./uninstall.sh

Или напрямую:

opkg remove nfqws2-watchdog

Удаляется только watchdog. nfqws2-keenetic, его конфигурация и recovery-архивы сохраняются.

Релизы и проверка файла

К релизу прикладываются:

  • nfqws2-watchdog_<version>_all.ipk;
  • nfqws2-recovery-kit-<version>.tar.gz;
  • SHA256SUMS.txt.

Перед переносом на роутер сравните SHA-256. Сборка повторяется командой:

./build.ps1

Это repeatable release-процесс, но не обещание bit-for-bit reproducible build: recovery-kit сохраняет файловые timestamps/метаданные окружения сборки. Сверяйте именно опубликованные SHA-256, а не ожидайте одинаковый hash двух независимых сборок.

Исходники release и рекомендуемые GitHub topics находятся в docs/GITHUB.md. История изменений — в CHANGELOG.md.

Безопасность и границы проекта

  • никакого curl | sh;
  • никакого общего opkg upgrade;
  • никакого автоматического добавления стороннего репозитория;
  • никакого изменения KeeneticOS/NetcrazeOS CLI;
  • никакого удаления старых backup без команды пользователя;
  • никакого автоматического binary rollback выдуманными opkg-командами.

Перед публикацией уязвимости прочитайте SECURITY.md.

Upstream и лицензия

Проект не включает бинарники nfqws2 и не является официальной частью upstream. Он зависит от независимого проекта nfqws2-keenetic. Собственный код watchdog/recovery распространяется по лицензии MIT.

DPIlamain не аффилирован и не одобрен авторами nfqws2-keenetic, Entware, Keenetic или Netcraze. Названия и товарные знаки принадлежат их владельцам; научно-фантастические отсылки не означают связь с соответствующими правообладателями.

Проект остаётся бесплатным: без подписки, платного Pro, телеметрии и реферальных VPN-ссылок. Если хочется помочь — поставьте звезду, проверьте свою модель и пришлите обезличенный doctor-report. Подробнее: COMMUNITY.md.

About

DPIlamain — watchdog и recovery для nfqws2-keenetic на Keenetic/Netcraze + Entware: YouTube/TV anti-DPI без VPN.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages