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

Прокомментировать Просмотры: 0

Главное окно NFQWS2 ASUS Community с темой Rabbit

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

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

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

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

На снимках экрана показаны демонстрационные настройки.

На чём основан проект и что сделано в рамках адаптации

В основе проекта лежат 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. Для OpenWrt 24.10 выпускаются пакеты IPK, для OpenWrt 25.12 — APK. Пакет подбирается по серии системы и точному значению 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 также необходимо учитывать аппаратный и программный 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; за сторонними компонентами сохраняются их лицензии и авторство. Подробнее — в описании происхождения компонентов.

 

Источник

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов