keen-pbr не является официальным продуктом компании Keenetic и никак с ней не связан. Этот пакет создан сторонним разработчиком и предоставляется "как есть" без какой-либо гарантии, автор не несёт ответственности за повреждение Вашего устройства, все действия Вы выполняете на свой страх и риск.
Вопросы и предложения касательно пакета можно направлять в GitHub Issue и в Telegram-чат: https://t.me/keen_pbr.
- Убедитесь, что вы обновились как минимум до версии
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
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.
🆕 Обновление с версии 1.x.x на 2.x.x
- Поменялись пути к конфигурационным файлам.
- CLI-утилита переименована из
keenetic-pbr
вkeen-pbr
При обновлении из версии 1.x.x на 2.x.x необходимо выполнить следующие действия:
- Удалите старый пакет:
opkg remove keenetic-pbr
- Переместите конфигурационные файлы в новую папку:
# Копируем папку keenetic-pbr в keen-pbr cp -r /opt/etc/keenetic-pbr /opt/etc/keen-pbr # Переименовываем keenetic-pbr.conf в keen-pbr.conf mv /opt/etc/keen-pbr/keenetic-pbr.conf /opt/etc/keen-pbr/keen-pbr.conf # Заменяем пути внутри файла keen-pbr.conf sed -i 's|/keenetic-pbr/|/keen-pbr/|g' /opt/etc/keen-pbr/keen-pbr.conf # Удаляем старые сгенерированные файлы dnsmasq (они более не нужны) rm /opt/etc/dnsmasq.d/*.keenetic-pbr.conf /opt/etc/dnsmasq.d/*.keenetic-pbr.conf.md5
- Следуйте дальнейшим инструкциям по установке с нуля ниже.
-
Установите необходимые зависимости:
opkg update opkg install ca-certificates wget-ssl opkg remove wget-nossl
-
Установите opkg-репозиторий в систему
mkdir -p /opt/etc/opkg echo "src/gz keen-pbr https://maksimkurb.github.io/keen-pbr" > /opt/etc/opkg/keen-pbr.conf
Поддерживаемые архитектуры:
mips
,mipsel
,aarch64
. -
Установите пакет:
opkg update opkg install keen-pbr
Во время установки пакет
keen-pbr
заменяет оригинальный файл конфигурации dnsmasq. Резервная копия будет сохранена в/opt/etc/dnsmasq.conf.orig
.
Caution
Если Entware установлен на внутреннюю память роутера, обязательно отключите автообновление списков, чтобы предотвратить износ памяти!
opkg update
opkg upgrade keen-pbr
opkg remove --autoremove keen-pbr
opkg info keen-pbr
Отредактируйте следующие файлы конфигурации в соответствии с вашими потребностями (подробные инструкции ниже):
- (обязательно) Настройке пакет keen-pbr
- В данном файле вы должны настроить необходимые ipset, списки и выходные интерфейсы
- (обязательно) Скачайте удалённые списки (если есть списки с
url="..."
) - (опционально) Отключите автообновление списков
- Если Entware установлен на внутреннюю память, то настоятельно рекомендуется отключить автообновление списков, чтобы предотвратить износ NAND-памяти
- (опционально) Настройте DNS over HTTPS (DoH)
- dnsmasq можно перенастроить под свои нужды, например заменить upstream DNS сервер на свой
- Рекомендуется установить и настроить пакет
dnscrypt-proxy2
, чтобы ваши DNS-запросы были защищены DNS-over-HTTPS (DoH)
- (обязательно) Включение DNS Override
Откройте /opt/etc/keen-pbr/keen-pbr.conf
и отредактируйте его по мере необходимости:
- Необходимо поправить поле
interfaces
, указав туда интерфейс, через который будет идти исходящий трафик, попавший под критерии списков. - Также необходимо добавить списки (локальный или удалённый по URL)
# ... (здесь другие строчки конфига, их удалять не нужно)
[[ipset]]
lists = [
"epic-games", # Названия списков должны совпадать с теми,
"notion-site", # которые мы указали внизу в секциях [[list]]
"local-file",
"local"
]
# ... (здесь другие строчки конфига, их удалять не нужно)
[ipset.routing]
# В поле `interfaces` указываем наши VPN-интерфейсы.
# Их названия можно узнать, введя команду `keen-pbr interfaces`
interfaces = ["nwg1", "nwg4"]
# ... (здесь другие строчки конфига, их удалять не нужно)
# В самом низу конфига указываем наши списки
[[list]]
list_name = "local" # Это название мы должны указать в поле "lists=[...]" в ipset
hosts = [
"ifconfig.co",
"myip2.ru"
]
[[list]]
list_name = "local-file"
file = "/opt/etc/keen-pbr/local.lst"
[[list]]
list_name = "epic-games"
url = "https://raw.githubusercontent.com/v2fly/domain-list-community/refs/heads/master/data/epicgames"
[[list]]
list_name = "notion-site"
url = "https://raw.githubusercontent.com/v2fly/domain-list-community/refs/heads/master/data/notion"
После редактирования конфигурационного файла введите данную команду, чтобы скачать файлы списков.
Эту команду необходимо выполнять только если у Вас есть хотя-бы один удалённый список (поле url
указано хотя-бы для одного списка).
keen-pbr download
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
Вы всегда сможете обновить списки вручную.
Tip
Обычный протокол DNS является не безопасным, поскольку все запросы передаются в открытом виде. Это значит, что провайдер или злоумышленники могут перехватить и подменить ваши DNS-запросы (DNS spoofing), направив вас на ненастоящий веб-сайт.
Чтобы обезопасить себя от этого, рекомендуется настроить пакет dnscrypt-proxy2
, который будет использовать протокол DNS-over-HTTPS (DoH) для шифрования DNS-запросов.
Подробнее о DoH можно прочитать здесь.
Для настройки DoH на роутере необходимо выполнить следующие действия:
-
Скачиваем
dnscrypt-proxy2
opkg 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
Для того, чтобы Keenetic использовал dnsmasq
в качестве DNS-сервера, необходимо включить DNS Override.
Note
Данный этап не нужен, если ваши списки содержат только IP-адреса и CIDR и не указывают доменных имён.
- Откройте следующий URL в браузере: http://my.keenetic.net/a
- Введите следующие команды по очереди:
opkg dns-override
system configuration save
- Обязательно перезагрузите роутер.
Tip
Если вы решите отключить DNS-Override в будущем, выполните команды no opkg dns-override
и system configuration save
.
Убедитесь, что маршрутизация на основе политики работает должным образом.
Для этого откройте адрес, которого нет в ваших списках (напр. 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-override
system configuration save
- Выключить OPKG (если не пользуетесь им для других нужд)
- Перезагрузить роутер
Приятного использования маршрутизации на основе политики с keen-pbr!