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

Shadowrocket 规则怎么写:DOMAIN、DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINAL 匹配逻辑入门

逐个说明六类规则关键字匹配的对象与范围,讲清规则自上而下、命中即停的执行顺序,以及 FINAL 兜底为什么必须放在最后一行。

本文速览

Shadowrocket(小火箭)的规则先判断请求是否符合条件,再决定交给哪种策略处理。本文适合已具备自己的服务资料、准备编辑 Config 的用户:先认清六类关键字,再按“具体例外在前、宽泛匹配在后、FINAL 最后”的顺序组织规则,最后用新建连接核对结果。示例只说明语法与匹配范围,不提供服务资料。

1. 规则格式:匹配类型、匹配内容、处理策略

常见规则写在配置文件的 [Rule] 段。除 FINAL 等特殊形式外,一行通常由“关键字、匹配内容、策略”构成,字段用英文逗号分隔。域名匹配内容只填主机名,不填协议前缀、网页路径或端口。

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

这里的 DIRECT 表示直接连接,PROXY 表示交给代理策略,REJECT 表示拒绝匹配的请求。规则只决定处理方向,不会创建服务器,也不会补齐认证资料。使用 PROXY 前,应在 Home 核对自己已有的服务器及其可用性;若使用自定义策略组,规则末尾的名称必须与配置中的定义一致。

6 类
本文讲解的规则关键字,并非全部支持类型
3 字段
常规写法:关键字、匹配内容、策略
2 字段
兜底写法:FINAL、策略

结论:先把匹配对象写对

只处理一个主机名时先用 DOMAIN;确实需要覆盖整个域及其子域时,再扩大为 DOMAIN-SUFFIX,不要从宽泛的关键词匹配开始。

2. DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 的边界

这三类规则都针对域名,但范围不同。DOMAIN 是完整主机名匹配;DOMAIN-SUFFIX 匹配指定域本身及其子域;DOMAIN-KEYWORD 则检查域名中是否包含指定字符串。它们不是网页地址过滤器,不能按 /video/ 这样的路径区分同一主机上的页面。

规则示例会匹配不会匹配或需注意
DOMAIN,example.com,PROXYexample.com不包含 www.example.com
DOMAIN-SUFFIX,example.com,PROXYexample.com、www.example.com、a.b.example.com不匹配 notexample.com
DOMAIN-KEYWORD,example,PROXYexample.com、myexample.net可能覆盖与目标网站无关的域名

例如只让登录接口直连、同域其他请求走代理,可以把 DOMAIN,account.example.com,DIRECT 放在 DOMAIN-SUFFIX,example.com,PROXY 前面。这里依赖的是排列顺序,而不是“完整域名天然拥有更高优先级”。

3. GEOIP 与 IP-CIDR:按目标 IP 归属与地址段匹配

GEOIP 根据目标 IP 在地理数据库中的归属进行匹配。例如 GEOIP,CN,DIRECT 表示把数据库判定归属为 CN 的目标地址交给 DIRECT。它不是按网页语言、域名后缀或服务器运营者所在地进行判断,数据库记录也不等同于实时物理位置。

IP-CIDR 按 IPv4 地址段匹配。192.168.1.0/24 覆盖 192.168.1.0 到 192.168.1.255,适用于规则范围说明;实际局域网中哪些地址能作为设备地址,还受网络配置约束。IPv6 地址段应使用 IP-CIDR6,不能把 IPv6 地址直接放进 IPv4 示例。

[Rule]
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

域名规则和 IP 规则混用时,应先写明确的域名例外,再放较宽的 IP 归属规则。这样可以避免某个目标因解析地址的归属而提前进入另一条策略。访问同一个域名时,DNS 返回的地址可能变化,因此 GEOIP 的结果也可能随目标地址变化。

4. 自上而下、命中即停:FINAL 为什么放在最后

在普通线性规则列表中,请求按排列顺序接受匹配,命中一条后就采用该条策略,不会继续向下寻找“更精确”的规则。FINAL 不再要求域名或地址条件,它接收此前没有命中的请求,所以必须放在规则列表末尾。

