← 返回 穿梭VPN是什么?功能、使用方法与注意事项 首页

Shadowrocket DNS 泄露怎么解决?检测、DoH 配置与 IPv6 排查

更新于 2026-10-22 · transocks.cyou

简答:检测到运营商、家庭路由器或本地网络 DNS 时,才优先按泄露排查;最常见原因是 Direct 模式、DNS 回退到 system、IPv6 未接管或浏览器自带 DoH。先用 DNSLeakTest 建立基线,再逐项修改 Shadowrocket 的 DNS 和配置,最后在 Wi-Fi、蜂窝网络下复测。

定义:Shadowrocket DNS 泄露,是指域名解析请求仍由本地网络、运营商或系统 DNS 处理,而不是按当前配置使用指定的加密 DNS 或代理路径。

先试这一步:确认是不是 DNS 泄露

先不要直接把 DNS 改成某个公共地址。DNSLeakTest 的 Standard Test 会进行一轮查询,Extended Test 会进行多轮查询,用来发现可能只在部分请求中出现的其他解析器。打开 DNSLeakTest,关闭 Shadowrocket 测一次作为本机基线,再打开 Shadowrocket、保持同一网络和同一节点,分别运行 Standard Test 与 Extended Test。测试说明可参考 DNSLeakTest 对 Standard 与 Extended 的解释。

  1. 记录关闭 Shadowrocket 时显示的 DNS 服务商、网络归属和 IPv4/IPv6 情况。
  2. 打开 Shadowrocket,进入首页的 全局路由(Global Routing),先记下当前模式:代理(Proxy)、直连(Direct)、配置(Config) 或 场景(Scene)。
  3. 保持同一节点和网络,先选择 Proxy 测试,再选择原本使用的 Config 测试。
  4. 关闭 Wi-Fi、改用蜂窝数据重复测试;如果设备使用 IPv6,再单独记录 IPv6 结果。
  5. 保存修改前的配置文件。DNS 测试页面有缓存时,断开 Shadowrocket 后重新连接,并重新打开浏览器再测。
检测现象与下一步
检测结果优先判断应该改哪里如何复测
出现运营商、家庭路由器或本地网络 DNS系统 DNS、备用回退、Direct 模式或 IPv6 可能未被接管先查全局路由,再查 DNS 回退和 IPv6断开重连后跑 Extended Test
出现 223.5.5.5、119.29.29.29 等国内公共 DNS检测到的是本地网络可达的明文或系统 DNS,不等于 DoH 已经生效检查 dns-server、fallback-dns-server 和系统回退同一节点下对比 Proxy 与 Config
出现 Cloudflare、Google 或其他公共解析器不能只凭名称判定泄露,可能是远程加密 DNS,也可能是浏览器自身 DoH对比 Direct、Proxy、Config,并关闭浏览器自带安全 DNS 做一次对照换网络后重复测试
出现节点机房或代理出口附近的解析器可能表示 DNS 由服务端远程解析或节点出口侧解析器处理结合当前 DoH、代理模式和出口 IP 判断不能只凭国家或城市判断是否泄露
出现 Apple 或 Private Relay 相关解析路径iCloud Private Relay 或“限制 IP 地址跟踪”可能参与了 Safari 的解析记录并暂时关闭相关功能做对照只用 Safari 与另一浏览器分别测试

先分清四种问题:DNS 泄露不等于所有网络异常

Shadowrocket 排障对象对照
问题含义常见表现先做什么
DNS 泄露域名查询由本地网络、运营商或系统 DNS 处理检测结果出现本地运营商或家庭网络查 DNS 来源、回退和 IPv6
DNS 污染或错误解析返回的地址被篡改、过期或与目标服务不匹配同一域名在不同 DNS 下得到不同结果,或网页跳转异常比较不同 DNS 结果,不要仅凭检测站判断
真实 IP 泄露网站或服务看到的连接地址仍是本机公网出口IP 检测显示本地网络出口单独测试公网 IP,不能用 DNS 结果代替
WebRTC 泄露浏览器 WebRTC 暴露额外的本地或公网地址WebRTC 页面出现与当前代理不同的地址单独检查浏览器 WebRTC,不能用 DNSLeakTest 代替
代理未接管流量当前应用或请求没有经过预期的 Shadowrocket 路由Proxy 模式正常,Config 模式异常,或某个 App 始终直连比较全局路由和配置文件是否选中

