DNS 规则
DNS 规则与路由规则共用域名、地址、来源、模式等匹配字段,并额外可以匹配已评估响应。匹配字段的完整语义见路由规则。
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}
- {query_type: AAAA, action: reject}
final: real字段
action
- 类型:字符串枚举。
- 默认:
route。 - 取值:
route、evaluate、respond、route-options、reject、predefined。
server
- 类型:DNS 服务器名。
- 必填:
route、evaluate时是。 - 限制:名字必须存在。
tag
- 类型:字符串。
- 行为:
evaluate保存响应时使用的标签,供后续match_response引用。
method
- 类型:字符串枚举。
- 取值:
default、drop。 - 限制:只用于
reject;default答REFUSED,drop不回应。
match_response
- 类型:
true或evaluate的标签。 - 默认:不匹配已评估响应。
- 行为:启用响应条件;
true看最近一次未打标签的响应。
ip_accept_any
- 类型:布尔值。
- 默认:
false。 - 行为:响应至少含一条地址记录即可匹配。
response_rcode
- 类型:字符串枚举。
- 取值:
NOERROR、FORMERR、SERVFAIL、NXDOMAIN、NOTIMP、REFUSED。
response_answer
- 类型:记录模式或数组。
- 行为:匹配 DNS answer 区。
response_ns
- 类型:记录模式或数组。
- 行为:匹配 DNS authority 区。
response_extra
- 类型:记录模式或数组。
- 行为:匹配 DNS additional 区。
rcode
- 类型:字符串枚举。
- 默认:
NOERROR。 - 行为:
predefined响应的 RCODE。
answer
- 类型:zone 文件记录字符串或数组。
- 行为:
predefined的 answer 区记录。
ns
- 类型:zone 文件记录字符串或数组。
- 行为:
predefined的 authority 区记录。
extra
- 类型:zone 文件记录字符串或数组。
- 行为:
predefined的 additional 区记录。
rewrite_ttl
- 类型:32 位无符号整数,单位秒。
- 行为:改写响应 TTL,也决定缓存保留时间。
disable_cache
- 类型:布尔值。
- 默认:
false。 - 行为:不读也不写 DNS 缓存。
strategy
- 类型:字符串枚举。
- 取值:
as_is、prefer_ipv4、prefer_ipv6、ipv4_only、ipv6_only。 - 行为:本次查询的地址族策略,覆盖
dns.strategy。
client_subnet
- 类型:IP 地址或 CIDR。
- 行为:覆盖默认 EDNS Client Subnet。
remove_client_subnet
- 类型:布尔值。
- 默认:
false。 - 行为:删除客户端查询自带的 ECS,不向上游透露。
timeout
- 类型:时长。
- 行为:本次上游等待时间,覆盖
dns.timeout。
说明
ip_cidr 或 ip_is_private 没有写 match_response 时使用旧式响应过滤:规则必须同时 route 到 server,先问该服务器,只有响应地址满足条件才返回,否则继续后续规则。
DNS Facts 不提供 MAC、主机名、进程、用户、DSCP 和 IN-PORT,所以对应的共享匹配字段在 DNS 规则中不匹配。