FAQ
Какой бэкенд firewall будет использоваться?
keen-pbr автоматически определяет бэкенд firewall при запуске. Он использует nftables, если доступен, и возвращается к iptables/ipset на более старых ядрах.
Как перезагрузить списки без перезапуска сервиса?
Используйте SIGHUP:
kill -HUP $(cat /var/run/keen-pbr.pid)Это запускает полную перезагрузку: заново скачиваются все удалённые списки и повторно применяются правила firewall и маршрутизации.
Чем отличается SIGUSR1
SIGUSR1 работает иначе: он заново проверяет таблицы маршрутизации и запускает URL-тесты немедленно, но СПИСКИ НЕ перезагружает.
Что произойдёт, если URL удалённого списка недоступен при запуске?
keen-pbr использует кэшированную копию из daemon.cache_dir, если она доступна. Если кэша не существует и URL недоступен, удалённый источник не вносит никаких записей для этого запуска. Для списка только с URL это означает, что список фактически пуст и никакой набор или правило firewall не создаётся.
Как urltest outbound выбирает лучший интерфейс?
Раз в указанный интервал keen-pbr отправляет HTTP-запрос на настроенный url от каждого дочернего outbound и измеряет задержку (RTT). Выбирается дочерний outbound с наименьшей задержкой. Дочерние outbounds в пределах tolerance_ms от лучшего считаются эквивалентными и выбираются по весу.
Circuit breaker предотвращает использование нестабильного соединения: после failure_threshold последовательных сбоев circuit переходит в статус OPEN и этот дочерний outbound игнорируются в течение timeout_ms (период охлаждения). После охлаждения он входит в состояние HALF-OPEN и получает ограниченные попытки проверки для восстановления.
Можно ли маршрутизировать DNS-запросы через VPN?
Да. Используйте поле detour в dns.servers, чтобы привязать DNS-запросы к этому серверу к конкретному outbound:
{
"servers": [
{
"tag": "vpn_dns",
"address": "10.8.0.1",
"detour": "vpn"
}
]
}Какой формат файла списка?
Одна запись на строку. Поддерживаемые форматы:
- IPv4-адрес:
93.184.216.34 - IPv6-адрес:
2606:2800:220:1:248:1893:25c8:1946 - CIDR:
10.0.0.0/8 - Домен:
example.com(автоматически включает все поддомены)- записи вида
*.example.comтакже поддерживаются и обрабатываются так же, какexample.com
- записи вида
- Строки, начинающиеся с
#, являются комментариями и игнорируются - Пустые строки игнорируются
Как проверить, что маршрутизация правильно применена?
Используйте эндпоинт проверки маршрутизации:
curl http://127.0.0.1:12121/api/health/routingЭто проверяет живое состояние ядра (цепочка firewall, правила firewall, таблицы маршрутизации, политические правила) против ожидаемой конфигурации и сообщает ok, missing или mismatch для каждого элемента.
Можно ли объединить несколько источников в одном списке?
Да. Можно объединять url, domains, ip_cidrs и file в одной записи списка — все данные сольются воедино:
{
"lists": {
"combined": {
"url": "https://example.com/remote.txt",
"domains": ["extra.example.com"],
"ip_cidrs": ["192.168.100.0/24"],
"file": "./local.txt"
}
}
}ip_cidrs + domains. Объединение их с url или с file не поддерживается в веб-интерфейсе и не рекомендуется; таким образом, это может быть запрещено в будущем, чтобы предотвратить недопонимание.