因此,“网页打不开”不自动等于 DNS 泄露;也可能是节点不可用、规则匹配错误、IPv6 连接超时或应用自带 DNS。每次只修改一个变量,才能知道实际原因。

Shadowrocket 当前配置要检查的入口

  1. 打开 Shadowrocket 首页,点击 全局路由(Global Routing),临时选择 Proxy。这是为了减少规则干扰,测试结束后恢复原来的模式。
  2. 如果 Proxy 正常、Config 异常,进入 配置(Config),确认当前配置文件已经被选中。配置文件只存在于列表中但没有启用,不会改变当前路由。
  3. 点击当前配置右侧的 i 或编辑入口,优先查看图形化设置;如果当前版本提供 编辑纯文本(Edit Raw),再检查配置中的 [General] 和 [Rule]。
  4. 进入 设置(Settings)→ DNS,查看当前版本显示的 DNS Server、Fallback DNS Server、Bootstrap DNS 或相关代理选项。不同版本可能显示不同字段,界面没有的字段不要凭网上截图硬填。
  5. 修改远程订阅下载的原文件,更新订阅后可能被覆盖。需要长期保留的改动,应使用当前版本支持的覆写或本地配置,而不是只编辑一次远程内容。

公开配置参考中,dns-server = system 表示使用系统提供的 DNS,并不固定指向某个公共 DNS;其中的 no-resolve 也只是控制 IP 规则是否额外触发解析,并不是全局关闭 DNS。可参阅 Shadowrocket 配置与规则参考,但该页面未能核实为开发者官方站点,不能当作官方产品公告。

两套可复制配置:严格排查版与兼容排查版

下面的字段来自公开 Shadowrocket 配置示例和配置参考,适用于“当前版本能够识别这些字段”的情况。Shadowrocket 版本、内核和图形界面可能不同;保存前先备份原配置。若保存后无法解析域名,立即恢复兼容版或原配置,不要继续叠加字段。

严格排查版:减少系统 DNS 和明文 53 端口参与

适用场景:你已经确认当前版本支持这些 DNS 字段,并且设备能够访问所填 DoH 地址。下面的地址只是示例,不代表在每个网络环境都可达。

[General]
dns-server = https://1.1.1.1/dns-query, https://8.8.8.8/dns-query
fallback-dns-server = https://1.1.1.1/dns-query, https://8.8.8.8/dns-query
dns-fallback-system = false
dns-direct-system = false
dns-direct-fallback-proxy = true
hijack-dns = :53
ipv6 = false

[Rule]
FINAL,PROXY
  1. 进入 配置(Config)→ 当前配置右侧 i → 编辑纯文本(Edit Raw),或在当前版本的 DNS 设置页逐项填写。
  2. 保存后重新选中该配置,回到首页,将全局路由切换为 Config。
  3. 断开并重新连接 Shadowrocket,再用 DNSLeakTest 的 Extended Test 测试。
  4. 如果全部域名无法解析、DoH 地址无法连接或连接明显异常,恢复原配置;先不要把 dns-fallback-system 改回 true 后直接长期使用,因为这会允许系统 DNS 参与回退。

这套配置的关键是:dns-fallback-system = false 不允许失败时回退到系统 DNS;dns-direct-fallback-proxy = true 表示直连 DNS 失败时尝试通过代理路径;hijack-dns = :53 用于接管普通 DNS 端口。它们是否被当前版本识别,必须以设备实际日志和复测结果为准。

兼容排查版:先恢复可用,再定位是哪一项造成问题

适用场景:严格版导致解析失败、节点尚未建立、当前版本不识别某些字段,或你需要先建立稳定基线。

[General]
dns-server = system
fallback-dns-server = system
dns-fallback-system = true
dns-direct-system = true
ipv6 = false

