Shadowrocket 规则类型详解:DOMAIN-SUFFIX、GEOIP、IP-CIDR 与 FINAL 怎么写

逐条拆解 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 的匹配对象与书写格式,讲清规则自上而下的命中顺序。

本文速览

Shadowrocket(小火箭)的 Rule 不是按“最精确”自动排序,而是按配置顺序匹配。本文适合已有自己的服务商与连接配置、准备调整分流的用户:先确认 Global Routing 使用 Config,再区分域名规则与 IP 规则,最后把 FINAL 放在末尾。读完可写出一组可解释、可逐条验证的规则,并区分“没有命中”和“命中后连接失败”。

先确认规则生效条件

先检查 Home 中的 Global Routing,再编辑 Config。使用 Config 时,请求按当前启用的配置文件分流;Proxy 与 Direct 是不同的全局处理姿态,不能用它们验证自定义 Rule 是否生效。Scene 按已设置的场景处理,也不等同于固定使用某一份 Config。排查期间先固定到 Config,避免场景变化干扰判断。

6 类
本文说明的 Rule 类型,非全部类型
3 类
域名匹配:DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD
4 种
Global Routing:Proxy / Direct / Config / Scene
  1. 在 Home 确认已有可用的连接配置,并打开连接开关;首次建立系统 VPN 配置时按系统提示授权。
  2. 进入 Config,确认当前启用的文件。编辑前保留副本,避免把远程文件的更新结果与本地修改混在一起。
  3. 回到 Home,将 Global Routing 设为 Config;保存修改后,按界面提示重新载入或重建连接。
  4. 关闭待测试应用的旧连接,再发起新请求。已经建立的长连接通常不会因为改了一行规则而立即换路。

Home 负责连接与服务条目,Config 承载配置文件,Settings 放置全局设置。Settings → On Demand 控制何时按条件建立连接,不负责把某个域名分配到某条 Rule;出现“断开后又自动连接”时应检查这里,而不是反复改 FINAL。

先命中,后执行策略

一条常见规则由类型、匹配内容、策略组成,以英文半角逗号分隔。例如 DOMAIN,api.example.com,DIRECT 表示:域名恰好为 api.example.com 时执行 DIRECT。FINAL 没有匹配内容字段,因此写成 FINAL,PROXY,不要补成三段。

发起新请求 获取目标信息 顺序匹配规则 执行命中策略 建立出站连接

同一个请求命中前面的规则后,就不会继续寻找后面“更精确”的规则。假设 DOMAIN-SUFFIX,example.com,PROXY 在前,而 DOMAIN,api.example.com,DIRECT 在后,那么后者不会为这个域名提供例外。正确做法是把例外规则移到较宽泛的规则前面。

三种域名规则

域名规则针对主机名,而不是完整网址。不要在匹配字段中填写 https://、路径 /login、查询参数或端口 :443。下面的 example.com 均为文档示例,并不指向需要配置的实际服务。

类型与写法匹配范围不应混淆的情况
DOMAIN,api.example.com,DIRECT 只匹配 api.example.com 不匹配 example.com 或 img.api.example.com
DOMAIN-SUFFIX,example.com,PROXY 匹配 example.com 及其子域名 不匹配 notexample.com,域名边界有意义
DOMAIN-KEYWORD,example,PROXY 匹配主机名中包含 example 的请求 可能同时匹配 example.net 与 notexample.com,范围更宽

只想改变一个 API 的出口时,优先用 DOMAIN;要覆盖同一主域下的资源域名时,使用 DOMAIN-SUFFIX;只有明确需要子串匹配时才用 DOMAIN-KEYWORD。关键词规则并不理解站点归属,过短的词可能影响无关域名,故障范围也更难界定。

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

这组示例中,api.example.com 先命中 DIRECT,img.example.com 命中后缀规则,而不匹配前面任何条件的请求执行 FINAL 的 DIRECT。若将第一行移到后缀规则之后,API 例外就会被覆盖。顺序变化本身就足以改变结果,不需要同时改 DNS 或连接参数。

GEOIP 与 IP-CIDR

GEOIP 根据目标 IP 在本地地理数据库中的归属匹配,GEOIP,CN,DIRECT 的含义是对归属 CN 的目标 IP 使用 DIRECT。它不是根据网页语言、域名后缀或服务商注册地判定。同一域名可能解析到不同地区的地址,因此结果受解析结果与数据库内容共同影响。

