Shadowrocket 自定义规则写法:从上到下匹配、FINAL 兜底与 PROXY / DIRECT / REJECT

规则会按从上到下的顺序逐条匹配,命中第一条就停止。本文讲 DOMAIN-SUFFIX、IP-CIDR 等规则的写法、FINAL 兜底的作用,以及 PROXY、DIRECT、REJECT 三种策略怎么选。

本文速览

自定义规则生效的前提是启用正确的配置,并将 Global Routing 设为 Config。本文适合已经导入自己已有服务器资料、准备调整分流的用户:先区分路由姿态与规则策略,再按“具体例外在前、宽泛匹配在后、FINAL 最后”的顺序编写规则,最后用新连接核对实际结果。示例域名均用于说明语法,不是服务地址。

一、先检查 Global Routing,再判断规则有没有生效

Shadowrocket(小火箭)的服务器选择、配置文件和全局路由是不同层次的设置。Home 中选好服务器,不代表请求一定经过代理;Config 中保存了规则,也不代表当前路由姿态正在使用这些规则。排查时先进入 Home → Global Routing,核对当前选项。

需要按本文的规则分流时,使用 Config(按配置路由)。Proxy(代理)与 Direct(直连)适合做对照检查,不应拿它们的连接结果来判断某一条配置规则是否命中。Scene(场景)用于场景化路由;正在使用 Scene 时,还需核对当前场景的设置,不能直接假定它等同于本文的 Config 测试条件。

Config:按配置分流

推荐

根据当前启用的配置决定请求采用哪种策略。本文所有规则顺序与 FINAL 示例,都以这一姿态为前提。

适合:日常分流、验证自定义规则

Proxy:全局代理

让纳入客户端处理的连接走代理,用于检查已有服务器是否可以承载目标连接,而不是检验分流列表的先后顺序。

适合:临时对照、区分代理连接问题与规则问题

Direct:全局直连

让纳入客户端处理的连接直接访问目标。此时网页可以打开,不能据此推断配置中的 PROXY 规则已经生效。

适合:检查本地网络的直接访问情况

二、规则从上到下执行,不按“更具体”自动排序

规则列表是有顺序的判断流程,不是会自动比较精确程度的集合。一条请求命中前面的规则后,就不会再用后面的普通规则重新选择策略。因此,“完整域名比后缀更精确”只是编排规则时的依据,并不是应用自动替你调整优先级的承诺。

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

在这个示例中,目标为 api.example.com 的请求先命中第一行,采用 DIRECT;www.example.com 不符合第一行,但符合第二行,采用 PROXY;不符合这两条条件的请求才交给 FINAL。这里的 [Rule] 是文本配置的规则段标题,不是需要重复添加到每条规则前面的内容。

首条命中
按列表顺序决定策略,不自动把精确规则置顶
3 种策略
本文示例使用 PROXY / DIRECT / REJECT
末尾 1 条
本文示例只保留一条 FINAL 作为兜底

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

普通条件规则通常写成“规则类型,匹配内容,策略”,使用英文半角逗号分隔。域名位置只放主机名,不放 https://、路径或查询参数。例如访问地址中的 /account 不是 DOMAIN-SUFFIX 的匹配对象;这类规则也不等同于网页内容过滤。

关键字可用写法匹配含义
DOMAINDOMAIN,api.example.com,DIRECT匹配完整主机名,不包括其下级子域名。
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,PROXY匹配 example.com 本身及其子域名,不是任意包含该字符串的域名。
IP-CIDRIP-CIDR,192.168.0.0/16,DIRECT,no-resolve按 IPv4 地址段判断;示例覆盖 192.168.0.0 至 192.168.255.255。
GEOIPGEOIP,CN,DIRECT根据目标 IP 的地理归属数据库判断,不按网页语言或域名后缀判断。
FINALFINAL,PROXY不填写匹配内容,接住前面规则未匹配的请求。

no-resolve 是附加选项,不是策略名称。用于 IP 规则时,它表示不为了这条匹配主动把域名解析成 IP;如果请求本身就是 IP 目标,仍可以进行地址段判断。因此,带有该选项的 IP 规则没有命中某个域名请求,并不能直接说明地址段写错了。

四、PROXY、DIRECT、REJECT 与 FINAL 的组合方式

PROXY(代理)表示把匹配请求交给代理路径;DIRECT(直连)表示直接连接目标;REJECT(拒绝)表示阻止匹配请求。规则中的 PROXY 不会创建服务器,也不会提供连接凭据。使用它之前,用户需要已经导入自己的服务器或订阅,并确认对应代理路径可用。本站不提供、不销售、不推荐节点、订阅或服务商。

