Shadowrocket(小火箭)的规则先判断请求是否符合条件,再决定交给哪种策略处理。本文适合已具备自己的服务资料、准备编辑 Config 的用户:先认清六类关键字,再按“具体例外在前、宽泛匹配在后、FINAL 最后”的顺序组织规则,最后用新建连接核对结果。示例只说明语法与匹配范围,不提供服务资料。
1. 规则格式:匹配类型、匹配内容、处理策略
常见规则写在配置文件的 [Rule] 段。除 FINAL 等特殊形式外,一行通常由“关键字、匹配内容、策略”构成,字段用英文逗号分隔。域名匹配内容只填主机名,不填协议前缀、网页路径或端口。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
这里的 DIRECT 表示直接连接,PROXY 表示交给代理策略,REJECT 表示拒绝匹配的请求。规则只决定处理方向,不会创建服务器,也不会补齐认证资料。使用 PROXY 前,应在 Home 核对自己已有的服务器及其可用性;若使用自定义策略组,规则末尾的名称必须与配置中的定义一致。
结论:先把匹配对象写对
只处理一个主机名时先用 DOMAIN;确实需要覆盖整个域及其子域时,再扩大为 DOMAIN-SUFFIX,不要从宽泛的关键词匹配开始。
2. DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD 的边界
这三类规则都针对域名,但范围不同。DOMAIN 是完整主机名匹配;DOMAIN-SUFFIX 匹配指定域本身及其子域;DOMAIN-KEYWORD 则检查域名中是否包含指定字符串。它们不是网页地址过滤器,不能按 /video/ 这样的路径区分同一主机上的页面。
| 规则示例 | 会匹配 | 不会匹配或需注意 |
|---|---|---|
DOMAIN,example.com,PROXY | example.com | 不包含 www.example.com |
DOMAIN-SUFFIX,example.com,PROXY | example.com、www.example.com、a.b.example.com | 不匹配 notexample.com |
DOMAIN-KEYWORD,example,PROXY | example.com、myexample.net | 可能覆盖与目标网站无关的域名 |
例如只让登录接口直连、同域其他请求走代理,可以把 DOMAIN,account.example.com,DIRECT 放在 DOMAIN-SUFFIX,example.com,PROXY 前面。这里依赖的是排列顺序,而不是“完整域名天然拥有更高优先级”。
- 不要写成
DOMAIN,https://example.com,PROXY:匹配值应为example.com。 - 不要用
*.example.com代替后缀规则:需要整个域时,直接使用DOMAIN-SUFFIX,example.com,PROXY。 - 网页可能同时访问主站、图片域、接口域;主站命中不代表其所有资源都会走同一策略。
3. GEOIP 与 IP-CIDR:按目标 IP 归属与地址段匹配
GEOIP 根据目标 IP 在地理数据库中的归属进行匹配。例如 GEOIP,CN,DIRECT 表示把数据库判定归属为 CN 的目标地址交给 DIRECT。它不是按网页语言、域名后缀或服务器运营者所在地进行判断,数据库记录也不等同于实时物理位置。
IP-CIDR 按 IPv4 地址段匹配。192.168.1.0/24 覆盖 192.168.1.0 到 192.168.1.255,适用于规则范围说明;实际局域网中哪些地址能作为设备地址,还受网络配置约束。IPv6 地址段应使用 IP-CIDR6,不能把 IPv6 地址直接放进 IPv4 示例。
[Rule]
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
/32表示一个 IPv4 地址,/24表示 256 个地址;前缀越长,范围越小。no-resolve是可选参数:匹配该 IP 规则时不主动为域名触发解析,并不表示关闭整个应用的 DNS。- 若请求只有域名、没有可用目标 IP,带
no-resolve的 IP 规则可能无法命中;已有目标 IP 的请求仍可参与判断。 - 局域网直连规则应按自己的实际网段填写,不能因为示例用了
192.168.1.0/24就认为所有家庭网络都相同。
域名规则和 IP 规则混用时,应先写明确的域名例外,再放较宽的 IP 归属规则。这样可以避免某个目标因解析地址的归属而提前进入另一条策略。访问同一个域名时,DNS 返回的地址可能变化,因此 GEOIP 的结果也可能随目标地址变化。
4. 自上而下、命中即停:FINAL 为什么放在最后
在普通线性规则列表中,请求按排列顺序接受匹配,命中一条后就采用该条策略,不会继续向下寻找“更精确”的规则。FINAL 不再要求域名或地址条件,它接收此前没有命中的请求,所以必须放在规则列表末尾。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
- 访问
account.example.com:第一行命中,使用 DIRECT,后面的后缀规则不再参与。 - 访问
images.example.com:第一行不匹配,第二行命中,使用 PROXY。 - 访问目标地址
192.168.1.20:匹配局域网地址段,使用 DIRECT。 - 其他请求:先接受 GEOIP 判断;仍未匹配的,最终使用 FINAL 指定的 DIRECT。
如果把后缀规则放在完整域名例外前面,account.example.com 就会提前走 PROXY。如果把 FINAL,DIRECT 放在最前面,后续规则便没有机会处理普通请求。要实现“只代理指定网站”,可用域名规则列出目标,再以 FINAL,DIRECT 收尾;要让其余请求走代理,则需要明确改为 FINAL,PROXY,两者影响范围不同。
5. 在 Config 中编辑,并让新连接使用规则
规则写入文件不等于该文件已经生效。需要同时确认当前选中的配置,以及 Home 中的 Global Routing。按配置文件分流时选择 Config;Proxy 与 Direct 不用于按本文规则列表逐项验证,Scene 则涉及场景选择,不适合拿来隔离一次基础规则测试。
-
保留原配置
进入 Config,先保留当前文件的副本或原始文本。确认要编辑的是当前使用的文件,而不是另一份同名配置。
-
编辑规则段
在 Config 点选目标文件,进入 Edit Plain Text,找到
[Rule]。把具体例外放前面,并只在末尾保留需要的 FINAL 兜底;保留文件中其他必要配置段。 -
保存并选用
保存修改并回到 Config,确认选中刚编辑的文件。远程配置再次更新可能覆盖本地修改,测试前应保留自己添加的规则文本。
-
核对模式
回到 Home → Global Routing → Config,再核对自己的代理服务器。订阅更新负责更新已有服务资料,不代表会替你写好或启用本地规则。
-
验证新连接
保存后重新建立连接,再发起目标请求。检查连接记录中的目标主机、目标 IP 和实际策略,不要仅凭页面是否打开来判断规则是否命中。
验证时一次只改一个条件。例如先让一个完整域名走 DIRECT,确认结果后再扩大为 DOMAIN-SUFFIX。浏览器缓存、已有长连接和网站的其他资源域名都可能影响观察;重新请求必须确实产生网络连接,缓存页面本身不能证明新规则已被使用。
6. 规则不生效与网络报错:分开定位
“网页打不开”不是规则语法错误的专属表现。应先看请求实际选择了什么策略,再看 DNS 与连接过程。下面列出的是 Apple 网络层可能返回的英文错误描述;应用或系统可能以本地化文字展示,不能要求每次都在 Shadowrocket 中看到完全相同的提示。
报错:The request timed out.
原因与解法:请求在限定时间内没有完成,可能涉及目标不可达或选中服务器的连通性;先核对连接记录中的 DIRECT 或 PROXY,再分别检查对应路径,不要直接扩大规则范围。
报错:A server with the specified hostname could not be found.
原因与解法:目标主机名未能成功解析;先核对域名拼写与当前配置的 DNS 设置,恢复解析后,再判断 GEOIP 或 IP-CIDR 是否具备匹配所需的目标地址。
| 观察到的现象 | 优先检查 | 下一步 |
|---|---|---|
| 所有请求都走同一策略 | Global Routing 是否为 Config;FINAL 是否误放顶部 | 修正模式或顺序,再建立新连接 |
| 主站符合预期,图片不符合 | 图片请求是否使用另一个主机名 | 按连接记录补充实际资源域名,不盲目使用关键词 |
| 完整域名例外没有命中 | 前面是否已有更宽的 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD | 把具体例外移到宽泛规则之前 |
| IP 规则在域名请求上没有命中 | 目标 IP 是否可用,是否使用 no-resolve | 区分 DNS 解析问题与规则条件不成立 |
结论:用一条新请求核对三项
每次修改后记录“目标主机、实际策略、对应规则顺序”。只有确认请求进入了预期策略,才继续排查该路径的连接问题;不要把连通性失败与规则未命中混为一谈。