Shadowrocket 规则不生效怎么办?逐项排查流程
一句话回答:按「是否生效 → 是否被抢先命中 → 方向是否写反 → 解析是否偏差」四步排查,每一步都能独立验证,通常在前两步就能定位到原因。
要点速览
- 先确认改动已经生效:改完规则需要重新连接一次才会应用。
- 再看顺序:命中即停止,前面的宽泛规则会让后面的具体规则失效。
- 然后核对方向:直连与代理写反是最容易忽略的低级错误。
- 最后查解析:解析结果与预期不符时,规则再对也不会命中。
规则不生效很少是客户端故障,绝大多数是配置细节问题。按固定顺序排查,能避免反复试错。
第一步:确认改动已经应用
修改规则后需要重新连接一次,客户端才会加载新配置。仅保存而不重连,实际生效的仍是旧规则。
验证方法是查看当前配置里是否包含刚改的条目;确认存在后再关闭并重新打开连接开关。
第二步:检查是否被前面的规则抢先命中
规则是从上到下匹配、命中即停的。如果一条覆盖全部流量的兜底规则写在前面,后面的所有规则都不会被执行。
处理方式是把具体规则上移到宽泛规则之前,或删除那条过宽的兜底规则。
| 原因 | 典型表现 | 处理方式 |
|---|---|---|
| 改动未生效 | 配置里看不到新条目 | 重新连接一次 |
| 顺序被抢先 | 走向与规则不符 | 把具体规则上移 |
| 方向写反 | 该直连的走了代理 | 核对策略字段 |
| 解析偏差 | 规则正确但不命中 | 检查解析结果 |
第三步与第四步:核对方向与解析
方向写反是常见疏漏:本想让某站点直连,却把策略写成代理。核对时逐条确认策略字段,而不是凭印象。
最后查解析:如果域名实际解析到的地址与规则判断的地址不一致,规则写得再正确也不会命中。这一步可以借助连接记录观察实际访问的 IP。
- 排查时一次只改一处,改完立刻验证,避免多个改动互相掩盖。
- 用最简单的域名做验证样本,减少变量干扰。
- 确认无误仍异常时,导出配置备份后重建一份最小配置做对照。
规则排查的高频疑问
规则显示保存成功,为什么还是老走向?
保存只是写入配置,生效需要重新连接。关闭并重新打开连接开关后再次验证即可。
怎么知道某条规则有没有被命中?
通过连接记录观察该域名的实际走向,与规则预期做对比;走向不符说明未命中或被前面的规则抢先。
规则越写越多会变慢吗?
条目数量增长会带来一定匹配开销,但日常量级影响很小。真正需要关注的是重复与冲突条目,它们才是排障困难的主因。