小火箭规则写法入门:DOMAIN-SUFFIX、GEOIP、IP-CIDR 与 FINAL 的匹配范围

逐个说明 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、FINAL 分别匹配什么,并解释规则自上而下的命中顺序。

本文速览

Shadowrocket(小火箭)的规则应先看匹配对象,再看排列顺序,最后核对命中后的策略。本文适合已经持有自己的服务商配置或订阅、准备修改 Config 的用户;读完可区分域名规则与 IP 规则,写出最小规则段,并按连接记录定位“规则没有生效”的原因。本站不提供、不销售、不推荐节点或订阅。

规则格式:类型、匹配值与策略

常见规则由英文逗号分隔,形如 DOMAIN-SUFFIX,example.com,DIRECT。第一段决定检查什么,第二段给出匹配条件,第三段决定命中后如何处理连接。规则不是网页 URL 过滤器:域名字段不写 https://、路径、查询参数或端口。

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

这是解释语法的示例段,不是适用于所有网络的完整配置。[Rule] 是规则区段;修改已有配置时,应编辑原有区段,不要再追加一个重复区段。example.com 与 192.0.2.0/24 是文档示例值,不能据此验证实际服务是否可达。

FINAL 没有匹配值,所以写成 FINAL,PROXY,不能照三段格式补成 FINAL,example.com,PROXY。示例中的 no-resolve 则是 IP 规则的附加参数,不是第四种策略。

DOMAIN 系列:精确、后缀与包含

域名规则优先解决“这个名称应走哪条策略”。三类规则的差别在匹配边界,不在优先级。下面以同一个域名为例;表中“命中”指匹配条件成立,实际是否轮到该行,还取决于前面有没有规则先命中。

规则示例能够匹配不能匹配
DOMAIN,example.com,DIRECTexample.comwww.example.com
DOMAIN-SUFFIX,example.com,DIRECTexample.com、www.example.comnotexample.com、example.com.other.test
DOMAIN-KEYWORD,example,DIRECTexample.com、notexample.com域名中没有 example 的目标

DOMAIN-SUFFIX 按域名标签边界判断,不是“末尾字符相同就算”。通常直接填写 example.com,不必加 *.。如果只要处理 api.example.com,而不希望影响其他子域名,使用 DOMAIN 更容易检查范围。

应用可能同时访问主站、登录、图片与接口等多个域名。只给主站增加一条规则,不能据此推断其他请求也会命中。应按连接记录逐项确认,而不是不断扩大关键词范围。

GEOIP 与 IP-CIDR:地址归属和地址范围

GEOIP,CN,DIRECT 检查目标 IP 在所用地理数据库中的地区归属。它不按网页语言、域名后缀、用户所在位置或服务商注册地判断。域名可能解析到不同地区的地址,因此“中文网站必定命中 CN”不是可靠的排错依据。

IP-CIDR 按 IPv4 地址与前缀长度判断范围。例如 192.0.2.0/24 覆盖 192.0.2.0 到 192.0.2.255;192.0.2.8/32 只匹配一个地址。IPv6 地址范围应使用对应的 IP-CIDR6,不要把 IPv6 地址填入 IPv4 示例。

IP-CIDR,192.0.2.8/32,DIRECT,no-resolve
IP-CIDR,192.0.2.0/24,PROXY,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

上例把单地址例外放在较大的地址段前面:目标是 192.0.2.8 时,第一行已经命中,第二行不再改变结果。若交换两行,较宽的 /24 会先接管这个地址。

命中顺序:具体例外在前,FINAL 在后

规则按顺序检查,第一条命中规则决定该连接的策略,不会再由下方“看起来更精确”的规则覆盖。DOMAIN 不会自动排在 DOMAIN-SUFFIX 之前,IP-CIDR 也不会因为范围小就自动获得优先权。

发起连接取得目标信息顺序匹配确定策略执行连接
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

在这个顺序下,login.example.com 走 DIRECT,img.example.com 走 PROXY,不满足前两行条件的目标交给 FINAL。如果把后缀规则放到第一行,登录域名也会先命中它,精确域名例外便失去作用。

