Shadowrocket DNS 设置详解:延迟测试正常但网页打不开的排查思路

延迟测试显示正常、网页却加载失败,多半与 DNS 解析有关。本文解释 DNS 设置项含义,给出解析失败时的逐项排查顺序。

本文速览

本文面向已经在 Shadowrocket(小火箭)中导入自己配置的用户。从延迟测试的边界开始,依次检查 Global Routing、当前 Config、DNS 返回结果与 IPv6 路径,区分解析失败和解析后的连接失败。排查时保留原配置,每次只改一项,并用同一域名复测。

一、延迟正常不等于域名解析正常

Home 中显示一个延迟数值,只能说明该次测试使用的目标、协议和路径获得了响应。不同测试方式覆盖的环节不同:端口连通不代表网页能完成 TLS 握手,一次 HTTP 测试成功也不代表所有网站都能访问。判断 DNS 是否异常,需要查看出问题域名的解析结果,而不是只看延迟颜色。

浏览器打开网站时,通常先把域名解析为 IP 地址,再按实际路由建立连接,随后完成 TLS 和 HTTP 请求。代理协议、域名规则与远端解析可能改变其中的执行位置,因此下面是诊断顺序,不是所有请求都完全相同的数据流。

域名请求 名称解析 规则判断 连接建立 页面响应

如果日志里没有地址回答,优先查 DNS;如果已经取得 A 或 AAAA 地址,却在连接阶段超时,应继续查实际出站、目标端口和网络路径。若证书校验失败,则还需检查设备时间、目标域名与证书信息,不应直接归因于 DNS。

不要把直接打开 IP 地址当作完整验证。许多 HTTPS 网站依赖域名选择证书和站点内容。把地址栏中的域名替换成 IP 后失败,不能据此证明该地址不可达,也不能证明 DNS 正常。

二、先核对 Home、Config 与连接状态

DNS 设置只有在实际生效的配置和路径下才有解释意义。先确认 Home 中正在使用哪个连接条目,再核对 Global Routing。Proxy、Direct、Config、Scene 是不同的路由姿态,不能仅凭某一个姿态下成功或失败就判定 DNS 服务器有问题。Scene 的实际结果还取决于已配置的场景条件。

  1. 记录基线

    在 Home 记录当前选择的连接条目与 Global Routing 值,并记录当前网络是 Wi-Fi 还是蜂窝网络。选择一个确实打不开的域名作为固定测试对象,避免每次更换网站。

  2. 核对配置

    进入 Config,确认当前选中的配置文件。打开该文件的编辑入口,先保留一份原内容,再检查 [General] 与 [Rule]。只修改另一个未选中的文件,不会改变当前连接的行为。

  3. 隔离自动连接

    进入 Settings → On Demand,记录原状态。需要手动断开进行对照时,可暂时关闭 On Demand,避免系统按条件再次建立连接;测试结束后恢复原设置。

  4. 单项复测

    保存一项改动后,回 Home 断开再连接,重新请求同一域名。必要时新开浏览器标签页;旧页面、系统缓存与浏览器缓存都可能让结果暂时不变。

若要比较不同 Global Routing 姿态,应先记录原值,短暂测试后立即恢复。Direct 会让目标流量走直接连接路径,Proxy 会改变出站选择;这种对照可能暴露网络路径差异,但不是生产配置的通用修复。涉及敏感业务时,应先评估切换路径的影响。

三、DNS 设置项应该怎样理解

检查当前 Config 的文本内容时,先找 [General] 下的 dns-server。它指定 DNS 解析器;system 表示使用系统提供的 DNS。配置中如果还有其他 DNS 选项,应按当前应用的参数说明逐项核对,不要把不同用途的地址堆进同一字段。

项目含义检查重点
dns-server配置使用的 DNS 解析器地址是否正确、当前网络是否能访问、当前 Config 是否已启用
system使用系统提供的 DNS切换 Wi-Fi 与蜂窝网络后,系统解析器及访问条件可能不同
A域名的 IPv4 地址记录是否获得回答,返回地址是否能够建立连接
AAAA域名的 IPv6 地址记录有地址不等于当前 IPv6 路径可用
TTLDNS 记录的缓存有效时间修改设置后,旧结果可能仍被缓存一段时间

以下是用于识别配置结构的最小片段,不是完整 Config,也不应覆盖原文件。若需要以系统解析器作为一次对照,只调整现有 [General] 中对应的键,避免新增重复的节或重复键。

[General]
dns-server = system
53
传统 DNS 通常使用 UDP 或 TCP 端口
443
DoH 通常使用 HTTPS 端口
2 类
常见地址记录:A 与 AAAA

