Пакеты для установки nfqws
на маршрутизаторы с поддержкой opkg
.
[!IMPORTANT] Данный материал подготовлен в научно-технических целях. Использование предоставленных материалов в целях отличных от ознакомления может являться нарушением действующего законодательства. Автор не несет ответственности за неправомерное использование данного материала.
[!WARNING] Вы пользуетесь этой инструкцией на свой страх и риск!
Автор не несёт ответственности за порчу оборудования и программного обеспечения, проблемы с доступом и потенцией. Подразумевается, что вы понимаете, что вы делаете.
Изначально написано для роутеров Keenetic с установленным entware. Однако, работоспособность также была проверена на прошивках Padavan и OpenWRT (читайте ниже).
Списки проверенного оборудования собираем в отдельной теме.
Поделиться опытом можно в разделе Discussions или в чате.
Если nfqws работает как-то не так, можете попробовать tpws.
nfqws
- утилита для модификации TCP соединения на уровне пакетов, работает через обработчик очереди NFQUEUE и raw сокеты.
Почитать подробнее можно на странице авторов (ищите по ключевому слову nfqws
).
Прочитайте инструкцию полностью, прежде, чем начать что-то делать!
Рекомендуется игнорировать предложенные провайдером адреса DNS-серверов. Для этого в интерфейсе роутера отметьте пункты "игнорировать DNS от провайдера" в настройках IPv4 и IPv6.
Вместе с этим рекомендуется настроить использование DoT/DoH.
Установить entware на маршрутизатор по инструкции на встроенную память роутера или на USB-накопитель.
Через web-интерфейс Keenetic установить пакеты Протокол IPv6 (Network functions > IPv6) и Модули ядра подсистемы Netfilter (OPKG > Kernel modules for Netfilter - не путать с "Netflow"). Обратите внимание, что второй компонент отобразится в списке пакетов только после того, как вы отметите к установке первый.
В разделе "Интернет-фильтры" отключить все сторонние фильтры (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
.[!IMPORTANT] Миграция с версии 1.x.x на 2.x.x:
Для определения версии выполните команду
opkg info nfqws-keenetic
- она работает только на версиях 2.x.x и возвращает информацию о пакете. Если ничего не вернула – у вас установлена старая версия.Никакой специальной миграции не требуется, просто переустановите новую версию по инструкции ниже.
Установите необходимые зависимости
opkg update
opkg install ca-certificates wget-ssl
opkg remove wget-nossl
Установите opkg-репозиторий в систему
mkdir -p /opt/etc/opkg
echo "src/gz nfqws-keenetic https://anonym-tsk.github.io/nfqws-keenetic/all" > /opt/etc/opkg/nfqws-keenetic.conf
Репозиторий универсальный, поддерживаемые архитектуры: mipsel
, mips
, aarch64
, armv7
, x86
, x86_64
.
Установите пакет
opkg update
opkg install nfqws-keenetic
Установите веб-интерфейс (опционально)
opkg install nfqws-keenetic-web
[!NOTE] Для авторизации введите имя пользователя и пароль пользователя entware
[!TIP] По-умолчанию php использует только 8Мб памяти. Из-за этого ограничения, могут не загружаться большие списки файлов. Вы можете изменить конфигурацию php самостоятельно:
Откройте файл/opt/etc/php.ini
и измените следующие значенияmemory_limit = 32M post_max_size = 32M upload_max_filesize = 16M
opkg update
opkg upgrade nfqws-keenetic
opkg upgrade nfqws-keenetic-web
opkg remove --autoremove nfqws-keenetic-web nfqws-keenetic
opkg info nfqws-keenetic
opkg info nfqws-keenetic-web
На маршшрутизаторах Keenetic можно создать политику доступа NFQWS (Приоритеты подключений – Политики доступа в интернет) и после перезапуска nfqws-keenetic будет работать только для устройств из этой политики. Если политика с таким именем не найдена, будет обрабатываться весь трафик.
Пакет работает только с iptables
.
Если в вашей системе используется nftables
, придется удалить nftables
и firewall4
, и установить firewall3
и iptables
.
Проверить, что ваша система использует nftables
:
ls -la /sbin/fw4
which nft
Установите необходимые зависимости
opkg update
opkg install ca-certificates wget-ssl
opkg remove wget-nossl
Установите публичный ключ репозитория
wget -O "/tmp/nfqws-keenetic.pub" "https://anonym-tsk.github.io/nfqws-keenetic/openwrt/nfqws-keenetic.pub"
opkg-key add /tmp/nfqws-keenetic.pub
Установите opkg-репозиторий в систему
echo "src/gz nfqws-keenetic https://anonym-tsk.github.io/nfqws-keenetic/openwrt" > /etc/opkg/nfqws-keenetic.conf
Репозиторий универсальный, поддерживаемые архитектуры: mipsel
, mips
, aarch64
, armv7
, x86
, x86_64
.
Для добавления поддержки новых устройств, создайте Feature Request
Установите пакет
opkg update
opkg install nfqws-keenetic
Установите веб-интерфейс (опционально)
opkg install nfqws-keenetic-web
[!NOTE] NB: Все пути файлов, описанные в этой инструкции, начинающиеся с
/opt
, на OpenWRT будут начинаться с корня/
. Например конфиг расположен в/etc/nfqws/nfqws.conf
Для запуска/остановки используйте команду
service nfqws-keenetic {start|stop|restart|reload|status}
Файл настроек расположен по пути /opt/etc/nfqws/nfqws.conf
. Для редактирования можно воспользоваться встроенным редактором vi
или установить nano
.
# Интерфейс провайдера. Обычно `eth3` или `eth2.2` для проводного соединения, и `ppp0` для PPPoE
# Заполняется автоматически при установке
# Можно ввести несколько интерфейсов, например ISP_INTERFACE="eth3 nwg1"
ISP_INTERFACE="eth3"
# Стратегии обработки HTTPS и QUIC трафика
NFQWS_ARGS="--dpi-desync=fake,split2 --dpi-desync-ttl=0 --dpi-desync-repeats=16 --dpi-desync-split-pos=1 --dpi-desync-fooling=md5sig,badseq --dpi-desync-cutoff=d4 --dpi-desync-fake-tls=/opt/etc/nfqws/tls_clienthello.bin"
NFQWS_ARGS_QUIC="--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=11 --dpi-desync-cutoff=d4 --dpi-desync-fake-quic=/opt/etc/nfqws/quic_initial.bin"
# Стратегия обработки UDP трафика (не использует параметры из NFQWS_EXTRA_ARGS)
NFQWS_ARGS_UDP="--filter-udp=50000-50099 --dpi-desync=fake --dpi-desync-any-protocol --dpi-desync-repeats=6 --dpi-desync-cutoff=n2"
# Режим работы (auto, list, all)
NFQWS_EXTRA_ARGS="--hostlist=/opt/etc/nfqws/user.list --hostlist-auto=/opt/etc/nfqws/auto.list --hostlist-auto-debug=/opt/var/log/nfqws.log --hostlist-exclude=/opt/etc/nfqws/exclude.list"
# Обрабатывать ли IPv6 соединения
IPV6_ENABLED=1
# TCP порты для iptables
# Оставьте пустым, если нужно отключить обработку TCP
# Добавьте порт 80 для обработки HTTP (TCP_PORTS=443,80)
TCP_PORTS=443
# UDP порты для iptables
# Оставьте пустым, если нужно отключить обработку UDP
# Удалите порт 443, если не нужно обрабатывать QUIC
UDP_PORTS=443,50000:50099
# Логирование в Syslog
LOG_LEVEL=0
Стратегии применяются ко всем доменам из user.list
и auto.list
, за исключением доменов из exclude.list
.
В конфиге есть 3 варианта параметра NFQWS_EXTRA_ARGS
- это режим работы nfqws:
list
будут обрабатываться только домены из файла user.list
auto
кроме этого будут автоматически определяться недоступные домены и добавляться в список, по которому nfqws
обрабатывает трафик. Домен будет добавлен, если за 60 секунд будет 3 раза определено, что ресурс недоступенall
будет обрабатываться весь трафик кроме доменов из списка exclude.list
/opt/etc/nfqws/nfqws.conf
/opt/etc/init.d/S51nfqws {start|stop|restart|reload|status}
/opt/etc/nfqws/user.list
(один домен на строке, поддомены учитываются автоматически)/opt/etc/nfqws/auto.list
/opt/var/log/nfqws.log
/opt/etc/nfqws/exclude.list
(один домен на строке, поддомены учитываются автоматически)iptables-save | grep "queue-num 200"
Вы должны увидеть похожие строки
-A POSTROUTING -o eth3 -p tcp -m tcp --dport 443 -m connbytes --connbytes 1:6 --connbytes-mode packets --connbytes-dir original -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
Межсетевой экран → Домашняя сеть → Добавить правило
Включить правило: Включено
Описание: Блокировать QUIC
Действие: Запретить
Протокол: UDP
Номер порта назначения: Равен 443
Остальные параметры оставляем без изменений
iptables: No chain/target/match by that name
can't initialize ip6tables table
и/или Perhaps ip6tables or your kernel needs to be upgraded
readlink: not found
, dirname: not found
opkg install busybox
или отдельно пакеты opkg install coreutils-readlink coreutils-dirname
По-умолчанию, параметры для запуска nfqws
формируются из двух переменных – $NFQWS_ARGS $NFQWS_EXTRA_ARGS
.
Если вы хотите использовать несколько стратегий, можно разделять их параметром --new
.
Например, стратегия ниже применит опцию --dpi-desync=fake,split2
для HTTPS запросов к доменам из custom.list
,
а для всех остальных, соответствующих настройке NFQWS_EXTRA_ARGS
, будет использовать --dpi-desync=disorder2 --dpi-desync-fooling=md5sig,badseq
:
NFQWS_ARGS="--filter-tcp=443 --dpi-desync=fake,split2 --hostlist=custom.list --new --dpi-desync=disorder2 --dpi-desync-fooling=md5sig,badseq"
Запустить скрипт и следовать его инструкциям
opkg install curl
/bin/sh -c "$(curl -fsSL https://github.com/Anonym-tsk/nfqws-keenetic/raw/master/common/strategy.sh)"
Подробнее можно почитать на исходной странице
Найденную стратегию вписать в конфиге /opt/etc/nfqws/nfqws.conf
в параметр NFQWS_ARGS
Нравится проект? Поддержи автора здесь или тут. Купи ему немного :beers: или :coffee:!