2026-08-09 · 规则分流 · 约 9 分钟

Shadowrocket 规则怎么写:DOMAIN-SUFFIX、GEOIP、IP-CIDR 与 FINAL 匹配说明

逐条拆解 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 的匹配对象与书写格式,说明规则自上而下的命中顺序,以及 PROXY、DIRECT、REJECT 的含义。

本文速览

写规则先确定匹配对象,再确定出站策略,最后检查顺序。本文适合已经在 Shadowrocket(小火箭)中添加自己已有服务器、准备编辑 Config 的用户;读完可以区分域名规则与 IP 规则,写出带 FINAL 的最小规则段,并按连接记录验证是否命中预期条目。所有示例域名和保留地址仅用于解释语法,不是可用的连接服务。

一、规则的生效前提与匹配顺序

规则写在配置文件的 [Rule] 段中。对本文列出的普通规则,按自上而下的顺序检查,命中后采用该条指定的策略,不会继续寻找后面“更精确”的条目。因此,例外条目应放在宽泛条目前,FINAL 应放在末尾。

开始测试前,在 Home → Global Routing 选择 Config,并确认 Config 中当前启用的文件就是刚修改的文件。选择 Proxy 或 Direct 时,不应再用本文的逐条规则结果解释所有请求;Scene 涉及场景选择,也不适合作为最小规则测试的起点。

请求目标当前配置顺序匹配命中策略连接结果

规则负责决定流量如何处理,不负责补齐服务器参数,也不保证目标可达。即使命中了 PROXY,自己的服务器仍可能因地址、端口或认证参数不正确而连接失败。测试时应分别记录“匹配了什么”与“连接是否成功”。

6 类
本文说明的规则:DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL
3 项
本文使用的策略:PROXY、DIRECT、REJECT
末尾 1 条
最小示例以 FINAL 承接前面未命中的请求

二、DOMAIN、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD

域名规则的基本形式是 规则类型,匹配内容,策略,使用半角逗号分隔。这里的匹配内容是主机名,不是完整 URL;不要把 https://、路径、查询参数或 :443 填进域名字段。连接到同一主机的不同网页路径,不能靠这三种规则区分。

规则匹配范围不匹配的例子
DOMAIN,example.com,DIRECT仅完整主机名 example.comwww.example.com
DOMAIN-SUFFIX,example.com,PROXYexample.com 及其子域名,例如 img.example.comnotexample.com
DOMAIN-KEYWORD,example,REJECT域名中含有 example 字符串的目标sample.test

DOMAIN-SUFFIX 按域名层级匹配,通常最适合表达“这个域名及其全部子域名”。不要写成 *.example.com;此处直接填写 example.com。DOMAIN-KEYWORD 的范围更宽,例如也可能匹配 myexample.test,应确认不会误伤无关目标。

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

在这个独立示例中,account.example.com 先命中第一条而使用 DIRECT;img.example.com 命中第二条而使用 PROXY。若调换前两行,账户子域名会先命中后缀规则,后面的精确规则便没有机会生效。这是“规则顺序”问题,不是 DOMAIN 的优先级低于 DOMAIN-SUFFIX。

结论:先写例外,再写范围

同一域名体系内需要不同策略时,把具体主机的 DOMAIN 放在 DOMAIN-SUFFIX 前面;只有明确需要字符串匹配时才使用 DOMAIN-KEYWORD。

三、IP-CIDR、GEOIP 与 no-resolve

IP-CIDR 匹配目标 IPv4 地址所属的网段,不匹配网页名称。斜杠后的数字是前缀长度:/32 表示单个 IPv4 地址,/24 表示一个包含 256 个地址的网段。这里的地址数包含网络地址等,并不等于可用服务器数量。

IP-CIDR,192.0.2.8/32,DIRECT,no-resolve
IP-CIDR,198.51.100.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

上面的 192.0.2.8 与 198.51.100.0/24 是文档保留地址,仅演示格式。no-resolve 表示不为匹配这条 IP 规则额外触发域名解析;如果匹配阶段已经有可用目标 IP,仍可据此判断。它不是关闭全部 DNS,也不是“域名和 IP 都自动匹配”的开关。

如果目的是让某个确定的站点采用指定策略,优先写明确的域名规则通常更容易验证。若目的是管理某个已知地址或网段,再使用 IP 规则。地理数据库的归类与服务实际部署可能有差异,不能把 GEOIP 当成网站身份的证明。

