BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
Обход DPI на роутерах Keenetic с помощью nfqws2
Translation pending
AI summary · README
SecurityShell · MakefileGitHub @nfqwsSelf-installOwner unconfirmed
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
Loading the full README. The saved excerpt is shown below.
Пакеты для установки nfqws2 на маршрутизаторы. Данный материал подготовлен в научно-технических целях. Использование предоставленных материалов в целях отличных от ознакомления может являться нарушением действующего законодательства. Автор не несет ответственности за неправомерное использование данного материала. Вы пользуетесь этой инструкцией на свой страх и риск! Автор не несёт ответственности за порчу оборудования и программного обеспечения, проблемы с доступом и потенцией. Подразумевается, что вы понимаете, что вы делаете.Read the full README ↗
Пакеты для установки nfqws2 на маршрутизаторы.
Новая улучшенная версия nfqws-keenetic
[!IMPORTANT] Данный материал подготовлен в научно-технических целях. Использование предоставленных материалов в целях отличных от ознакомления может являться нарушением действующего законодательства. Автор не несет ответственности за неправомерное использование данного материала.
[!WARNING] Вы пользуетесь этой инструкцией на свой страх и риск!
Автор не несёт ответственности за порчу оборудования и программного обеспечения, проблемы с доступом и потенцией. Подразумевается, что вы понимаете, что вы делаете.
Изначально написано для роутеров Keenetic/Netcraze с установленным entware. Однако, работоспособность также была проверена на прошивках Padavan и OpenWRT (читайте ниже).
Списки проверенного оборудования собираем в отдельной теме.
Поделиться опытом можно в разделе Discussions или в чате.
nfqws2 - утилита для модификации TCP соединения на уровне пакетов, работает через обработчик очереди NFQUEUE и raw сокеты.
Почитать подробнее можно на странице авторов.
Прочитайте инструкцию полностью, прежде, чем начать что-то делать!
Рекомендуется игнорировать предложенные провайдером адреса DNS-серверов. Для этого в интерфейсе роутера отметьте пункты "игнорировать DNS от провайдера" в настройках IPv4 и IPv6.
Вместе с этим рекомендуется настроить использование DoT/DoH.
Установить entware на маршрутизатор по инструкции на встроенную память роутера или на USB-накопитель.
Через web-интерфейс Keenetic/Netcraze установить пакет Модули ядра подсистемы Netfilter (OPKG > Kernel modules for Netfilter). На старых прошивках он доступен к установке только после выбора компонента Протокол IPv6 (Network functions > IPv6).
В разделе "Интернет-фильтры" отключить все сторонние фильтры (NextDNS, SkyDNS, Яндекс DNS и другие).
Все дальнейшие команды выполняются не в cli роутера, а в среде entware. Подключиться в неё можно несколькими способами:
telnet 192.168.1.1, а потом exec sh.root, пароль по умолчанию - keenetic, порт - 222 или 22). Для этого в терминале написать ssh 192.168.1.1 -l root -p 222.Перед установкой удалите nfqws-keenetic (конфиги можно сохранить)
opkg remove nfqws-keenetic-web nfqws-keenetic
Установите необходимые зависимости
opkg update
opkg install ca-certificates wget-ssl
opkg remove wget-nossl
Установите opkg-репозиторий в систему
mkdir -p /opt/etc/opkg
echo "src/gz nfqws2-keenetic https://nfqws.github.io/nfqws2-keenetic/all" > /opt/etc/opkg/nfqws2-keenetic.conf
Репозиторий универсальный, поддерживаемые архитектуры: mipsel, mips, mips64, aarch64, armv7, x86, x86_64.
mips-3.4 Keenetic Giga SE (KN-2410), Ultra SE (KN-2510), DSL (KN-2010), Launcher DSL (KN-2012), Duo (KN-2110), Skipper DSL (KN-2112), Hopper DSL (KN-3610); Zyxel Keenetic DSL, LTE, VOX
mkdir -p /opt/etc/opkg
echo "src/gz nfqws2-keenetic https://nfqws.github.io/nfqws2-keenetic/mips" > /opt/etc/opkg/nfqws2-keenetic.conf
mipsel-3.4 Keenetic 4G (KN-1212), Omni (KN-1410), Extra (KN-1710/1711/1713), Giga (KN-1010/1011), Ultra (KN-1810), Viva (KN-1910/1912/1913), Hero 4G (KN-2310/2311), Giant (KN-2610), Skipper 4G (KN-2910), Hopper (KN-3810); Zyxel Keenetic II / III, Extra, Extra II, Giga II / III, Omni, Omni II, Viva, Ultra, Ultra II
mkdir -p /opt/etc/opkg
echo "src/gz nfqws2-keenetic https://nfqws.github.io/nfqws2-keenetic/mipsel" > /opt/etc/opkg/nfqws2-keenetic.conf
aarch64-3.10 Keenetic Peak (KN-2710), Ultra (KN-1811), Hopper (KN-3811), Hopper SE (KN-3812), Giga (KN-1012)
mkdir -p /opt/etc/opkg
echo "src/gz nfqws2-keenetic https://nfqws.github.io/nfqws2-keenetic/aarch64" > /opt/etc/opkg/nfqws2-keenetic.conf
Установите пакет
opkg update
opkg install nfqws2-keenetic
Установите веб-интерфейс (опционально)
opkg update
opkg upgrade nfqws2-keenetic
opkg remove --autoremove nfqws2-keenetic
opkg info nfqws2-keenetic
На Keenetic/Netcraze можно создать политику доступа NFQWS (Приоритеты подключений – Политики доступа в интернет) и после перезапуска nfqws2-keenetic будет работать только для устройств из этой политики. Не забудьте поставить галочку на интерфейсе провайдера в созданной политике.
Можно сделать политику исключения, добавив в конфиг POLICY_EXCLUDE=1. Тогда будет обрабатываться трафик для всех устройств, кроме тех, что добавлены в политику NFQWS.
Имя политики можно изменить в конфиге, параметр POLICY_NAME.
Если политика с таким именем не найдена, будет обрабатываться весь трафик.
opkgУстановите необходимые зависимости
opkg update
opkg install ca-certificates wget-ssl
opkg remove wget-nossl
Установите публичный ключ репозитория
wget -O "/tmp/nfqws2-keenetic.pub" "https://nfqws.github.io/nfqws2-keenetic/openwrt/nfqws2-keenetic.pub"
opkg-key add /tmp/nfqws2-keenetic.pub
Установите репозиторий в систему
echo "src/gz nfqws2-keenetic https://nfqws.github.io/nfqws2-keenetic/openwrt" > /etc/opkg/nfqws2-keenetic.conf
Репозиторий универсальный, поддерживаемые архитектуры: mipsel, mips, mips64, aarch64, armv7, x86, x86_64.
Для добавления поддержки новых устройств, создайте Feature Request
Установите пакет
opkg update
opkg install nfqws2-keenetic
Установите веб-интерфейс (опционально)
apkУстановите необходимые зависимости
apk --update-cache add ca-certificates wget-ssl
apk del wget-nossl
Установите публичный ключ репозитория
wget -O "/etc/apk/keys/nfqws2-keenetic.pem" "https://nfqws.github.io/nfqws2-keenetic/openwrt/nfqws2-keenetic.pem"
Установите репозиторий в систему
echo "https://nfqws.github.io/nfqws2-keenetic/openwrt/packages.adb" > /etc/apk/repositories.d/nfqws2-keenetic.list
Репозиторий универсальный, поддерживаемые архитектуры: mipsel, mips, mips64, aarch64, armv7, x86, x86_64.
Для добавления поддержки новых устройств, создайте Feature Request
Установите пакет
apk --update-cache add nfqws2-keenetic
Установите веб-интерфейс (опционально)
[!NOTE] NB: Все пути файлов, описанные в этой инструкции, начинающиеся с
/opt, на OpenWRT будут начинаться с корня/. Например конфиг расположен в/etc/nfqws2/nfqws2.confДля запуска/остановки используйте команду
service nfqws2-keenetic {start|stop|restart|reload|status}
Файл настроек расположен по пути /opt/etc/nfqws2/nfqws2.conf. Для редактирования можно воспользоваться встроенным редактором vi или установить nano.
# Интерфейс провайдера. Обычно `eth3` или `eth2.2` для проводного соединения, и `ppp0` для PPPoE
# Заполняется автоматически при установке
# Можно ввести несколько интерфейсов, например ISP_INTERFACE="eth3 nwg1"
# Для поиска интерфейса можно воспользоваться командами `route` или `ifconfig`
ISP_INTERFACE="..."
# Аргументы запуска nfqws2, сюда добавляйте ваши lua скрипты
NFQWS_BASE_ARGS="..."
# Стратегии обработки HTTPS и QUIC трафика
NFQWS_ARGS="..."
NFQWS_ARGS_QUIC="..."
# Стратегия обработки UDP трафика (не использует параметры из NFQWS_EXTRA_ARGS)
NFQWS_ARGS_UDP="..."
# Режим работы (auto, list, all)
NFQWS_EXTRA_ARGS="..."
# IP-списки
NFQWS_ARGS_IPSET="..."
# Дополнительные стратегии
NFQWS_ARGS_CUSTOM="..."
# Обрабатывать ли IPv6 соединения
IPV6_ENABLED=0|1
# TCP порты для iptables
# Оставьте пустым, если нужно отключить обработку TCP
# Добавьте порт 80 для обработки HTTP (TCP_PORTS=443,80)
TCP_PORTS=443(,80)
# UDP порты для iptables
# Оставьте пустым, если нужно отключить обработку UDP
# Удалите порт 443, если не нужно обрабатывать QUIC
UDP_PORTS=443(,50000:50099)
# Политика доступа (только для Keenetic/Netcraze)
POLICY_NAME="nfqws"
# Режим работы политики доступа
# 0 - обрабатывается трафик только для устройств в политике
# 1 - обрабатывается трафик для всех устройств, кроме добавленных в политику
POLICY_EXCLUDE=0|1
# Файл для записи дебаг-лога
LOG_DEBUG_PATH="@/opt/var/log/nfqws2-debug.log"
# Логирование в Syslog
LOG_LEVEL=0|1
Стратегии применяются ко всем доменам из user.list и auto.list, за исключением доменов из exclude.list.
В конфиге есть 3 варианта параметра NFQWS_EXTRA_ARGS - это режим работы nfqws2:
$MODE_LIST будут обрабатываться только домены из файла user.list$MODE_AUTO кроме этого будут автоматически определяться недоступные домены и добавляться в список, по которому nfqws обрабатывает трафик. Домен будет добавлен, если за 60 секунд будет 3 раза определено, что ресурс недоступен$MODE_ALL будет обрабатываться весь трафик кроме доменов из списка exclude.listТакже, есть два IP-списка: ipset.list и ipset_exclude.list.
Адреса из списков применяются в любых режимах работы.
/opt/etc/nfqws2/nfqws2.conf/opt/etc/init.d/S51nfqws2 {start|stop|restart|reload|status}/opt/etc/nfqws2/lists/user.list (один домен на строке, поддомены учитываются автоматически)/opt/etc/nfqws2/lists/auto.list/opt/var/log/nfqws2.log/opt/etc/nfqws2/lists/exclude.list (один домен на строке, поддомены учитываются автоматически)ipset.list (на каждой строчке ip или cidr ipv4, или ipv6)ipset_exclude.listiptables-save | grep nfqws
Вы должны увидеть похожие строки
-A nfqws_post -o eth3 -p tcp -m mark ! --mark 0x40000000/0x40000000 -m multiport --dports 443,2053,2083,2087,2096,8443 -m tcp --tcp-flags RST RST -j NFQUEUE --queue-num 300 --queue-bypass
Проверка доступности легко обманывает. Ниже — наблюдения, собранные при настройке пакета на домашнем маршрутизаторе (Netcraze NC-1812).
curl. Они дают противоположные результаты:
один и тот же сайт открывался в браузере при обрыве у curl, и наоборот — curl
получал 200 там, где браузер рисовал белую страницу. Причина простая: curl тянет
HTML одного адреса, а браузер идёт на десятки хостов статики, и TLS-стек у них разный.GET.ipset.listЕсли наполняете ipset.list самостоятельно, не кладите туда целые /13 и подобные
диапазоны CDN. Замер на моей сети: хосты внутри 104.16.0.0/13 и 172.64.0.0/13 дали
70,8 % неудачных TLS-рукопожатий (34 из 48 прогонов), хосты вне этих диапазонов —
0 % (0 из 69). При этом 162.158.0.0/15 не давал сбоев ни разу (9 из 9). Похоже на
bol-van/zapret#1756: при сбое пересборки
TLS оригинальный пакет уходит раньше подменённого, и вместо ожидаемого результата
получается таймаут рукопожатия.
Лечится добавлением проблемного диапазона в ipset_exclude.list. Править сам ipset.list
смысла нет — при следующем обновлении списка правка потеряется.
Если домен публикует DNS-запись HTTPS (RR тип 65) с параметром ech, клиент шифрует имя
хоста в ClientHello. nfqws2 в этом случае имя не видит и не может сопоставить соединение
со списками: профили, привязанные к user.list, exclude.list и другим хостлистам, для
такого домена не выбираются, и правки этих файлов на него не влияют.
Проверить домен можно так:
opkg install bind-dig # Entware и OpenWRT до 24.10 включительно
apk add bind-dig # OpenWRT 25.xx и Snapshot
dig +short HTTPS example.com
Если в выводе есть ech=, имя хоста шифруется. Ставить пакет на роутер не обязательно:
запрос можно выполнить с любой машины, где есть dig.
Записи различаются даже у соседних поддоменов одной зоны — проверено 17.09.2026, 3 запроса на домен:
| Домен | HTTPS RR | ech |
|---|---|---|
cloudflare.com | есть | нет |
developers.cloudflare.com | есть | нет |
research.cloudflare.com | есть | есть |
Поэтому проверять нужно тот домен, к которому реально обращается клиент, а не тот, что
виден в адресной строке: браузер и десктопное приложение одного сервиса часто ходят на
разные поддомены. Для доменов с ech настройка по имени неприменима; остаётся работа
по адресам (ipset.list) либо отключение ECH на стороне клиента, если он это позволяет.
iptables: No chain/target/match by that name
Не установлен пакет "Модули ядра подсистемы Netfilter". На Keenetic/Netcraze он появляется в списке пакетов только после установки "Протокол IPv6"can't initialize ip6tables table и/или Perhaps ip6tables or your kernel needs to be upgraded
Не установлен пакет "Протокол IPv6". Также, проблема может появляться на старых прошивках 2.xx, выключите поддержку IPv6 в конфиге NFQWS2readlink: not found, dirname: not found
Обычно возникают не на кинетиках. Решение - установить busybox: opkg install busybox или отдельно пакеты opkg install coreutils-readlink coreutils-dirnameFailed to download the package list from https://nfqws.github.io/nfqws2-keenetic/all/Packages.gz
Скорее всего не устеновлен пакет wget-ssl. Если вы уверены, что он установлен – переустановите его: opkg install --force-reinstall wget-sslМожно добавить дополнительные стратегии в опции NFQWS_ARGS_CUSTOM в конфиге и разделять их параметром --new.
Например, стратегия ниже применит опцию --dpi-desync=fake,split2 для HTTPS запросов к доменам из custom.list,
а для HTTP запросов будет использовать --dpi-desync=disorder2 --dpi-desync-fooling=md5sig,badseq:
NFQWS_ARGS_CUSTOM="--filter-tcp=443 --dpi-desync=fake,split2 --hostlist=custom.list --new --filter-tcp=80 --dpi-desync=disorder2 --dpi-desync-fooling=md5sig,badseq"
Нравится проект? Поддержи автора здесь или тут. Купи ему немного :beers: или :coffee:!