Anonym-tsk / nfqws-keenetic

MIT License
661 stars 51 forks source link
anti-dpi entware keenetic openwrt

nfqws-keenetic

Пакеты для установки nfqws на маршрутизаторы с поддержкой opkg.

[!IMPORTANT] Данный материал подготовлен в научно-технических целях. Использование предоставленных материалов в целях отличных от ознакомления может являться нарушением действующего законодательства. Автор не несет ответственности за неправомерное использование данного материала.

[!WARNING] Вы пользуетесь этой инструкцией на свой страх и риск!

Автор не несёт ответственности за порчу оборудования и программного обеспечения, проблемы с доступом и потенцией. Подразумевается, что вы понимаете, что вы делаете.

Изначально написано для роутеров Keenetic с установленным entware. Однако, работоспособность также была проверена на прошивках Padavan и OpenWRT (читайте ниже).

Списки проверенного оборудования собираем в отдельной теме.

Поделиться опытом можно в разделе Discussions или в чате.

Если nfqws работает как-то не так, можете попробовать tpws.

Что это?

nfqws - утилита для модификации TCP соединения на уровне пакетов, работает через обработчик очереди NFQUEUE и raw сокеты.

Почитать подробнее можно на странице авторов (ищите по ключевому слову nfqws).

Подготовка Keenetic

[!IMPORTANT] Миграция с версии 1.x.x на 2.x.x:

Для определения версии выполните команду opkg info nfqws-keenetic - она работает только на версиях 2.x.x и возвращает информацию о пакете. Если ничего не вернула – у вас установлена старая версия.

Никакой специальной миграции не требуется, просто переустановите новую версию по инструкции ниже.


Установка на Keenetic и Entware

  1. Установите необходимые зависимости

    opkg update
    opkg install ca-certificates wget-ssl
    opkg remove wget-nossl
  2. Установите 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.

    Или можете выбрать репозиторий под конкретную архитектуру - `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) ``` mkdir -p /opt/etc/opkg echo "src/gz nfqws-keenetic https://anonym-tsk.github.io/nfqws-keenetic/mips" > /opt/etc/opkg/nfqws-keenetic.conf ``` - `mipsel-3.4` Keenetic Giga (KN-1010/1011), Ultra (KN-1810), Viva (KN-1910/1912), Hero 4G (KN-2310), Hero 4G+ (KN-2311), Giant (KN-2610), Skipper 4G (KN-2910), Hopper (KN-3810) ``` mkdir -p /opt/etc/opkg echo "src/gz nfqws-keenetic https://anonym-tsk.github.io/nfqws-keenetic/mipsel" > /opt/etc/opkg/nfqws-keenetic.conf ``` - `aarch64-3.10` Keenetic Peak (KN-2710), Ultra (KN-1811), Hopper SE (KN-3812), Keenetic Giga (KN-1012) ``` mkdir -p /opt/etc/opkg echo "src/gz nfqws-keenetic https://anonym-tsk.github.io/nfqws-keenetic/aarch64" > /opt/etc/opkg/nfqws-keenetic.conf ```
  3. Установите пакет

    opkg update
    opkg install nfqws-keenetic
  4. Установите веб-интерфейс (опционально)

    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

На маршшрутизаторах Keenetic можно создать политику доступа NFQWS (Приоритеты подключений – Политики доступа в интернет) и после перезапуска nfqws-keenetic будет работать только для устройств из этой политики. Если политика с таким именем не найдена, будет обрабатываться весь трафик.


Установка на OpenWRT

Пакет работает только с iptables. Если в вашей системе используется nftables, придется удалить nftables и firewall4, и установить firewall3 и iptables.

Проверить, что ваша система использует nftables:

ls -la /sbin/fw4
which nft
  1. Установите необходимые зависимости

    opkg update
    opkg install ca-certificates wget-ssl
    opkg remove wget-nossl
  2. Установите публичный ключ репозитория

    wget -O "/tmp/nfqws-keenetic.pub" "https://anonym-tsk.github.io/nfqws-keenetic/openwrt/nfqws-keenetic.pub"
    opkg-key add /tmp/nfqws-keenetic.pub
  3. Установите 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

  4. Установите пакет

    opkg update
    opkg install nfqws-keenetic
  5. Установите веб-интерфейс (опционально)

    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:


Полезное

  1. Конфиг-файл /opt/etc/nfqws/nfqws.conf
  2. Скрипт запуска/остановки /opt/etc/init.d/S51nfqws {start|stop|restart|reload|status}
  3. Вручную добавить домены в список можно в файле /opt/etc/nfqws/user.list (один домен на строке, поддомены учитываются автоматически)
  4. Автоматически добавленные домены /opt/etc/nfqws/auto.list
  5. Лог автоматически добавленных доменов /opt/var/log/nfqws.log
  6. Домены-исключения /opt/etc/nfqws/exclude.list (один домен на строке, поддомены учитываются автоматически)
  7. Проверить, что нужные правила добавлены в таблицу маршрутизации 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

Если ничего не работает...

  1. Если ваше устройство поддерживает аппаратное ускорение (flow offloading, hardware nat, hardware acceleration), то iptables могут не работать. При включенном offloading пакет не проходит по обычному пути netfilter. Необходимо или его отключить, или выборочно им управлять.
  2. На Keenetic можно попробовать выключить или наоборот включить сетевой ускоритель
  3. Возможно, стоит выключить службу классификации трафика IntelliQOS.
  4. Можно попробовать отключить IPv6 на сетевом интерфейсе провайдера через веб-интерфейс маршрутизатора.
  5. Можно попробовать запретить весь UDP трафик на 443 порт для отключения QUIC:

    Межсетевой экран → Домашняя сеть → Добавить правило
    Включить правило: Включено
    Описание: Блокировать QUIC
    Действие: Запретить
    Протокол: UDP
    Номер порта назначения: Равен 443
    Остальные параметры оставляем без изменений

Частые проблемы

  1. iptables: No chain/target/match by that name
    Не установлен пакет "Модули ядра подсистемы Netfilter". На Keenetic он появляется в списке пакетов только после установки "Протокол IPv6"
  2. can't initialize ip6tables table и/или Perhaps ip6tables or your kernel needs to be upgraded
    Не установлен пакет "Протокол IPv6". Также, проблема может появляться на старых прошивках 2.xx, выключите поддержку IPv6 в конфиге NFQWS
  3. Ошибки вида readlink: not found, dirname: not found
    Обычно возникают не на кинетиках. Решение - установить busybox: 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"

Как подобрать рабочую стратегию NFQWS

  1. Запустить скрипт и следовать его инструкциям

    opkg install curl
    /bin/sh -c "$(curl -fsSL https://github.com/Anonym-tsk/nfqws-keenetic/raw/master/common/strategy.sh)"

    Подробнее можно почитать на исходной странице

  2. Найденную стратегию вписать в конфиге /opt/etc/nfqws/nfqws.conf в параметр NFQWS_ARGS


Нравится проект? Поддержи автора здесь или тут. Купи ему немного :beers: или :coffee:!