2026-08-06 · 规则与分流 · 约 12 分钟

Shadowrocket 规则类型详解:DOMAIN、DOMAIN-SUFFIX、GEOIP 与 FINAL 各匹配什么

逐条拆解 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 的匹配对象与写法,附真实规则片段,并说明它们与 PROXY、DIRECT、REJECT 如何搭配。

本文速览

Shadowrocket(小火箭)的规则需要同时核对匹配对象、排列顺序和执行策略。本文适合已经有自己的服务商与配置、准备修改分流规则的用户:先用 Config 启用按规则分流,再区分域名规则与 IP 规则,最后用 FINAL 接住未命中的连接。示例用于说明语法,不包含可用的连接凭据。

先确认 Config:规则生效的前提

结论是:需要按照配置中的规则分流时,在 Home → Global Routing 选择 Config,并确认 Config 页面选中了准备修改的配置。只保存文件而没有选中它,或把 Global Routing 留在 Proxy、Direct,都不能用来验证这份配置是否按预期分流。

  1. 进入 Config,确认当前使用的配置;编辑前保留副本,避免直接覆盖已有设置。
  2. 打开该配置的编辑入口,定位 [Rule]。本文代码应放入规则部分,不是粘贴到 Home 的服务器地址栏。
  3. 回到 Home → Global Routing,选择 Config,再确认已有代理连接本身可用。
  4. 保存修改后重新发起目标请求,通过连接记录核对目标、命中规则与最终策略,不只观察 Home 的连接开关。

Proxy 用于将受接管的连接交给代理,Direct 用于直接连接;Scene 则还要检查当前场景所采用的设置。本文验证步骤统一使用 Config,避免把场景切换与规则修改混在一起。Settings → On Demand 控制按条件建立连接,不负责决定某个域名匹配哪一条规则。

6 类
本文覆盖 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL
3 项
常见执行策略:PROXY、DIRECT、REJECT
1 条
最小示例在规则末尾保留一条 FINAL 兜底

读懂规则语法:匹配条件与执行策略分开看

一条常见规则由规则类型、匹配内容、执行策略组成,以英文逗号分隔。规则类型回答“检查什么”,执行策略回答“命中以后怎么连接”。同样的域名条件可以搭配不同策略,因此不能把 DOMAIN-SUFFIX 理解成“自动走代理”。

[Rule]
DOMAIN,example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,example,REJECT
GEOIP,CN,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT
FINAL,PROXY

以上片段用于展示六种语法,不是建议直接启用的完整配置。例如第一条会先让 example.com 命中 DIRECT,而不是继续执行后面的 PROXY。FINAL 没有域名或网段参数,所以写作 FINAL,PROXY,不能为了凑齐三段而添加空字段。

策略命中后的含义需要核对
PROXY使用代理策略处理连接。当前代理选择及其连接参数是否可用。
DIRECT直接连接目标。当前网络能否直接访问目标。
REJECT拒绝匹配的连接。匹配范围是否过宽,是否拦截了页面所需资源。

如果规则引用自定义策略组,名称必须与配置中的定义一致,并继续核对组内实际选择。PROXY 也不等同于某一种协议:Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 属于连接配置层面的协议选择,不能替代规则中的匹配条件。

DOMAIN、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD 的边界

只匹配一个完整域名,用 DOMAIN;匹配主域名及其下级域名,用 DOMAIN-SUFFIX;确实需要按域名中的字符串查找时,才用 DOMAIN-KEYWORD。常见错误是把完整 URL 写进域名字段,或认为后缀匹配只是检查末尾几个字符。

规则会匹配不会匹配
DOMAIN,example.com,DIRECTexample.comwww.example.com
DOMAIN-SUFFIX,example.com,PROXYexample.com、img.example.comnotexample.com、example.com.test
DOMAIN-KEYWORD,example,REJECTexample.com、myexample.comsample.test

DOMAIN-SUFFIX 按域名层级边界匹配,示例字段写 example.com 即可,不必加 *.。DOMAIN-KEYWORD 不要求这个边界,因此 example 也会出现在其他不同归属的域名中;用于 REJECT 时尤其需要缩小范围。

GEOIP 与 IP-CIDR:按目标 IP 判断,不按网站名称判断

GEOIP 使用 IP 地理归属数据判断目标地址;IP-CIDR 使用明确的地址范围判断。两者都不是检查网页文字、网站备案或域名后缀。一个以中文提供服务的网站,其连接地址不一定被 GEOIP 判定为 CN;同一域名也可能在不同网络下解析到不同地址。

GEOIP,CN,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT
IP-CIDR,198.51.100.8/32,REJECT
FINAL,PROXY

这里的 192.0.2.0/24 与 198.51.100.8/32 是文档示例地址,不是可用服务端地址。/24 表示前 24 位为网络前缀,该示例覆盖 192.0.2.0 至 192.0.2.255;IPv4 的 /32 只对应一个地址。IPv6 网段应使用对应的 IP-CIDR6 类型,不能照搬 IPv4 示例。

若在 IP 规则末尾使用 no-resolve,其目的是避免为这条 IP 规则主动进行域名解析,不是关闭全部 DNS。对原本只有域名、没有可用目标 IP 的连接,这类规则可能被跳过并继续向后匹配。初次建立最小测试时不要同时引入这个选项,以免混淆匹配条件。

