Shadowrocket 配置导入成功,不代表规则顺序正确。最常见的现场是:某个 App 明明应该走一个策略,最后却落到 DIRECT、Proxy 或 FINAL。

Apple 列表里写到 Shadowrocket 支持 domain、CIDR、GeoIP、keyword rules,并能显示 HTTP、HTTPS、DNS 请求记录。排查时先看 Recent Requests,再改配置。

先找一个走错的域名

不要拿「某个 App 整体不对」开查。先从 Recent Requests 里找一个具体域名,例如 api.example.com

现象更可能原因先看哪里
域名落到 FINAL前面的规则没命中[Rule] 顺序
策略名不存在Rule 右侧拼错Proxy Group 名称
GEOIP 命中异常DNS 和 no-resolve 影响DNS 请求记录
只有某个模块开启才错模块注入了规则关闭 Module 对照

记录域名、命中规则、命中策略,再动手。

default.conf 里的规则长什么样?

官方 config 示例里有这些格式:

[Rule]
DOMAIN-KEYWORD,example,Proxy,force-remote-dns
DOMAIN-SUFFIX,example.com,Proxy
DOMAIN,api.example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,Proxy

规则从上往下命中。更具体的 DOMAIN 通常要放在宽泛的 DOMAIN-SUFFIX 前面。FINAL 是兜底,应该在最后。

策略组名称要逐字一致

规则右侧的 ProxyDIRECTREJECT 或自定义组名,必须能在配置里找到。中文、空格、大小写、emoji 都算字符差异。

排错时别手打,把组名复制过去:

[Rule]
DOMAIN-SUFFIX,example.com,媒体组
FINAL,默认组

如果组名是 媒体 组,规则写成 媒体组,界面不一定给出清楚报错,最后可能落到兜底策略。

no-resolveforce-remote-dns 不要乱加

default.conf 示例里能看到 force-remote-dnsno-resolve。这两个字段会改变 DNS 与规则判断方式。

先用不带参数的规则测一次:

DOMAIN-SUFFIX,example.com,Proxy

确认命中后,再加参数。尤其是 GEOIP 规则,如果你同时改 DNS、模块和 no-resolve,很难判断是 IP 归属问题还是解析路径问题。

Recent Requests 怎么闭环?

修一条规则后,按这个顺序复测:

  1. 断开 Shadowrocket。
  2. 清空 Recent Requests。
  3. 重新连接。
  4. 完全退出目标 App 再打开。
  5. 找同一个域名,看命中规则是否变化。

如果 Recent Requests 里仍然命中旧规则,可能是 App 长连接未断、DNS 缓存未清,或模块仍在注入规则。

什么时候该回滚?

如果你一次改了 20 条规则,还开启了模块和 URL Rewrite,先回滚到原配置。规则排错最好一次只改一条。多端同步配置时,可以用一份配套订阅线路作为基础订阅,规则命中仍然要在 iPhone 本机 Recent Requests 里确认。

相关阅读

FAQ

Shadowrocket 的规则是从上往下匹配吗?

是。default.conf 示例把 DOMAIN-KEYWORDDOMAIN-SUFFIXIP-CIDRGEOIPFINAL 放在 [Rule] 下,实际排查按顺序看命中。

FINAL 可以放前面吗?

不建议。FINAL 是兜底策略,放前面会让后面的细分规则没有机会命中。排错时先把 FINAL 放回末尾。

no-resolve 和 force-remote-dns 有什么区别?

no-resolve 常用于不触发解析的规则,force-remote-dns 会影响 DNS 处理。二者写在规则末尾,排错时要和命中记录一起看。

策略组显示为空先查什么?

先查组名和节点引用。规则右侧策略名拼错时,流量可能落到默认策略;组内筛选为空时,界面会看起来像没有可选节点。