DNS
Настройки DNS используйте, если хотите, чтобы домены из списка разрешались через определённый DNS-сервер — как правило, тот же VPN, который пропускает соответствующий трафик.
При установке пакета на роутере keen-pbr обычно сам заботится об интеграции с dnsmasq. Большинству пользователей достаточно задать:
system_resolver(оставьте значения по умолчанию)serversrulesfallback
Конфигурация
{
"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, который будет переносить соответствующий трафик.
{
"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-сервера для использования для сопоставленных доменов |
{
"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 после добавления этой строки.
Полный пример
{
"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"]
}
}