内容纲要

🗂 本文目录:Surge 指南 >


DNS 服务器

[General]
# DNS 服务器设置
dns-server = 119.29.29.29,117.50.10.10,system

[Rule]
FINAL,DIRECT

对于 DNS 服务器的设置位于 [General] 下的 dns-server 配置字段,每个 DNS 服务器地址以英文逗号隔开。Surge 会同时向所有配置的 DNS 上游服务器进行 DNS 查询,并选取最快的返回结果,以提高性能。该特性和 dnsmasq 的实现一致。

此处的 system 表示系统 DNS 服务器,你可以只保留 system 表示只使用系统 DNS 服务器,或者和自定义 DNS 共存混合使用(即上述示例),再或者将 system 删除表示只使用自定义 DNS 服务器。

配置 DNS 服务器的一些要点:

  1. 速度与稳定性:DNS 服务器需要保证稳定性和速度,所以应尽量使用地理位置靠近的 DNS 服务器。
  2. edns-client-subnet 支持:对于巨型网站(如 apple.com),一般在全世界都配置有 CDN 服务器,有 ECS 支持的 DNS 服务器可以根据访问源 IP 地址,返回最合适的服务器 IP 地址。(但这种设计会有隐私泄露的可能,所以 1.1.1.1 并不支持。)
  3. 无需考虑使用代理策略的主机:如果请求使用了代理策略,那么并不会在本地执行 DNS 查询,所以不需要为该类网络考虑 DNS 问题。(且只有代理服务器在远端执行 DNS 查询,才能确保得到一个最适合该代理服务器的 CDN 节点服务器地址。)

有些人对海外 DNS 存在的误区到了一种迷信程度。

但目前海外 DNS 基本在国内没有节点导致 CDN 解析结果没有指向合适的服务器 IP 地址,导致网络使用感受卡顿缓慢。如优酷解析到香港的 CDN 而不是大陆的(包括使用腾讯的 119.28.28.28 因运营商没有对路由进行更新也会导致此问题,119.28.28.28 目前也不再被腾讯公开宣传使用),甚至还经历过个别 DNS 将优酷还会解析到美国的 CDN 上。

而且,不是使用了海外 DNS 就不会被 DNS 污染了(且在使用 Surge 代理规则后解决了污染问题就更不需要担心此问题),另外部分区域的运营商还对海外 DNS 请求完全进行抢答,所以个人认为使用海外 DNS 没有意义。

总而言之一句话:如果所使用的网络没有 DNS 劫持问题,则配置为使用系统 DNS 并追加公共 DNS,如果所使用的网络存在 DNS 劫持问题,则配置为仅使用公共 DNS。

另外关于公共 DNS 建议阅读这两篇文章:

DNS over HTTPS

从 Surge iOS 4.3 开始 Surge 开始支持 DNS over HTTPS。但在开始使用 DNS over HTTPS 前得大概知道什么是 DNS over HTTPS。

和迷信海外 DNS 一样,也有一些人对于 DoH 存在一些误区。

包括 Surge 作者 Yachen Liu 也说过「国内正常情况下没必要用 DoH」。个人也同样建议,除了国内某些地区的运营商对于 DNS 存在抢答行为(简单来说就是即便你设置了使用自定义 DNS 但仍然得到来自运营商 DNS 服务器的结果)只能使用 DoH 外,正常情况下使用传统的运营商 DNS 或公共 DNS 即可。

使用 DoH 的核心作用有两个:

  1. 避免 DNS 劫持:查询过程受 TLS 保护,可以避免 DNS 结果被链路所有者的篡改。
  2. 隐私保护:传统 DNS 使用明文进行查询,链路所有者可以知道用户访问的域名。

如果没有发现自己的网络有出现 DNS 劫持的问题(如被插入网页广告),不需要配置 DoH,DoH 的查询效率低于传统 DNS,且复杂度高更容易出现问题。

如果需要配置 DoH,请尽量避免使用 Cloudflare/1.1.1.1 的 DoH 服务,Cloudflare 处于隐私保护考虑不支持 EDNS-Client-Subnet,会出现严重的 CDN 缓慢问题。同理,避免使用代理进行 DoH 查询。

[General]
# 传统 DNS 服务器设置
dns-server = 119.29.29.29
# DNS over HTTPS 服务器设置
doh-server = https://doh.pub/dns-query
# DNS over HTTPS 服务器格式
doh-format = wireformat
# 使 DoH 请求通过代理策略执行
doh-follow-outbound-mode = false

[Proxy]

[Rule]
FINAL,DIRECT

配置 DNS over HTTPS 的一些事项:

  1. doh-server 推荐仅配置一个地址;
  2. doh-format 选项分为 wireformatjson
  3. 配置 DoH 后,传统 DNS 仅用作连通性测试和 DoH URL 的域名解析;
  4. 可配置 doh-follow-outbound-mode = true 使 DoH 请求通过代理策略执行。但 DoH 查询的开销远大于传统 DNS,配置过多 DoH 会使得 Surge 消耗更多的内存。且按照官方建议此参数仅给有特殊需求的用户设计,一般用户不应该开启。所以示例中设置为 false 或可将整个字段移除掉。

参考