建议先写少量明确的例外,再放较宽的域名或地址范围,最后保留一条可解释的 FINAL。这是一种便于维护的排列方法,不代表所有配置都必须按规则类型机械分组。

在 Config 修改并验证规则

测试前先保留原配置,确认当前活动配置与正在编辑的文件是同一个。订阅中服务器条目的更新,与 Config 中规则文件的修改不是同一件事;刷新 Home 中已有订阅,不能代替检查当前启用的规则。

  1. 保留原配置

    进入 Config,先保留可恢复的配置副本,再打开目标配置的编辑入口。定位 [Rule],确认准备修改的是规则区段。

  2. 添加单条规则

    先加一条范围明确的 DOMAIN 规则,并放在可能覆盖它的后缀或关键词规则之前。每次只改变一个条件,保存修改。

  3. 启用规则配置

    在 Config 确认选中刚保存的配置,再到 Home → Global Routing → Config。Proxy 与 Direct 是全局姿态,不能用来验证这里的逐条规则分流。

  4. 发起新连接

    重新打开目标页面或重新发起应用请求,检查连接记录中的目标、命中规则和策略。已有长连接可能继续复用,不能只看修改前已打开的页面。

  5. 核对命中结果

    如果记录命中其他规则,先查该规则的位置;若命中预期规则却连接失败,再查出站连接。完成验证后再逐条增加其他条件。

Global Routing 中的 Scene 应结合场景配置检查当前实际采用的策略;初次验证时可明确切到 Config,减少变量。Settings → On Demand 处理按条件建立 VPN 连接的行为,不改变 DOMAIN-SUFFIX 的匹配范围,也不能替代选择活动配置。

测试应以新连接的记录为准,而不是只凭页面能否打开判断。页面缓存可能让失败看起来像成功,后台接口失败也可能让主页面可见却无法完成登录。

规则未生效与连接失败要分开排查

“命中了哪条规则”和“命中后有没有连通”是两个问题。以下是网络连接中可能出现的错误原文示例,不是规则语法报错;只有先确认命中的规则与策略,才适合继续检查这些连接错误。

报错: Connection refused

原因与解法:连接端点拒绝了请求,常见于地址、端口或监听服务不符;先核对连接记录中实际连接的端点,再按自己已有配置核对端口与服务状态,不要把修改 DOMAIN-SUFFIX 当成修复端口的方法。

报错: Operation timed out

原因与解法:操作在期限内没有完成,可能涉及网络路径、目标或代理连接;先确认命中策略,再分别检查目标访问与已有代理连接,不能仅凭这句错误断定 GEOIP 数据或规则顺序有问题。

写了 DOMAIN,为什么子域名没跟着走?

DOMAIN 只匹配填写的完整域名。需要同时覆盖主域名及其子域名时,改用 DOMAIN-SUFFIX,example.com,DIRECT,并确认上方没有先命中的其他规则。

FINAL 写在最前面会怎样?

它会接管到达该行的请求,后续规则无法发挥预期作用。把兜底行移到规则区段最后,再发起新连接,检查命中记录。

带 no-resolve 的 IP-CIDR 为什么没命中?

先看这次请求有没有可用的目标 IP,再核对地址是否落在前缀范围内。若仅有域名且没有可用 IP,这条规则不会为匹配主动解析;不要直接把未命中理解为前缀语法错误。

REJECT 命中了,为什么页面还有同类内容?

REJECT 拒绝的是匹配到的连接,不按页面内容分类。先检查内容是否来自另一个域名或本地缓存;同一域名同时承载必要接口时,扩大拒绝范围还可能影响正常功能。

最后按固定顺序复核:活动 Config、Global Routing 姿态、请求目标、第一条命中规则、最终策略、实际连接结果。关于关键字可继续查看规则关键字术语;涉及解析行为时,参照DNS 设置说明,避免把解析问题与规则范围混在一起。

App Store 正版核验