2026-08-03 · 规则分流 · 约 8 分钟

Shadowrocket 自定义规则优先级:从上到下匹配与 FINAL 兜底写法

讲清 [Rule] 段自上而下逐条匹配、命中即停的机制,DOMAIN-SUFFIX、IP-CIDR 等关键字的排列顺序,以及 PROXY / DIRECT / REJECT 三种策略与 FINAL 兜底行的写法。

本文速览

Shadowrocket(小火箭)的自定义规则应先放明确例外,再放范围较大的规则,最后用 FINAL 指定剩余流量的处理方式。本文适合已经有自己的服务商与订阅、需要调整现有配置的用户;读完可在 Config 中检查规则顺序,在 Home 中选择 Config 姿态,并按一次只改一项的方式验证结果。

一、规则优先级:先命中,不是越精确越优先

在按配置分流时,[Rule] 段按从上到下的顺序检查;某条规则匹配成功,就采用该条指定的策略,不再继续寻找后面的“更精确规则”。因此,规则类型本身没有一个能取代行顺序的统一优先级。把 DOMAIN 写在 DOMAIN-SUFFIX 后面,不会使它自动获得更高优先级。

例如,希望 api.example.com 直连,而 example.com 的其他子域名走代理,应先写这个单独域名的例外。下面的域名是说明语法用的示例,不是服务地址或可用性承诺。

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

如果交换前两条规则,api.example.com 也符合较宽的域名后缀条件,会先被 PROXY 接住。排查“明明写了直连却仍走代理”时,首先检查目标规则之前有没有已经覆盖它的规则,而不是继续在末尾追加重复条目。

3 种
本文基础策略:PROXY / DIRECT / REJECT
32 位
IPv4 地址长度;/32 可表示单个地址
1 条
本文配置末尾保留一条 FINAL 兜底

二、先核对 Global Routing,再编辑 Config

配置文件中写有规则,不等于当前连接一定按这些规则分流。进入 Home → Global Routing 核对当前姿态,再到 Config 确认正在使用的文件。下面只比较本次验证会用到的三个姿态;Scene 用于场景配置,排查本篇规则时先明确选择 Config,减少场景切换带来的变量。

Config

推荐

按照当前配置执行规则分流。最终走代理、直连还是拒绝,取决于命中规则的策略,包括末尾 FINAL 的选择。

适合:验证本文的规则顺序与域名例外。

Proxy

以代理姿态处理流量,不能用其结果证明某条自定义分流规则已经命中。它可用于隔离规则因素,检查已有代理连接本身是否可用。

适合:临时对照代理连接与规则分流的差异。

Direct

以直连姿态处理流量。若当前选择 Direct,即使配置里写了 PROXY,也不能据此期待本文的代理规则生效。

适合:对照本地网络直连表现。

判断顺序:先确认运行条件,再移动规则

在 Home 确认 Global Routing 为 Config,并在 Config 确认当前文件后再测试;否则改动规则行可能只是改了一个没有参与当前分流的文件。

  1. 备份配置

    进入 Config,先保存当前文件的副本或导出备份,保留可恢复的原始规则;不要只保存新增的几行。

  2. 打开编辑

    在 Config 中打开目标配置的编辑入口,找到 [Rule] 段。确认修改的是配置正文,而不是 Home 中的服务器连接参数。

  3. 排列规则

    把单域名例外放在对应的宽泛规则前面,再检查 IP 范围和 GEOIP 条目,末尾保留 FINAL;保存后确认该文件被选用。

  4. 核对姿态

    回到 Home → Global Routing → Config,确认已有服务器选择正确,再开启连接;需要系统 VPN 配置授权时按系统提示操作。

  5. 发起新请求

    关闭目标页面后重新访问,必要时重新建立连接,避免用旧连接判断新规则。记录目标域名、时间和匹配结果,再做下一次改动。

三、DOMAIN-SUFFIX、IP-CIDR 与 GEOIP 如何排列

规则按什么对象匹配,与它写在第几行是两个问题。域名规则检查主机名,IP 规则检查目的地址,GEOIP 则依据地址数据库分类。域名请求可能解析到多个地址,同一域名也可能随网络环境解析到不同地址;不要把一次 IP 命中当作该域名永久固定的属性。

关键字语法示例检查重点
DOMAINDOMAIN,api.example.com,DIRECT匹配指定域名;用于明确例外。
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,PROXY覆盖该域名及其子域名;不填写协议或路径。
IP-CIDRIP-CIDR,192.168.0.0/16,DIRECT,no-resolve匹配 IPv4 网段;掩码决定范围。
GEOIPGEOIP,CN,DIRECT按 IP 数据库分类,不是按网页语言分类。
FINALFINAL,PROXY接住此前未命中的请求,放在规则末尾。

