2026-10-14 · 规则进阶 · 约 8 分钟

Shadowrocket 自定义规则写法:匹配顺序、FINAL 兜底与 PROXY/DIRECT/REJECT 策略

规则按从上到下的顺序匹配,命中即停止,最后由 FINAL 兜底。本文结合 DOMAIN-SUFFIX、IP-CIDR 示例,讲解三种策略的写法与排列顺序。

本文速览

自定义规则需要同时满足三个条件:当前使用正确的 Config、Global Routing 采用 Config、例外规则位于宽泛规则与 FINAL 之前。本文适合已经有自己的服务器或订阅、需要调整分流行为的用户;按顺序完成备份、编辑、启用和验证,即可区分“规则没有命中”与“命中后连接失败”。

01 先确认 Config 模式,再修改规则

Shadowrocket(小火箭)的规则不是独立于运行模式的开关。在 Home 检查 Global Routing:要验证配置文件中的分流规则,应使用 Config。Proxy 与 Direct 分别用于整体采用代理或直接连接的路由姿态,不能用它们的访问结果判断自定义规则是否按预期生效。若当前使用 Scene,应先核对场景对应的实际路由安排,再进行规则测试。

Home 用于检查连接与服务器选择,Config 用于管理配置文件,Settings 用于查看应用设置。先在 Config 确认当前启用的文件,再进入该文件的编辑入口。不要只修改一个同名副本,却继续运行另一个配置。

  1. 保存当前配置的副本,记录原来的 Global Routing 和服务器选择。
  2. 在 Config 打开需要修改的配置,定位 [Rule] 段。
  3. 先增加一条可辨认的测试规则,不同时替换整份规则。
  4. 保存并确认使用修改后的配置,回到 Home 将 Global Routing 设为 Config。
  5. 保持连接开启,再发起新的访问;旧连接不适合用于验证刚修改的路由。

02 规则自上而下执行,例外必须放在前面

一条规则通常由匹配类型、匹配值、策略组成,字段使用英文逗号分隔。例如 DOMAIN-SUFFIX,example.com,PROXY 表示将匹配到的域名交给 PROXY。规则按配置中的顺序检查,第一次匹配成功后就采用该条策略,不会继续寻找后面的“更精确”规则。

新请求读取规则首次命中执行策略检查结果

因此,“越精确越优先”是排列建议,不是自动排序机制。若希望 status.example.com 直接连接,而同一域名下的其他请求采用代理,精确的 DOMAIN 规则应排在 DOMAIN-SUFFIX 前面。