四、PROXY、DIRECT、REJECT 与 FINAL 的区别

规则末尾的策略回答“命中之后怎么处理”。PROXY 表示使用代理出站,实际服务器还取决于当前选择及相关配置;DIRECT 表示直接连接目标;REJECT 表示拒绝该请求。它们不是三种协议,不能用来替代服务器中的 Type、地址或端口。

写法含义验证重点
DOMAIN,example.com,PROXY该主机使用代理出站命中规则后,核对实际使用的服务器
DOMAIN,example.com,DIRECT该主机使用直接连接当前网络能否直接访问目标
DOMAIN,example.com,REJECT拒绝该主机的请求拒绝是否符合原本意图
FINAL,PROXY前面未命中的请求使用 PROXY兜底策略是否符合预期

FINAL 没有“匹配内容”字段,形式是 FINAL,策略,不要写成 FINAL,example.com,PROXY。放在中间会提前承接剩余请求,使后面的普通条目无法按预想工作。兜底选 DIRECT 还是 PROXY 取决于自己的使用目标,不存在适合所有配置的固定答案。

五、在 Config 中保存并验证最小配置

先保留原配置副本,再修改本地测试文件。不要把下面的规则段直接覆盖到完整配置文件的所有内容上;它只展示 [Rule] 部分。若原文件已有该段,应在同一段内调整,避免重复创建多个 [Rule] 段造成理解混乱。

  1. 保留副本

    进入 Config,确认当前启用的文件,先备份其内容,再准备单独的本地测试配置。记录原来的 Global Routing 选择,便于测试后恢复。

  2. 编辑规则

    在 Config 打开测试文件的编辑入口,定位 [Rule],填入下方最小示例。检查逗号、字段数量以及 FINAL 的位置,然后保存。

  3. 启用配置

    在 Config 选用已保存的测试文件,再到 Home → Global Routing → Config。确认 Home 中选中的是自己已有且参数正确的服务器。

  4. 新建请求

    重新发起目标连接,在应用的连接记录中核对目标、匹配规则和使用的策略。已有长连接不适合用来验证刚修改的规则,必要时关闭目标应用后重新打开。

  5. 逐条增加

    确认最小配置行为符合预期后,每次只增加一条规则并重复验证。若结果发生变化,先回退刚增加的一条,而不是同时改动 DNS、服务器和多组规则。

[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.8/32,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

这个示例的预期顺序是:账户子域名先走 DIRECT,其余 example.com 子域名走 PROXY,之后才检查地址规则和 GEOIP,最终由 FINAL 兜底。示例域名用于推演匹配;做实际连接测试时,应换成自己有权访问、且明确知道主机名的目标。

六、规则不生效与 timeout 的排查顺序

“页面打不开”不是规则语法错误的充分证据。先核对当前文件与 Global Routing,再看实际目标和命中规则,最后检查出站连接。不要看到连接失败就立即把全部规则改为 PROXY,否则会失去区分匹配问题与连接问题的依据。

报错:timeout

原因:连接测试或请求在等待时间内没有完成;仅凭这个结果,无法判断是规则、目标网络还是所用服务器造成。

解法:先核对该请求实际命中的策略;若为 PROXY,再用 Home → Connectivity Test 检查当前服务器,并核对自己的地址、端口与认证参数。

现象优先检查调整方式
所有请求都使用同一种出站Home → Global Routing 是否为 Config回到 Config 姿态,再检查当前启用的文件
精确域名条目没有命中前面是否有后缀或关键字规则将需要优先执行的精确条目前移
后半段规则始终没有效果FINAL 是否被放在中间将 FINAL 移到普通规则之后
主页面正常,图片或接口失败失败请求是否属于另一个主机名按实际目标补充规则,不只依据地址栏判断
IP 规则没有按预期命中实际目标地址、网段及 no-resolve核对匹配时可用的地址信息,不把域名归属当成 IP 归属

最后检查文本本身:使用半角逗号,保留 DOMAIN-SUFFIX 等关键字原文,不把说明文字粘进规则行。DOMAIN 等三字段规则与 FINAL 的字段数量不同;如果增加了命名策略,还要确保引用名称在当前配置中确实存在。恢复原配置后行为恢复正常,可以作为缩小修改范围的线索,但仍应通过逐条回退定位具体原因。

App Store 正版核验核对开发者与应用 ID