Как я адаптировал nfqws2 для ASUS и добавил поддержку OpenWrt

—

от автора

У меня дома есть два очень разных ASUS: новый GT‑BE19000AI и старый RT‑AC87U. Хотелось управлять nfqws2 на роутере через браузер: выбирать устройства, менять стратегии, разбираться с ошибками и переносить рабочие настройки между пользователями.

Из этой задачи вырос NFQWS2 ASUS Community — community‑адаптация nfqws2 для ASUSWRT‑Merlin с Entware. Теперь у проекта есть и нативные пакеты OpenWrt, а панель получила новое оформление.

Расскажу, как устроено приложение, какие особенности прошивок пришлось учесть и почему в интерфейсе столько внимания уделено предпросмотру и возврату изменений.

Обсуждение вернётся здесь: t.me/nfqws2AsusCommunityChat

Главное окно NFQWS2 ASUS Community в оформлении Rabbit

Главное окно NFQWS2 ASUS Community в оформлении Rabbit

На скриншотах используются демонстрационные настройки.

Основа проекта и моя часть работы

Проект опирается на zapret2, nfqws2-keenetic и nfqws‑keenetic‑web. Методы обработки трафика и основа веб‑интерфейса пришли из этих проектов.

Моя часть — адаптация к ASUS, интеграция с прошивкой, упаковка, развитие панели, импорт и обмен профилями, настройка SmartDNS, диагностика и поддержка OpenWrt.

NFQWS2 получает выбранные пакеты через NFQUEUE и применяет к ним заданную стратегию обработки. Соединение с сервисом остаётся прямым, внешний IP сам по себе не меняется. Эффект зависит от устройства DPI у провайдера, протокола и выбранных параметров. Если причина недоступности сервиса находится вне возможностей такой обработки, установка пакета её не устранит.

Настройка на роутере удобна для домашней сети: на телефоне, телевизоре и компьютере отдельный клиент nfqws2 не требуется. При этом можно ограничить обработку несколькими устройствами.

Что находится внутри

Веб‑панель написана на React и TypeScript, использует Material UI и CodeMirror. Сборка выполняется через Vite. На роутер устанавливаются готовые файлы интерфейса; запускать там среду разработки Node.js не нужно.

Бэкенд на PHP взаимодействует со служебными скриптами и компонентами конкретной платформы.

Часть

ASUSWRT‑Merlin с Entware

Нативный OpenWrt

Веб‑сервер

Отдельный lighttpd

Системный uhttpd

Службы

Init‑скрипты Entware и интеграция с ASUS

procd

Определение WAN

Данные прошивки ASUS

netifd

Передача пакетов в NFQUEUE

Правила iptables и ip6tables

firewall4 и nftables

Размещение основных настроек

В дереве /opt

В дереве /etc

Панель общая, а работа с сетью, службами и установкой учитывает платформу. Благодаря этому на OpenWrt не приходится воспроизводить окружение Entware.

Почему одного работающего бинарника недостаточно

На роутере процесс может успешно запуститься и ничего полезного не обрабатывать. Поэтому проверка запуска движка — только часть адаптации.

Нужно определить реальный WAN, установить подходящие правила firewall, учесть NAT и убедиться, что ядро умеет передавать пакеты в NFQUEUE. В ASUS‑адаптере предусмотрены проверки необходимых правил во временной цепочке. Отсутствие модуля в выводе lsmod само по себе ещё не означает отсутствия возможности: компонент может быть встроен в ядро.

Отдельная история — RT‑AC87U с Merlin 384.13_10. Для этой точной связки в ARMv7-пакете есть дополнительный модуль nfnetlink_queue. Перед загрузкой проверяются модель, версия прошивки, ядро и контрольные суммы штатных файлов. Проверки совместимости модуля со стороны ядра сохраняются.

Такой модуль нельзя считать универсальным решением для любого ASUS с похожим номером ядра. Здесь совместимость привязана к конкретной прошивке.

На новых устройствах возникает другой класс проблем. В некоторых прошивках ASUS присутствует ARK — модуль обработки трафика, связанный с отдельными функциями QoE и фильтрации. Он может мешать доставке пакетов в NFQUEUE.

Для этого в панели есть «Проверка ARK». Подготовка сохраняет резервную копию затрагиваемых настроек и отключает связанные функции. Затем пользователь вручную перезагружает роутер и повторяет проверку. Обычная установка пакета эти настройки не меняет.

Если ARK отсутствует, панель сообщает, что подготовка не требуется.

Новое оформление и порядок настройки

В текущей версии основным оформлением стала тема Rabbit: тёмный фон, спокойные синие акценты, более заметные границы полей и единый стиль окон. В меню можно вернуться к классическому оформлению.

