Shadowrocket 规则写法入门:DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 各匹配什么

逐个讲解六个常用规则关键字的匹配对象和写法,说明规则自上而下的匹配顺序,以及 PROXY、DIRECT、REJECT 三种策略的含义。

本文速览

Shadowrocket(小火箭)的规则按顺序判断连接,命中后采用对应策略。本文适合已经拥有可用配置、希望调整分流的用户;以 iPhone / iPad 的 Home、Config 界面操作为例,规则概念也适用于 Mac、Windows、安卓、Linux 版,具体编辑入口以各平台界面为准。读完可区分域名与 IP 匹配,写出最小 Rule 段,并用连接记录核对命中结果。

一、先确认 Global Routing 使用 Config

规则存在于配置中,不代表当前连接正在按规则分流。在 Home 查看 Global Routing:需要执行当前配置的 Rule 时选择 Config。Proxy 表示全局使用代理策略,Direct 表示全局直连;Scene 用于场景选择,不应将它理解成另一种规则关键字。开始排查时先固定为 Config,避免场景切换干扰判断。

  1. 进入 Config,备份当前配置,再确认准备编辑的是当前选中的配置文件,而不是另一份同名副本。
  2. 回到 Home,将 Global Routing 设为 Config,并确认已有的代理连接可以正常使用。
  3. 编辑规则后保存配置,必要时重新建立连接,再发起一个新的测试请求。
  4. 在连接记录中核对目标域名或 IP、命中规则与最终策略,不仅凭网页能否打开判断。

Settings → On Demand 管理的是自动建立连接的条件,不负责决定某个域名走 PROXY 还是 DIRECT。规则测试期间如果需要主动断开连接,应先留意 On Demand 是否会再次触发连接,避免误以为保存规则导致开关自行变化。

应用请求进入隧道按序匹配采用策略记录结果

二、规则的三部分:类型、匹配值、策略

多数基础规则由英文逗号分隔三个字段:规则类型、匹配值、策略。例如 DOMAIN,example.com,DIRECT 表示目标域名恰好为 example.com 时直连。FINAL 没有匹配值,因此写成 FINAL,PROXY,不要照三字段格式多加一个空字段。

6 类
本文讲解的基础规则关键字
3 种
基础策略:PROXY / DIRECT / REJECT
首条命中
不是按规则名称自动排序
策略处理方式使用边界
PROXY交给代理策略处理。仍需已有代理及其参数可用,规则本身不创建连接服务。
DIRECT直接连接目标。不等于绕过系统隧道,也不保证目标在当前网络可达。
REJECT拒绝匹配的连接。命中后请求失败是预期结果,应只用于明确要阻止的目标。

规则末尾还可能引用配置中已经定义的策略组。刚入门时先使用上述基础策略,不要随意填写一个不存在的组名。PROXY 是策略标识,而 Global Routing 里的 Proxy 是运行姿态,两者所在位置和作用不同,不能互换填写。

三、DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 的区别

三种规则都针对域名,但匹配范围不同。DOMAIN 做完整域名匹配;DOMAIN-SUFFIX 匹配指定域名本身及其子域名;DOMAIN-KEYWORD 检查域名中是否包含给定字符串。它们不检查网页正文,也不按 URL 路径区分同一站点的页面。

示例规则会匹配不会匹配
DOMAIN,example.com,DIRECTexample.comwww.example.com
DOMAIN-SUFFIX,example.com,DIRECTexample.com、img.example.comnotexample.com
DOMAIN-KEYWORD,example,PROXYexample.com、myexample.netsample.net

如果只想让 api.example.com 走代理,而同一域名下的其他连接直连,应把精确 DOMAIN 放在宽泛 DOMAIN-SUFFIX 之前。只要连接可提供域名信息,这样的例外关系就能通过规则顺序表达;如果应用直接访问 IP,则要另看 IP 规则。

四、GEOIP 与 IP-CIDR:匹配的是目标 IP

GEOIP,CN,DIRECT 根据 IP 地理数据库中的地区归属判断目标地址,不是按域名后缀或服务商总部判断。域名请求走到 IP 类规则时,可能需要先解析地址;结果还会受到 DNS 返回值及数据库信息影响,所以同一服务不同入口不一定命中相同的 GEOIP 规则。

GEOIP,CN,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR,192.0.2.0/24,REJECT

IP-CIDR 使用网络地址加前缀长度。192.168.0.0/16 覆盖从 192.168.0.0 到 192.168.255.255 的地址;IPv4 的 /32 只匹配单个地址。上面的 192.0.2.0/24 是文档示例网段,不是实际服务地址,不能用它证明真实网站连通性。

