zapret-kvn/docs/sing-box/reference/dns.md
2026-03-27 14:15:12 +03:00

13 KiB
Raw Permalink Blame History

DNS -- справочник полей

Целевая версия: sing-box 1.14.x | Платформа: Windows


DNS (верхний уровень)

Структура

{
  "dns": {
    "servers": [],
    "rules": [],
    "final": "",
    "strategy": "",
    "disable_cache": false,
    "disable_expire": false,
    "independent_cache": false,
    "cache_capacity": 0,
    "reverse_mapping": false,
    "client_subnet": "",
    "fakeip": {}
  }
}

Поля

Поле Тип Описание По умолчанию
servers Server[] Список DNS-серверов []
rules Rule[] Список DNS-правил []
final string Тег DNS-сервера по умолчанию; если пусто -- первый сервер ""
strategy string Стратегия: prefer_ipv4, prefer_ipv6, ipv4_only, ipv6_only ""
disable_cache bool Отключить DNS-кеш false
disable_expire bool Не удалять записи из кеша по TTL false
independent_cache bool Отдельный кеш для каждого сервера (немного снижает производительность) false
cache_capacity int Размер LRU-кеша; значения < 1024 игнорируются (с 1.11) 0
reverse_mapping bool Хранить маппинг IP -- домен для маршрутизации false
client_subnet string EDNS0-subnet OPT-запись (IP или префикс) (с 1.9) ""
fakeip object Конфигурация FakeIP (см. раздел ниже) {}

Осторожно: reverse_mapping может работать некорректно на Windows из-за системного DNS-кеша и проксирования DNS.


DNS-серверы

udp

DNS через UDP. Простейший и быстрый вариант.

{
  "type": "udp",
  "tag": "bootstrap",
  "server": "1.1.1.1",
  "server_port": 53
}
Поле Тип Описание По умолчанию
server string Адрес DNS-сервера (обязательно) --
server_port int Порт 53

Поддерживает Dial Fields (domain_resolver, bind_interface и др.).

tcp

DNS через TCP. Надёжнее UDP для больших ответов.

{
  "type": "tcp",
  "tag": "tcp-dns",
  "server": "1.1.1.1",
  "server_port": 53
}
Поле Тип Описание По умолчанию
server string Адрес DNS-сервера (обязательно) --
server_port int Порт 53

Поддерживает Dial Fields.

tls (DoT)

DNS over TLS -- шифрованные запросы.

{
  "type": "tls",
  "tag": "dot-dns",
  "server": "1.1.1.1",
  "server_port": 853,
  "tls": {}
}
Поле Тип Описание По умолчанию
server string Адрес DNS-сервера (обязательно) --
server_port int Порт 853
tls object Конфигурация TLS {}

Поддерживает Dial Fields.

https (DoH)

DNS over HTTPS -- шифрованные запросы через HTTP/2.

{
  "type": "https",
  "tag": "doh-dns",
  "server": "1.1.1.1",
  "server_port": 443,
  "path": "/dns-query",
  "headers": {},
  "tls": {}
}
Поле Тип Описание По умолчанию
server string Адрес DNS-сервера (обязательно) --
server_port int Порт 443
path string URL-путь запроса "/dns-query"
headers object Дополнительные HTTP-заголовки {}
tls object Конфигурация TLS {}

Поддерживает Dial Fields.

local

Использует системный DNS-резолвер Windows.

{
  "type": "local",
  "tag": "local-dns"
}

Дополнительных обязательных полей нет. Поддерживает Dial Fields.

hosts

Поиск в hosts-файлах и предопределённых записях.

{
  "type": "hosts",
  "tag": "hosts-dns",
  "path": ["C:\\Windows\\System32\\Drivers\\etc\\hosts"],
  "predefined": {
    "my-server.local": "192.168.1.100"
  }
}
Поле Тип Описание По умолчанию
path string[] Пути к hosts-файлам Windows: C:\Windows\System32\Drivers\etc\hosts
predefined object Предопределённые записи (домен -- IP или массив IP) {}

fakeip

Виртуальная выдача IP-адресов. Требует секцию dns.fakeip.

{
  "type": "fakeip",
  "tag": "fakeip-dns"
}

Дополнительных полей нет. Диапазоны адресов задаются в dns.fakeip.


DNS-правила

Match-условия

Условия аналогичны route rules (см. route-rules.md) плюс специфичные для DNS:

Поле Тип Описание С версии
query_type string[] / int[] Тип DNS-запроса: "A", "AAAA", "HTTPS" или числовой код --
domain, domain_suffix, domain_keyword, domain_regex string[] Совпадение по домену запроса --
process_name, process_path, process_path_regex string[] Совпадение по процессу (Windows) --
rule_set string[] Теги rule-set 1.8
clash_mode string Режим Clash API --
inbound string[] Теги inbound --
port, port_range, source_port, source_port_range Порты --
source_ip_cidr, source_ip_is_private Источник --

Поле outbound удалено в 1.14. Используйте domain_resolver на outbound вместо него.

Фильтры по адресу ответа

Эти поля фильтруют DNS-ответы. Если ответ не совпадает -- правило пропускается. Работают только для запросов типа A/AAAA/HTTPS.

Поле Тип Описание С версии
ip_cidr string[] Совпадение IP в DNS-ответе с CIDR 1.9
ip_is_private bool Совпадение с приватным IP в ответе 1.9
ip_accept_any bool Совпадение с любым IP в ответе 1.12
rule_set_ip_cidr_accept_empty bool Принимать пустой ответ при IP-матче из rule-set 1.10
rule_set_ip_cidr_match_source bool IP-правила из rule-set матчат source IP 1.10

