Перейти к содержимому
Расширенные настройки

Расширенные настройки

Большинству пользователей эта страница не понадобится.

Здесь описаны настройки для продвинутых сценариев и на уровне сервиса: 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 = без ограничений)
config.json
{
  "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" Адрес и порт для прослушивания
config.json
{
  "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
config.json
{
  "fwmark": {
    "start": "0x00010000",
    "mask": "0x00FF0000"
  }
}

mask должна быть точно двумя смежными hex-нибблами (например, 0x00FF0000). Outbounds получают последовательные marks, начиная с start, с применением mask.

Если другое программное обеспечение на вашей системе использует тот же диапазон fwmark, скорректируйте start и mask, чтобы избежать конфликтов.

iproute

Управляет диапазоном ID таблиц маршрутизации, используемым для outbound-специфичных таблиц.

Поле Тип По умолчанию Описание
table_start integer 150 Первый ID таблицы маршрутизации для выделения под outbounds
rule_priority_start integer или null table_start Первый приоритет правила RPDB; null наследует table_start
config.json
{
  "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 для расписания обновления
config.json
{
  "lists_autoupdate": {
    "enabled": true,
    "cron": "0 4 * * 0"
  }
}

Поле cron использует стандартный 5-полевой формат: минута час день-месяца месяц день-недели. Пример выше запускается раз в неделю в воскресенье в 04:00.

Поле cron валидируется, даже когда enabled установлен в false.

Вы также можете запустить обновление вручную в любое время:

  • Отправьте SIGHUP в процесс демона: kill -HUP $(cat /var/run/keen-pbr.pid)