先把「规则集更新失败」和「节点不可用」分开。三款 iOS 客户端都运行在 Apple 的 Network Extension 体系里,规则、DNS 和隧道网络设置会互相影响;但远程规则失败的第一现场通常还是 URL 响应、DoH 解析和本地缓存。

本文核对日期是 2026-05-24。未覆盖 TestFlight 版本、企业签名版本、旧 iOS 16 以下设备,也不判断第三方规则仓库当天是否可访问。

三个客户端入口有什么不同?

Shadowrocket 更像「把规则文件导进来再引用」,Stash 更像 Clash/Mihomo 的 rule-providers,Loon 则有独立的订阅规则写法。入口不同,排错时看的字段也不一样。

客户端远程规则入口DNS 相关入口失败时先看官方资料信号
Shadowrocket从 URL 或 iCloud Drive 导入规则文件App Store 页面列出 DoH、DoT、DoQ 与本地 DNS MappingURL 是否返回规则文本,导入后是否被当前规则引用App Store 写明支持规则文件导入、DNS 请求记录和 DoH
Stashrule-providers 下声明 urlbehaviorformatintervaldns.nameserver 支持 https://.../dns-querydoh://...behaviorformatheaderspathRULE-SET 名称官方文档给出 rule-set、headers、path 与 DNS 示例
Loon订阅规则用远程链接加策略名[General] 里有 doh-serverdoq-serverdoh3-server规则链接是否可读,策略名是否存在,DoH 是否回落官方手册说明订阅规则和 DoH 查询逻辑

如果你只想判断是不是远程源问题,把规则 URL 复制到 Safari。返回纯文本、YAML、.list 或二进制规则文件,才继续看客户端;如果返回登录页、GitHub HTML 页面、Cloudflare 验证页、401、403、404 或 5xx,先不用动 App 配置。

先看 URL,还是先看 DoH?

先看 URL。DoH 是第二步,因为 DoH 只负责「怎么解析规则源域名」,不负责判断规则文件格式。

一条可用的远程规则地址至少要满足 4 个条件:HTTPS 证书正常、无需浏览器交互、返回内容不是 HTML、内容类型能被客户端支持。GitHub 仓库文件页面和 raw 地址最容易混,前者是网页,后者才是规则文本。

DoH 只在这些现象出现时提前排查:

现象更像 URL 问题更像 DoH 问题快速验证
Safari 打开就是 404改 raw 地址、分支名或文件路径
Safari 能打开,客户端刷新超时可能可能临时切回系统 DNS 再刷新
只有规则源域名失败,其他网页正常可能可能换一个 DoH 或直接填规则源 IP 做临时测试
客户端日志出现证书校验失败检查 DoH URL 是否写成完整 /dns-query
下载成功但规则不命中查规则引用名、策略名和缓存

RFC 8484 定义的 DoH 是把 DNS 查询放进 HTTPS 交换里。换句话说,DoH 失败常见表现不是「规则格式错」,而是规则源域名根本没有解析出可用结果。

Shadowrocket 怎么查远程规则?

Shadowrocket 的 App Store 页面写明,它支持从 URL 或 iCloud Drive 导入规则文件,也支持记录 HTTP、HTTPS、DNS 请求。排查时不要先删配置,先保留当前规则,再单独导入 1 个最小规则文件。

第一步,在 Safari 打开规则 URL。你要看到的不是带导航栏的网页,而是纯规则内容。若规则源要求登录、Cookie 或一次性 token,Shadowrocket 后台刷新通常拿不到浏览器里的会话。

第二步,回 Shadowrocket 查看规则文件是否真的被当前配置引用。导入成功只代表文件进了 App,不代表流量已经命中这份规则。用一个只存在于新规则里的测试域名,看 DNS 或请求记录里的策略是否变化。

如果同时改了订阅和规则,建议拆开:先用已有节点验证规则,再换订阅源。需要重新做基础连接测试时,可以用兼容 Clash / Singbox / V2Ray 的订阅承载节点导入,把规则错误和订阅错误分开记录。

Stash 的 rule-providers 卡在哪里?

Stash 官方文档明确把远程规则放在 rule-providers 下,再由 rules 里的 RULE-SET 引用。排查时要看 5 个字段是否一致,单看刷新按钮有没有转不够。

字段正常写法常见错误结果
url可直接下载的 HTTPS 地址GitHub 文件网页、跳转页、过期链接下载失败或下载 HTML
behaviordomain / ipcidr / classical域名规则写成 ipcidr下载成功但解析失败
formatyaml / text / mrs文本文件按二进制格式处理规则不可读
headers给需要鉴权的规则源加 AuthorizationUser-Agent服务端要求请求头但配置为空401、403 或空响应
path指向 Stash 管理目录内缓存路径多个 provider 复用同一路径覆盖旧缓存或读错文件

