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-pbropkg remove --autoremove keen-pbropkg info keen-pbrОтредактируйте следующие файлы конфигурации в соответствии с вашими потребностями (подробные инструкции ниже):
- (обязательно) Настройке пакет keen-pbr
- В данном файле вы должны настроить необходимые ipset, списки и выходные интерфейсы
- (обязательно) Скачайте удалённые списки (если есть списки с
url="...") - (опционально) Отключите автообновление списков
- Если Entware установлен на внутреннюю память, то настоятельно рекомендуется отключить автообновление списков, чтобы предотвратить износ NAND-памяти
- (опционально) Настройте DNS over HTTPS (DoH)
Откройте /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 downloadCaution
Если Entware установлен на внутреннюю память роутера, обязательно отключите ежедневное автоматическое обновление списков, чтобы предотвратить износ памяти.
Эту команду нужно выполнять после каждого обновления пакета keen-pbr!
Для того, чтобы отключить автообновление списков, удалите файл /opt/etc/cron.daily/50-keen-pbr-lists-update.sh:
rm /opt/etc/cron.daily/50-keen-pbr-lists-update.shВы всегда сможете обновить списки вручную.
Keen-pbr поддерживает два способа настройки защищённого DNS:
- Использовать DNS из Keenetic (предпочтительно)
- Использовать внешний прокси (например, dnscrypt-proxy2)
Использовать DNS из Keenetic (предпочтительно)
Предусловие:
- У вас должен быть настроен DoH/DoT на самом роутере. Подробнее смотрите в официальной документации.
-
Отредактируйте файл
/opt/etc/keen-pbr/keen-pbr.conf[general] # ... (здесь другие строчки конфига, их удалять не нужно) use_keenetic_dns = true fallback_dns = "8.8.8.8" # ... (здесь другие строчки конфига, их удалять не нужно)
-
Откройте
/opt/etc/dnsmasq.confи удалите или закомментируйте все строки, начинающиеся сserver=.
- keen-pbr будет брать DNS-сервера из системного профиля.
- Если вы поменяете DNS-сервера в системном профиле, необходимо будет перезагрузить сервис
dnsmasq(или выключить и включить OPKG), чтобы новые настройки вступили в силу. - Если RCI не сможет получить список DNS-серверов с роутера, будет использован fallback DNS (например, 8.8.8.8).
- Это наиболее простой и надёжный способ, если вы уже настроили DoH/DoT на самом Keenetic.
Использовать внешний прокси (dnscrypt-proxy2)
Для настройки 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 = ['127.0.0.1:9153'] # ... (здесь другие строчки конфига, их удалять не нужно)
-
Редактируем файл
/opt/etc/dnsmasq.conf# ... (здесь другие строчки конфига, их удалять не нужно) # Добавляем наш dnscrypt-proxy2 в качестве upstream-сервера # Остальные строчки, начинающиеся с "server=" НЕОБХОДИМО УДАЛИТЬ ИЛИ ЗАКОММЕНТИРОВАТЬ server=127.0.0.1#9153 # ... (здесь другие строчки конфига, их удалять не нужно)
-
Редактируем файл
/opt/etc/keen-pbr/keen-pbr.conf
[general]
# ... (здесь другие строчки конфига, их удалять не нужно)
# Отключаем использование DNS из Keenetic
use_keenetic_dns = false
# ... (здесь другие строчки конфига, их удалять не нужно)- Проверяем валидность конфигурации
# Проверяем конфиг dnscrypt-proxy2 dnscrypt-proxy -config /opt/etc/dnscrypt-proxy.toml -check # Проверяем конфиг dnsmasq dnsmasq --test
Для того, чтобы 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.
Убедитесь, что маршрутизация на основе политики работает должным образом.
Для этого откройте адрес, которого нет в ваших списках (напр. 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 (если не пользуетесь им для других нужд)
- Перезагрузить роутер
Приятного использования маршрутизации на основе политики с keen-pbr!