Для настройки длинных стратегий важнее всего читаемость. В редакторе есть подсветка параметров, визуальный перенос строк и предупреждения о кавычках. Настоящие переводы строк отличаются от переноса, который нужен только для отображения текста. Блоки TCP, QUIC и UDP можно редактировать раздельно.

Редактор стратегий с отдельными блоками и подсветкой

Редактор стратегий с отдельными блоками и подсветкой

Предупреждение о синтаксисе помогает найти ошибку ввода, но работоспособность стратегии всё равно проверяется в сети пользователя.

Экран «С чего начать» показывает последовательность действий и состояние этапов: проверить роутер, выбрать устройства и профиль, при необходимости подключить DNS, запустить обработку и проверить сервис.

Экран первого запуска и проверки роутера

Экран первого запуска и проверки роутера

После первой установки обработка выключена. Сначала пользователь задаёт область применения и параметры, затем включает службу.

Какие сайты и какие устройства обрабатывать

В панели это два независимых выбора.

Первый — режим работы с доменами:

Режим

Что происходит

List

Используется пользовательский список user.list

Auto

К пользовательскому списку добавляется auto.list, который пополняется при обнаружении проблем с соединениями; учитываются исключения

All

Обрабатывается подходящий под настройки трафик с учётом exclude.list

Auto ведёт автоматический список доменов. Рабочую стратегию он не подбирает.

При любом режиме продолжают действовать порты, протоколы и фильтры стратегии. Поэтому All нельзя понимать как безусловную отправку каждого пакета в обработку.

Второй выбор — устройства: все клиенты, только указанные IP или подсети, либо все, кроме указанных.

Например, можно выбрать List и добавить только IP телевизора. Тогда nfqws2 будет обрабатывать подходящие соединения телевизора к доменам из списка. Для такого сценария адрес телевизора стоит закрепить в DHCP.

IPv6 включается отдельно. Выбор клиентов nfqws2 также не определяет область работы SmartDNS: DNS подключается собственным мастером.

Импорт профиля с предпросмотром и журналом изменений

При обмене стратегиями одной строки параметров бывает недостаточно. Она может ссылаться на списки доменов, Lua‑файлы и blobs — двоичные данные, используемые стратегией. Если зависимость потеряется, перенесённые настройки могут дать другой результат.

Поэтому профиль JSON позволяет переносить стратегию вместе с нужными ресурсами и настройками DNS. Профиль можно открыть с компьютера или выбрать в облачном каталоге.

Вначале выбрано всё, что включил автор профиля. Пользователь может отключить ненужные части и посмотреть сравнение «было / станет».

Предпросмотр изменений перед импортом профиля

Предпросмотр изменений перед импортом профиля

В реализации импорта операция проходит через подготовленный план и журнал изменений. Перед записью проверяется, что исходные данные не изменились после подготовки. Ресурсы записываются раньше основного конфига; конфиг заменяется через временный файл. Журнал позволяет восстановить состояние после прерывания операции.

Есть и отмена последнего импорта. Она проверяет текущее содержимое, чтобы не затереть последующие ручные правки пользователя.

Настройки чужого WAN и чужие локальные адреса клиентов при импорте не заменяют настройки принимающего роутера. Поддерживаемые пути ресурсов адаптируются к платформе.

Для DNS действует дополнительное правило: импорт заполняет черновик SmartDNS. Подключение этого черновика выполняется отдельно.

SmartDNS и возврат через 120 секунд

Проблемы доступа могут начинаться с DNS. Панель позволяет назначать отдельные резолверы выбранным доменам, использовать DoH и DoT, а при необходимости задавать фиксированные ответы.

SmartDNS подключается как дополнительный компонент. На Merlin штатный dnsmasq продолжает обслуживать DHCP и локальные имена, а внешние запросы передаются локальному SmartDNS. Интеграция использует dnsmasq.postconf и учитывает существующие настройки.

SmartDNS и действие возврата прежних настроек

SmartDNS и действие возврата прежних настроек

Изменение DNS затрагивает доступ в сеть, поэтому подключение устроено поэтапно. Пользователь проверяет профиль, запускает пробное подключение и получает 120 секунд, чтобы проверить сайты со своего устройства. Затем нужно подтвердить результат кнопкой «DNS работает — оставить настройки». Без подтверждения защитный механизм возвращает прежний DNS.

Черновик и ранее подтверждённый профиль хранятся раздельно. При обновлении приложение восстанавливает подтверждённый профиль, даже если пользователь уже начал редактировать другой вариант. Явный возврат к прежнему DNS отменяет такое восстановление.

Статус подключения учитывает не только наличие процесса SmartDNS, но и перенаправление запросов dnsmasq. Это помогает заметить ситуацию, когда VPN или другая служба изменила путь DNS.

