DPIlamain — watchdog, автоматическое восстановление и recovery-пакет для
nfqws2-keeneticна роутерах Keenetic и Netcraze с Entware. Подходит для отдельного Wi‑Fi телевизора, Google TV, Android TV и гостевого сегмента с anti-DPI обходом.
Установка · Диагностика · Восстановление · Безопасность · Последний релиз
🍺 Подержите моё пиво — здесь действительно не просят денег; лучший вклад — помочь следующему человеку не потерять сотни часов.
Это не VPN и не новая стратегия обхода. Проект следит, чтобы уже установленный
nfqws2 оставался запущен, имел ровно один процесс и активные правила NFQUEUE.
Если движок сломался, watchdog аккуратно перезапускает его. Автоматическое
обновление по умолчанию отключено (AUTO_UPGRADE=0); если администратор явно
включил его, после трёх подтверждённых сбоев watchdog может проверить и запросить
у opkg обновление цели с точным именем nfqws2-keenetic. Перед записью
создаётся backup.
ТВ / телефон
│
▼
политика 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.
Раз в пять минут проверяются три независимых признака:
- Pidfile указывает на живой PID с точной идентичностью
nfqws2. pidofвидит ровно тот же единственный процессnfqws2.- В 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.
Полная проверка:
/opt/sbin/nfqws2-doctor fullТолько зависимости:
/opt/sbin/nfqws2-doctor depsПроверка перед установкой/обновлением:
/opt/sbin/nfqws2-doctor preflightВывод содержит коды из текущей карты E000–E505, статусы [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].
E213–E215 также проверяют owner/mode каталога списков и самих списков.
E304/E305 отделяют операционные ошибки pidof/iptables-save, а E403 —
неизвестное состояние daemon от обычного stopped. Doctor старается выводить только
структурную диагностику, но не является анализатором секретов: перед публикацией
отчёт всё равно нужно проверить глазами.
Расшифровка кодов есть в Troubleshooting.
Создать 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 --yesSnapshot содержит только:
/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.list —
root:<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 -ldnfallback; nohupиcksumне требуются;S51nfqws2установлен;- ядро предоставляет NFQUEUE;
- аппаратное ускорение не обходит нужный путь Netfilter;
- upstream-пакет поддерживает архитектуру устройства.
Проект собран для Entware на Keenetic/Netcraze. OpenWrt имеет другие пути и init,
поэтому этот .ipk нельзя считать OpenWrt-пакетом без отдельной адаптации.
Если рабочая стратегия nfqws2 уже была настроена, а сломался сервис, процесс,
правила или вышло исправление upstream — да, watchdog закрывает именно этот класс
проблем. Он не придумывает новую стратегию для конкретного провайдера.
Создайте отдельный сегмент/SSID, назначьте его политике доступа NFQWS, а основную
домашнюю сеть оставьте на обычной политике. Watchdog не меняет сегменты сам.
Роутер обрабатывает трафик сегмента, поэтому ОС клиента не важна. Клиент должен быть действительно подключён к сегменту/политике, которую обрабатывает nfqws2.
Нет. nfqws2 модифицирует пакеты для противодействия DPI и не меняет публичный
IP на иностранный. Геоблокировки и сервисы, требующие IP другой страны, останутся.
Надёжно — нет. Проверка HTTPS с самого роутера не доказывает воспроизведение QUIC
в приложении ТВ и даёт ложные срабатывания. Домены, которые стали недоступны,
обрабатывает штатный $MODE_AUTO upstream; watchdog контролирует инфраструктуру.
Да, если на модели есть Entware, Netfilter/NFQUEUE и работает
nfqws2-keenetic. Doctor покажет конкретно, чего не хватает.
Не этим пакетом. Реальные варианты — приложение на Android/Google TV, отдельный OpenWrt-шлюз или штатная VPN-политика Keenetic/Netcraze. Подробнее: docs/ALTERNATIVES.md.
Это другая архитектура: они туннелируют/проксируют трафик и требуют живого сервера
или провайдера. 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.
Проект не включает бинарники nfqws2 и не является официальной частью upstream.
Он зависит от независимого проекта
nfqws2-keenetic. Собственный код
watchdog/recovery распространяется по лицензии MIT.
DPIlamain не аффилирован и не одобрен авторами nfqws2-keenetic, Entware,
Keenetic или Netcraze. Названия и товарные знаки принадлежат их владельцам;
научно-фантастические отсылки не означают связь с соответствующими
правообладателями.
Проект остаётся бесплатным: без подписки, платного Pro, телеметрии и реферальных VPN-ссылок. Если хочется помочь — поставьте звезду, проверьте свою модель и пришлите обезличенный doctor-report. Подробнее: COMMUNITY.md.