FINAL 负责兜底,不代表“所有请求强制采用这一策略”。只有前面的规则没有命中时,它才生效。需要未匹配请求走代理,就写 FINAL,PROXY;需要未匹配请求直连,就写 FINAL,DIRECT。二者是不同的分流取舍,不存在对所有网络都正确的固定答案。

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

这段配置演示四种结果:指定 API 直连、指定子域范围拒绝、其余示例域名走代理、未匹配请求直连。blocked.example.com 的 REJECT 必须放在整个 example.com 的代理规则前,否则会被更早的后缀匹配接住。这是教学用的最小规则段,不是可以覆盖所有业务的完整配置。

为什么不在末尾同时写两个 FINAL?
前一条 FINAL 已经接住剩余请求,后一条不能成为第二次选择。代理失败也不意味着请求会继续向下尝试另一条 FINAL;需要故障处理时,应检查代理或策略组设置,而不是增加重复兜底。

五、在 Config 修改规则,并用新连接验证

先备份当前配置,再修改一组能明确观察结果的规则。以下路径以移动端的 Home / Config 界面为参照;编辑入口的呈现可能随平台不同而变化,核对重点始终是“正在编辑哪个文件、哪个文件正在启用、Global Routing 使用哪种姿态”。不要把服务器订阅更新与规则文件编辑混为一项操作。

  1. 备份配置

    进入 Config,确认当前启用的配置文件,先保存副本或导出备份。远程配置再次下载可能覆盖本地修改,测试前应保留可恢复的版本。

  2. 编辑规则

    从 Config 中该文件的编辑入口进入规则编辑页;使用纯文本编辑时定位到 [Rule]。把具体例外放在宽泛规则之前,检查列表末尾的 FINAL,不要在已有规则段内重复粘贴段标题。

  3. 核对姿态

    保存并确认该配置处于启用状态,返回 Home → Global Routing → Config。Home 中同时确认已选中自己可用的服务器,再开启连接。

  4. 重新发起

    关闭原有测试页面或应用连接,再重新访问自己有权测试的目标。已有长连接可能继续沿用之前的路径,不能只刷新一个仍在复用连接的页面就认定修改无效。

  5. 核对记录

    打开连接记录,按目标主机名或 IP 找到刚产生的请求,核对实际策略与可见的规则信息。一次只改一处顺序,并记录修改前后的结果,避免多个变量同时变化。

例如,为自己控制的测试域名临时添加一条精确的 REJECT 规则并置于相关后缀规则之前,新连接应受到拒绝;恢复为 DIRECT 后,再检查直接连接是否成功。这个过程需要以连接记录为依据:网页缓存可能让被拒绝的页面仍显示旧内容,页面上的第三方资源也可能使用完全不同的域名。

六、自定义规则常见问题与排查顺序

规则已经保存,为什么还是走代理?

先检查 Home → Global Routing 是否仍为 Proxy,再回到 Config 确认编辑的文件就是当前启用的文件。两项无误后,从规则顶部查找是否已有更早的后缀规则、地址段规则或其他匹配接住了请求。不要只检查刚新增的那一行。

把 FINAL 改成 DIRECT 后,为什么部分网站仍走 PROXY?

FINAL 只处理未匹配请求。查看目标是否已命中前面的 DOMAIN 或 DOMAIN-SUFFIX;若需要对单个域名直连,把完整域名的 DIRECT 例外放到相关宽泛规则之前。修改后重新建立连接再检查。

用了 REJECT,为什么页面还有部分内容?

先排除缓存与既有连接,再查看实际发起请求的主机名。一个页面可能同时使用主站、图片、接口和静态资源域名;拒绝其中一个域名不会自动覆盖所有相关域名。按记录添加必要规则,不要直接把整片地址段全部拒绝。

更新订阅后,为什么结果变了?

区分更新对象:服务器订阅更新可能改变服务器条目和当前选择;远程配置更新可能改变规则正文。回到 Home 核对所选服务器,再到 Config 核对启用文件及规则顺序。先对照备份确认变化,不要把所有问题都归因于 FINAL。

规则命中了 PROXY,但连接还是失败怎么办?

命中只说明路由选择完成,不保证远端连接成功。核对已有服务器参数、当前网络和目标服务状态,并临时用 Global Routing → Proxy 做同一目标的对照测试。若两种姿态都失败,应先检查连接路径,而不是继续增加重复规则。

最后按固定顺序复核:先看路由姿态,再看启用配置,然后看第一条命中规则,最后检查代理或目标的连接情况。这样能把“规则没有被使用”“规则顺序不对”和“策略正确但连接失败”分成三类,避免反复修改同一条 FINAL。

下载 Shadowrocket