README
¶
keen-pbr - Инструменты для выборочной маршрутизации на роутерах Keenetic
keen-pbr не является официальным продуктом компании Keenetic и никак с ней не связан. Этот пакет создан сторонним разработчиком и предоставляется "как есть" без какой-либо гарантии, автор не несёт ответственности за повреждение Вашего устройства, все действия Вы выполняете на свой страх и риск.
Вопросы и предложения касательно пакета можно направлять в GitHub Issue и в Telegram-чат: https://t.me/keen_pbr.
> README in English <
⚠️Для владельцев роутеров Keenetic без USB-разъёма:
- Убедитесь, что вы обновились как минимум до версии
v-1.3.0-2 - Отключите автообновление списков после установки/обновления пакета
Всё это поможет предотвратить излишний износ NAND-памяти роутера.
keen-pbr — это пакет для маршрутизации на основе правил для роутеров Keenetic.
Telegram-чат проекта: https://t.me/keen_pbr
С помощью этого пакета можно настроить выборочную маршрутизацию для указанных IP-адресов, подсетей и доменов. Это необходимо, если вам понадобилось организовать защищенный доступ к определенным ресурсам, либо выборочно разделить трафик на несколько провайдеров (напр. трафик до сайта А идёт через одного оператора, а остальной трафик - через другого)
Пакет использует ipset для того, чтобы хранить большое количество адресов в памяти роутера без существенного увеличения нагрузки, а также dnsmasq для того, чтобы пополнять данный ipset IP-адресами, которые резолвят клиенты локальной сети.
Для настройки маршрутизации пакет создает скрипты в директории /opt/etc/ndm/netfilter.d и /opt/etc/ndm/ifstatechanged.d.
Особенности
- Маршрутизация на основе доменов через
dnsmasq - Маршрутизация на основе IP-адресов через
ipset - Настраиваемые таблицы маршрутизации и приоритеты
- Автоматическая настройка для списков
dnsmasq
Принцип работы
Данный пакет содержит следующие скрипты и утилиты:
/opt
├── /usr
│ └── /bin
│ └── keen-pbr # Утилита для скачивания и обработки списков, их импорта в ipset, а также генерации файлов конфигурации для dnsmasq
└── /etc
├── /keen-pbr
│ ├── /keen-pbr.conf # Файл конфигурации keen-pbr
│ ├── /lists.d # В эту папку keen-pbr будет помещать скачанные и локальные списки. Не кладите сюда ничего сами, т.к. файлы из этой папки удаляются после каждого запуска команды "keen-pbr download".
│ └── /local.lst # Список IP/CIDR/domain по умолчанию
├── /ndm
│ ├── /netfilter.d
│ │ └── 50-keen-pbr-fwmarks.sh # Скрипт добавляет iptables правило для маркировки пакетов в ipset с определённым fwmark
│ └── /ifstatechanged.d
│ └── 50-keen-pbr-routing.sh # Скрипт добавляет ip rule для направления пакетов с fwmark в нужную таблицу маршрутизации и создаёт её с нужным default gateway
├── /cron.daily
│ └── 50-keen-pbr-lists-update.sh # Скрипт для автоматического ежедневного обновления списков
└── /dnsmasq.d
└── (config files) # Папка с сгенерированными конфигурациями для dnsmasq, заставляющими его класть IP-адреса доменов из списков в нужный ipset
Маршрутизация пакетов на основе IP-адресов и подсетей
keen-pbr автоматически загружает ip-адреса и подсети из списков в нужные ipset. Далее пакеты на IP-адреса, которые попадают в этот ipset, маркируются определённым fwmark и на основе правил маршрутизации переадресовываются на конкретный интерфейс.
Схема процесса:
Маршрутизация пакетов на основе доменов
Для маршрутизации на основе доменов используется dnsmasq. Каждый раз, когда клиенты локальной сети делают DNS-запрос, dnsmasq проверяет, есть ли домен в списках, и если есть, то добавляет его ip-адреса в ipset.
[!NOTE]
Чтобы маршрутизация доменов работала, клиентские устройства не должны использовать собственные DNS-сервера. Их DNS-сервером должен быть IP роутера, иначеdnsmasqне увидит эти пакеты и не добавит ip-адреса в нужныйipset.
[!IMPORTANT]
Некоторые приложения и игрушки используют собственные способы получения ip-адресов для своих серверов. Для таких приложений маршрутизация по доменам не будет работать, т.к. эти приложения не делают DNS-запросов. Вам придётся узнавать IP-адреса/подсети серверов этих приложений и добавлять их в списки самостоятельно.
Схема процесса:
Предварительная подготовка роутера
- Работоспособность пакета проверялась на Keenetic OS версии 4.2.1. Работоспособность на версии 3.x.x возможна, но не гарантируется.
- Необходимо установить дополнительные компоненты на ваш роутер в разделе Управление -> Параметры системы:
- Сетевые функции / Протокол IPv6
- Этот компонент необходим для возможности установки компонента "Модули ядра подсистемы Netfilter".
- Пакеты OPKG / Поддержка открытых пакетов
- Пакеты OPKG / Модули ядра подсистемы Netfilter
- Пакеты OPKG / Пакет расширения Xtables-addons для Netfilter
- На данный момент этот пакет не обязателен, поскольку его возможности не используются keen-pbr, но его возможности могут пригодиться в будущем. Инструкция к модулю доступна по ссылке.
- Сетевые функции / Протокол IPv6
- Вам необходимо установить среду Entware на Keenetic (инструкция), для этого понадобится USB-накопитель, который будет постоянно вставлен в роутер
- Также необходимо настроить второе (третье, четвёртое, ...) соединение, через которое вы хотите направить трафик попадающий под списки. Это может быть VPN-соединение или второй провайдер (multi-WAN).
- Ваши устройства должны быть в Политике доступа в интернет по умолчанию (раздел Приоритеты подключений -> Применение политик). В противном случае устройство может игнорировать все правила, применённые keen-pbr.
Установка и обновление
Автоматическая установка/обновление
Подключитесь к вашему OPKG по SSH и выполните следующую команду:
opkg install curl jq && curl -sOfL https://raw.githubusercontent.com/maksimkurb/keen-pbr/refs/heads/main/install.sh && sh install.sh
[!CAUTION]
Если Entware установлен на внутреннюю память роутера, обязательно отключите автообновление списков, чтобы предотвратить износ памяти!
Ручная установка/обновление
-
Перейдите на страницу релизов и скопируйте URL
.ipkфайла для вашей архитектуры для последней версии. -
Скачайте
.ipkфайл на ваш маршрутизатор:curl -LO <URL-to-latest-ipk-file-for-your-architecture> -
Установите его с помощью OPKG:
opkg install keen-pbr-*-entware.ipk
Во время установки пакет keen-pbr заменяет оригинальный файл конфигурации dnsmasq.
Резервная копия будет сохранена в /opt/etc/dnsmasq.conf.orig.
[!CAUTION]
Если Entware установлен на внутреннюю память роутера, обязательно отключите автообновление списков, чтобы предотвратить износ памяти!
Настройка
Отредактируйте следующие файлы конфигурации в соответствии с вашими потребностями (подробные инструкции ниже):
- (обязательно) Настройке пакет keen-pbr
- In this file, you must configure the required ipsets, lists, and output interfaces
- (обязательно) Скачайте удалённые списки (если есть списки с
url="...") - (опционально) Отключите автообновление списков
- If Entware is installed on internal memory, it is strongly recommended to disable lists auto-update to prevent NAND-flash memory wear
- (опционально) Настройте DNS over HTTPS (DoH)
- dnsmasq можно перенастроить под свои нужды, например заменить upstream DNS сервер на свой
- Рекомендуется установить и настроить пакет
dnscrypt-proxy2, чтобы ваши DNS-запросы были защищены DNS-over-HTTPS (DoH)
- (обязательно) Включение DNS Override
1. Настройка пакета keen-pbr
Откройте /opt/etc/keen-pbr/keen-pbr.conf и отредактируйте его по мере необходимости:
- Необходимо поправить поле
interfaces, указав туда интерфейс, через который будет идти исходящий трафик, попавший под критерии списков. - Также необходимо добавить списки (локальный или удалённый по URL)
2. Скачивание удалённых списков
После редактирования конфигурационного файла введите данную команду, чтобы скачать файлы списков.
Эту команду необходимо выполнять только если у Вас есть хотя-бы один удалённый список (поле url указано хотя-бы для одного списка).
keen-pbr download
3. Отключение автообновления списков
[!CAUTION] Если Entware установлен на внутреннюю память роутера, обязательно отключите ежедневное автоматическое обновление списков, чтобы предотвратить износ памяти.
Эту команду нужно выполнять после каждого обновления пакета keen-pbr!
Для того, чтобы отключить автообновление списков, удалите файл /opt/etc/cron.daily/50-keen-pbr-lists-update.sh:
rm /opt/etc/cron.daily/50-keen-pbr-lists-update.sh
Вы всегда сможете обновить списки вручную.
4. Настройка DNS over HTTPS (DoH)
[!TIP]
Обычный протокол DNS является не безопасным, поскольку все запросы передаются в открытом виде. Это значит, что провайдер или злоумышленники могут перехватить и подменить ваши DNS-запросы (DNS spoofing), направив вас на ненастоящий веб-сайт.Чтобы обезопасить себя от этого, рекомендуется настроить пакет
dnscrypt-proxy2, который будет использовать протокол DNS-over-HTTPS (DoH) для шифрования DNS-запросов. Подробнее о DoH можно прочитать здесь.
Для настройки DoH на роутере необходимо выполнить следующие действия:
-
Скачиваем
dnscrypt-proxy2opkg install dnscrypt-proxy2 -
Редактируем файл
/opt/etc/dnscrypt-proxy.toml# ... (здесь другие строчки конфига, их удалять не нужно) # Указываем upstream-серверы (необходимо убрать решётку перед server_names) server_names = ['adguard-dns-doh', 'cloudflare-security', 'google'] # Указываем порт 9153 для прослушивания DNS-запросов listen_addresses = ['[::]:9153'] # ... (здесь другие строчки конфига, их удалять не нужно) -
Редактируем файл
/opt/etc/dnsmasq.conf# ... (здесь другие строчки конфига, их удалять не нужно) # Меняем сервер по умолчанию 8.8.8.8 на наш dnscrypt-proxy2 server=127.0.0.1#9153 # ... (здесь другие строчки конфига, их удалять не нужно) -
Проверяем валидность конфигурации
# Проверяем конфиг dnsmasq dnsmasq --test # Проверяем конфиг dnscrypt-proxy2 (запускать только если установлен dnscrypt-proxy2) dnscrypt-proxy -config /opt/etc/dnscrypt-proxy.toml -check
5. Включение DNS Override
Для того, чтобы Keenetic использовал dnsmasq в качестве DNS-сервера, необходимо включить DNS Override.
[!NOTE]
Данный этап не нужен, если ваши списки содержат только IP-адреса и CIDR и не указывают доменных имён.
- Откройте следующий URL в браузере: http://my.keenetic.net/a
- Введите следующие команды по очереди:
opkg dns-overridesystem configuration save
- Обязательно перезагрузите роутер.
[!TIP] Если вы решите отключить DNS-Override в будущем, выполните команды
no opkg dns-overrideиsystem configuration save.
6. Проверка работы маршрутизации
Убедитесь, что маршрутизация на основе политики работает должным образом.
Для этого откройте адрес, которого нет в ваших списках (напр. https://2ip.ru) и адрес, который есть в ваших списках (напр. https://ifconfig.co) и сравните IP-адреса, они должны быть разными.
Обновление списков
- Списки обновляются автоматически ежедневно с помощью
cron.- Если Entware установлен на внутреннюю память, пожалуйста, отключите автообновление списков, чтобы предотвратить износ памяти.
В случае, если вы редактировали настройки keen-pbr.conf и хотите обновить списки вручную, выполните следующие команды по SSH:
# Если вы добавили новые удалённые списки, необходимо скачать их
keen-pbr download
# Запустите следующие команды для применения новой конфигурации:
/opt/etc/init.d/S80keen-pbr restart
/opt/etc/init.d/S56dnsmasq restart
Устранение неполадок
Если возникают проблемы, проверьте ваши конфигурационные файлы и логи.
Убедитесь, что списки были загружены правильно, и dnsmasq работает с обновленной конфигурацией.
Перед проверкой работоспособности на клиентской машине необходимо очистить DNS-кеш.
Сделать это выполнив команду в консоли (для Windows): ipconfig /flushdns.
Также выполните следующую команду, чтобы проверить, правильно ли работает keen-pbr (вывод этой команды будет очень полезен, если вы хотите получить помощь в Telegram-чате):
# Проверка, что dnsmasq запущен корректно
/opt/etc/init.d/S80keen-pbr check
# Проверка состояния маршрутизации
/opt/etc/init.d/S80keen-pbr self-check
Вы можете задать вопросы в Telegram-чате проекта: https://t.me/keen_pbr
Я всё поломал, интернет пропал вовсе
Можно временно отключить данную конфигурацию, выключив OPKG в настройках (выбрав раздел="не указан") и перезагрузив роутер.
Если желаете полностью удалить пакет, необходимо выполнить следующие шаги:
- По SSH выполнить:
opkg remove keen-pbr dnsmasq dnscrypt-proxy2 - Отключить DNS-override (http://my.keenetic.net/a):
no opkg dns-overridesystem configuration save
- Выключить OPKG (если не пользуетесь им для других нужд)
- Перезагрузить роутер
Полное удаление пакета
- По SSH выполнить:
opkg remove keen-pbr dnsmasq dnscrypt-proxy2 - Отключить DNS-override (http://my.keenetic.net/a):
no opkg dns-overridesystem configuration save
- Выключить OPKG (если не пользуетесь им для других нужд)
- Перезагрузить роутер
Приятного использования маршрутизации на основе политики с keen-pbr!
Documentation
¶
There is no documentation for this package.