[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,PROXY

如果把前两条交换位置,status.example.com 会先命中 DOMAIN-SUFFIX,后面的 DOMAIN 规则就没有机会执行。示例中的域名仅用于解释语法,不能用它们是否提供网页来判断代理服务是否可用。

03 DOMAIN-SUFFIX、IP-CIDR 与 GEOIP 分别匹配什么

域名规则与 IP 规则处理的对象不同。DOMAIN-SUFFIX 按域名后缀匹配,不是任意字符串包含:example.com 与 img.example.com 符合条件,notexample.com 不符合。只想匹配一个完整主机名时,应使用 DOMAIN。

关键字匹配对象语法示例检查重点
DOMAIN完整域名DOMAIN,status.example.com,DIRECT不包含协议、路径或端口
DOMAIN-SUFFIX域名及其子域名DOMAIN-SUFFIX,example.com,PROXY宽泛后缀应排在具体例外之后
IP-CIDRIPv4 地址段IP-CIDR,192.0.2.0/24,DIRECT,no-resolve核对地址段与解析条件
GEOIPIP 地理归属数据GEOIP,CN,DIRECT不是按域名后缀判断地区
FINAL前面均未命中的请求FINAL,PROXY放在全部例外之后

192.0.2.0/24 是文档示例地址段,覆盖 192.0.2.0 至 192.0.2.255,不是可直接使用的服务器地址。no-resolve 表示不为了这条 IP 规则主动发起域名解析;已有可用于匹配的目标 IP 时仍可进行判断。不要把它理解为关闭全部 DNS,也不要期望它在只有域名且没有可用 IP 的情况下强行命中。

GEOIP 依赖目标 IP 与归属数据,不能保证某一语言的网站、某一地区的域名后缀一定采用同一策略。使用共享基础设施的网站可能解析到不同地址。若需求是固定某个域名的路由,应优先写明域名规则,而不是依赖它当时解析到的地区。

3 种
本文基础策略:PROXY / DIRECT / REJECT
256 个
示例 IPv4 /24 网段包含的地址数量
2 字段
FINAL,PROXY:关键字与策略,不填写匹配值

04 PROXY、DIRECT、REJECT 与 FINAL 的职责

PROXY、DIRECT、REJECT 是规则执行的策略,FINAL 是规则类型,二者不是同一个层级。FINAL,PROXY 的含义是“没有前置规则命中时采用 PROXY”,并不表示 FINAL 自带代理能力。

按代理兜底的基础示例

DOMAIN
status.example.com,DIRECT
DOMAIN-SUFFIX
blocked.example.com,REJECT
FINAL
PROXY

先处理明确的直接连接与拒绝例外,其余请求采用代理策略。

按直接连接兜底的基础示例

DOMAIN
status.example.com,DIRECT
DOMAIN-SUFFIX
example.com,PROXY
FINAL
DIRECT

只有列出的匹配对象采用代理;未列出的请求直接连接。

以上是两种不同的路由目标,不应将两张卡合并复制。选择 FINAL 的策略之前,先回答“未写进规则的请求应该怎样处理”。如果将 FINAL 放在规则段前部,后面的例外规则将无法正常参与匹配;保留一条明确的末尾兜底规则,更便于检查。

结论:先确定默认路由,再增加例外

先用 FINAL 写明未匹配请求的去向,再把需要改变去向的域名或 IP 规则放到它前面;验证时一次只调整一条例外,避免无法判断是哪项修改改变了结果。

05 完整示例:从精确域名到末尾兜底

下面的配置片段用于阅读顺序练习,只展示 [Rule] 段。它不包含服务器定义,也不应覆盖已有配置中的其他段落。所有示例域名与地址均为文档用途,实际使用时应填写自己已确认的匹配对象。

[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,PROXY
  1. 先判断是否为 status.example.com,符合就直接连接。
  2. 再判断是否属于 blocked.example.com 或其子域名,符合就拒绝。
  3. 接着处理其余 example.com 域名请求,采用代理。
  4. 对于尚未命中且有可用目标 IP 的请求,检查示例地址段。
  5. 剩余请求采用最后的 PROXY 兜底。

第二条必须位于第三条之前,因为 blocked.example.com 同时符合这两条后缀规则。IP-CIDR 即使匹配范围不同,也不能推翻前面已经命中的域名策略。排列规则时应按“先处理明确例外,再处理宽泛集合”的思路阅读,而不是简单把所有同类关键字集中在一起。

06 验证规则:分开记录命中结果与连接结果

网页能否打开不是判断规则命中的唯一依据。命中 PROXY 后,仍可能因服务器不可达而失败;命中 DIRECT 后,也可能受当前网络限制;命中 REJECT 时,访问失败则可能正是预期结果。排查时应分别记录“使用了什么策略”和“策略执行后发生了什么”。

  1. 准备目标:选一个自己能够核对的真实完整域名,先记录修改前的访问情况,不使用示例地址做可用性测试。
  2. 固定环境:保持同一网络、同一服务器和同一 Config,确认 Global Routing 为 Config。
  3. 新建请求:保存规则后关闭旧页面或旧连接,再重新发起访问,避免连接复用影响观察。
  4. 查看记录:在应用的请求记录中核对实际域名、目标 IP、规则和策略等可见信息;记录项名称与展示内容以当前应用界面为准。
  5. 逐项调整:若命中错误,调整规则顺序;若命中正确却失败,再检查 DNS、代理服务器或直接连接路径。

一个页面可能请求多个域名:主文档、图片、接口与媒体资源可能分别命中不同规则。只为主站域名增加一条规则,并不保证所有相关资源采用同一策略。应从失败请求的实际主机名开始检查,不要仅根据浏览器地址栏中的域名扩大规则范围。

07 自定义规则常见问题

明明写了 DIRECT,为什么还是走 PROXY?

先在 Home 核对 Global Routing 是否为 Config,再确认 Config 中启用的是修改后的文件。随后从规则第一行向下检查:如果更靠前的 DOMAIN-SUFFIX 已经命中 PROXY,后面的 DIRECT 就不会执行。将精确例外移到宽泛规则之前,再用新请求测试。

FINAL,PROXY 会自动选择可用服务器吗?

不会。FINAL 只负责兜底匹配,PROXY 只指定代理策略。先确认已有服务器可连接;配置使用策略组时,还要检查组内选择与相应设置。仅修改末尾这一行不能修复错误的地址、认证信息或服务器状态。

加了 IP-CIDR,为什么访问域名时没有命中?

检查是否已被前面的域名规则命中,再核对目标实际解析出的 IP 是否属于该网段。若带有 no-resolve,这条规则不会为了匹配而主动解析域名。先根据请求记录确认目标 IP,再判断规则条件,不要仅根据网站名称推测地址。

订阅刷新后,自定义规则会一直保留吗?

先区分更新对象:服务器订阅主要管理服务器条目,远程配置更新可能替换配置内容。修改前保存副本,更新后到 Config 核对规则和启用状态。若自定义内容消失,先比较备份与当前文件,再恢复需要的条目,不要反复覆盖整份配置。

App Store 正版核验