延迟有数值不等于网页访问链路完整。已有自己的服务商与订阅、能够连接 Shadowrocket 却打不开网页时,先记录失败域名和当前网络,再依次检查解析结果、DNS 请求路径与 Global Routing。本文给出单变量对照步骤,帮助区分域名不存在、解析超时、规则分流错误和网站连接故障。
延迟正常,只能说明测试目标有响应
Shadowrocket 的延迟测试与浏览器打开网页不是同一项操作。测试方式不同,验证范围也不同:连接端口得到响应,不代表代理认证、目标域名解析、TLS 握手和网页资源加载都已成功。即使测试包含 HTTP 请求,也只能证明该测试目标当时可达,不能代替对实际失败网站的检查。
这条流程表示一次访问所需的主要环节,不代表所有协议都严格按此顺序执行。代理服务器地址若使用域名,它本身还需要先被解析;目标网站域名也可能交给远端解析。因此,要先分清出问题的是“服务器地址”还是“网页地址”,再决定修改哪里。
- 所有网站都打不开:先检查连接是否建立、代理服务器地址是否可解析,以及当前网络是否需要网页登录认证。
- 只有一个域名打不开:记录完整主机名,检查拼写、DNS 返回状态和该域名命中的规则。
- 页面文字出现、图片不出现:检查图片等资源所用的其他域名,不能只检查地址栏里的域名。
先记录现场,再做一次最小对照
排查期间保留原有配置,不同时更换服务器、DNS 和规则。以下步骤以 iPhone 为例,iPad 可按同样逻辑操作。测试应使用用户已有的服务器与订阅;订阅更新成功只说明订阅地址可以读取,不代表其中每个服务器或所有目标网站都可访问。
- 在 Home 记录当前选中的服务器、连接开关状态和 Global Routing 的选择;在 Config 记录当前启用的配置文件。
- 记录失败网址的主机名、发生时间、使用 Wi-Fi 还是蜂窝网络,以及浏览器实际提示。分享记录前遮去订阅地址、密码和令牌。
- 关闭连接,测试一个在当前本地网络中通常可直接访问的网站。如果仍打不开,先检查本地网络或网页登录认证。
- 重新连接,保持同一服务器和同一网站,重复访问。每次改动后关闭旧网页标签,再新开标签测试,减少旧连接影响。
- 必要时在 Wi-Fi 与蜂窝网络间做一次对照,但不要同时改 DNS。网络切换后的差异可以帮助定位本地路由器或运营网络的影响。
DNS 设置分别控制什么
从 Settings → DNS 检查应用提供的 DNS 设置,再到 Config 查看当前配置中的 [General]。不同配置可能同时涉及 DNS 服务器、解析策略和按域名指定的结果。排查时要核对当前实际启用的配置,不能只看到某个输入框已有地址,就认定所有请求都走该地址。
| 项目 | 作用 | 检查重点 |
|---|---|---|
| System DNS | 使用当前系统或网络提供的解析服务。 | 切换 Wi-Fi 后,解析环境可能随之改变;它不是固定的公共 DNS 地址。 |
dns-server | 配置文件中的 DNS 服务器设置。 | 检查地址拼写、格式及请求能否到达,而不只是地址是否已填写。 |
| DNS over HTTPS | 通过 HTTPS 传输 DNS 查询,通常使用 TCP 443。 | 既要能访问服务端点,也要能完成证书验证;端点若使用域名,还涉及初始解析。 |
| 普通 DNS | 通常使用 UDP 53,部分情况需要 TCP 53。 | 当前网络是否限制相关流量,返回是否超时;网站使用的 443 端口是另一条连接。 |
[Host] | 对指定主机名提供静态映射。 | 旧地址可能绕过正常解析,造成域名能查到但网站连接失败。 |
例如,配置中的以下一行表示使用系统 DNS。它只是语法示意,不是建议覆盖现有配置的完整文件。修改前保存原值;若配置来自用户自己的服务商,先确认其中的 DNS 约定,再做局部测试。
[General]
dns-server = system
结论:一次只替换一个解析变量
保持服务器、Global Routing 和目标域名不变,仅对照原 DNS 设置与系统 DNS;如果故障随设置变化而稳定复现,再进一步查解析服务和请求路径。
根据返回状态区分三类解析失败
浏览器的“找不到服务器”提示通常不足以定位原因。检查可用的连接记录或诊断输出时,要看有没有 DNS 返回状态、查询域名和超时信息。以下是通用 DNS 状态或诊断用语,并非承诺 Shadowrocket 的每个界面都会逐字显示这些文本。
报错:NXDOMAIN
原因与解法:解析器返回所查询域名不存在;先核对完整主机名和拼写,再用另一解析路径对照,区分真实不存在与特定解析器的异常结果。
报错:SERVFAIL
原因与解法:解析器未能完成查询,可能涉及上游故障或验证失败;保留域名和时间,换一条可达的解析路径复测,持续发生则向自己的服务商提供记录。
报错:timeout
原因与解法:查询在等待时间内没有得到响应;检查 DNS 服务地址与传输路径,在同一设置下切换 Wi-Fi 或蜂窝网络,确认是否仅特定网络超时。
还要区分“没有 AAAA 记录”和“域名不存在”。AAAA 对应 IPv6 地址,A 对应 IPv4 地址;某个域名只有 A 记录不一定是故障。若已有地址返回,但后续连接卡住,应继续检查地址族可达性、路由和 TLS,而不是反复替换 DNS。
- 记录查询的是 A、AAAA 还是其他类型,避免把不同查询结果直接比较。
- 返回私有地址或与预期不符的地址时,先核对本地网络用途及静态映射,不凭地址外观直接下结论。
- 不要用“把 HTTPS 网址换成 IP 地址”作为唯一验证:证书、SNI 和虚拟主机可能依赖原域名。
用 Global Routing 区分 DNS 与规则问题
Home → Global Routing 中,Config 按当前配置处理流量,Proxy 让适用的流量走代理,Direct 让适用的流量直接连接。切换姿态可以帮助定位,但它不是纯粹的 DNS 开关:目标连接路径、远端解析机会等因素也可能随之变化。
- 先在 Config 下重现失败,记录域名及其命中的规则或策略。
- 保持同一服务器,短暂切换到 Proxy,重新访问同一域名。如果恢复,优先检查 Config 中的分流规则与所选策略,但不要据此断言 DNS 一定正常。
- 对当前本地网络通常可直达的目标,可短暂用 Direct 对照。目标本身在本地网络不可达时,Direct 失败不能证明 DNS 设置有误。
- 完成对照后恢复原来的姿态;若使用 Scene,先确认当前场景实际选择了什么连接行为,避免场景变化干扰比较。
下面是规则语法示意,example.com 为示例域名,不是诊断服务。DOMAIN-SUFFIX 匹配域名后缀,IP-CIDR 匹配地址网段,GEOIP 按 IP 地理归属匹配,FINAL 处理前序未命中的请求。规则按顺序检查;地址类规则还可能涉及解析结果,不能只盯着最后一行。
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
no-resolve 用于避免为了匹配相应地址规则而额外触发域名解析,不是“修复所有 DNS”的选项。若某域名被前面的规则送往不可用路径,单纯更换 DNS 可能不会改变结果。应先核对命中项,再修改该项的策略或位置。
常见追问:缓存、订阅与连接恢复
换了 DNS,为什么还是打不开?
先确认修改的是当前生效配置,再重新建立连接并新开网页标签。应用与系统可能保留缓存或旧连接;若已返回地址却仍失败,转查规则、出站连接和 TLS,不要继续堆加 DNS 地址。
订阅能更新,是否代表 DNS 没问题?
不能。订阅地址、代理服务器和目标网站可能使用不同域名与路径。在 Home 分别核对订阅更新结果和服务器状态,再针对打不开的主机名单独检查。已有配置先保留,避免更新同时引入新的测试变量。
只有 Wi-Fi 失败,要改服务器吗?
先保持同一服务器与 DNS,切换蜂窝网络复测。如果仅该 Wi-Fi 失败,检查网页登录认证、路由器提供的 DNS 和网络限制;确认原因前不必同时调整协议与服务器。
出现证书错误,也属于 DNS 失败吗?
不一定。证书错误通常意味着已进入 TLS 检查阶段,应核对设备日期时间、目标域名与证书是否匹配。解析到错误地址也可能诱发证书错误,但不要通过忽略证书验证来掩盖问题。
恢复后按同一条件复测
一次打开网页只能说明当次成功。恢复后,应在最初失败的网络、原目标域名和日常使用姿态下再测一次,并检查页面附属资源是否加载完整。排查记录的重点是“哪一个变量改变后恢复”,而不是累计改过多少设置。
- 恢复运行设置:还原临时切换的 Global Routing,按原需求恢复 Settings → On Demand。
- 核对配置:确认 Config 中启用的文件正确,删除仅为测试加入且已不需要的静态映射或临时规则。
- 保留证据:记录网络类型、失败域名、DNS 返回状态、修改项和复测结果;提供给自己的服务商时遮去凭据。
- 明确下一层:已有正确地址且 DNS 响应正常,仍无法建立连接时,继续检查服务器可用性、目标端口及 TLS,不再把所有失败归因于解析。
结论:以失败环节决定下一步
无响应就查 DNS 请求路径,明确返回不存在就核对域名,已有地址就查连接与规则;每一步保留对照结果,才能避免反复覆盖配置。