DNS
DNS 是一个出站协议,主要用于拦截和转发 DNS 查询。
此出站协议只能接收 DNS 流量(包含基于 UDP 和 TCP 协议的查询),其它类型的流量会导致错误。
在处理 DNS 查询时,此出站协议会将 IP 查询(即 A 和 AAAA)转发给内置的 DNS 服务器。其它类型的查询流量见下的 nonIPQuery。
OutboundConfigurationObject
{
"network": "tcp",
"address": "1.1.1.1",
"port": 53,
"userLevel": 0,
"nonIPQuery": "skip",
"blockTypes": [65]
}2
3
4
5
6
7
8
network: "tcp" | "udp"
修改 DNS 流量的传输层协议,可选的值有 "tcp" 和 "udp"。当不指定时,保持来源的传输方式不变。
address: address
修改 DNS 服务器地址。当不指定时,保持来源中指定的地址不变。
port: number
修改 DNS 服务器端口。当不指定时,保持来源中指定的端口不变。
userLevel: number
用户等级,连接会使用这个用户等级对应的 本地策略,主要影响该出站的超时。
nonIPQuery: string
控制非 IP 查询(非 A 和 AAAA),"drop" 丢弃; "skip" 不由内置 DNS 服务器处理,将转发给目标; "reject" 返回一个 DNS reject 响应,直接显式拒绝请求,相比 "drop" 可以避免应用程序消耗过长时间等待 DNS 响应到超时。
默认值为 "reject"。
blockTypes: array
为一个 int 数组,屏蔽数组中的查询类型,如 "blockTypes": [65,28] 表示屏蔽 type 65(HTTPS) 和 28(AAAA). 常见用途包括屏蔽 type 65 以阻止浏览器发起 ECH.
当查询类型命中 blockTypes 时,会在进一步处理前被屏蔽:
- 当
nonIPQuery为"reject"时,返回 DNS reject 响应。 - 其他情况下会直接丢弃(drop)。
通常配合 nonIPQuery: "skip" 使用,以“转发其它非 A/AAAA 查询,但屏蔽其中部分类型”。如果 nonIPQuery 为 "drop" 或 "reject",非 A/AAAA 查询本来就不会被转发,此时 blockTypes 主要用于屏蔽 A/AAAA(不推荐;更建议在内置 DNS 的 queryStrategy 中控制 IPv4/IPv6)。