Stash 的 DNS 文档还提醒,default-nameserver 只用于解析 DNS 服务的域名,nameserver 才是实际查询上游。排查 DoH 时,把 nameserver 暂时缩到 1 个系统 DNS 或 1 个明确可用的 DoH,能减少并发查询带来的误判。

Loon 订阅规则失败怎么分层?

Loon 手册里,订阅规则是一系列规则的集合,写法是远程规则链接加策略名。它还给出过 iPhone 15 Pro、Loon 3.2.0 build 712 的规则查询性能样本,说明订阅规则不是不能承载大量条目;失败更多来自链接、格式、策略名或 DNS。

先确认策略名存在。远程规则下载成功,但策略名拼错,Loon 仍然无法把命中的规则送到正确策略。

再看 DNS。Loon 的 DNS 文档列出标准 UDP、DoH、DoQ、DoH3,并说明同时配置加密 DNS 和常规 DNS 时,会优先进行加密 DNS 查询。若你把 doh-server 写成没有路径的域名,或者 DoH 服务证书不被系统信任,远程规则源就可能解析失败。

最后看缓存。Loon 文档提到 DNS 使用 LRU 缓存,App 关闭后缓存会清除。规则刷新失败如果只在刚切网络后出现,可以先完全退出再打开,避免把旧 DNS 结果和新规则状态混在一起。

iOS 后台刷新为什么不稳定?

Apple 的 Packet Tunnel Provider 文档说明,包隧道扩展会通过虚拟网络接口处理 IP 包,并能设置 DNS resolver、HTTP proxy、路由网络和 MTU。普通用户看到的是一个开关,系统里实际是 App 扩展、DNS、路由和后台调度一起工作。

这也是为什么锁屏后刷新失败不能直接等同于配置坏了。远程规则文件较大、DoH 响应慢、设备刚从蜂窝切到 Wi-Fi、低电量模式开启时,后台任务更容易被系统推迟或中断。

可靠的验证方式是做 2 轮:

  1. 前台打开客户端,手动刷新远程规则,记录时间。
  2. 锁屏 10 分钟后解锁,看规则更新时间是否变化。
  3. 切回系统 DNS,再重复同一轮。
  4. 只保留 1 个远程规则源,再重复同一轮。

如果只有后台失败,先保留前台手动刷新方案,不要把整个配置推倒重写。

下载成功但规则没命中怎么办?

下载成功只是第一关。规则真正生效要经过「文件下载、格式解析、规则引用、策略存在、日志命中」这 5 个环节。

环节验证动作通过信号失败信号
文件下载Safari 打开 URL纯规则内容或客户端支持格式HTML、401、403、404、5xx
格式解析只保留一个规则集刷新没有 parse errorbehavior / format 报错
规则引用检查 RULE-SET 或订阅规则行名称完全一致下载了但没有任何引用
策略存在核对策略组名称日志显示目标策略策略名拼写不一致
日志命中打开测试域名命中新规则仍走默认 FINAL

不要用常见大站做第一轮测试。大站域名可能被多条规则命中,日志看起来正常,实际并没有命中新导入的规则。最好临时加入一个只用于测试的域名,确认它能命中新规则后再删除。

这篇不覆盖什么?

本文没有测试所有规则仓库,也没有验证每个 DoH 服务在不同网络里的响应质量。App Store 价格、版本号和规则支持范围会变化,以上判断只以 2026-05-24 能核对到的官方页面和文档为准。

也不要把远程规则失败写成客户端优劣结论。Shadowrocket、Stash、Loon 的配置模型不同,适合的排错入口不同;同一个 URL 在一款客户端失败,未必代表另一款也失败。

相关阅读

FAQ

Shadowrocket 远程规则刷新失败先看哪里?

先把规则 URL 复制到 Safari。能看到纯文本再回 App 查规则引用;看到登录页、HTML、401、403 或 404,就先修地址、鉴权或源站。

Stash 的 rule-providers 为什么下载成功但不生效?

常见原因是 behaviorformat 或规则引用名不一致。Stash 要先在 rule-providers 声明,再在 rules 里用 RULE-SET 引用同一个名称。

Loon 订阅规则和普通规则有什么区别?

Loon 订阅规则是一组远程规则集合,写法是规则链接加策略名。它能承载大量规则,但仍要确认远程文件内容符合 Loon 支持的规则类型。

DoH 会导致远程规则更新失败吗?

会。DoH 地址本身需要解析和 TLS 校验,错误的 DoH URL、证书问题或回落策略关闭,都可能让规则源域名解析失败。

iOS 锁屏后规则集没有自动更新怎么办?

先在前台手动刷新一次,记录时间和日志。iOS 的网络扩展受系统调度影响,后台刷新失败时不要直接判断为配置损坏。