端口号只能解释传输方式,不能保证可达性。普通 DNS 请求可能在当前网络超时;DoH 也需要建立 HTTPS 连接,而且以域名表示的 DoH 端点还涉及初始地址解析。是否采用某个解析器,应以用户已有配置要求、网络可达性和数据处理需求为依据,而不是把加密传输理解为必然更快。

四、按返回结果区分三类 DNS 故障

查看应用内请求或诊断记录时,重点找出问题域名、查询类型、响应状态与后续连接结果。下面列的是 DNS 响应码或常见超时文本,不代表 Shadowrocket 每个界面都会逐字显示这些字符串。浏览器可能只显示中文提示,应保留原始提示,不要自行补成某个错误码。

NXDOMAIN

原因:解析器返回该域名不存在;可能是域名拼写错误、域名已失效,或当前解析器给出了负面回答。

解法:先核对完整主机名,再用一个已知有效的域名做对照;若仅该域名持续异常,向该网站管理方确认,不要只增加等待时间。

SERVFAIL

原因:解析器未能完成查询,可能涉及上游响应、权威服务器或验证过程;它不等于域名不存在。

解法:在保留原值后,使用已有且可达的另一解析器做一次对照;若只影响一个域名,保留查询时间和返回码供网站管理方排查。

timeout

原因:请求在等待期限内没有取得响应,可能卡在解析器访问路径,也可能是解析完成后的目标连接。

解法:先确认超时发生在哪个阶段;如果没有 DNS 回答,检查解析器地址及网络可达性,如果已有地址则转查出站和目标端口。

单次失败不足以下结论。以同一域名重复请求,再用另一个已知有效的域名作对照:全部失败更像公共解析路径异常,单个域名失败则更应检查该域名及其权威解析。记录时保留查询类型,不能把一次没有 AAAA 记录的正常响应误判为整个域名无法解析。

五、规则与 IPv6 为什么会让结果看起来像 DNS 故障

Global Routing 使用 Config 时,规则会参与出站选择。DOMAIN-SUFFIX 按域名后缀匹配,IP-CIDR 和 GEOIP 按地址相关条件判断,FINAL 负责前面未命中的请求。规则顺序、是否需要解析以及解析发生的位置,都会影响最终观察到的行为。

下面是规则语法示例,仅用于说明匹配对象。example.com 和 192.0.2.0/24 都是文档示例值,不是需要添加的站点或线路。不要把整个片段直接追加到现有规则末尾;现有 FINAL 及上方规则可能使追加内容没有实际作用。

[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,PROXY

no-resolve 表示不为匹配这条 IP 规则而主动触发域名解析,不代表禁止所有 DNS,也不是解析失败的修复开关。若域名规则命中后走了不合适的路径,即使 DNS 正常,页面仍可能打不开;应结合请求记录核对实际命中项,而不是只阅读配置文本。

IPv6 排查要有对照。取得 AAAA 记录只说明解析器返回了 IPv6 地址。若当前网络的 IPv6 连接不完整,可能出现等待或回退。先记录当前配置中的 IPv6 相关选项,再短暂进行单项对照;不要同时更改 DNS、Global Routing 与 IPv6,否则无法知道哪项影响了结果。

六、常见追问与可复现的排查记录

换了 DNS,为什么还是原来的结果?

先在 Config 确认改的是当前选中的文件,保存后回 Home 重新连接,再新开标签页请求同一域名。系统、浏览器与应用都可能保留缓存;不要把连续刷新旧页面当作已经使用新解析器的证据。

Wi-Fi 不行,蜂窝网络却能打开,怎么办?

保持同一连接条目、Global Routing 和 Config,仅切换网络做对照。差异可能来自网络提供的 DNS、解析器可达性或 IPv6 路径;若当前使用 system,尤其要记录网络切换这个变量。

延迟正常,更新已有订阅却失败,也是 DNS 吗?

先区分订阅主机名解析失败、连接超时与 HTTP 返回错误。解析成功后仍返回 401 或 403,应向自己的服务商核对授权与链接有效性;修改 DNS 不能修复访问凭据。

改成 Proxy 能打开,就说明 DNS 修好了吗?

不能。Global Routing 改为 Proxy 可能同时改变出站和解析相关路径。应恢复原值,检查 Config 下失败请求命中的规则及返回地址,再仅针对已经证实的异常调整配置。

需要继续求助时,提供可复现条件比提供一张延迟截图更有用。下面的记录应在同一轮测试中收集;日志中的订阅凭据、账户信息和完整连接配置应先去除,只保留判断故障所需的字段。

排查的结束条件不是延迟数值变小,而是同一域名能够稳定解析、请求按预期规则出站并取得页面响应。若确认只是某个域名或某条网络路径异常,保留有效对照即可,不必继续改动其他正常配置。

App Store 正版核验 →