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 是兜底,应该在最后。
策略组名称要逐字一致
规则右侧的 Proxy、DIRECT、REJECT 或自定义组名,必须能在配置里找到。中文、空格、大小写、emoji 都算字符差异。
排错时别手打,把组名复制过去:
[Rule]
DOMAIN-SUFFIX,example.com,媒体组
FINAL,默认组
如果组名是 媒体 组,规则写成 媒体组,界面不一定给出清楚报错,最后可能落到兜底策略。
no-resolve 和 force-remote-dns 不要乱加
default.conf 示例里能看到 force-remote-dns 和 no-resolve。这两个字段会改变 DNS 与规则判断方式。
先用不带参数的规则测一次:
DOMAIN-SUFFIX,example.com,Proxy
确认命中后,再加参数。尤其是 GEOIP 规则,如果你同时改 DNS、模块和 no-resolve,很难判断是 IP 归属问题还是解析路径问题。
Recent Requests 怎么闭环?
修一条规则后,按这个顺序复测:
- 断开 Shadowrocket。
- 清空 Recent Requests。
- 重新连接。
- 完全退出目标 App 再打开。
- 找同一个域名,看命中规则是否变化。
如果 Recent Requests 里仍然命中旧规则,可能是 App 长连接未断、DNS 缓存未清,或模块仍在注入规则。
什么时候该回滚?
如果你一次改了 20 条规则,还开启了模块和 URL Rewrite,先回滚到原配置。规则排错最好一次只改一条。多端同步配置时,可以用一份配套订阅线路作为基础订阅,规则命中仍然要在 iPhone 本机 Recent Requests 里确认。
相关阅读
FAQ
Shadowrocket 的规则是从上往下匹配吗?
是。default.conf 示例把 DOMAIN-KEYWORD、DOMAIN-SUFFIX、IP-CIDR、GEOIP 和 FINAL 放在 [Rule] 下,实际排查按顺序看命中。
FINAL 可以放前面吗?
不建议。FINAL 是兜底策略,放前面会让后面的细分规则没有机会命中。排错时先把 FINAL 放回末尾。
no-resolve 和 force-remote-dns 有什么区别?
no-resolve 常用于不触发解析的规则,force-remote-dns 会影响 DNS 处理。二者写在规则末尾,排错时要和命中记录一起看。
策略组显示为空先查什么?
先查组名和节点引用。规则右侧策略名拼错时,流量可能落到默认策略;组内筛选为空时,界面会看起来像没有可选节点。