Shadowrocket(小火箭)的 Rule 不是按“最精确”自动排序,而是按配置顺序匹配。本文适合已有自己的服务商与连接配置、准备调整分流的用户:先确认 Global Routing 使用 Config,再区分域名规则与 IP 规则,最后把 FINAL 放在末尾。读完可写出一组可解释、可逐条验证的规则,并区分“没有命中”和“命中后连接失败”。
先确认规则生效条件
先检查 Home 中的 Global Routing,再编辑 Config。使用 Config 时,请求按当前启用的配置文件分流;Proxy 与 Direct 是不同的全局处理姿态,不能用它们验证自定义 Rule 是否生效。Scene 按已设置的场景处理,也不等同于固定使用某一份 Config。排查期间先固定到 Config,避免场景变化干扰判断。
- 在 Home 确认已有可用的连接配置,并打开连接开关;首次建立系统 VPN 配置时按系统提示授权。
- 进入 Config,确认当前启用的文件。编辑前保留副本,避免把远程文件的更新结果与本地修改混在一起。
- 回到 Home,将 Global Routing 设为 Config;保存修改后,按界面提示重新载入或重建连接。
- 关闭待测试应用的旧连接,再发起新请求。已经建立的长连接通常不会因为改了一行规则而立即换路。
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
- 直接访问 IP:访问 192.168.1.20 时,有明确的目标地址,可以用网段规则判定;协议端口是 80 还是 443,不改变这条网段规则的覆盖范围。
- 通过域名访问:IP 类规则可能涉及域名解析。
no-resolve表示不为了该条 IP 规则主动触发域名解析,并不表示屏蔽所有 DNS,也不表示已知 IP 无法匹配。 - IPv6 请求:不能用 IPv4 的 IP-CIDR 覆盖 IPv6 地址。排查时要记录实际目标地址族,不能只因 IPv4 网段写对就认定所有请求都会命中。
- 局域网例外:如果全局代理影响本地设备访问,可把明确的本地网段规则放到宽泛策略前面;只加入自己的网络确实需要的范围。
不要仅凭“网站属于某个地区”推断 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
- 先放具体例外。API 单域名规则在同站后缀规则之前,保证例外可达。
- 再放域名范围。先决定已知站点的出口,再处理 IP 范围,可以减少地理归属变化对指定站点的影响。
- 安排地址规则。本地网段与 GEOIP 之间同样有顺序关系;若规则范围交叠,应把需要优先执行的条件放前面。
- 最后保留兜底。将 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 属于连接协议层,域名规则负责选择策略。先确认原有策略仍指向有效条目,再按自己的服务参数检查协议连接。
保存前逐项核对
可靠的分流配置应能回答三个问题:这条规则匹配什么、为什么放在这里、命中后使用哪个策略。先维护少量明确规则,再逐步扩展,比一次加入大量无法解释的关键词更容易排错。本站仅说明客户端配置操作,不提供、不销售、不推荐节点或订阅服务。
- 类型、逗号与策略名使用正确的英文写法;域名字段没有协议头、路径或端口。
- DOMAIN 例外位于覆盖它的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD 之前。
- IP-CIDR 的地址族与网段正确;已理解 no-resolve 不会替代 DNS 配置。
- FINAL 位于末尾,且清楚未分类请求会执行 DIRECT 还是 PROXY。
- 当前启用的是修改后的 Config,Global Routing 使用 Config,并已用新连接验证结果。