本文适用于已经在 Shadowrocket(小火箭)中配置好自己的服务商与连接信息,但遇到延迟测试有结果、网页仍无法打开的情况。先区分服务器连接、DNS 解析与网页访问三个环节,再核对 Config 中的 DNS 设置、Global Routing 和规则。每次只改一项,用同一域名复测,避免把规则拦截或出站失败误判为 DNS 故障。
一、延迟有数值,为什么仍可能解析失败
Home → Connectivity Test 的结果取决于当前采用的测试方式。测试可能只覆盖到服务器的连接,也可能访问一个测试目标。无论采用哪一种,它都不能证明所有网站的 DNS、TLS 与页面资源都正常。某个服务器地址已经缓存时,测试甚至不必重新解析这个地址。
打开一个新域名时,通常先查询地址,再按照实际策略建立连接,最后进行 TLS 握手与 HTTP 请求。下面是便于排查的简化流程;实际是否在本地解析、何时解析,还取决于规则类型与出站协议。
因此,“延迟正常”只是一个局部证据。DNS 返回了地址但连接超时,应继续查出站;DNS 根本没有返回地址,才优先查解析。网页文字能显示、图片却加载失败,也可能是图片使用的另一个域名没有解析成功,不能只检查地址栏里的主域名。
判断:先确认有没有解析结果
获得 A 或 AAAA 记录后仍打不开页面,不要继续反复更换 DNS。先记录返回地址,再检查该连接命中的策略与出站结果;端口可达也不等于整个解析服务正常。
二、在 Config 中核对正在使用的 DNS 设置
先打开 Config,确认当前选中的配置文件。编辑另一个未启用的文件,不会改变当前连接的行为。修改前保留副本;如果配置来自用户自己的远程配置来源,还要注意后续更新可能覆盖本地修改。
在 Config 中打开当前文件的编辑入口,查看 [General] 下的 dns-server。它用于指定解析服务器。下面只展示一个最小语法片段,不是一份可以替换原配置的完整文件。
[General]
dns-server = system
system 表示使用系统提供的 DNS,通常受当前 Wi-Fi 或蜂窝网络影响,并不表示固定使用某个公共解析服务。若这里填写的是一个地址或多个地址,应逐项核对来源与可达性;不要为了“备用”而不断追加未经验证的解析端点。
- 配置值:检查拼写、分隔符及重复设置。不要把网页地址当作普通 DNS 地址直接填入。
- 加密解析:DNS over HTTPS 与 DNS over TLS 需要相应格式和可达的端点。使用现有服务提供的准确参数,不要只把端口改成 443 或 853。
- 域名覆盖:如果文件存在
[Host]条目,检查是否把故障域名固定到旧地址。此类映射可能使更换解析服务器看起来没有效果。 - 域名端点:加密 DNS 端点本身使用域名时,也需要解决首次连接所需的地址解析。不要忽略这层依赖。
三、按固定顺序复测,避免同时改变多个变量
选一个自己平时能够正常访问的完整域名作为测试对象,并另选一个不同站点作对照。测试期间固定服务器与网络;不要一边切 Wi-Fi、一边切换服务器、又同时改 DNS,否则即使恢复,也无法知道是哪项起作用。
-
记录现场
在 Home 记录选中的 SERVER、Global Routing 当前值和 Connectivity Test 结果。记下故障域名、网络类型,以及浏览器显示的具体错误;截图分享前遮住账号与服务器信息。
-
核对模式
打开 Home → Global Routing,确认是 Config、Proxy、Direct 还是 Scene。若使用 Scene,先确认实际生效的场景。记录原值后再作对照,不把切换模式当作最终修复。
-
核对配置
进入 Config,打开当前选中的文件,检查
dns-server与[Host]。只修改一项,保存后回 Home 重新连接,再打开同一个域名。 -
检查自动连接
进入 Settings → On Demand,记录是否启用及相关条件。若测试中连接自动恢复,可临时关闭 On Demand 后重复对照,结束后恢复原设置。On Demand 控制连接触发,不是 DNS 服务器设置。
-
更换网络
保持配置和 SERVER 不变,再分别用 Wi-Fi 与蜂窝网络复测。若只有某个网络失败,优先检查该网络的 DNS 可达性、登录认证状态及网络限制。
-
恢复并确认
恢复不必要的临时改动,重新连接后测试两个站点。成功标准是能获得预期解析结果并完成网页加载,而不仅是 Connectivity Test 再次显示数值。
浏览器、系统与解析服务器可能各有缓存。重新连接有助于建立明确的测试边界,但不保证清除所有缓存。对照时应记录是否重复使用同一结果;不要通过访问任意 HTTPS 数字地址来替代域名测试,这会引入证书和虚拟主机差异。
四、把真实错误分成三类处理
以下是 DNS 协议或诊断输出中可能出现的原文,不表示 Shadowrocket 每一屏都会逐字显示这些内容。浏览器可能只给出概括性提示。应以实际记录为准,不要把所有“打不开”都归到同一类。
NXDOMAIN
原因:解析服务器回答域名不存在;域名拼写错误、记录已撤销或解析侧策略都可能产生此结果。
解法:先核对完整域名,再使用另一个已确认可用的解析来源对照;只有单个域名持续如此时,向该域名的维护方确认记录。
SERVFAIL
原因:解析服务器未能完成查询,可能涉及上游异常、权威服务器不可用或 DNSSEC 验证失败,并不等于域名不存在。
解法:保持网络与出站不变,换用已有的可用解析配置复测;若仅此域名异常,保留发生时间和返回状态交给相关维护方。
timeout
原因:在等待期限内没有得到响应,可能是解析端点不可达、数据包被丢弃,也可能是加密解析连接未能建立。
解法:先确认配置中的地址、协议与端口一致,再对照另一网络;不要单纯延长等待时间来掩盖持续不可达。
查询完成但没有所请求类型的记录,也不一定是故障。例如域名只有 A 记录,查询 AAAA 时可能得到成功响应但没有对应答案。应同时看响应状态和记录类型,不能只凭“没有 IPv6 地址”判断解析服务失效。
五、解析正常后,检查 Global Routing 与规则
Global Routing 的 Config 使用当前配置中的规则决定连接去向;Proxy 与 Direct 用于相应的全局路由姿态;Scene 按已配置场景工作。它们不是四个 DNS 服务器选项。切换姿态后网页恢复,只能说明路径变化影响了结果,还需要找出具体规则或出站差异。
在 Config 中检查当前文件的 [Rule]。下面是语法说明片段,使用文档示例域名和保留地址段,不应直接加入实际配置作为修复方案。FINAL,DIRECT 只表示此片段的兜底策略,并不是通用推荐。
[Rule]
DOMAIN-SUFFIX,example.com,REJECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
DOMAIN-SUFFIX:按域名后缀匹配。若目标域名命中REJECT,更换 DNS 不会消除这条拦截。IP-CIDR:按目标 IP 地址段匹配。示例中的no-resolve表示不为了该条 IP 规则额外触发域名解析;若已有 IP,仍需结合匹配条件判断。GEOIP:按 IP 地理归属数据判断。匹配依据是目标 IP,而非域名后缀;返回地址变化可能影响匹配结果。FINAL:处理未命中前面规则的连接。检查它指向的策略是否符合预期,而不是只看配置里有没有这行。
对同一连接,规则通常按顺序匹配,因此前面的拦截或策略选择可能让后面的规则没有机会生效。若使用规则集,还要检查其实际内容和更新状态。不要只在主文件里搜索域名,没找到就认定没有相关规则。
六、怎样确认修复,并保留可复核的记录
有效修复应能重复验证:在固定网络、固定 SERVER、固定配置下,故障域名能够解析,连接走向符合预期,页面和必要资源都能加载。随后恢复原本需要的 On Demand 设置,再观察网络切换后是否仍然正常。
- 记录配置:当前文件名称、Global Routing 值,以及本轮具体修改了哪个 DNS 项。
- 记录结果:测试时间、Wi-Fi 或蜂窝网络、故障域名、A/AAAA 结果,以及实际出现的错误原文。
- 记录对照:修改前失败、修改后成功是否能重复;若恢复原值也成功,可能是暂时性网络或缓存变化。
- 保护信息:向自己的服务商反馈时,不公开订阅完整地址、访问令牌、密码或 UUID。只提供定位所需的脱敏信息。
如果两个解析来源都能正常返回地址,但同一服务器上的网页连接仍失败,应转向服务器可用性、TLS、出站限制与规则检查。继续堆叠 DNS 地址会增加变量,不会自动修复这些问题。需要继续定位时,可查看本站故障排查和概念速查。
Shadowrocket 是 Apple 平台的闭源商业应用,主要用于 iPhone 与 iPad,唯一获取入口是 App Store。开发者为 Shadow Launch Technology Limited,客户端采用一次性买断;客户端买断 ≠ 线路套餐。本文以用户已有自己的服务商与配置为前提,系统要求以 App Store 页面标注为准。