[Rule]
FINAL,PROXY
  1. 保存为本地副本并启用,确认 Shadowrocket 可以正常打开测试页面。
  2. 在首页的 全局路由(Global Routing) 选择 Proxy,测试节点和基础连接。
  3. 再选择 Config,测试规则是否生效。
  4. 确认基础连接后,只把 dns-server 改为一个当前网络可达的 DoH 地址,再测试一次;不要同时改 IPv6、规则和节点。
  5. 如果改回 DoH 后仍无法解析,恢复兼容版,重点检查 DoH 主机是否可达、Bootstrap DNS 是否可用,以及当前版本是否支持该格式。

兼容版不是防泄露配置,而是用于确认“客户端、节点和网络本身是否正常”。其中 dns-fallback-system = true 明确允许系统 DNS 回退,因此如果检测结果出现运营商或本地网络 DNS,应回到严格排查版继续定位。

DNS-over-Proxy、备用 DNS 与 hijack-dns 怎么组合

字段优先级与取值说明
字段作用排查时的建议
dns-server主 DNS 来源,可以是 system、明文地址或 DoH/DoT 地址严格排查时使用当前版本支持的加密 DNS;不要把明文 1.1.1.1 当成 DoH
fallback-dns-server主 DNS 失败时使用的备用来源备用地址必须可达;不要无意中填入 system
dns-fallback-system是否允许失败时回退到系统 DNS排查泄露时使用 false,但必须确认当前版本支持,否则可能造成解析失败
dns-direct-system直连解析是否使用系统 DNS希望减少本地 DNS 参与时使用 false;本地设备或内网域名异常时先恢复并测试
dns-direct-fallback-proxy直连 DNS 失败时是否尝试代理路径需要 DNS-over-Proxy 时可尝试 true,但要观察日志和实际可达性
hijack-dns接管普通 DNS 请求,例如端口 53公开示例使用 :53;当前版本不识别时不要强行添加
ipv6是否启用 IPv6 连接路径IPv6 未确认由代理接管时,可临时设为 false 做对照

主 DoH 经代理并不等于“检测站一定显示代理节点名称”。检测站通常显示实际回答请求的远程解析器或其网络归属,因此应同时比较节点出口、DNS 服务商、IPv4 和 IPv6,而不是只看名称。

规则、no-resolve 与 IPv6 的具体排查

no-resolve 应该怎么写

no-resolve 只避免某条 IP 规则为了匹配而额外触发域名解析,不会关闭所有 DNS,也不会自动把请求改成代理。示例:

[Rule]
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR6,fc00::/7,DIRECT,no-resolve
FINAL,PROXY

规则从上到下匹配,FINAL,PROXY 必须放在后面,否则可能让后面的特定规则失效。若把所有 IP 段都加上 no-resolve,域名请求可能没有可供 IP 规则匹配的地址,表现为规则不命中或连接异常。公开配置参考也将 no-resolve 定义为避免额外解析,而不是关闭 DNS,可参考 Shadowrocket 配置与规则参考。

IPv6 不能只看 IPv4 结果

  1. 在配置的 [General] 中先备份,再将 ipv6 = true 改为 ipv6 = false;如果图形界面提供 IPv6 开关,则在当前版本的 DNS 或通用设置中关闭。
  2. 重新连接 Shadowrocket,同时测试 IPv4 和 IPv6。
  3. 如果关闭 IPv6 后检测正常,说明 IPv6 可能是未被代理接管的一条路径,但不能据此证明 IPv4 和其他 App 都没有问题。
  4. 如果关闭 IPv6 后某些内网服务或应用异常,恢复 ipv6 = true,改为检查节点、规则和应用自身解析。

国内应用解析异常怎么回滚

如果把所有请求都写成 FINAL,PROXY 后,国内应用变慢、内网设备打不开或本地服务无法访问,先恢复原配置;再把明确的局域网地址加入 DIRECT,no-resolve,不要继续扩大直连范围。DNS 规则、路由规则和本地网络可达性是三个不同问题,不能只靠增加一条 FINAL 规则解决。

浏览器 DoH、Private Relay 与检测缓存怎么处理