[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
  1. 访问 account.example.com:第一行命中,使用 DIRECT,后面的后缀规则不再参与。
  2. 访问 images.example.com:第一行不匹配,第二行命中,使用 PROXY。
  3. 访问目标地址 192.168.1.20:匹配局域网地址段,使用 DIRECT。
  4. 其他请求:先接受 GEOIP 判断;仍未匹配的,最终使用 FINAL 指定的 DIRECT。

如果把后缀规则放在完整域名例外前面,account.example.com 就会提前走 PROXY。如果把 FINAL,DIRECT 放在最前面,后续规则便没有机会处理普通请求。要实现“只代理指定网站”,可用域名规则列出目标,再以 FINAL,DIRECT 收尾;要让其余请求走代理,则需要明确改为 FINAL,PROXY,两者影响范围不同。

5. 在 Config 中编辑,并让新连接使用规则

规则写入文件不等于该文件已经生效。需要同时确认当前选中的配置,以及 Home 中的 Global Routing。按配置文件分流时选择 Config;Proxy 与 Direct 不用于按本文规则列表逐项验证,Scene 则涉及场景选择,不适合拿来隔离一次基础规则测试。

  1. 保留原配置

    进入 Config,先保留当前文件的副本或原始文本。确认要编辑的是当前使用的文件,而不是另一份同名配置。

  2. 编辑规则段

    在 Config 点选目标文件,进入 Edit Plain Text,找到 [Rule]。把具体例外放前面,并只在末尾保留需要的 FINAL 兜底;保留文件中其他必要配置段。

  3. 保存并选用

    保存修改并回到 Config,确认选中刚编辑的文件。远程配置再次更新可能覆盖本地修改,测试前应保留自己添加的规则文本。

  4. 核对模式

    回到 Home → Global Routing → Config,再核对自己的代理服务器。订阅更新负责更新已有服务资料,不代表会替你写好或启用本地规则。

  5. 验证新连接

    保存后重新建立连接,再发起目标请求。检查连接记录中的目标主机、目标 IP 和实际策略,不要仅凭页面是否打开来判断规则是否命中。

验证时一次只改一个条件。例如先让一个完整域名走 DIRECT,确认结果后再扩大为 DOMAIN-SUFFIX。浏览器缓存、已有长连接和网站的其他资源域名都可能影响观察;重新请求必须确实产生网络连接,缓存页面本身不能证明新规则已被使用。

6. 规则不生效与网络报错:分开定位

“网页打不开”不是规则语法错误的专属表现。应先看请求实际选择了什么策略,再看 DNS 与连接过程。下面列出的是 Apple 网络层可能返回的英文错误描述;应用或系统可能以本地化文字展示,不能要求每次都在 Shadowrocket 中看到完全相同的提示。

报错:The request timed out.

原因与解法:请求在限定时间内没有完成,可能涉及目标不可达或选中服务器的连通性;先核对连接记录中的 DIRECT 或 PROXY,再分别检查对应路径,不要直接扩大规则范围。

报错:A server with the specified hostname could not be found.

原因与解法:目标主机名未能成功解析;先核对域名拼写与当前配置的 DNS 设置,恢复解析后,再判断 GEOIP 或 IP-CIDR 是否具备匹配所需的目标地址。

观察到的现象优先检查下一步
所有请求都走同一策略Global Routing 是否为 Config;FINAL 是否误放顶部修正模式或顺序,再建立新连接
主站符合预期,图片不符合图片请求是否使用另一个主机名按连接记录补充实际资源域名,不盲目使用关键词
完整域名例外没有命中前面是否已有更宽的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD把具体例外移到宽泛规则之前
IP 规则在域名请求上没有命中目标 IP 是否可用,是否使用 no-resolve区分 DNS 解析问题与规则条件不成立

结论:用一条新请求核对三项

每次修改后记录“目标主机、实际策略、对应规则顺序”。只有确认请求进入了预期策略,才继续排查该路径的连接问题;不要把连通性失败与规则未命中混为一谈。

App Store 正版核验