在 Shadowrocket(小火箭)中,自定义规则是否生效,先看 Global Routing,再看当前配置文件,最后看规则顺序。本文面向已有自己的服务与连接配置的用户,用保留域名和文档示例网段说明规则写法、兜底策略与验证方法。示例只用于理解语法,不是可直接替换日常配置的完整方案。
先核对 Global Routing,再修改规则
修改规则前,在 Home → Global Routing 核对当前选项。要让当前配置文件中的规则参与分流,应使用 Config。若停在 Proxy 或 Direct,继续调整规则顺序通常不能解决预期的分流问题,因为这两种姿态不是按当前文件的规则逐条决定出口。
Config
推荐按当前生效配置的规则选择策略。是否直连、代理或拒绝,由命中的规则决定,并不等于“未命中就直连”。
适合:编写、验证与日常使用自定义规则
Proxy
对交由应用处理的连接采用全局代理姿态。可用于对照代理连接是否可用,但不能拿这一姿态下的结果证明某条规则已经命中。
适合:临时对照代理路径与规则路径
Direct
对交由应用处理的连接采用直连姿态。Direct 不是关闭系统 VPN 配置的同义词,也不是删除当前配置文件。
适合:对照目标在当前网络下的直接连接结果
Global Routing 中还可能使用 Scene;它涉及场景选择,排查本文示例时先明确切换到 Config,避免把场景变化与规则变化混在一起。还要区分两个同名词:Global Routing 的 Config 是运行姿态,底部 Config 是管理配置文件的位置。文件存在于列表里,不代表它就是当前正在使用的文件。
规则语法:条件在前,策略在后
配置文件的规则写在 [Rule] 段内。常见的条件规则由“类型、匹配值、策略”组成,字段用英文逗号分隔。中文逗号、误加空格的策略名称、把规则写进其他段落,都可能导致解析或匹配不符合预期。以下四种关键字需要分清:
| 关键字 | 示例 | 核对重点 |
|---|---|---|
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | 匹配 example.com 本身及其子域名,不填写 URL 路径。 |
IP-CIDR | IP-CIDR,192.0.2.0/24,DIRECT | 匹配 IPv4 网段;/24 表示前 24 位为网络前缀。 |
GEOIP | GEOIP,CN,DIRECT | 按目标 IP 的地理数据库归属判断,不是按域名文字判断。 |
FINAL | FINAL,PROXY | 没有匹配值字段,用于前面条件均未命中的兜底。 |
DOMAIN-SUFFIX,example.com,PROXY 可以匹配 api.example.com,但不会因为另一域名的字符串末尾恰好出现“example.com”就自动匹配;这里有域名层级边界。不要填写 https://example.com/path,也不要在匹配值中附加 :443。这条规则按域名匹配,不按网页路径或端口匹配。
IP-CIDR 与 GEOIP 依赖可用的目标 IP 信息。域名连接是否触发解析、何时进行 IP 判断,还受配置中的 DNS 与规则选项影响。不要把 GEOIP 结果当成网站经营者所在地,也不要期待一个域名永远解析到同一网段。
从上到下匹配:更具体的例外放前面
规则按顺序逐条判断,命中后使用该条策略,不再继续寻找“更合适”的后续规则。系统不会自动把更长的域名后缀或更小的网段提到前面。因此,应先写明确例外,再写覆盖范围较大的条件,最后放兜底。
[Rule]
DOMAIN-SUFFIX,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,PROXY
在这个例子中,api.example.com 及其子域名先命中第一条而直连,www.example.com 则命中第二条。若交换前两条,api.example.com 已经满足较宽的 example.com 条件,便会先走 PROXY;下方的 DIRECT 例外没有机会参与这次判断。
IP 网段也遵守相同的顺序
[Rule]
IP-CIDR,192.0.2.128/25,REJECT,no-resolve
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,PROXY
192.0.2.128/25 包含在 192.0.2.0/24 之内。对目标 IP 已知的连接,192.0.2.130 先命中 REJECT,而 192.0.2.20 会继续向下命中 DIRECT。交换这两条,较大的 /24 就会先覆盖整个范围,原本的拒绝例外随之失效。
PROXY、DIRECT、REJECT 与 FINAL 的关系
前三个词回答“命中后怎样处理”,FINAL 回答“前面都没命中怎么办”。它们并不是四种同级匹配条件。尤其要注意,FINAL,PROXY 本身不包含域名或地区判断,放得过早就会截住后面的规则。
- PROXY:交给代理路径处理。最终连接还依赖当前选择的代理或配置引用的策略是否可用;写上 PROXY 不会自动产生连接服务。
- DIRECT:直接连接目标,不经所选代理服务器转发。它不保证目标一定可达,目标服务、DNS 与本地网络仍会影响结果。
- REJECT:拒绝匹配连接。网页中被拒绝的请求可能表现为资源缺失或加载错误,这不等于应用发生故障。
- FINAL:放在规则末尾承接未匹配流量。常见写法为
FINAL,PROXY或FINAL,DIRECT,选择取决于你的明确分流目标。
如果只希望列出的域名走代理,其余直连,可以在完整检查规则后使用 FINAL,DIRECT;如果希望未列出的目标继续走代理,则使用 FINAL,PROXY。两者不存在脱离需求的统一答案。修改 FINAL 会改变所有前面未命中连接的去向,影响范围往往比添加一条域名规则更大。
[Rule]
DOMAIN-SUFFIX,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
此处先拒绝特定子域名,再让其余 example.com 域名走代理,其他目标直连。它只展示三种处理结果如何组合,不是完整的隐私或网络访问方案。复制到自己的配置前,应保留已有必要规则,并核对代理策略引用是否与当前配置一致。
修改与验证:一次只改一个变量
不要直接覆盖仍在使用的配置。先保留原文件,再编辑副本;若文件来自远程更新,还要考虑后续更新可能覆盖本地修改。操作顺序如下,界面里的文件名以你实际保存的名称为准:
确认姿态
打开 Home → Global Routing → Config,记下当前所选代理。先不同时修改 DNS、代理选择或 On Demand。
保留原文件
进入底部 Config,核对当前生效文件,在编辑前通过文件操作保留副本或导出备份,避免失去可恢复的基线。
修改规则
在 Config 中打开待修改文件的编辑界面,定位
[Rule]段。只新增一条例外或交换两条规则,保留末尾 FINAL,保存后确认使用的是修改后的文件。重新发起请求
回到 Home 确认连接状态,结束目标应用中的旧请求,再发起新连接。已有长连接不会因为改了文本就自动变成另一条新连接。
核对连接记录
在 Data 查看对应时间的连接记录,结合目标域名或 IP、匹配规则与实际策略判断。记录测试目标和改动前后的结果,不只看网页能否打开。
例如验证域名例外时,应分别检查一个例外子域名与一个普通子域名;验证 FINAL 时,应选择明确不属于前面条件的目标。若使用自有测试服务,HTTPS 常见端口是 443,HTTP 常见端口是 80;本文的域名后缀规则本身并不按这两个端口区分流量。
无法访问并不能单独证明规则失败:命中 PROXY 后代理路径不可用,命中 DIRECT 后本地网络不可达,或命中 REJECT 后请求被拒绝,都可能呈现类似的页面错误。验证顺序应是“是否命中预期条件 → 是否采用预期策略 → 该路径是否可达”,不要反过来根据页面结果猜规则。
常见问题:规则写了,为什么结果没变?
改了规则,怎么所有目标还是走代理?
先到 Home → Global Routing 核对是否选了 Proxy,再到 Config 确认当前生效文件。若已经使用 Config,就从第一条规则向下检查是否有过宽的条件提前命中,或 FINAL 被放在例外规则上方。
DIRECT 放在下面,为什么没有覆盖前面的 PROXY?
规则不是后写覆盖前写。把更具体的 DIRECT 条件移到覆盖它的 PROXY 条件前面,保存并重新发起连接;同时确认你修改的是规则顺序,而不是只改了列表中的显示名称。
加了 IP-CIDR,域名访问却没命中?
检查实际目标 IP 是否落在网段内,并检查是否使用了 no-resolve。域名可能返回多个地址,也可能使用 IPv6;IPv4 的 IP-CIDR 示例不能覆盖 IPv6。若需求本来就是按域名分流,优先用明确的域名条件表达。
更新后自己添加的规则不见了,怎么办?
先在 Config 核对更新的是远程配置文件还是其他项目,再与备份比较。订阅中的服务器列表与配置文件的规则不是同一层数据。保留独立的本地修改副本,恢复后重新确认生效文件,避免反复改到会被远程内容覆盖的文件。
为什么连接关掉后又自动打开?
到 Settings → On Demand 核对按需连接条件。On Demand 管理何时建立连接,不负责替代 [Rule] 的逐条匹配;先固定连接状态,再检查 Global Routing 与规则,避免同时排查两层不同的行为。
最终保留一份能说明目的的最小改动:例外在前,宽泛条件在后,FINAL 在末尾;每次验证都记录当前姿态、生效文件、目标与命中策略。规则数量增加并不自动提高准确性,能解释每条规则覆盖什么、为什么排在这里,才便于后续维护。更多界面与连接概念可查阅术语手册;持续异常时按故障排查逐项核对。