DNS
Chute 使用定制的 DNS 客户端来支持高级功能。它的行为可能与你操作系统的 DNS 客户端有所不同。
当会话应用了 DIRECT 规则时,Chute 将扮演 DNS 服务器的角色。Chute 会先查询主机的 DNS 记录,然后使用 DNS 记录中返回的 IP 地址建立 Socket 连接。通过这种方法,所有应用了 DIRECT 规则的会话都将绕过系统 DNS 配置,使用 Chute DNS 服务器进行路由。
Chute iOS 会将系统 DNS 服务器配置为 Chute DNS 服务器。
上游 DNS 服务器
Chute 默认使用操作系统的 DNS 服务器地址。你可以通过 dns-server 选项,使用 DNS 服务器、DoH(DNS-over-HTTPS)、DoT(DNS-over-TLS)、DoQ(DNS-over-QUIC)和 DoH3(DNS-over-HTTP/3)服务来覆盖默认设置。
DNS 段
DNS 选项通常写在 [General] 中,但也可以等效地写在顶层的 [DNS] 段中:dns-server、doh(别名 doh-server)、dot、doq、doh3、hijack-dns 和 always-real-ip 在两个段中的行为完全一致。同一个段中同样接受本地 DNS 映射行,也就是 [Host] 中使用的按域名形式,因此两种行形式可以共存于同一个段中。其他任何键都会被忽略,并在日志中给出提示。
[DNS]
doh = https://dns.google/dns-query
always-real-ip = *.lan
*.example.com = server:1.1.1.1
详细说明
Chute 会同时向所有 DNS 服务器发起查询以提高性能,类似于 dnsmasq 的 --all-servers 参数。服务器中返回的第一个应答将被使用。Chute iOS 应用和 Chute Dashboard 会显示哪个服务器最先响应。如果 Chute 在 2 秒内未收到任何应答,将再次向所有服务器发起查询。请注意,只有 DNS 服务器、DoT 和 DoQ 上游会参与重试;DoH、DoH3 和 syslib 只在第一轮查询中使用。经过 3 次重试(总共 4 次尝试)或 10 秒后,Chute 将放弃并报告 DNS 错误。
某些域名可能由于权威域名服务器性能不佳,导致上游 DNS 服务器因服务器端超时或其他连接问题而返回空应答。Chute 将在上游 DNS 服务器明确返回空 DNS 应答,或某些服务器返回空应答而其他服务器在 3 秒内未能响应时,报告空 DNS 错误。
部分 DNS 记录由于配置原因具有非常短的 TTL,Chute 会强制执行 60 秒的最小 TTL:更短的 TTL 会被提升到 60 秒。乐观 DNS 默认启用——缓存的 DNS 结果会立即返回,同时在后台刷新。可以通过 optimistic-dns = false 禁用。
当 IPv6 可用且已启用时,Chute DNS 客户端将同时向上游 DNS 服务器发送 A 和 AAAA 查询。返回的第一个 A 或 AAAA 应答将被使用。在单栈网络上,当前不可路由的地址族的应答会被暂缓,优先使用另一地址族的应答;只有当另一地址族没有任何结果时,才会将其作为回退使用。
本页为英文版的翻译。如内容有出入,以英文版为准。