本文适合已经在 Shadowrocket(小火箭)中导入自有连接参数、准备修改分流规则的用户。先确认 Home → Global Routing 使用 Config,再在当前生效配置的 [Rule] 段安排精确例外、范围规则和 FINAL。读完可按命中记录区分规则顺序错误、策略选择错误与连接本身故障,不必依靠反复更换配置试错。
一、先确认 Global Routing:规则何时参与判断
写入规则不等于规则已经参与连接处理。Shadowrocket 的 Home 用于管理连接与全局路由姿态,Config 用于管理配置文件,Settings 用于调整应用设置。要验证本文的自定义规则,应先在 Home → Global Routing 选择 Config,并确认 Config 中选中的文件就是刚刚修改的文件。
Config
推荐按当前配置中的规则选择策略。某条请求可能走 PROXY,也可能走 DIRECT 或 REJECT,不能把 Config 理解成固定的“其余直连”。
适合:日常分流、自定义规则验证
Proxy
将代理作为全局路由方向,不按本文的逐条规则决定分流。可短时用于对照连接结果,但不能用它验证某条 DOMAIN-SUFFIX 是否命中。
适合:对照检查代理连接是否可用
Direct
使用直接连接的全局路由方向。即使配置里有 PROXY 规则,也不能期待它在此姿态下按配置分流。
适合:对照检查直接连接的结果
Global Routing 中的 Scene 用于场景化选择,不应与某一条规则的策略字段混为一谈。排查时先固定为 Config,可减少场景切换带来的变量。Settings → On Demand 控制按条件发起连接,也不负责决定某个域名命中 PROXY 还是 DIRECT;自动发起连接与连接建立后的分流是两件事。
二、从上往下匹配:精确例外必须先于范围规则
规则列表不是“越精确就自动优先”的集合,而是一段有顺序的判断过程。Shadowrocket 从顶部向下检查,第一条满足条件的规则决定策略,后面的规则不再为这次匹配补充或覆盖结果。只在下方添加一条更精确的规则,不能修正上方已经发生的命中。
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
这段规则里,account.example.com 先命中 DOMAIN,因此使用 DIRECT;media.example.com 没有命中第一行,接着命中 DOMAIN-SUFFIX,因此使用 PROXY。若将前两条交换,account 这个例外就会被覆盖范围更大的后缀规则提前接住。这里的 example.com 仅用于语法说明,不代表可用的代理服务。
整理规则时可按“必须拦截的精确目标、必须保留的精确例外、较宽的域名范围、地址范围、兜底”检查,但这不是不可变的模板。如果某个域名必须优先直连,就应明确把该例外放到会覆盖它的规则之前。真正需要验证的是规则覆盖关系,而不是单纯按关键字名称排序。
三、DOMAIN-SUFFIX、IP-CIDR 与 GEOIP 怎么写
域名规则判断请求的主机名,地址规则判断目标 IP。两者可能描述同一项服务,却使用不同的匹配依据。不要把域名直接填入 IP-CIDR,也不要把完整网页地址连同协议、路径和查询参数填进 DOMAIN-SUFFIX。
| 关键字 | 语法示例 | 判断范围与注意事项 |
|---|---|---|
DOMAIN | DOMAIN,account.example.com,DIRECT | 匹配完整域名;不自动包含其他子域名。 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | 匹配 example.com 本身及其子域名;不写通配符星号。 |
IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 匹配 IPv4 网段;掩码长度是地址范围的一部分。 |
GEOIP | GEOIP,CN,DIRECT | 按目标 IP 的地理数据库分类;不是按网页语言或域名后缀分类。 |
FINAL | FINAL,PROXY | 不填写匹配目标;接住前面没有命中的请求。 |
192.168.0.0/16 表示从 192.168.0.0 到 192.168.255.255 的地址范围,并非单台设备。若只需匹配某一台 IPv4 设备,可以使用相应地址的 /32 规则。局域网直连规则能避免把符合条件的本地目标交给代理,但设备是否可达仍取决于当前网络、系统权限及目标服务本身。
GEOIP 的结果依赖实际目标地址和数据库内容。一个以 .com 结尾的域名可能解析到不同地区的地址,同一域名在不同网络中也可能使用不同的内容分发地址。如果需求是“这个域名固定使用某个策略”,优先采用清晰的域名规则,不要用对 GEOIP 结果的猜测代替明确条件。
四、PROXY、DIRECT、REJECT 与 FINAL 的关系
关键字负责“匹配什么”,策略字段负责“匹配后怎么处理”。例如 DOMAIN-SUFFIX,example.com,PROXY 的前两段确定匹配范围,最后一段才决定处理方式。FINAL 则是特殊的兜底匹配规则,它不是第四种连接策略。
- PROXY:交给代理路径处理。仍需用户已有的有效连接参数,以及可用的代理选择;规则本身不会生成服务。
- DIRECT:直接连接目标。它不是“优先直连,失败再自动改用代理”的承诺,连接失败也不会因此继续匹配下一条规则。
- REJECT:拒绝匹配的请求。适合明确要阻止的目标;若误用于登录、验证或资源域名,可能造成页面功能不完整。
- FINAL:为未命中其他规则的请求指定策略,例如
FINAL,DIRECT或FINAL,PROXY。
FINAL 应放在规则列表末尾,因为它没有域名或地址条件,会接住到达此处的剩余请求。将它放在顶部,会使后面的具体规则失去匹配机会。常规规则列表保留一个清晰的 FINAL 即可,不要通过堆叠多个 FINAL 试图实现故障转移。
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
上例表达的是一组教学用决策:拒绝指定主机、保留登录例外、将其余 example.com 请求交给代理,再处理局域网与 GEOIP 条件,最后把剩余请求交给 PROXY。它不是适用于所有网络的通用配置。若希望未列出的目标直接连接,应将最后一行改为 FINAL,DIRECT,并接受未列入代理规则的目标也会直接连接这一结果。
五、修改当前 Config:备份、保存与重新验证
开始前应已有自己的服务商与连接参数,并确认所选连接能够使用。客户端买断 ≠ 线路套餐;本站不提供、不销售、不推荐节点或订阅。规则修改只改变已有连接的选择逻辑,不会解决凭据过期、服务端不可达等基础问题。
-
备份当前配置
进入 Config,确认当前选中的配置文件,先保留副本或导出备份。记录原有 [Rule] 内容与 FINAL 策略,避免修改失败后只能重新整理规则。
-
固定路由姿态
进入 Home → Global Routing → Config。记下当前使用的代理选择;测试过程中先不要同时修改 Settings → On Demand 或切换网络。
-
编辑规则内容
回到 Config,打开当前配置的编辑入口,定位 [Rule]。将精确例外放到会覆盖它的范围规则之前;在现有段落中修改,不要重复追加第二个 [Rule] 段。
-
保存并选用
保存修改,确认 Config 中仍选用这份文件。若编辑的是副本,先切换到副本,再回 Home 检查连接状态,避免只改了未生效的文件。
-
发起新请求
重新建立测试连接,分别检查精确例外、范围规则与兜底目标。必要时在保存工作后断开并重连,减少旧连接复用对判断的干扰。
订阅导入与 Config 管理不是同一个动作。更新已有服务器订阅主要涉及连接条目;更新远程配置则可能替换规则内容。若本地改动随后消失,应核对更新的是哪一种对象。需要长期维护的自定义规则,应保存在可控的本地配置副本中,并在每次采用远程配置更新后重新核对差异。
六、验证命中结果:先看规则,再看网页
网页打开与否只能说明一次访问的结果,不能单独证明规则是否正确。一个页面通常会连接多个域名,主页面可能直连,而图片、验证接口或媒体资源走了其他策略。排查时应在连接记录中寻找具体的目标主机、命中规则及最终策略,而不是只看页面标题或加载速度。
| 验证对象 | 按上文示例的预期 | 不符合时先检查 |
|---|---|---|
account.example.com | 命中 DOMAIN,使用 DIRECT | 精确规则是否位于 DOMAIN-SUFFIX 之前 |
media.example.com | 命中 DOMAIN-SUFFIX,使用 PROXY | 是否选中修改后的 Config,是否有更早的覆盖规则 |
192.168.1.20 | 命中局域网 IP-CIDR,使用 DIRECT | 网段掩码、规则顺序以及实际目标 IP |
| 前面均未命中的目标 | 命中 FINAL,使用 PROXY | FINAL 策略,以及前面是否已出现其他命中 |
表中的域名用于推演,不是实际可访问的测试服务。实际验证时,请用自己有权访问的目标替换示例,并按同样的覆盖关系建立预期。每次只修改一个变量:先调整顺序,再验证;不要同时改 DNS、代理协议、FINAL 和网络环境,否则很难确定是哪项变动造成结果变化。
七、常见问题:规则存在却没有按预期生效
加了 DIRECT,为什么还是走 PROXY?
先检查 Home → Global Routing 是否为 Config,再确认 Config 中选中的是刚修改的文件。然后从 [Rule] 顶部寻找先命中的规则;若 DOMAIN-SUFFIX 在精确 DOMAIN 之前,将例外上移并保存,重新发起连接验证。
FINAL,PROXY 会在代理失败后自动直连吗?
不会。FINAL 负责匹配未被前面接住的请求,PROXY 指定处理方向;代理连接失败不会让规则引擎回头改成 DIRECT。应检查所选连接的可用性,或按自己的访问需求明确修改策略。
写了 REJECT,为什么页面还显示旧内容?
已有页面缓存不等于产生了新请求。先确认目标主机是否与规则完全一致,再重新加载并查看新连接记录;页面也可能改用其他域名。不要仅凭旧页面仍可见,就判断 REJECT 没有生效。
写成 IP-CIDR 后,域名访问怎么没命中?
先核对实际目标 IP 是否属于该网段。若附带 no-resolve,不会仅为这条规则主动解析域名。需要固定某个域名的策略时,直接增加 DOMAIN 或 DOMAIN-SUFFIX,并放到可能覆盖它的规则之前。
同一规则昨天有效,更新后却变了?
检查 Config 当前选中的文件、远程配置更新后的 [Rule] 内容,以及 Home → Global Routing 是否改变。若规则未变,再检查目标域名、解析地址和连接记录;采用 GEOIP 或 IP-CIDR 时,地址变化本身就可能改变命中结果。
最终应保留一份可解释的规则列表:每个精确例外都有用途,每个范围规则都清楚覆盖边界,FINAL 明确表达剩余流量的去向。规则越多并不一定越准确;能够从目标请求逐行推导出命中位置,才便于后续维护与故障定位。协议参数的详细说明可继续查看技术参考,连接与设置问题可查看疑难解答。