结论:能明确域名范围,就先写域名规则

先用 DOMAIN 或 DOMAIN-SUFFIX 表达具体需求,再把 GEOIP、IP-CIDR 留给地区与网段策略。这样可减少因解析地址变化造成的判断偏差,也更容易从连接记录中解释一次命中。

五、FINAL 放在最后:从具体例外到默认策略

Shadowrocket 按顺序检查规则,先匹配的规则决定处理策略,不会因为下方某条规则“更精确”就自动改用它。FINAL 负责接住此前未匹配的连接,应放在规则段最后。若把它放在最前面,下方为特定域名写的规则就无法起作用。

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

这是教学用的 Rule 段,不是一份包含代理参数、DNS 等内容的完整配置。已有配置中已经存在 [Rule] 时,应编辑该段内的条目,不要重复堆放多个同名段落。示例里的域名用于说明匹配关系,使用时应换成自己实际要处理的目标。

  1. 请求 api.example.com 时,第一条 DOMAIN 命中,采用 PROXY,不再继续检查后面的域名后缀规则。
  2. 请求 img.example.com 时,第一条不匹配,第二条 DOMAIN-SUFFIX 命中,采用 DIRECT。
  3. 域名中含 blocked-demo 且未被前两条接住时,命中 REJECT;不要拿其他域名测试这一条。
  4. 其余连接再检查指定网段及 GEOIP;直到这些条件都不匹配,才由 FINAL 交给 PROXY。

若希望默认直连,可以将最后一条改为 FINAL,DIRECT,但这会影响全部未命中的连接,而不只是当前正在测试的网站。修改前应先列清哪些域名必须走代理,并将它们放在 FINAL 之前。

六、规则不生效:先区分匹配错误与连接错误

网页打开失败并不能直接证明规则写错。先看连接记录:目标是否与预期一致、命中哪一条规则、最终使用哪个策略。只有命中或策略不符合预期,才优先检查配置选择、规则范围与顺序;命中正确但出站失败,应继续检查网络和已有代理参数。

Connection timed out

原因:连接在等待期限内没有完成,可能发生在直连目标或代理出站阶段,并非规则语法错误的专用提示。

解法:先从记录确认 DIRECT 或 PROXY,再在当前网络测试相应目标或已有代理;不要仅通过移动 FINAL 掩盖问题。

Connection refused

原因:目标连接被拒绝,常见于地址对应的端口没有服务监听,或对端主动拒绝连接。

解法:核对记录中的目标地址和端口;若 PROXY 出站失败,再检查已有代理的地址、端口及服务状态。

HTTPS 常见目标端口是 443,但 DOMAIN 规则并不是“仅匹配 443 端口”的规则。代理服务器自身的端口也不能直接照抄成 443,应以用户已有服务的实际参数为准。PROXY 命中正确仍无法连接时,还需按所用协议核对参数,而不是更改域名关键字。

七、常见问题:域名、协议与订阅的边界

写了 DOMAIN,为什么子域名没有一起生效?

DOMAIN 只匹配完整域名。要同时覆盖主域名和所有子域名,将该条改为 DOMAIN-SUFFIX;若只有一个子域名需要例外处理,把它的 DOMAIN 规则放在后缀规则前面。

GEOIP,CN,DIRECT 为什么没有让所有中文网站直连?

GEOIP 判断 IP 地区,不判断页面语言。先查看目标解析地址与命中记录;若你的需求是固定站点直连,用该站实际域名写 DOMAIN-SUFFIX,并置于 GEOIP 之前。

把 FINAL 改成 PROXY,就能修好协议参数吗?

不能。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 是代理协议,不是规则类型。FINAL 只决定未命中连接采用的策略,不会修正密码、身份凭据、TLS 或传输设置。

更新自己的订阅后,手动规则会被保留吗?

先区分更新的是 Home 中的代理订阅还是 Config 中的远程配置。远程配置更新可能替换文件内容;修改前在 Config 备份,并在更新后核对 Rule 段。不要假定所有更新入口都采用相同的合并方式。

日常维护按“备份、单条修改、新建请求、查看命中”的顺序进行。一次只调整一个变量,比同时改 DNS、Global Routing 和多条规则更容易定位原因。本文以用户已有自己的服务与订阅为前提,本站不提供、不销售、不推荐节点或订阅;客户端获取与线路服务是两件不同的事。

下载 Shadowrocket