---
url: /configuration/dns.md
description: DNS 上游、规则、缓存、bootstrap 和默认查询选项
---

# DNS

`dns` 定义命名上游服务器、规则、兜底服务器，以及代理服务器名字专用的 bootstrap 解析路径。

```yaml check
dns:
  servers:
    real:
      type: udp
      address: 127.0.0.1:53
    fake:
      type: fakeip
      inet4_range: 198.18.0.0/15
      check_aaaa: real
  rules:
    - {domain_suffix: [lan], server: fake}
  final: real
  cache: 4096
  optimistic: 1h
  strategy: prefer_ipv4
  timeout: 5s
```

## 字段

### servers

* 类型：名字到 [DNS 服务器](/configuration/dns/server/) 的映射。
* 默认：空。
* 行为：每个服务器把 `type` 写在第一项；名字在同一映射中唯一。

### rules

* 类型：[DNS 规则](/configuration/dns/rule)数组。
* 默认：空。
* 行为：按顺序遍历，第一条成立规则的[动作](/configuration/dns/rule-action)决定是否继续。

### final

* 类型：DNS 服务器名。
* 必填：可选。
* 默认：首个会向别处询问的真实上游。
* 限制：必须存在；没有可选真实上游时 `check` 失败。

### cache

* 类型：非负整数。
* 默认：`4096`。
* 行为：响应缓存容量。

### optimistic

* 类型：时长。
* 必填：可选。
* 默认：过期后不再提供旧响应。
* 行为：TTL 过期后最多继续提供旧响应这么久，同时在后台刷新。

### disable_expire

* 类型：布尔值。
* 默认：`false`。
* 行为：缓存项永不过期，直到被容量淘汰。
* 限制：不能与 `optimistic` 同时出现。

### bootstrap

* 类型：DNS 服务器名。
* 必填：可选。
* 默认：无。
* 行为：专门解析代理服务器自己的名字，不经过 DNS 规则或出站代理。
* 限制：必须存在、不是主机名上游，也不能经 `via` 出站；任何上游写 `via` 时必须有可用的 bootstrap。

### strategy

* 类型：字符串枚举。
* 必填：可选。
* 取值：`as_is`、`prefer_ipv4`、`prefer_ipv6`、`ipv4_only`、`ipv6_only`。
* 行为：所有查询的默认地址族策略；规则自己的设置优先。

### client_subnet

* 类型：IP 地址或 CIDR。
* 必填：可选。
* 行为：默认随查询发送的 EDNS Client Subnet；裸 IPv4 视为 `/24`，裸 IPv6 视为 `/56`。

### timeout

* 类型：时长。
* 必填：可选。
* 默认：`5s`。
* 行为：等待上游响应的默认时间；规则自己的设置优先。

## 说明

DNS 与路由共用 `RuleSpec` 的匹配语法。DNS 专用的响应匹配与动作见 [DNS 规则](/configuration/dns/rule) 和 [DNS 规则动作](/configuration/dns/rule-action)。

上游的 `via` 表示用某条出站承载查询；`domain_resolver` 表示上游地址写成主机名时用哪个 DNS 服务器解析它。完整边界见 [DNS 服务器总览](/configuration/dns/server/) 和各类型页。

## 相关

* [DNS 规则](/configuration/dns/rule)
* [DNS 规则动作](/configuration/dns/rule-action)
* [FakeIP](/configuration/dns/fakeip)
* [DNS 服务器](/configuration/dns/server/)
* [路由总览](/configuration/route/)