DOMAIN-SUFFIX 后面应写 example.com,不是带有 https:// 的完整网址,也不是 example.com/path。路径属于 URL 的另一部分;将它粘贴进域名字段,不能表达“只让这个页面走代理”。规则同样不因某个网站使用 HTTPS 的常见端口 443,就自动获得端口匹配条件。

no-resolve 表示不要为了匹配该 IP 规则而额外触发域名解析,并不表示关闭整个配置的 DNS,也不表示这个网段永远不会匹配。请求已经有可用于判断的目的 IP 时,仍可按地址范围判断。若只知道域名、又不希望为该条规则进行解析,应理解跳过解析可能让请求继续向下匹配。

四、PROXY、DIRECT、REJECT 与 FINAL 的完整写法

规则末尾的策略决定命中后的动作:PROXY 交给代理路径处理,DIRECT 直接连接目的地,REJECT 拒绝请求。这些动作与服务器协议是不同层次的设置;将已有服务器从 Shadowsocks 换为 Trojan,不会改变规则自上而下匹配的基本顺序。

下面仅是用于讲解的 [Rule] 段,不是可以替代所有现有设置的完整配置。它假定用户已有可用服务器;示例域名不提供任何服务。实际合并前,应检查现有文件中的策略名称、其他规则及所需网络范围。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

将 FINAL 插在规则中间,会提前接住其后的未分类请求,使后面的条目失去预期作用。维护时只在末尾保留一条明确的兜底,避免旧配置中遗留的第二条 FINAL 造成阅读误判。

五、用单变量测试定位规则没有生效的原因

验证顺序应是“当前文件 → 当前姿态 → 请求目标 → 实际匹配 → 连接结果”。网页能打开只能证明一次请求成功,不能单独证明它经过哪条路径;网页打不开也可能是 REJECT、目的服务故障或代理连接问题。应把匹配判断与连接成败分开记录。

  1. 建立基线:保持同一个网络、同一个已有服务器和同一个目标,记录修改前表现,避免同时更换服务器与规则。
  2. 只改一行:例如仅交换 DOMAIN 与 DOMAIN-SUFFIX 的顺序,保存并确认使用该配置,然后重新发起请求。
  3. 检查请求信息:在应用的连接记录或日志中查找本次目标主机、目的 IP 和可见的策略信息;若只看到 IP,先判断是否存在域名信息。
  4. 检查完整资源:页面正文、图片和登录接口可能属于不同域名。只为主站加一条规则,不一定覆盖整个页面依赖。
  5. 恢复对照:将刚才的改动恢复,再次访问。若表现并不随改动重复变化,继续检查缓存、旧连接和目标服务状态。

订阅更新与配置编辑也要分开处理。Home 中更新用户已有的服务器订阅,主要用于刷新服务器条目;Config 中的远程配置更新则可能替换配置正文。不能把这两类更新都当作“刷新规则”。修改远程配置之前保存本地副本,更新后重新检查例外条目和 FINAL 是否仍然存在。

结论:用可重复的命中变化验证顺序

同一目标在仅交换两条规则后,策略随之变化,才是定位顺序问题的直接依据;单次速度变快或延迟变低不足以证明规则命中正确。

六、规则顺序与 FINAL 常见问答

已经在末尾加了 DIRECT,为什么还是走代理?

先在 Home → Global Routing 确认是 Config,再到 Config 检查这条 DIRECT 之前是否已有匹配的 DOMAIN-SUFFIX、IP-CIDR 或 FINAL。把明确例外放到覆盖它的规则之前,保存后用新连接测试。

FINAL,PROXY 会让所有请求都走代理吗?

不会,它只接住此前未命中的请求。先命中 DIRECT 或 REJECT 的请求不再进入 FINAL。若想排查代理连接本身,可临时对照 Global Routing 的 Proxy 姿态,测试后切回 Config。

GEOIP,CN,DIRECT 放第一行更省事吗?

只有接受它优先覆盖后续例外时才这样排。如果某个目标需要固定走 PROXY,应将该目标的域名规则放在 GEOIP 之前,并核对本次请求是否带有可匹配的域名。

On Demand 打开后,规则顺序会改变吗?

不会。Settings → On Demand 管理按需连接条件,不负责重排 [Rule]。它可能影响连接何时自动建立;排查时保持触发条件稳定,并另外核对 Home 的 Global Routing。

更新后自定义规则不见了,应该检查哪里?

先到 Config 确认是否切换了当前文件,再检查是否更新了远程配置正文。使用修改前的备份对比 [Rule],将确有需要的例外合并回工作副本,不要靠重复追加 FINAL 修复。

App Store 正版核验