在没有代理的情况下,DNS 的工作流程很简单:你输入域名,系统向 DNS 服务器查询对应的 IP,拿到之后发起连接。加上代理之后,这个流程会变得复杂——因为现在有两套 DNS 机制可能同时存在,而它们的配置未必一致。

理解这一点是排查的前提:代理客户端通常会接管 DNS 查询,使用它自己配置文件里指定的 DNS 服务器,而不是你在系统里设置的那个。所以在系统设置里改 DNS,往往对代理环境下的解析没有影响。

先确认问题是否真在 DNS

这个判断只需要一步:用 IP 地址直接访问

找一个你知道 IP 的境外服务,在浏览器里直接输入它的 IP。或者用命令行工具向某个境外 IP 发送探测包。

确认在 DNS 层之后,再往下细分。

三种典型的 DNS 故障

现象原因处理方向
域名解析出错误 IP,连上后是无关内容或超时DNS 查询走了直连并被污染改用加密 DNS,让查询走代理
解析请求长时间无响应配置的 DNS 服务器不可达更换 DNS 服务器地址
部分网站极慢或打不开,其他正常解析到 IPv6 但节点无 IPv6 出口调整 IP 版本策略

查询被污染

传统 DNS 使用明文传输,没有任何完整性校验。中间设备可以抢先返回一个伪造的应答,客户端会采信最先到达的那个结果。这就是 DNS 污染的基本原理。

被污染时的典型表现是:域名能解析出结果(所以不会提示「找不到服务器」),但解析出来的 IP 是错的,连接过去要么超时,要么返回无关内容。

处理方式是让 DNS 查询避开明文路径:

  1. 在客户端的 DNS 配置里,把默认 DNS 改为加密 DNS(DoH 或 DoT 形式的地址);
  2. 确认「使用代理进行 DNS 查询」之类的选项已开启,让查询本身也走隧道;
  3. 保留一组国内 DNS 用于解析国内域名,避免所有查询都绕道境外拖慢速度。

大部分 Clash 内核的客户端都支持这种分流式 DNS 配置:国内域名用国内 DNS 直接解析,境外域名用加密 DNS 经代理解析。这是目前比较合理的默认策略。

DNS 服务器不可达

如果配置里填的 DNS 地址本身连不上,解析请求会一直超时,浏览器表现为长时间转圈后报错。

原因可能是:

  • 填写的加密 DNS 服务已停止服务或更换了地址;
  • 该 DNS 服务在你的网络环境下被阻断;
  • 配置格式写错(加密 DNS 的地址格式和普通 DNS 不同)。

排查方法是临时换一个公认可用的 DNS 地址测试。如果换了之后正常,说明原来那个确实有问题。建议在配置里同时填写两到三个 DNS 服务器作为备份,避免单点失效。

IPv6 相关的问题

这一类比较隐蔽,表现往往不是「完全打不开」,而是「有些网站特别慢」。

现代操作系统在双栈环境下会优先尝试 IPv6 连接。如果域名解析出了 IPv6 地址,而你的代理节点只有 IPv4 出口,那么:

  • 系统先尝试 IPv6,连不通;
  • 等待超时(可能几秒到十几秒);
  • 回退到 IPv4 重试。

用户感受到的就是「打开特别慢」。移动网络下 IPv6 普及率更高,这个问题在手机上更常见,相关内容见 Wi-Fi 能用但流量不能用

处理方式:在客户端的 DNS 配置里把 IP 版本策略设为「仅 IPv4」或「优先 IPv4」。不建议在操作系统层面全局禁用 IPv6,那样影响面太大。

关于 DNS 泄漏

DNS 泄漏指的是:你的流量走了代理,但域名查询仍然发给了本地运营商的 DNS 服务器。这意味着运营商能看到你访问了哪些域名,即使流量内容本身是加密的。

严格来说这是隐私问题而不是连接问题——泄漏状态下网络往往还是能用的。但它常常和解析异常同时出现,因为走直连的查询更容易被污染。

检查方式是使用在线的 DNS 泄漏检测服务,看返回的 DNS 服务器是否位于你的节点所在地区。如果显示的是国内运营商的服务器,说明存在泄漏。

处理方式和防污染一致:确保客户端接管了 DNS 查询,并且查询经由代理发出。

完整的排查顺序

  1. 关闭代理,确认基础网络和直连解析正常;
  2. 用 IP 直接访问,判断问题是否在 DNS 层;
  3. 查看客户端的 DNS 配置段,确认使用的是哪些 DNS 服务器;
  4. 确认 DNS 查询是否走代理;
  5. 更换为加密 DNS 后重新测试;
  6. 调整 IP 版本策略为优先 IPv4;
  7. 清空系统和浏览器的 DNS 缓存(浏览器有独立的 DNS 缓存,可能保留着错误结果);
  8. 检查是否有 hosts 文件残留条目干扰特定域名;
  9. 换设备交叉验证,确认不是单机配置问题。

第七步经常被忽略。修改配置之后如果不清缓存,可能仍然拿到旧的错误结果,导致误以为调整无效。

怎么确认已经修好

三个验证点:

  • 用域名访问之前打不开的网站,能正常加载;
  • 做一次 DNS 泄漏检测,返回的服务器位置符合预期;
  • 访问国内网站的速度没有明显变慢(确认分流 DNS 配置合理,国内域名没有绕道境外解析)。

第三点用来避免一种过度修正:把所有 DNS 查询都扔给境外服务器,虽然解决了污染,但国内网站的解析会明显变慢,整体体验反而下降。

仍未解决时收集这些信息

  • 客户端名称、版本,以及 DNS 配置段的内容(注意隐去可能包含账号信息的部分);
  • 用 IP 访问和用域名访问的对照结果;
  • 具体哪些域名解析失败,哪些正常;
  • DNS 泄漏检测的结果;
  • 是否使用了第三方配置文件,来源是哪里。

如果你使用的是机场提供的官方配置,DNS 部分通常已经调好,出问题时优先联系机场;如果用的是第三方配置或自己修改过,那么问题大概率在配置本身,可以先换回官方配置做对照。配置来源的选择和导入方法见 Clash 订阅导入与基础配置