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 是文档示例值,不能据此验证实际服务是否可达。
DIRECT:直接连接目标,仍受当前网络条件影响。PROXY:交由代理策略处理;使用前核对当前配置中的策略引用及 Home 中的可用选择。REJECT:拒绝命中的连接,不表示删除网页中的某个元素。- 自定义策略名称必须与配置中的定义一致;拼错名称与匹配条件写错是两类问题。
FINAL 没有匹配值,所以写成 FINAL,PROXY,不能照三段格式补成 FINAL,example.com,PROXY。示例中的 no-resolve 则是 IP 规则的附加参数,不是第四种策略。
DOMAIN 系列:精确、后缀与包含
域名规则优先解决“这个名称应走哪条策略”。三类规则的差别在匹配边界,不在优先级。下面以同一个域名为例;表中“命中”指匹配条件成立,实际是否轮到该行,还取决于前面有没有规则先命中。
| 规则示例 | 能够匹配 | 不能匹配 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | www.example.com |
DOMAIN-SUFFIX,example.com,DIRECT | example.com、www.example.com | notexample.com、example.com.other.test |
DOMAIN-KEYWORD,example,DIRECT | example.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 会先接管这个地址。
no-resolve表示不为该条 IP 规则主动触发域名解析;它不是“关闭全部 DNS”。- 请求本身以 IP 为目标,或匹配时已经有可用目标 IP,仍可能命中带
no-resolve的规则。 - 只有域名、尚无可用 IP 时,不应期待这条规则为了匹配而额外解析;请求可能继续检查后续规则。
- 同一服务的地址可能变化。不要把一次解析得到的 IP 当成永久不变的配置依据。
命中顺序:具体例外在前,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 中已有订阅,不能代替检查当前启用的规则。
-
保留原配置
进入 Config,先保留可恢复的配置副本,再打开目标配置的编辑入口。定位
[Rule],确认准备修改的是规则区段。 -
添加单条规则
先加一条范围明确的
DOMAIN规则,并放在可能覆盖它的后缀或关键词规则之前。每次只改变一个条件,保存修改。 -
启用规则配置
在 Config 确认选中刚保存的配置,再到 Home → Global Routing → Config。Proxy 与 Direct 是全局姿态,不能用来验证这里的逐条规则分流。
-
发起新连接
重新打开目标页面或重新发起应用请求,检查连接记录中的目标、命中规则和策略。已有长连接可能继续复用,不能只看修改前已打开的页面。
-
核对命中结果
如果记录命中其他规则,先查该规则的位置;若命中预期规则却连接失败,再查出站连接。完成验证后再逐条增加其他条件。
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 设置说明,避免把解析问题与规则范围混在一起。