浏览器可能自带安全 DNS,导致 Safari、Chrome 或 Firefox 的检测结果与其他 App 不同。排查时先用 Safari 测一次,再用另一款浏览器做对照;在浏览器的隐私或安全设置中暂时关闭“安全 DNS”或“DNS over HTTPS”,重新打开页面测试。不同浏览器的菜单名称和版本会变化,无法核实当前设备界面时,不要把某个固定路径当成所有 iPhone 都适用。

Apple 说明,iCloud Private Relay 会保护 Safari 浏览和 DNS 解析;使用代理配置时,相关流量可能不再按 Private Relay 的路径处理。排查 Shadowrocket 时,可以在 设置 → Apple 账户 → iCloud → Private Relay 查看状态,并在蜂窝网络或 Wi-Fi 的网络详情中记录“限制 IP 地址跟踪”是否开启。详情见 Apple 关于 iCloud Private Relay 的说明。

检测站缓存也会造成误判:浏览器可能复用已有连接,DNS 服务器也可能缓存先前结果。每次修改后都要断开 Shadowrocket、重新连接、关闭并重新打开浏览器,再用新的 Standard 或 Extended Test 测试。只看到一次异常结果,不要立即判断为稳定泄露;但如果在 Wi-Fi 和蜂窝数据、Proxy 和 Config 下都重复出现本地运营商 DNS,就应继续检查系统回退和 IPv6。

修复后的验收与回滚清单

  1. 在 Wi-Fi 下,关闭 Shadowrocket 测一次基线。
  2. 打开 Shadowrocket,选择固定节点和 Proxy,运行 DNSLeakTest Standard Test。
  3. 保持节点和网络不变,运行 Extended Test,记录是否仍出现运营商或本地网络 DNS。
  4. 切换到 Config,重复测试;如果只有 Config 异常,回到当前配置检查 DNS、规则和 IPv6。
  5. 关闭 Wi-Fi,使用蜂窝数据重复一次;再单独检查 IPv6、浏览器安全 DNS 和 Private Relay。
  6. 如果严格版导致所有域名无法解析,关闭连接,恢复原配置或兼容版,重新选择配置后再测试固定网址。

最终验收不是“检测站显示某个熟悉品牌”这么简单,而是同一节点、同一网络下,Proxy 与 Config 结果可解释,Wi-Fi 与蜂窝网络没有反复出现本地运营商 DNS,IPv6 也没有走出预期路径。

常见问题

DNSLeakTest 的 Standard 和 Extended 应该选哪个?

先用 Standard Test 快速确认,再用 Extended Test 做复核。Standard 查询较少,Extended 会进行更多轮查询,更适合检查备用或间歇出现的解析器;两者都只代表当前浏览器和当前网络下的测试结果。

Shadowrocket 中 dns-fallback-system 应该填什么?

如果目标是排查系统 DNS 回退,且当前版本支持该字段,可填 false;如果严格版导致解析失败,应恢复兼容版或原配置。填 true 会允许系统 DNS 参与回退,不能当作防泄露设置。

主 DoH 经代理后,检测站为什么不显示节点机房 DNS?

检测站通常显示实际回答请求的远程解析器或其网络归属,不一定显示节点机房名称。应结合 Proxy、Config、Direct、IPv4 和 IPv6 结果判断,不能只凭解析器名称下结论。

把 FINAL,PROXY 放进去后国内应用打不开怎么办?

先恢复原配置,确认是全局规则导致还是 DNS 导致;再只为明确的局域网地址使用 DIRECT,no-resolve,并把 FINAL 放在规则末尾。不要同时更换节点、DNS 和规则。

关闭 IPv6 后检测正常,是否代表已经彻底修复?

不代表。它只说明 IPv6 可能是一条绕过路径。还要在 Wi-Fi、蜂窝数据、Proxy 和 Config 下重复测试,并单独检查浏览器 DoH、Private Relay、真实 IP 和 WebRTC。

参考资料

  1. DNSLeakTest:DNS 泄露检测(dnsleaktest.com)
  2. DNSLeakTest:Standard Test 与 Extended Test 的区别(dnsleaktest.com)
  3. Shadowrocket 配置与规则参考(shadow-tunnel.com)
  4. Apple Support:About iCloud Private Relay
  5. 公开 Shadowrocket 配置示例:DNS 回退、hijack-dns 与 IPv6 字段