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

Списки

Списки — это группы сайтов или диапазонов IP, которые вы хотите, чтобы keen-pbr сопоставлял.

Ключ lists — это объект, где каждый ключ — это имя списка, а значение — конфигурация списка.

Имена списков должны соответствовать ^[a-z][a-z0-9_]*$ и быть не более 24 символов.

Большинство пользователей начинают с простого списка доменов:

config.json
{
  "lists": {
    "my_sites": {
      "domains": ["google.com", "youtube.com"]
    }
  }
}

Поля

Поле Тип Обязательно Описание
url string нет URL удалённого файла списка для загрузки и кэширования
domains array of string нет Встроенные доменные паттерны (поддерживает префиксные wildcards *.)
ip_cidrs array of string нет Встроенные IP-адреса или диапазоны CIDR
file string нет Путь к локальному файлу списка
ttl_ms integer нет (по умолчанию: 0) Как долго разрешённые IP должны храниться в кэше для списков на основе доменов. Большинство пользователей могут оставить это значение 0.

Должен быть предоставлен хотя бы один из url, domains, ip_cidrs или file.

Если вы объединяете несколько источников в одной записи списка, все записи объединяются, но это не рекомендуется и может быть запрещено в будущих версиях.
Под капотом: как сопоставляются списки доменов

Каждый список поддерживается статическими и динамическими наборами IP.

  • Статические записи из ip_cidrs, file и url загружаются немедленно.
  • Записи доменов добавляются позже, когда dnsmasq их разрешает.
  • Если ttl_ms установлен, эти разрешённые IP для доменов автоматически истекают после этого времени.

Формат файла списка

Независимо от того, загружается ли из url или file, keen-pbr ожидает одну запись на строку:

  • IPv4-адрес: 93.184.216.34
  • IPv4 CIDR: 10.0.0.0/8
  • IPv6-адрес: 2606:2800:220:1:248:1893:25c8:1946
  • IPv6 CIDR: 2001:db8::/32
  • Домен: example.com — сопоставляет домен и все его поддомены (семантика dnsmasq server=/example.com/)
    • Домен с wildcard: *.example.org эквивалентен example.org, поэтому нет необходимости добавлять *. перед доменом. Для совместимости префикс *. автоматически удаляется
  • Комментарии: строки, начинающиеся с #, игнорируются
  • Пустые строки игнорируются

Примеры

Удалённый список по URL

config.json
{
  "lists": {
    "remote_list": {
      "url": "https://raw.githubusercontent.com/v2fly/domain-list-community/refs/heads/master/data/apple"
    }
  }
}

Загруженные файлы кэшируются в daemon.cache_dir. Если URL недоступен при запуске, используется кэшированная копия.

Чтобы избежать повторной загрузки одного и того же списка снова и снова, даже если он не изменился, удалённый сервер должен поддерживать If-Modified-Since или ETag.

Встроенный список доменов

config.json
{
  "lists": {
    "my_domains": {
      "domains": ["example.com", "other.org"]
    }
  }
}

Обе записи сопоставляют домен и все его поддомены. Написание *.example.com эквивалентно example.com — префикс *. автоматически удаляется keen-pbr.

Встроенный список IP

config.json
{
  "lists": {
    "my_ips": {
      "ip_cidrs": [
        "93.184.216.34",
        "10.0.0.0/8",
        "2606:2800:220:1:248:1893:25c8:1946",
        "2001:db8::/32"
      ]
    }
  }
}

Локальный файл

config.json
{
  "lists": {
    "local_list": {
      "file": "/etc/keen-pbr/my-list.txt"
    }
  }
}

Все четыре источника объединяются в один список. ttl_ms: 86400000 устанавливает 24-часовой TTL для разрешённых IPs dnsmasq в динамическом наборе (kpbr4d_combined / kpbr6d_combined). Статические IP из ip_cidrs и кэшированного URL/файла загружаются в постоянный статический набор (kpbr4_combined / kpbr6_combined) и никогда не истекают автоматически.