本文适合已经在 Shadowrocket(小火箭)中导入自己已有配置、准备调整分流规则的用户。先确认 Global Routing 使用 Config,再区分域名条件与 IP 条件,最后按“具体例外在前、较宽范围在后、FINAL 收尾”排列规则。下文示例用于解释语法,不包含可用连接参数;测试时应替换为自己有权访问的目标。
先确认规则的生效条件
规则决定一条连接采用哪种策略,不负责创建服务器,也不决定服务器本身是否可用。Home 用于选择服务器与管理连接,Config 用于管理配置文件,Settings 用于应用设置。编辑某份文件之后,还需要确认它是当前选中的配置;仅保存一份未启用的文件,不会改变正在使用的规则。
在 Home → Global Routing 中,选择 Config 才能按当前配置进行本文讨论的分流。Proxy 是整体使用代理的姿态,Direct 是整体直接连接的姿态;Scene 则应结合已设置的场景条件核对,不能仅凭菜单中出现 Scene 就认为某份规则已生效。排错时先固定为 Config,减少场景切换带来的变量。
结论:先固定生效配置
测试前记录当前配置名称与 Global Routing 的选择;若这两项不确定,先不要增加规则,否则无法判断变化来自文件切换还是匹配条件。
规则写法与策略名称
在配置文本的 [Rule] 段中,一条普通条件规则通常使用英文逗号分隔三项:规则类型、匹配值、策略。不要把网页地址整体填入域名字段:域名条件不包含 https://、路径、查询参数或端口。下面两行分别表示“指定域名直接连接”和“其余连接使用代理”。
[Rule]
DOMAIN,example.com,DIRECT
FINAL,PROXY
| 字段或策略 | 含义 | 核对重点 |
|---|---|---|
DOMAIN | 规则类型,按完整域名匹配。 | 不是协议类型,也不是服务器名称。 |
example.com | 该行使用的匹配值。 | 不能写成带路径的网页地址。 |
DIRECT | 直接连接目标。 | 连接仍受当前网络、DNS 与目标可达性影响。 |
PROXY | 使用代理策略。 | 核对 Home 中当前选择的默认服务器。 |
REJECT | 拒绝匹配的连接。 | 命中后访问失败可能就是规则的预期结果。 |
如果已有配置使用了自定义策略组名称,规则末尾必须引用配置中实际存在的名称。初学测试先用 DIRECT 与 PROXY,不要在同一次修改中同时新增策略组、调整 DNS 和重排规则。本文示例是片段,已有配置包含 [Rule] 时,应编辑原段落,而不是反复追加同名段落。
三种域名条件怎么区分
DOMAIN 适合单个主机例外;DOMAIN-SUFFIX 适合一个域名及其子域名;DOMAIN-KEYWORD 按域名中是否包含指定字符串匹配。三者匹配的是域名信息,不是网页标题、页面内容,也不是 URL 路径。
| 示例规则 | 会匹配 | 不会匹配 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | api.example.com |
DOMAIN-SUFFIX,example.com,DIRECT | example.com、api.example.com | notexample.com、example.com.test |
DOMAIN-KEYWORD,example,DIRECT | api.example.com、notexample.com | example.org 之外、不含该字符串的域名,例如 sample.test |
选择 DOMAIN-SUFFIX 时直接写 example.com,不需要添加 *.。它按域名边界识别后缀,并非简单的字符串尾部比较。相比之下,DOMAIN-KEYWORD,example,DIRECT 的范围明显更宽,可能覆盖与目标站点没有关系的域名;仅希望匹配一个站点家族时,优先使用明确的后缀条件。
- 同一个域名的
/news与/account路径,不能靠上述三种条件分开。 - 访问
example.com:443时,域名字段仍写example.com,不要附加:443。 - 直接访问 IP 地址时,不要期待域名规则必然命中;应检查请求是否具有可供匹配的域名信息。
GEOIP 与 IP-CIDR 匹配什么
GEOIP 根据目标 IP 在地理数据库中的归属进行判断。比如 GEOIP,CN,DIRECT 表示把数据库识别为 CN 的目标 IP 交给 DIRECT。它不根据域名后缀、网页语言、公司注册地判断,也不能保证某个域名的所有解析结果都属于同一区域。
IP-CIDR 则直接描述 IPv4 地址范围。斜杠后是前缀长度:/32 表示单个 IPv4 地址,/24 覆盖 256 个地址。下面使用专门用于文档示例的地址段说明语法,这些地址不是可用服务地址。
IP-CIDR,192.0.2.7/32,DIRECT
IP-CIDR,198.51.100.0/24,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY
192.0.2.7/32只覆盖192.0.2.7,不包含192.0.2.8。198.51.100.0/24的地址范围是198.51.100.0至198.51.100.255。- IPv6 范围应使用相应的
IP-CIDR6类型,不能把 IPv6 地址直接当成 IPv4 的IP-CIDR示例套用。 - 域名请求是否需要解析后再判断 IP 条件,与配置中的解析行为有关。解析失败与规则未命中是两个不同问题。
部分 IP 条件可带 no-resolve,例如 IP-CIDR,192.0.2.0/24,DIRECT,no-resolve。其作用是避免仅为了评估这条规则而触发域名解析,并不表示全局关闭 DNS;如果当时没有可用的目标 IP,就不能指望这条规则通过解析域名来命中。排查时先保留原配置的相关选项,不要批量添加或删除。
按顺序匹配,FINAL 放最后
对于本文这些普通规则,按从上到下的顺序检查,命中后采用该行策略,不会因为后面出现了“更精确”的条件就自动改选。因此,类型名称不构成优先级:DOMAIN 不会天然压过排在它前面的 DOMAIN-SUFFIX。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
- 请求
api.example.com时,第一行已经命中,使用 PROXY。 - 请求
www.example.com时,第一行不匹配,第二行命中,使用 DIRECT。 - 目标 IP 为
192.0.2.8且前面的域名规则未命中时,示例网段规则可命中。 - 其他连接继续检查 GEOIP;仍未命中时,由
FINAL,PROXY收尾。
如果交换前两行,api.example.com 会先命中后缀规则,原本希望保留的单域名例外就失效了。同理,FINAL 是无条件兜底,应位于规则末尾;放在它后面的普通规则没有机会改变已经确定的结果。不要用增加第二条 FINAL 的方式修复前面的顺序错误。
结论:先写例外,再写范围
需要让某个子域名采用不同策略时,把它的 DOMAIN 条件放到相关 DOMAIN-SUFFIX 前面;保存后分别测试该子域名和另一个普通子域名,确认两条路径确实分开。
修改与验证按五步执行
以下流程以用户已经拥有自己的服务器或订阅、能够完成基础连接为前提。规则文件与 Home 中的服务器列表用途不同:更新服务器信息,不等于正在编辑的规则文件已经切换;同样,修改分流也不能修复失效的连接凭据。
-
备份配置
进入 Config,先保留当前配置副本,记录正在使用的文件名称。涉及远程配置时,确认后续更新是否会覆盖本地修改。
-
确认姿态
在 Home → Global Routing 选择 Config,并确认 Config 中选中的正是待测试文件;同时核对 Home 中默认服务器的选择。
-
只改一项
在 Config 中打开目标配置的编辑入口,进入文本编辑,定位
[Rule],仅增加一条已知目标的 DOMAIN 规则,或只调整一处顺序,保存修改。 -
重建连接
保存后重新建立 VPN 连接,并让测试应用发起新请求。已有长连接可能继续沿用原路径,反复刷新同一个页面不一定产生新的连接。
-
对照结果
结合连接记录中可见的目标、策略与错误信息,核对实际结果。Connectivity Test 可辅助检查基础连通性,但不能单独证明某个网站命中了哪条规则。
命中正确却访问失败怎么排查
规则命中只说明选择了某条路径,并不保证该路径能够成功到达目标。检查时先看“是否选对策略”,再看“选中的路径是否可用”。以下是连接诊断中可能遇到的系统错误原文,不是规则解析器的固定报错;出现位置与完整描述可能随连接类型而不同。
报错:Connection refused
原因:连接被目标或中间设备主动拒绝,可能与服务未监听或端口填写错误有关,不能据此认定 DOMAIN 语法有误。
解法:先核对记录中的实际连接目标;若走 PROXY,检查自己已有服务器的地址与端口;若走 DIRECT,检查目标服务是否允许访问该端口。
报错:Operation timed out
原因:连接在等待期限内没有完成,可能发生在服务器不可达、目标无响应或网络丢弃数据时,单凭超时不能判断是哪条规则造成。
解法:先核对最终策略,再用同一网络测试基础连通性;保持配置不变逐项检查,避免同时切换 DNS、服务器与规则顺序。
没有报错,但策略不符合预期
- 所有请求都走同一路径:回到 Home → Global Routing,确认不是 Proxy 或 Direct,并核对正在使用的配置。
- 单域名例外失效:查看它之前是否已有更宽的 DOMAIN-SUFFIX、DOMAIN-KEYWORD 或 FINAL 提前命中。
- IP 规则没有命中:检查实际目标是否是 IPv6、解析结果是否已变化,以及该规则是否使用了
no-resolve。 - 一个页面出现多种策略:页面可能同时连接主站、图片与接口等多个域名,应逐条核对请求,而不是把整页视为一条连接。
- 保存后表现没变:检查修改文件是否已选中,并重新建立测试连接;不要把旧连接的结果当作新规则的验证结果。
完成测试后,把临时规则删除或改为明确需要的范围,再保存备份。可复查的最小记录应包含目标域名、实际目标 IP、预期策略、实际策略以及错误原文;凭这些信息,才能区分匹配边界、规则顺序与网络连通性三类问题。