自定义规则生效的前提是启用正确的配置,并将 Global Routing 设为 Config。本文适合已经导入自己已有服务器资料、准备调整分流的用户:先区分路由姿态与规则策略,再按“具体例外在前、宽泛匹配在后、FINAL 最后”的顺序编写规则,最后用新连接核对实际结果。示例域名均用于说明语法,不是服务地址。
一、先检查 Global Routing,再判断规则有没有生效
Shadowrocket(小火箭)的服务器选择、配置文件和全局路由是不同层次的设置。Home 中选好服务器,不代表请求一定经过代理;Config 中保存了规则,也不代表当前路由姿态正在使用这些规则。排查时先进入 Home → Global Routing,核对当前选项。
需要按本文的规则分流时,使用 Config(按配置路由)。Proxy(代理)与 Direct(直连)适合做对照检查,不应拿它们的连接结果来判断某一条配置规则是否命中。Scene(场景)用于场景化路由;正在使用 Scene 时,还需核对当前场景的设置,不能直接假定它等同于本文的 Config 测试条件。
Config:按配置分流
推荐根据当前启用的配置决定请求采用哪种策略。本文所有规则顺序与 FINAL 示例,都以这一姿态为前提。
适合:日常分流、验证自定义规则
Proxy:全局代理
让纳入客户端处理的连接走代理,用于检查已有服务器是否可以承载目标连接,而不是检验分流列表的先后顺序。
适合:临时对照、区分代理连接问题与规则问题
Direct:全局直连
让纳入客户端处理的连接直接访问目标。此时网页可以打开,不能据此推断配置中的 PROXY 规则已经生效。
适合:检查本地网络的直接访问情况
二、规则从上到下执行,不按“更具体”自动排序
规则列表是有顺序的判断流程,不是会自动比较精确程度的集合。一条请求命中前面的规则后,就不会再用后面的普通规则重新选择策略。因此,“完整域名比后缀更精确”只是编排规则时的依据,并不是应用自动替你调整优先级的承诺。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在这个示例中,目标为 api.example.com 的请求先命中第一行,采用 DIRECT;www.example.com 不符合第一行,但符合第二行,采用 PROXY;不符合这两条条件的请求才交给 FINAL。这里的 [Rule] 是文本配置的规则段标题,不是需要重复添加到每条规则前面的内容。
三、DOMAIN-SUFFIX、IP-CIDR 与 GEOIP 分别匹配什么
普通条件规则通常写成“规则类型,匹配内容,策略”,使用英文半角逗号分隔。域名位置只放主机名,不放 https://、路径或查询参数。例如访问地址中的 /account 不是 DOMAIN-SUFFIX 的匹配对象;这类规则也不等同于网页内容过滤。
| 关键字 | 可用写法 | 匹配含义 |
|---|---|---|
DOMAIN | DOMAIN,api.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 地址段判断;示例覆盖 192.168.0.0 至 192.168.255.255。 |
GEOIP | GEOIP,CN,DIRECT | 根据目标 IP 的地理归属数据库判断,不按网页语言或域名后缀判断。 |
FINAL | FINAL,PROXY | 不填写匹配内容,接住前面规则未匹配的请求。 |
no-resolve 是附加选项,不是策略名称。用于 IP 规则时,它表示不为了这条匹配主动把域名解析成 IP;如果请求本身就是 IP 目标,仍可以进行地址段判断。因此,带有该选项的 IP 规则没有命中某个域名请求,并不能直接说明地址段写错了。
- 完整域名的例外放在相关的 DOMAIN-SUFFIX 前面,例如先处理
api.example.com,再处理整个example.com。 - 局域网地址段按实际网络填写。
192.168.0.0/16不是所有家庭或办公网络的通用替代值;网络也可能使用其他私有地址段。 - GEOIP 依赖数据库与目标 IP。使用分布式服务的域名可能解析到不同地区,不能只凭网站名称判断它必然命中
GEOIP,CN。 - 检查文本配置时使用英文标点;
FINAL,PROXY与使用中文逗号的文本不是同一种语法。
四、PROXY、DIRECT、REJECT 与 FINAL 的组合方式
PROXY(代理)表示把匹配请求交给代理路径;DIRECT(直连)表示直接连接目标;REJECT(拒绝)表示阻止匹配请求。规则中的 PROXY 不会创建服务器,也不会提供连接凭据。使用它之前,用户需要已经导入自己的服务器或订阅,并确认对应代理路径可用。本站不提供、不销售、不推荐节点、订阅或服务商。
FINAL 负责兜底,不代表“所有请求强制采用这一策略”。只有前面的规则没有命中时,它才生效。需要未匹配请求走代理,就写 FINAL,PROXY;需要未匹配请求直连,就写 FINAL,DIRECT。二者是不同的分流取舍,不存在对所有网络都正确的固定答案。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,DIRECT
这段配置演示四种结果:指定 API 直连、指定子域范围拒绝、其余示例域名走代理、未匹配请求直连。blocked.example.com 的 REJECT 必须放在整个 example.com 的代理规则前,否则会被更早的后缀匹配接住。这是教学用的最小规则段,不是可以覆盖所有业务的完整配置。
- 为什么不在末尾同时写两个 FINAL?
- 前一条 FINAL 已经接住剩余请求,后一条不能成为第二次选择。代理失败也不意味着请求会继续向下尝试另一条 FINAL;需要故障处理时,应检查代理或策略组设置,而不是增加重复兜底。
五、在 Config 修改规则,并用新连接验证
先备份当前配置,再修改一组能明确观察结果的规则。以下路径以移动端的 Home / Config 界面为参照;编辑入口的呈现可能随平台不同而变化,核对重点始终是“正在编辑哪个文件、哪个文件正在启用、Global Routing 使用哪种姿态”。不要把服务器订阅更新与规则文件编辑混为一项操作。
-
备份配置
进入 Config,确认当前启用的配置文件,先保存副本或导出备份。远程配置再次下载可能覆盖本地修改,测试前应保留可恢复的版本。
-
编辑规则
从 Config 中该文件的编辑入口进入规则编辑页;使用纯文本编辑时定位到
[Rule]。把具体例外放在宽泛规则之前,检查列表末尾的 FINAL,不要在已有规则段内重复粘贴段标题。 -
核对姿态
保存并确认该配置处于启用状态,返回 Home → Global Routing → Config。Home 中同时确认已选中自己可用的服务器,再开启连接。
-
重新发起
关闭原有测试页面或应用连接,再重新访问自己有权测试的目标。已有长连接可能继续沿用之前的路径,不能只刷新一个仍在复用连接的页面就认定修改无效。
-
核对记录
打开连接记录,按目标主机名或 IP 找到刚产生的请求,核对实际策略与可见的规则信息。一次只改一处顺序,并记录修改前后的结果,避免多个变量同时变化。
例如,为自己控制的测试域名临时添加一条精确的 REJECT 规则并置于相关后缀规则之前,新连接应受到拒绝;恢复为 DIRECT 后,再检查直接连接是否成功。这个过程需要以连接记录为依据:网页缓存可能让被拒绝的页面仍显示旧内容,页面上的第三方资源也可能使用完全不同的域名。
六、自定义规则常见问题与排查顺序
规则已经保存,为什么还是走代理?
先检查 Home → Global Routing 是否仍为 Proxy,再回到 Config 确认编辑的文件就是当前启用的文件。两项无误后,从规则顶部查找是否已有更早的后缀规则、地址段规则或其他匹配接住了请求。不要只检查刚新增的那一行。
把 FINAL 改成 DIRECT 后,为什么部分网站仍走 PROXY?
FINAL 只处理未匹配请求。查看目标是否已命中前面的 DOMAIN 或 DOMAIN-SUFFIX;若需要对单个域名直连,把完整域名的 DIRECT 例外放到相关宽泛规则之前。修改后重新建立连接再检查。
用了 REJECT,为什么页面还有部分内容?
先排除缓存与既有连接,再查看实际发起请求的主机名。一个页面可能同时使用主站、图片、接口和静态资源域名;拒绝其中一个域名不会自动覆盖所有相关域名。按记录添加必要规则,不要直接把整片地址段全部拒绝。
更新订阅后,为什么结果变了?
区分更新对象:服务器订阅更新可能改变服务器条目和当前选择;远程配置更新可能改变规则正文。回到 Home 核对所选服务器,再到 Config 核对启用文件及规则顺序。先对照备份确认变化,不要把所有问题都归因于 FINAL。
规则命中了 PROXY,但连接还是失败怎么办?
命中只说明路由选择完成,不保证远端连接成功。核对已有服务器参数、当前网络和目标服务状态,并临时用 Global Routing → Proxy 做同一目标的对照测试。若两种姿态都失败,应先检查连接路径,而不是继续增加重复规则。
最后按固定顺序复核:先看路由姿态,再看启用配置,然后看第一条命中规则,最后检查代理或目标的连接情况。这样能把“规则没有被使用”“规则顺序不对”和“策略正确但连接失败”分成三类,避免反复修改同一条 FINAL。