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 里确认。
相关阅读
- Shadowrocket Rewrite Module DNS 冲突排查 — 模块层冲突导致规则命中异常的排查方法
- Shadowrocket 订阅更新后节点列表空白 — 规则正常但节点为空时从这里开始
- Mihomo profile proxies 为空 — 桌面端同类问题的对照排查