Перейти к содержимому

FAQ

Какой бэкенд firewall будет использоваться?

keen-pbr автоматически определяет бэкенд firewall при запуске. Он использует nftables, если доступен, и возвращается к iptables/ipset на более старых ядрах.

Как перезагрузить списки без перезапуска сервиса?

Используйте SIGHUP:

bash
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
  • Строки, начинающиеся с #, являются комментариями и игнорируются
  • Пустые строки игнорируются

Как проверить, что маршрутизация правильно применена?

Используйте эндпоинт проверки маршрутизации:

bash
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 не поддерживается в веб-интерфейсе и не рекомендуется; таким образом, это может быть запрещено в будущем, чтобы предотвратить недопонимание.