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、doh-service)、dot、doq、doh3、direct-dns-server、proxy-dns-server、encrypted-dns-server、allow-dns-svcb、encrypted-dns-follow-outbound-mode、hijack-dns 和 always-real-ip 在两个段中的行为完全一致。同一个段中同样接受本地 DNS 映射行,也就是 [Host] 中使用的按域名形式,因此两种行形式可以共存于同一个段中。其他任何键都会先被当作映射行来读:一条既没有 IP 地址、也没有 server: 这类前缀的 key = value 会变成别名,因此放错位置的 [General] 键——比如 optimistic-dns = false——不会报错,而是悄悄把 optimistic-dns 这个名字映射到 false。只有映射解析器同样拒绝的行才会被忽略并在日志中给出提示。fallback-dns-server 与 encrypted-dns-skip-cert-verification 在这里同样会被读取。

[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 错误。这些重试涵盖 Chute 自己发起的查询,以及它从 TUN 接口和 SOCKS5 UDP 中继接管的查询;直接发到 Chute DNS 监听端口的查询只会向服务器发送一次、不会重试,由发出查询的客户端自己的重试接手。

向哪些服务器查询取决于域名。规则判定为 DIRECT 的域名在设置了 direct-dns-server 时使用它,代理服务器自身的主机名使用 proxy-dns-server,有本地 DNS 映射的域名使用映射中指定的服务器,其余域名使用主池(dns-server、doh、dot、doq、doh3)。direct-dns-server 负责 Chute 拨出直连连接时所做的解析;应用的查询只有到达 Chute 的解析器时才会交给它:经 TUN 发出的应用 A 和 AAAA 查询会改以虚拟 IP 应答。专用池没有返回任何应答时,会改用主池重试;主池没有返回任何应答时,会在报告错误之前向 fallback-dns-server 查询一次。

某些域名可能由于权威域名服务器性能不佳,导致上游 DNS 服务器因服务器端超时或其他连接问题而返回空应答。Chute 将在上游 DNS 服务器明确返回空 DNS 应答,或某些服务器返回空应答而其他服务器在 3 秒内未能响应时,报告空 DNS 错误。

部分 DNS 记录由于配置原因具有非常短的 TTL,Chute 会强制执行 60 秒的最小 TTL:更短的 TTL 会被提升到 60 秒。乐观 DNS 默认启用——缓存的 DNS 结果会立即返回,同时在后台刷新。可以通过 optimistic-dns = false 禁用。带有所属区域 SOA 记录的 NXDOMAIN 应答同样会被缓存,时长取该记录为否定应答给出的时间,并限定在 60 秒到一天之间;在它过期之前,该域名会直接以 NXDOMAIN 应答,不再向服务器查询。如果匹配的 [Host] 映射或别名优先,则不会缓存上游的 NXDOMAIN 应答。

DNS 缓存保留 200 条记录。在 iOS 与 tvOS 上不允许无上限增长:请求无限缓存会被拒绝,仍保留 200 条,并给出提示。

当 IPv6 可用且已启用时,Chute DNS 客户端将同时向上游 DNS 服务器发送 A 和 AAAA 查询。返回的第一个 A 或 AAAA 应答将被使用。在单栈网络上,当前不可路由的地址族的应答会被暂缓,优先使用另一地址族的应答;只有当另一地址族没有任何结果时,才会将其作为回退使用。

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-25 00:02:29

本页为英文版的翻译。如内容有出入,以英文版为准。

results matching ""

    No results matching ""