DNS 问题为什么会导致节点连接异常

解释 DNS 在代理链路中的两个位置:解析节点域名和解析目标网站。节点域名被污染会直接连不上节点,目标域名本地解析与远端解析的差异则影响可用性与隐私,并给出 fake-ip 与 redir-host 的对比和排查方法。

DNS 是把域名翻译成 IP 地址的系统,而在代理链路里它出现在两个位置:一是解析节点自己的域名,二是解析你要访问的目标网站域名。前者出错,客户端根本连不上节点,表现为超时;后者出错,则会出现「节点已连接但网页打不开、打开慢或打开的是错误内容」。排查连接异常时,第一步是分清问题出在哪个位置——两者的处理方法完全不同。本文适用于 Clash 系、sing-box 等带独立 DNS 模块的客户端,也适用于理解 v2rayN、Shadowrocket 的解析行为。

核心结论

  • DNS 在代理链路中出现两次:解析节点域名、解析目标域名;
  • 节点域名被污染 → 连不上节点;目标域名解析异常 → 连上了但打不开网页;
  • 目标域名交给节点在远端解析(remote DNS),可以同时避开污染与泄漏;
  • fake-ip 与 redir-host 是客户端处理目标域名的两种模式,行为差异需要了解。

工作原理

不使用代理时,应用访问网站的第一步是向系统配置的 DNS 服务器查询域名对应的 IP。使用代理后,链路变成两段:

  1. 客户端 → 节点:客户端需要先知道 node1.example.com 的 IP 才能建立 TLS 连接。这次解析发生在本地,走系统或客户端配置的 DNS;
  2. 节点 → 目标网站:你访问的目标域名,既可以在本地解析出 IP 再把 IP 交给节点,也可以把域名原样交给节点、由节点在远端解析(即 remote DNS)。

Trojan 协议的请求结构原生支持携带域名,所以「把解析推迟到远端」是天然可行的,这也是多数客户端的推荐行为。

理解「污染为什么可能发生」需要知道一点背景:传统 DNS 查询默认走明文 UDP 53 端口,请求和应答都不加密、不验证来源,中间设备既能看到你查询了什么,也能抢先返回伪造的应答。加密 DNS(DoH/DoT)和远端解析之所以有效,正是因为绕开了这条明文通道。

核心组成

一条完整的代理 DNS 链路涉及三个环节:

  • 节点域名解析:只在本地发生。若本地 DNS 被污染,解析到错误 IP,客户端连接的就是错误目标,通常直接超时或 TLS 握手失败。这是全部节点显示 Timeout 的常见原因之一;
  • 目标域名解析位置:本地解析意味着解析请求以明文 UDP 发往本地 DNS,可能被污染,也把访问意图暴露在本地网络——后者就是所谓 DNS 泄漏;远端解析则由节点所在网络完成,结果更准确,且解析地理位置与出口一致,CDN 调度也更合理;
  • 客户端 DNS 模块:Clash 系、sing-box 内置 DNS 服务器,接管系统解析请求后按规则分流:国内域名走本地 DNS,其余走加密 DNS 或远端解析,并以 fake-ip 或 redir-host 模式响应应用。

优点

正确配置客户端 DNS(目标域名远端解析 + 客户端接管本地解析)带来三方面收益:

  • 避开污染:被污染域名的解析不再依赖本地运营商 DNS,拿到的是真实结果;
  • 避免泄漏:解析意图不暴露给本地网络,隐私边界与流量边界一致;
  • 分流准确:域名信息保留到规则匹配阶段,按域名分流的规则(如国内直连、其余走代理)才能正确命中,CDN 也会返回离节点出口更近的接入点。

限制

  • 多一层依赖:客户端 DNS 模块配置错误(上游不可达、分流规则冲突)本身会制造「节点正常但无法上网」的故障,排查思路见Trojan 连接成功但无法打开网页怎么办;
  • fake-ip 的兼容性问题:少数把 IP 持久化保存的应用(局域网发现、部分游戏平台)可能拿到虚假 IP 后行为异常,需要为其配置 fake-ip 过滤;
  • 缓存残留:切换代理开关后,系统或浏览器缓存的旧解析结果(包括 fake-ip 地址)可能短暂造成访问异常,刷新 DNS 缓存即可;
  • 无法解决非 DNS 问题:节点下线、线路阻断与 DNS 无关,调整解析不会有帮助。

