Расширенные настройки
Большинству пользователей эта страница не понадобится.
Здесь описаны настройки для продвинутых сценариев и на уровне сервиса: daemon, api, fwmark, iproute и lists_autoupdate.
daemon
Управляет путём к PID-файлу, каталогом кэша и глобальным поведением маршрутизации.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
pid_file |
string | — | Путь к PID-файлу |
cache_dir |
string | /var/cache/keen-pbr |
Каталог для кэшированных данных списков |
firewall_backend |
string | "auto" |
Бэкенд firewall: auto, iptables или nftables |
clear_dynamic_sets_on_apply |
boolean | true |
Очищать динамические наборы dnsmasq при полном применении конфигурации или перезапуске runtime. Reconcile в режимах preserve/list-only их не очищает. |
ipset_hashsize |
integer | отсутствует | Необязательный начальный размер хеш-таблицы ipset, создаваемых бэкендом iptables (по умолчанию 1024). Не действует с nftables. Допустимый диапазон: от 1 до 2147483648. Изменение при работающем iptables пересоздаёт owned ipset и очищает изученные dnsmasq адреса. |
ipset_maxelem |
integer | отсутствует | Необязательное максимальное число элементов ipset, создаваемых бэкендом iptables (по умолчанию 65536). Не действует с nftables. Допустимый диапазон: от 1 до 4294967295. Изменение при работающем iptables пересоздаёт owned ipset и очищает изученные dnsmasq адреса. |
reuse_static_sets_on_runtime_refresh |
boolean | true |
Пересобирать правила без чтения или изменения статических/динамических наборов при SIGUSR1, смене URLTEST/ICMPTEST и состояния интерфейса. Делает применение правил быстрее. При false будет всегда перезаполнять списки ipset. |
strict_enforcement |
boolean | false |
Строгое применение маршрутизации для outbound типа interface: если включено, при недоступности шлюза или интерфейса устанавливается недостижимый маршрут по умолчанию. Можно переопределить для каждого outbound отдельно. |
strict_enforcement_action |
string | "unreachable" |
Terminal-действие strict enforcement: unreachable сразу возвращает приложению сетевую ошибку, а blackhole молча отбрасывает пакеты до тайм-аута приложения. |
max_file_size_bytes |
integer | 8388608 (8 MiB) |
Максимальный размер загруженного удалённого списка в байтах |
firewall_verify_max_bytes |
integer | 262144 |
Максимальное число байт stdout, захватываемых за одну команду проверки firewall (0 = без ограничений) |
{
"daemon": {
"pid_file": "/var/run/keen-pbr.pid",
"cache_dir": "/var/cache/keen-pbr",
"firewall_backend": "auto",
"clear_dynamic_sets_on_apply": true,
"ipset_hashsize": null,
"ipset_maxelem": null,
"reuse_static_sets_on_runtime_refresh": true,
"strict_enforcement": false,
"strict_enforcement_action": "unreachable",
"max_file_size_bytes": 8388608,
"firewall_verify_max_bytes": 262144
}
}Каталог кэша хранит загруженные удалённые списки, чтобы они были доступны, если сеть недоступна при запуске.
api
Управляет встроенным HTTP API-сервером.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
boolean | false |
Включить HTTP API |
listen |
string | "0.0.0.0:12121" |
Адрес и порт для прослушивания |
{
"api": {
"enabled": true,
"listen": "0.0.0.0:12121"
}
}API также может быть отключён во время выполнения с помощью --no-api, независимо от настройки в конфиге. См. REST API для документации эндпоинтов и управлений во время выполнения.
fwmark
Управляет диапазоном firewall mark, используемым для маркировки пакетов при политической маршрутизации.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
start |
string | "0x00010000" |
Первое значение fwmark для назначения outbounds |
mask |
string | "0x00FF0000" |
Битовмаска fwmark |
{
"fwmark": {
"start": "0x00010000",
"mask": "0x00FF0000"
}
}mask должна быть точно двумя смежными hex-нибблами (например, 0x00FF0000). Outbounds получают последовательные marks, начиная с start, с применением mask.
start и mask, чтобы избежать конфликтов.iproute
Управляет диапазоном ID таблиц маршрутизации, используемым для outbound-специфичных таблиц.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
table_start |
integer | 150 |
Первый ID таблицы маршрутизации для выделения под outbounds |
rule_priority_start |
integer или null | table_start |
Первый приоритет правила RPDB; null наследует table_start |
{
"iproute": {
"table_start": 150,
"rule_priority_start": null
}
}Outbounds получают последовательные ID таблиц, начиная с table_start. Убедитесь, что эти ID не конфликтуют с существующими таблицами маршрутизации в вашей системе.
Keen-pbr удаляет только те точные маршруты, которые создал сам. Посторонние маршруты в используемой таблице сохраняются при перезагрузке и остановке; идентичный существующий маршрут считается подходящим и не принимается во владение для последующего удаления.
Границы маршрутизации и failover
Правила обрабатываются по порядку. Два одинаково совпадающих правила не являются парой failover: первое правило маркирует пакет для своего outbound и завершает цепочку, поэтому второе правило недостижимо. Если первый интерфейс исчезает и strict enforcement выключен, в его таблице нет пригодного маршрута, RPDB продолжает поиск в main table и трафик может уйти через обычный default gateway. При включённом strict enforcement настроенное terminal-действие блокирует такой lookup.
Для настоящего failover используйте один outbound типа urltest с обоими
интерфейсами как candidates. При переключении между здоровыми путями
conntrack_on_switch: preserve (по умолчанию) сохраняет established flows, а
delete удаляет только conntrack entries этой тестовой группы после активации
нового маршрута. При отказе выбранного пути эти entries удаляются всегда.
ipv6_enabled: false означает, что IPv6 не управляется keen-pbr, а не блокируется.
Keen-pbr также не перехватывает произвольный клиентский DNS, DoT или DoH: клиенты
должны использовать resolver роутера либо отдельные firewall controls.
Marks идентифицируют active config только пока она не меняется. Смена fwmark mask offline после crash не позволяет найти старый namespace. Истечение TTL dynamic DNS-set влияет на новые соединения; существующие conntrack flows могут продолжать работать по уже установленному пути.
Обычный keen-pbr download обновляет cache и может потребовать restart, чтобы
runtime использовал изменённые lists. Используйте keen-pbr download --reload,
чтобы обновить и сразу применить relevant runtime state.
Требование единственного экземпляра
В одном сетевом пространстве имён поддерживается только один демон keen-pbr.
Изменение pid_file не изолирует экземпляр: таблицы, цепочки и наборы firewall
используют фиксированные общие имена. Второй экземпляр может заменить или удалить
состояние firewall первого при применении конфигурации, перезагрузке или остановке.
Используйте один демон с несколькими outbounds и правилами. Если необходимы отдельные экземпляры, запускайте их в разных сетевых пространствах имён с независимым состоянием firewall и маршрутизации.
lists_autoupdate
Управляет автоматическим периодическим обновлением удалённых списков.
Если секция lists_autoupdate не указана, автоматическое обновление выключено.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
boolean | false |
Включить автоматическое обновление списков |
cron |
string | — | Стандартное 5-полевное выражение cron для расписания обновления |
{
"lists_autoupdate": {
"enabled": true,
"cron": "0 4 * * 0"
}
}Поле cron использует стандартный 5-полевой формат: минута час день-месяца месяц день-недели. Пример выше запускается раз в неделю в воскресенье в 04:00.
Поле cron валидируется, даже когда enabled установлен в false.
Вы также можете запустить обновление вручную в любое время:
- Отправьте
SIGHUPв процесс демона:kill -HUP $(cat /var/run/keen-pbr.pid)