При проверке с телефона нужно учитывать Private DNS и DNS внутри VPN, а с компьютера — встроенный DoH браузера: запросы могут проходить мимо роутера.

Поддержка OpenWrt и границы совместимости

Нативная версия OpenWrt использует procd, netifd, firewall4 и nftables. Для неё выпускаются IPK под OpenWrt 24.10 и APK под OpenWrt 25.12. Пакет выбирается по серии системы и точному значению DISTRIB_ARCH.

Одна и та же модель ASUS с Merlin и OpenWrt требует разных пакетов. Название на корпусе не определяет программное окружение.

На текущий момент таблица аппаратных проверок выглядит так:

Устройство

Прошивка

Вариант пакета

ASUS GT‑BE19000AI

Merlin 3006.102.9_0

ASUS с Entware aarch64-3.10

ASUS RT‑AC87U

Merlin 384.13_10

ASUS с Entware armv7-2.6

ASUS RT‑AC87U

OpenWrt 24.10

Нативный OpenWrt

Для остальных сочетаний моделей и прошивок наличие пакета нужной архитектуры означает возможность дальнейшей проверки. Успешная сборка и пробный запуск движка не заменяют испытание на устройстве.

На OpenWrt отдельно нужно учитывать hardware и software flow offloading: ускоренный поток может обходить NFQUEUE. Панель проверяет связанные настройки и показывает необходимые действия.

Как проверять результат

Для диагностики полезно различать три уровня.

  1. Процесс запущен. Движок принял параметры и работает.

  2. Пакеты поступают в NFQUEUE. Нужный трафик доходит до обработчика.

  3. Сервис работает с клиентского устройства. Проверены нужные пользователю действия.

Второй уровень в панели можно проверить за десятисекундный интервал: запустить проверку поступления пакетов и в это время открыть сервис с выбранного клиента.

Третий уровень требует проверки самого приложения. Для YouTube это запуск видео, перемотка и поведение буфера; для Discord — в том числе голос. Открытие главной страницы ещё не описывает работу всего сервиса. После изменения стратегии стоит создавать новые соединения.

Для дополнительных сетевых тестов предусмотрена отдельная установка DPI Detector. Его результаты можно приложить к отчёту вместе с диагностикой роутера.

Скорость и потребление ресурсов зависят от модели, стратегии, списков и состава трафика. Результат на GT‑BE19000AI нельзя автоматически переносить на RT‑AC87U или другую архитектуру.

Обновления и обмен рабочими настройками

Обновление из панели разделено на подготовку и установку. Перед установкой проверяются подпись выпуска закреплённым ключом, размер и SHA256 пакета. Сохраняются настройки и выбранное состояние службы. Автоматического отката версии пакета сейчас нет; отмена импорта — отдельный механизм.

В Build 73 каталог стратегий перенесён на новый HTTPS‑источник с сохранением проверки подписи и контрольных сумм.

Обратная связь устроена через «Экспорт / поделиться». Пользователь выбирает стратегию, зависимости, DNS и диагностические данные, указывает провайдера и описывает результат. Перед отправкой доступен предпросмотр; можно скачать JSON себе.

Передача проекту выполняется отдельной кнопкой «Отправить». Подключение канала отправки само по себе материалы не отправляет. Полученный профиль также не публикуется в каталоге автоматически.

Для воспроизводимости особенно полезны условия проверки: модель, прошивка, провайдер, сервис и влияние VPN. Профиль с таким описанием даёт больше информации, чем сообщение «у меня работает».

Как попробовать

Для ASUSWRT‑Merlin нужны SSH и установленный Entware в /opt. На OpenWrt используется нативный установщик.

Актуальные команды и пакеты находятся в быстром старте, инструкции OpenWrt и релизах.

После установки:

  1. Открыть http://IP‑роутера:90.

  2. Пройти проверки в «С чего начать» и, если требуется, подготовку ARK.

  3. Выбрать устройства, импортировать профиль или задать стратегию.

  4. При необходимости подключить и подтвердить SmartDNS.

  5. Запустить nfqws2 и проверить нужные действия в сервисе с выбранного устройства.

Дальше хочу расширять аппаратные проверки и каталог профилей, улучшать диагностику и проверять длительную работу вместе с другими сетевыми службами. Для этого полезны воспроизводимые отчёты с конкретными условиями подключения.

Репозиторий NFQWS2 ASUS Community · Таблица совместимости · Сообщить об ошибке

Спасибо авторам zapret2, nfqws2-keenetic, nfqws‑keenetic‑web, SmartDNS и DPI Detector. Код ASUS‑адаптации распространяется по MIT; сторонние компоненты сохраняют свои лицензии и авторство. Подробности — в описании происхождения компонентов.

ссылка на оригинал статьи https://habr.com/ru/articles/1104100/