fake-ip 与 redir-host 模式的区别

对比项fake-ipredir-host
应答内容返回 198.18.0.0/15 段的虚假 IP返回真实解析结果
响应速度即时,无需等待上游取决于上游 DNS 耗时
域名保留转发时映射回域名,规则匹配准确依赖解析结果,域名规则可能失配
泄漏风险低,解析可完全推迟到远端较高,本地会产生真实解析
兼容性个别依赖真实 IP 的应用需过滤兼容性较好

简单说:fake-ip 用「先给假地址、转发时再还原域名」换取速度与准确分流,是 mihomo 等内核的默认推荐;redir-host 行为更接近传统解析,兼容性好但污染与泄漏风险更高,部分内核已不再推荐。日常使用建议 fake-ip 加上必要的过滤名单。

适用场景与排查方法

怀疑 DNS 引起连接异常时,按两个位置分别验证:

  1. 验证节点域名:分别用系统 DNS 与公共 DNS 查询并对比:

    nslookup node1.example.com
    nslookup node1.example.com 1.1.1.1

    结果差异明显即怀疑污染,可在客户端配置可靠 DNS 上游,或用服务方提供的 IP 直连测试(注意配合正确的 SNI,原理见 Trojan 协议如何通过 TLS 建立连接);

  2. 验证目标域名:开启代理后访问 DNS 泄漏检测页面,查看解析服务器归属。显示本地运营商即存在泄漏,应在客户端开启 DNS 接管并选择远端解析或加密上游;

  3. 验证客户端 DNS 模块:检查 DNS 上游是否可达、fake-ip 过滤名单是否覆盖出问题的应用,必要时对照客户端文档恢复默认 DNS 配置再逐项修改。Clash 系配置中对应 dns 段的 enhanced-mode(fake-ip / redir-host)、nameserverfallback 字段;sing-box 则在 dns 配置块中定义服务器与分流规则。修改配置后记得重载并清空一次系统 DNS 缓存,避免旧结果干扰判断。

把 DNS 检查纳入日常节点测试流程(方法见Trojan 节点如何测试延迟、丢包和稳定性),可以在故障发生前发现解析异常。

延伸阅读

常见问题

怎么判断节点连不上是不是 DNS 污染造成的?
分别用系统默认 DNS 和公共 DNS 查询节点域名,例如 nslookup node1.example.com 与 nslookup node1.example.com 1.1.1.1,对比两组返回的 IP。如果结果差异明显,或系统 DNS 返回明显异常的地址,污染嫌疑就很大;此时可在客户端配置可靠 DNS,或改用服务方提供的 IP 直连验证。
DNS 泄漏会带来什么实际影响?
泄漏本身不影响连接速度,主要是隐私问题:域名解析请求发往本地运营商 DNS,等于把访问了哪些网站的意图暴露给了本地网络;同时被污染的解析结果还可能导致部分网站打不开。通过检测页面查看解析服务器归属即可确认是否泄漏,由客户端接管 DNS 或使用远端解析可以避免。
fake-ip 模式下 nslookup 返回 198.18 开头的地址,是不是坏了?
不是。fake-ip 模式下客户端故意返回 198.18.0.0/15 保留段的虚假地址,用来立刻响应应用的解析请求并在转发时映射回真实域名,这是正常工作状态。只有关闭代理后仍解析到 fake-ip 地址(缓存未清理),才需要刷新 DNS 缓存或重启网络。
客户端里节点用 IP 填写,是不是就不受 DNS 影响了?
只解决了一半。节点地址用 IP 填写后,连接节点这一步确实绕开了域名解析,不再受节点域名污染影响;但目标网站的域名仍需要解析,解析在本地还是远端、是否被污染,依旧决定网页能否正常打开。而且 Trojan 证书通常签给域名,直接填 IP 可能引起证书校验问题,需要正确配置 SNI。

参考资料

本文最后更新于 。如发现内容过时,欢迎通过联系页面反馈。

本文由 Trojan Lab 技术审核组 审核,采编标准见编辑政策