IP-CIDR 则直接匹配 IPv4 网段。192.168.0.0/16 覆盖 192.168.0.0 至 192.168.255.255;10.20.30.40/32 只表示一个 IPv4 地址。掩码描述地址范围,不是端口范围,也不是主机数量参数。

IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.20.30.40/32,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

不要仅凭“网站属于某个地区”推断 GEOIP 一定命中。内容分发网络可能为同一域名返回多个目标 IP,应用也可能使用缓存地址。先看新请求的目标地址,再判断地理规则是否符合预期。

FINAL 与完整顺序

FINAL 是前序规则均未命中时的兜底,不是连接失败后的重试开关。前面某条规则选中了 PROXY,而该出站连接超时,请求不会因此自动跳过它、再由 FINAL 改走 DIRECT。要修复的是已选中的出站或规则选择,而不是再增加一条末尾规则。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,media-sample,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
  1. 先放具体例外。API 单域名规则在同站后缀规则之前,保证例外可达。
  2. 再放域名范围。先决定已知站点的出口,再处理 IP 范围,可以减少地理归属变化对指定站点的影响。
  3. 安排地址规则。本地网段与 GEOIP 之间同样有顺序关系;若规则范围交叠,应把需要优先执行的条件放前面。
  4. 最后保留兜底。将 FINAL 放在末尾。选择 DIRECT 还是 PROXY,应根据希望如何处理未分类请求来决定,而不是照抄别人的习惯。

按现象定位分流故障

每次只改一项,并用同一个目标发起新请求。查看可用的连接记录或日志时,优先记下目标域名、实际 IP、命中规则与最终策略。如果日志只提供其中部分信息,就据此缩小范围,不要把“页面打不开”直接等同于规则写错。

报错:Connection timed out

原因与解法:连接在规定时间内未完成,可能涉及目标、链路或出站服务;先核对命中策略,再用 Home 中的 Connectivity Test 检查当前连接,并对照同一目标的其他请求。超时本身不能证明 DOMAIN-SUFFIX 语法错误。

报错:Connection refused

原因与解法:通常表示连接被目标端或中间设备明确拒绝;核对请求的目标端口与用户已有服务的端口设置。例如服务仅监听 443,却连接到 8443 时,应更正连接参数,而不是靠调整 FINAL 兜底。

上面的英文是网络错误描述,具体显示形式取决于日志来源。若没有报错、只是出口与预期不同,应先检查是否仍处于 Proxy 或 Direct,再确认编辑文件是否正是启用的 Config,最后从第一条 Rule 开始寻找更早命中的条件。

“规则加了,怎么还是走原来的出口?”

先在 Home 把 Global Routing 固定为 Config,再确认 Config 中启用的文件。将单域名例外移到宽泛的后缀或关键词规则之前,保存后关闭旧连接,重新请求同一域名;不要只刷新仍复用旧连接的页面。

“GEOIP 写了 CN,为什么这个中文网站没走 DIRECT?”

查看该次请求实际连接的 IP,而不是网页语言。如果它已经命中前面的域名规则,GEOIP 根本不会参与后续判断;如果到达 GEOIP,则应核对该 IP 的数据库归属以及解析是否发生变化。

“更新订阅后,自定义规则会一起更新吗?”

服务订阅与 Config 是不同对象。Home 中更新已有服务订阅,主要更新连接条目;需要更新远程配置时应在 Config 中操作对应文件。不要把订阅刷新成功当作本地 Rule 已保存或已启用的证据。

“换了协议,DOMAIN-SUFFIX 要重写吗?”

不因更换协议而自动需要重写。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 属于连接协议层,域名规则负责选择策略。先确认原有策略仍指向有效条目,再按自己的服务参数检查协议连接。

保存前逐项核对

可靠的分流配置应能回答三个问题:这条规则匹配什么、为什么放在这里、命中后使用哪个策略。先维护少量明确规则,再逐步扩展,比一次加入大量无法解释的关键词更容易排错。本站仅说明客户端配置操作,不提供、不销售、不推荐节点或订阅服务。

免费下载 Shadowrocket