DNS 规则动作
DNS 规则默认询问一个服务器;evaluate 保存响应供后续匹配,respond 返回已保存响应,route-options 只合并选项,reject 和 predefined 当场回答。
yaml
dns:
servers:
local:
type: hosts
hosts:
nas.lan: 192.0.2.10
real:
type: udp
address: 127.0.0.1:53
rules:
- {domain_suffix: [nas.lan], server: local}
- {domain_suffix: [cdn.example], action: route-options, rewrite_ttl: 60}
- {domain: [gone.example], action: predefined, rcode: NXDOMAIN}
final: real字段
action
- 类型:字符串枚举。
- 默认:
route。 - 取值:
route、evaluate、respond、route-options、reject、predefined。
server
- 类型:DNS 服务器名。
- 必填:
route、evaluate时是。 - 行为:本次要询问的服务器。
tag
- 类型:字符串。
- 行为:
evaluate给保存的响应打标签。
method
- 类型:字符串枚举。
- 默认:
default。 - 取值:
default、drop。 - 限制:只用于
reject;其他值被拒绝。
rewrite_ttl
- 类型:32 位无符号整数,单位秒。
- 行为:改写答案 TTL,并决定缓存多久;后面的规则覆盖前面的。
disable_cache
- 类型:布尔值。
- 默认:
false。 - 行为:合并后只要任一规则打开,本次查询就绕过缓存。
strategy
- 类型:字符串枚举。
- 取值:
as_is、prefer_ipv4、prefer_ipv6、ipv4_only、ipv6_only。 - 行为:后面的规则覆盖前面的地址族策略。
client_subnet
- 类型:IP 地址或 CIDR。
- 行为:后面的规则覆盖前面的 ECS。
remove_client_subnet
- 类型:布尔值。
- 默认:
false。 - 行为:合并后只要任一规则打开,就删除客户端自带 ECS。
timeout
- 类型:时长。
- 行为:本次查询等待上游的时间。
rcode
- 类型:字符串枚举。
- 默认:
NOERROR。 - 取值:
NOERROR、FORMERR、SERVFAIL、NXDOMAIN、NOTIMP、REFUSED。 - 限制:用于
predefined。
answer
- 类型:zone 文件记录字符串或数组。
- 行为:
predefined的 answer 区。
ns
- 类型:zone 文件记录字符串或数组。
- 行为:
predefined的 authority 区。
extra
- 类型:zone 文件记录字符串或数组。
- 行为:
predefined的 additional 区。
说明
route 询问服务器并立即返回;evaluate 询问并保存响应,不返回,继续遍历;respond 返回最近一次未打标签或 match_response 选中的响应。route-options 把选项并入后续查询,自身不回答。
reject 默认回答 REFUSED,method: drop 不回答。predefined 直接构造响应,记录在配置加载时解析;不写 TTL 的记录默认使用 300 秒。
除 method 外,解析器会接受字段,但动作自身不使用的选项不会产生效果;跨动作写明显矛盾字段时以 check 的编译错误为准。