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

DNS

Настройки DNS используйте, если хотите, чтобы домены из списка разрешались через определённый DNS-сервер — как правило, тот же VPN, который пропускает соответствующий трафик.

При установке пакета на роутере keen-pbr обычно сам заботится об интеграции с dnsmasq. Большинству пользователей достаточно задать:

  • system_resolver (оставьте значения по умолчанию)
  • servers
  • rules
  • fallback

Конфигурация

config.json
{
  "dns": {
    "system_resolver": {
      "type": "dnsmasq-nftset",
      "address": "127.0.0.1"
    },
    "servers": [...],
    "rules": [...],
    "fallback": ["google_dns", "quad9"]
  }
}
Поле Тип Описание
system_resolver object Как keen-pbr обновляет dnsmasq в системе
servers array Определения DNS-серверов
rules array Правила сопоставления списков DNS-серверам
fallback array of string Упорядоченные теги DNS-серверов для запросов, которые не соответствуют никакому правилу
dns_test_server object Опциональный встроенный DNS-пробник для расширенного устранения неполадок

System Resolver

dns.system_resolver сообщает keen-pbr, как проверять состояние dnsmasq после изменений конфигурации.

При обычной установке пакета на роутер вам обычно не следует изменять эти настройки.

Поле Тип Обязательно Описание
type string да Тип интеграции резолвера: dnsmasq-ipset или dnsmasq-nftset
address string да Адрес резолвера, используемый для интеграции и проверок состояния через TXT, например "127.0.0.1" или "127.0.0.1:5353"

DNS Test Server

dns.dns_test_server опционален. Он mainly полезен при устранении неполадок с DNS, когда вы хотите, чтобы keen-pbr предоставил простой тестовый DNS-listener.

Поле Тип Обязательно Описание
listen string да IPv4-адрес прослушивания в форме host:port, например "127.0.0.88:53"
answer_ipv4 string нет IPv4-адрес, возвращаемый в ответе DNS-пробника (nslookup check.keen.pbr). По умолчанию — хост-часть из listen.
{
  "dns": {
    "dns_test_server": {
      "listen": "127.0.0.88:53"
    }
  }
}

Когда HTTP API включён, вы можете проверить, работает ли ваш DNS, через веб-интерфейс.

DNS-серверы

Каждый сервер имеет тег, опциональный type, опциональный address и опциональный detour. Значения тега DNS-сервера должны соответствовать ^[a-z][a-z0-9_]*$, быть не более 24 символов и должны быть уникальными.

Поле Тип Обязательно Описание
tag string да Уникальный идентификатор для этого DNS-сервера
type string нет Тип источника DNS: static (по умолчанию) или keenetic
address string для static IP-адрес DNS-сервера с опциональным портом, например "10.8.0.1", "10.8.0.1:5353", "2001:4860:4860::8888" или "[2001:4860:4860::8888]:5353"
detour string нет Outbound для использования при обращении к этому DNS-серверу

Поле detour полезно, когда DNS-сервер должен быть доступен через конкретное соединение, обычно тот же VPN, который будет переносить соответствующий трафик.

config.json
{
  "dns": {
    "servers": [
      {
        "tag": "vpn_dns",
        "type": "static",
        "address": "10.8.0.1:5353",
        "detour": "vpn"
      },
      {
        "tag": "google_dns",
        "address": "8.8.8.8"
      },
      {
        "tag": "google_dns_v6",
        "address": "[2001:4860:4860::8888]:53"
      },
      {
        "tag": "keenetic_dns",
        "type": "keenetic"
      }
    ]
  }
}

type: keenetic (встроенный DNS роутера через RCI)

На роутерах Keenetic, type: "keenetic" сообщает keen-pbr повторно использовать текущие встроенные настройки DNS роутера автоматически.

Правила и поведение:

  • Разрешён максимум один элемент в dns.servers с type: "keenetic".
  • Для type: "keenetic" поле address не должно быть задано (адреса берутся из RCI).
  • keen-pbr читает неспециализированные (unscoped) строки dns_server = ... из политики прокси System.
  • Если есть неспециализированные зашифрованные апстримы (DoH/DoT), используются все такие серверы по порядку.
  • Иначе используются все неспециализированные plaintext-апстримы по порядку.
  • Записи static_a / static_aaaa из политики System также попадают в сгенерированную конфигурацию dnsmasq.

Как работает detour

Когда detour установлен, keen-pbr гарантирует, что DNS-запросы к этому серверу выходят через выбранный outbound; keen-pbr автоматически создаёт правило firewall для указанного IP и порта DNS. Это также может влиять на других клиентов в вашей сети, которые пытаются связаться с этим DNS-сервером напрямую.

Например, если vpn_dns имеет detour: "vpn", тогда DNS-запросы к vpn_dns также пойдут через vpn.

DNS-правила

Правила сопоставляют имена списков тегу DNS-сервера. Домены из указанных списков разрешаются с использованием указанного сервера.

Поле Тип Обязательно Описание
enabled boolean нет Активно ли это правило. false отключает его. true, отсутствует или null все означают включено.
list array of string да Имена списков, домены которых должны разрешаться этим сервером
server string да Тег DNS-сервера для использования для сопоставленных доменов
config.json
{
  "dns": {
    "rules": [
      {
        "enabled": true,
        "list": ["my_domains", "remote_list"],
        "server": "vpn_dns"
      }
    ]
  }
}

Если enabled отсутствует или установлен в null, DNS-правило всё равно обрабатывается как включённое.

Интеграция с dnsmasq

При установке пакета на роутер вам обычно не нужно настраивать dnsmasq вручную.

Ручная интеграция с dnsmasq (расширенная)

keen-pbr предоставляет подкоманду generate-resolver-config, которая выводит конфигурацию dnsmasq в stdout.

Поддерживаются два типа резолверов:

Тип резолвера Стиль директивы Использовать с
dnsmasq-ipset ipset= бэкенд iptables/ipset
dnsmasq-nftset nftset= бэкенд nftables

Пример интеграции с dnsmasq:

conf-script=/usr/sbin/keen-pbr generate-resolver-config dnsmasq-nftset

Перезапустите dnsmasq после добавления этой строки.

Полный пример

config.json
{
  "dns": {
    "servers": [
      {
        "tag": "vpn_dns",
        "address": "10.8.0.1:5353",
        "detour": "vpn"
      },
      {
        "tag": "google_dns",
        "address": "8.8.8.8"
      },
      {
        "tag": "google_dns_v6",
        "address": "[2001:4860:4860::8888]:53"
      }
    ],
    "rules": [
      {
        "list": ["my_domains", "remote_list"],
        "server": "vpn_dns"
      }
    ],
    "fallback": ["google_dns", "quad9"]
  }
}
Под капотом: как работает маршрутизация на основе доменов
Когда домен в сопоставленном списке разрешается, dnsmasq добавляет полученный IP-адрес во внутренний набор, используемый keen-pbr. Трафик на этот IP затем может быть маршрутизирован через правильный outbound.