FINAL 与排列顺序:先命中先执行,不是最具体的自动优先

在本文这些普通规则中,应按从上到下、首次命中后执行相应策略来理解。DOMAIN 并不会因为比 DOMAIN-SUFFIX 更具体,就自动越过排在前面的规则。FINAL 是前面的条件都没有命中时使用的兜底,应放在规则列表末尾。

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

这份最小示例让 account.example.com 直接连接,让 example.com 及其余下级域名使用 PROXY,其他未命中的目标使用 DIRECT。如果把前两条交换,account.example.com 就会先匹配后缀规则,下面的 DOMAIN 例外不会再决定该次连接的走向。

取得目标信息 读取首条规则 逐条检查条件 确定执行策略 发起目标连接

FINAL 也不是“代理失败后改直连”的故障切换。连接一旦命中上面的 PROXY,随后发生超时,不意味着会退回列表继续执行 FINAL。若要修改未匹配流量的默认走向,调整 FINAL 的策略;若要处理代理不可用,应检查连接参数或已有策略组的选择。

保存后如何验证:每次只改一个条件

验证时先回答“有没有命中”,再回答“命中后的连接能不能成功”。浏览器显示页面失败并不能直接证明规则语法错误,页面打开也不能证明所有资源都走了同一种策略。一个页面可能同时请求主域名、图片域名和接口域名,必须分别观察。

  1. 在 Config 保存上述最小示例并确认已选用,再到 Home → Global Routing 核对 Config。
  2. 先用已有配置确认代理可连接。若基础连接就失败,先修复地址、端口、认证及协议相关参数。
  3. 结束旧请求后重新访问测试目标,避免用仍在复用的连接判断新规则。
  4. 在应用的连接记录中查看实际目标、匹配规则和策略。测试域名必须是自己确实需要访问的目标;本文保留域名只用于解释语法。
  5. 若主页面正常而图片失败,找出图片请求对应的域名,再决定补充 DOMAIN 还是 DOMAIN-SUFFIX,不先扩大到含糊的关键字。
  6. 记录修改前后结果,每次只变更一条规则。核对完成后再逐步合并回完整配置。

以下两类是连接层错误,不是某条规则独有的语法提示;具体显示文本可能带有系统或协议上下文。应先看记录中的实际出站策略,再沿对应连接排查,而不是看到错误就删除 FINAL。

报错:Connection refused

原因与解法:连接目的端口拒绝建立连接,可能是对应服务未监听或端口配置不符。先核对记录中的 DIRECT 或 PROXY;DIRECT 检查目标服务端口,PROXY 则检查已有代理的地址、端口及服务状态。

报错:Connection timed out

原因与解法:连接未在等待时间内完成,可能涉及网络可达性或出站连接。先用同一配置核对其他目标,再检查该次命中的规则与策略;不要仅凭超时就把域名规则改成 IP 规则。

常见问题:规则正确却没有得到预期结果

已经加了 DOMAIN-SUFFIX,为什么还是直连?

先到 Home → Global Routing 确认是 Config,再到 Config 确认编辑的是当前选用的配置。随后检查后缀规则前面是否已有 DOMAIN、DOMAIN-KEYWORD 或其他可命中的规则,并重新发起连接核对记录。

只想让指定网站走代理,FINAL 应该怎么写?

把需要代理的域名写成 DOMAIN-SUFFIX,example.com,PROXY,末尾使用 FINAL,DIRECT。实际使用时把示例域名替换为自己的目标,并补齐页面依赖的其他域名;这不是为所有页面资源自动生成规则。

把 GEOIP,CN,DIRECT 放在最前面可以吗?

语法上可以,但先命中的 GEOIP 可能覆盖你希望强制代理的目标。若某个域名必须使用 PROXY,通常先放该域名的明确规则,再放 GEOIP,最后放 FINAL,并用实际连接记录确认结果。

更新 Home 中已有订阅,会顺便修改分流规则吗?

需要区分服务器订阅与 Config 中的配置文件。更新服务器订阅主要更新连接条目,不能据此认定当前配置里的规则已同步变化。更新后分别检查 Home 的连接选择和 Config 的规则内容,保留自己的修改副本。

一条 REJECT 之后页面空白,是代理坏了吗?

先查看失败资源是否命中了 REJECT。若误拦截了接口或脚本,把必要域名的例外放在宽泛拦截规则之前,或缩小拦截范围。REJECT 是明确拒绝连接,不应当用“连接失败”来判断代理是否可用。

规则的作用边界:负责选择出站,不负责补全服务

规则可以决定连接使用 DIRECT、PROXY 或 REJECT,但不会生成可用的代理服务,也不会修复不一致的协议参数。命中 PROXY 后仍要依赖已有连接配置;命中 DIRECT 后仍受当前网络与目标服务状态影响。应将“规则匹配正确”和“连接成功”分别验证。

Shadowrocket 主要用于 iPhone 与 iPad,获取入口为 App Store,系统要求以 App Store 页面标注为准。客户端一次性买断不等于线路套餐;本文以用户已有自己的服务商与配置为前提。有关规则结构可继续查看规则手册,首次设置则按教程逐步完成。

Shadowrocket 正版下载