Shadowrocket(小火箭)的规则按顺序判断连接,命中后采用对应策略。本文适合已经拥有可用配置、希望调整分流的用户;以 iPhone / iPad 的 Home、Config 界面操作为例,规则概念也适用于 Mac、Windows、安卓、Linux 版,具体编辑入口以各平台界面为准。读完可区分域名与 IP 匹配,写出最小 Rule 段,并用连接记录核对命中结果。
一、先确认 Global Routing 使用 Config
规则存在于配置中,不代表当前连接正在按规则分流。在 Home 查看 Global Routing:需要执行当前配置的 Rule 时选择 Config。Proxy 表示全局使用代理策略,Direct 表示全局直连;Scene 用于场景选择,不应将它理解成另一种规则关键字。开始排查时先固定为 Config,避免场景切换干扰判断。
- 进入 Config,备份当前配置,再确认准备编辑的是当前选中的配置文件,而不是另一份同名副本。
- 回到 Home,将 Global Routing 设为 Config,并确认已有的代理连接可以正常使用。
- 编辑规则后保存配置,必要时重新建立连接,再发起一个新的测试请求。
- 在连接记录中核对目标域名或 IP、命中规则与最终策略,不仅凭网页能否打开判断。
Settings → On Demand 管理的是自动建立连接的条件,不负责决定某个域名走 PROXY 还是 DIRECT。规则测试期间如果需要主动断开连接,应先留意 On Demand 是否会再次触发连接,避免误以为保存规则导致开关自行变化。
二、规则的三部分:类型、匹配值、策略
多数基础规则由英文逗号分隔三个字段:规则类型、匹配值、策略。例如 DOMAIN,example.com,DIRECT 表示目标域名恰好为 example.com 时直连。FINAL 没有匹配值,因此写成 FINAL,PROXY,不要照三字段格式多加一个空字段。
| 策略 | 处理方式 | 使用边界 |
|---|---|---|
PROXY | 交给代理策略处理。 | 仍需已有代理及其参数可用,规则本身不创建连接服务。 |
DIRECT | 直接连接目标。 | 不等于绕过系统隧道,也不保证目标在当前网络可达。 |
REJECT | 拒绝匹配的连接。 | 命中后请求失败是预期结果,应只用于明确要阻止的目标。 |
规则末尾还可能引用配置中已经定义的策略组。刚入门时先使用上述基础策略,不要随意填写一个不存在的组名。PROXY 是策略标识,而 Global Routing 里的 Proxy 是运行姿态,两者所在位置和作用不同,不能互换填写。
三、DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 的区别
三种规则都针对域名,但匹配范围不同。DOMAIN 做完整域名匹配;DOMAIN-SUFFIX 匹配指定域名本身及其子域名;DOMAIN-KEYWORD 检查域名中是否包含给定字符串。它们不检查网页正文,也不按 URL 路径区分同一站点的页面。
| 示例规则 | 会匹配 | 不会匹配 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | www.example.com |
DOMAIN-SUFFIX,example.com,DIRECT | example.com、img.example.com | notexample.com |
DOMAIN-KEYWORD,example,PROXY | example.com、myexample.net | sample.net |
- 不填协议头:匹配值写
example.com,不要写https://example.com。 - 不填页面路径:
/login、查询参数与 URL 片段都不是这三类规则的匹配值。 - 不加通配符:需要覆盖整个域名及子域名时使用
DOMAIN-SUFFIX,example.com,DIRECT,不必加*.。 - 谨慎使用短关键词:
DOMAIN-KEYWORD,ad,REJECT可能误伤包含这两个字母的正常域名,不能将它等同于精确的广告域名列表。
如果只想让 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 是文档示例网段,不是实际服务地址,不能用它证明真实网站连通性。
- 仅写
192.168.0.0/16不会覆盖所有私有 IPv4 地址;若有其他内网范围,应按实际网络单独配置。 - IPv6 网段使用对应的
IP-CIDR6类型,不要将 IPv6 地址填入 IPv4 示例后期待同样匹配。 - 可选参数
no-resolve用于避免为该 IP 规则额外触发域名解析,例如IP-CIDR,192.168.0.0/16,DIRECT,no-resolve;它不等于全局关闭 DNS。 - 若希望域名请求解析后命中某个 IP 范围,应理解解析行为再决定是否使用
no-resolve,不要把它当作每条规则都必须加的后缀。
结论:能明确域名范围,就先写域名规则
先用 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] 时,应编辑该段内的条目,不要重复堆放多个同名段落。示例里的域名用于说明匹配关系,使用时应换成自己实际要处理的目标。
- 请求
api.example.com时,第一条 DOMAIN 命中,采用 PROXY,不再继续检查后面的域名后缀规则。 - 请求
img.example.com时,第一条不匹配,第二条 DOMAIN-SUFFIX 命中,采用 DIRECT。 - 域名中含
blocked-demo且未被前两条接住时,命中 REJECT;不要拿其他域名测试这一条。 - 其余连接再检查指定网段及 GEOIP;直到这些条件都不匹配,才由 FINAL 交给 PROXY。
若希望默认直连,可以将最后一条改为 FINAL,DIRECT,但这会影响全部未命中的连接,而不只是当前正在测试的网站。修改前应先列清哪些域名必须走代理,并将它们放在 FINAL 之前。
六、规则不生效:先区分匹配错误与连接错误
网页打开失败并不能直接证明规则写错。先看连接记录:目标是否与预期一致、命中哪一条规则、最终使用哪个策略。只有命中或策略不符合预期,才优先检查配置选择、规则范围与顺序;命中正确但出站失败,应继续检查网络和已有代理参数。
Connection timed out
原因:连接在等待期限内没有完成,可能发生在直连目标或代理出站阶段,并非规则语法错误的专用提示。
解法:先从记录确认 DIRECT 或 PROXY,再在当前网络测试相应目标或已有代理;不要仅通过移动 FINAL 掩盖问题。
Connection refused
原因:目标连接被拒绝,常见于地址对应的端口没有服务监听,或对端主动拒绝连接。
解法:核对记录中的目标地址和端口;若 PROXY 出站失败,再检查已有代理的地址、端口及服务状态。
HTTPS 常见目标端口是 443,但 DOMAIN 规则并不是“仅匹配 443 端口”的规则。代理服务器自身的端口也不能直接照抄成 443,应以用户已有服务的实际参数为准。PROXY 命中正确仍无法连接时,还需按所用协议核对参数,而不是更改域名关键字。
- 总是命中 FINAL:检查匹配值是否误含协议头或路径,并确认连接记录里是否确实有域名信息。
- 例外规则被忽略:检查上方是否存在更宽泛的 DOMAIN-SUFFIX、DOMAIN-KEYWORD 或提前出现的 FINAL。
- 修改后仍是旧结果:确认保存的是当前配置,再建立新连接;浏览器复用中的连接可能继续沿用既有路径。
- 隔一段时间恢复原样:核对配置是否来自远程更新。订阅中的代理列表与 Config 中的规则配置不是同一层内容,不应默认更新代理列表就会更新规则。
七、常见问题:域名、协议与订阅的边界
写了 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 和多条规则更容易定位原因。本文以用户已有自己的服务与订阅为前提,本站不提供、不销售、不推荐节点或订阅;客户端获取与线路服务是两件不同的事。