Для кеширования результатов включите experimental.cache_file.store_rdrc.

Действия

route

Направляет DNS-запрос к указанному серверу.

{
  "action": "route",
  "server": "bootstrap",
  "strategy": "prefer_ipv4",
  "disable_cache": false,
  "rewrite_ttl": null,
  "client_subnet": null
}
Поле Тип Описание По умолчанию
server string Тег DNS-сервера (обязательно) --
strategy string prefer_ipv4, prefer_ipv6, ipv4_only, ipv6_only (с 1.12) из dns.strategy
disable_cache bool Отключить кеш false
rewrite_ttl int? Перезаписать TTL null
client_subnet string? EDNS0-subnet null

route-options

Устанавливает опции без смены сервера.

{
  "action": "route-options",
  "disable_cache": false,
  "rewrite_ttl": null,
  "client_subnet": null
}

reject

Отклонение DNS-запроса.

{
  "action": "reject",
  "method": "default",
  "no_drop": false
}
Поле Тип Описание По умолчанию
method string "default" (REFUSED) или "drop" (тихо) "default"
no_drop bool Если false, после 50 срабатываний за 30 сек переключается на "drop" false

predefined (с 1.12)

Ответ предопределёнными DNS-записями.

{
  "action": "predefined",
  "rcode": "NOERROR",
  "answer": ["localhost. IN A 127.0.0.1"],
  "ns": [],
  "extra": []
}
Поле Тип Описание По умолчанию
rcode string Код ответа: NOERROR, FORMERR, SERVFAIL, NXDOMAIN, NOTIMP, REFUSED "NOERROR"
answer string[] Записи-ответы (формат: name. IN TYPE value) []
ns string[] NS-записи []
extra string[] Дополнительные записи []

FakeIP

Структура

{
  "dns": {
    "fakeip": {
      "enabled": true,
      "inet4_range": "198.18.0.0/15",
      "inet6_range": "fc00::/18"
    }
  }
}

Поля

Поле Тип Описание По умолчанию
enabled bool Включить FakeIP false
inet4_range string IPv4 диапазон для виртуальных адресов "198.18.0.0/15"
inet6_range string IPv6 диапазон для виртуальных адресов "fc00::/18"

Для сохранения FakeIP-маппингов между перезапусками включите experimental.cache_file.store_fakeip.


Паттерн "bootstrap + proxy"

В TUN-режиме DNS-запросы проходят через тот же TUN-интерфейс, что создаёт петлю маршрутизации: DNS -> TUN -> DNS-модуль -> DNS-сервер -> TUN -> ...

Решение -- два DNS-сервера:

  1. bootstrap -- без detour, для резолва домена прокси-сервера. Использует IP-адрес напрямую.
  2. proxy -- с detour через прокси, для всего остального трафика.
{
  "dns": {
    "servers": [
      {
        "type": "udp",
        "tag": "bootstrap",
        "server": "1.1.1.1",
        "server_port": 53
      },
      {
        "type": "tcp",
        "tag": "proxy-dns",
        "server": "8.8.8.8",
        "server_port": 53,
        "detour": "proxy"
      }
    ],
    "rules": [
      {
        "domain_suffix": ".proxy-server.com",
        "action": "route",
        "server": "bootstrap"
      }
    ],
    "final": "proxy-dns"
  },
  "route": {
    "auto_detect_interface": true
  }
}

Обязательно включайте auto_detect_interface: true в секции route при использовании TUN.


Примеры

1. Стандартная двухсерверная конфигурация

{
  "dns": {
    "servers": [
      {
        "type": "udp",
        "tag": "bootstrap",
        "server": "1.1.1.1",
        "server_port": 53
      },
      {
        "type": "tcp",
        "tag": "proxy-dns",
        "server": "8.8.8.8",
        "server_port": 53,
        "detour": "proxy"
      }
    ],
    "final": "proxy-dns",
    "strategy": "prefer_ipv4"
  }
}

2. DoH bootstrap + DoT proxy

{
  "dns": {
    "servers": [
      {
        "type": "https",
        "tag": "bootstrap",
        "server": "1.1.1.1",
        "server_port": 443,
        "path": "/dns-query"
      },
      {
        "type": "tls",
        "tag": "proxy-dns",
        "server": "8.8.8.8",
        "server_port": 853,
        "detour": "proxy"
      }
    ],
    "final": "proxy-dns"
  }
}

3. DNS с FakeIP

{
  "dns": {
    "servers": [
      {
        "type": "udp",
        "tag": "bootstrap",
        "server": "1.1.1.1"
      },
      {
        "type": "fakeip",
        "tag": "fakeip-dns"
      }
    ],
    "rules": [
      {
        "query_type": ["A", "AAAA"],
        "action": "route",
        "server": "fakeip-dns"
      }
    ],
    "final": "bootstrap",
    "fakeip": {
      "enabled": true,
      "inet4_range": "198.18.0.0/15",
      "inet6_range": "fc00::/18"
    }
  }
}

4. DNS-правило: конкретные домены на bootstrap

{
  "domain_suffix": [".ru", ".su"],
  "action": "route",
  "server": "bootstrap"
}

5. DNS-правило: блокировка рекламных доменов

{
  "rule_set": "adblock-domains",
  "action": "reject",
  "method": "default"
}