本文速览

本文适合已经在 Shadowrocket(小火箭)中完成基本连接、希望缩小代理范围的用户。核心做法是把 Global Routing 设为 Config,在规则顶部写入指定网站的域名条件,并用 FINAL,DIRECT 接住所有未匹配流量;完成后再通过临时规则、请求现象和规则顺序逐项验证。

先确认 Config 模式如何处理一次请求

Shadowrocket 的规则分流只在 Global Routing 采用 Config 时按 Config 中的 Rule 顺序执行。若当前姿态是 Proxy,流量会统一交给代理策略;若是 Direct,流量会直接连接;Scene 则按场景条件选择姿态。要实现「只有部分网站走代理」,应先在 Home 检查 Global Routing,并选择 Config。

规则引擎采用从上到下、首次命中即停止的处理方式。一个请求命中第一条适用规则后,后面的 DOMAIN-SUFFIX、GEOIP 或 FINAL 不再参与判断。因此,范围窄的例外规则应放在范围宽的规则前面,兜底规则必须留在末尾。

应用发起请求进入系统隧道读取目标信息顺序匹配规则选择出站策略
1 次
首次命中后停止继续匹配
4 姿态
Global Routing:Config / Proxy / Direct / Scene
2 层
域名规则与目标 IP 规则
80 / 443
常见 HTTP 与 HTTPS 端口

规则匹配的输入不只有域名

DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP 与 FINAL 的区别

这四类规则的覆盖范围并不相同。只让指定网站走代理时,通常以 DOMAIN 或 DOMAIN-SUFFIX 为主,DOMAIN-KEYWORD 只用于域名结构不稳定但具有明确固定片段的情况。GEOIP 根据目标 IP 的地域数据库分类,FINAL 则不检查域名或地址,直接处理剩余请求。

规则中的最后一项是策略。PROXY 表示交给代理策略,DIRECT 表示直接连接,REJECT 表示拒绝请求。若 Config 使用自定义策略组名称,规则末尾必须填写 Config 中真实存在且拼写完全一致的名称。策略名称不一致时,规则即使匹配成功,也无法得到预期出站结果。

规则关键字 匹配对象 适合场景 注意事项
DOMAIN 完整域名 只处理一个明确主机名 不会自动包含其子域名
DOMAIN-SUFFIX 域名后缀 同时覆盖主域名及其子域名 不要把范围写得过宽
DOMAIN-KEYWORD 域名中的字符串 匹配包含固定关键字的多个域名 可能误中不相关域名
GEOIP 解析后的目标 IP 按地址所属地域分类 结果依赖 IP 与本地数据库判断
IP-CIDR IPv4 地址范围 处理固定地址段 地址变化后需要同步调整
FINAL 全部剩余请求 定义默认出站路径 必须置于规则末尾

同一域名的宽规则与窄规则

[Rule]
DOMAIN,static.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

上例先把 static.example.com 指定为 DIRECT,再让 example.com 及其其他子域名使用 PROXY。如果把第二行放在第一行前面,静态域名会先命中 DOMAIN-SUFFIX,后面的 DOMAIN 例外便不会执行。

结论:先写例外,再写范围,最后写兜底

检查规则顺序时,可按「完整域名 → 域名后缀 → 宽泛关键字 → IP 分类 → FINAL」整理;实际需要不同顺序时,也必须确保窄条件位于会覆盖它的宽条件之前。

可直接改写的「指定网站代理,其余直连」Config

下面示例使用保留示例域名,不对应实际服务。编辑前先复制当前 Config 作为备份,然后进入 Config,打开正在使用的本地配置并编辑 Rule 区段。若配置来自用户自己的订阅,后续更新可能覆盖手工改动,更稳妥的做法是保留一份独立本地 Config,并明确记录自定义规则。

示例中的 PROXY 需要对应当前 Config 可用的代理策略。规则只决定请求交给哪个策略,并不改变已有配置采用的协议。无论现有连接使用 Shadowsocks、VMess、VLESS、Trojan、Hysteria2 或 WireGuard,DOMAIN-SUFFIX 的首次命中逻辑都相同。

[Rule]
DOMAIN,login.example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
DOMAIN-KEYWORD,media-example,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT
  1. 替换完整域名:login.example.com 改为只需单独处理的主机名。DOMAIN 必须写完整主机名,不要附加 https://、端口、斜杠或页面路径。
  2. 替换域名后缀:example.net 改为目标网站的主域名。DOMAIN-SUFFIX 会覆盖该域名本身及其下级子域名。
  3. 谨慎保留关键字:只有确认多个目标域名共享唯一片段时,才使用 DOMAIN-KEYWORD。若没有此需求,可以删除该行。
  4. 确认默认路径:FINAL,DIRECT 是「其余流量直连」的关键。若误写为 FINAL,PROXY,未匹配请求也会进入代理策略。
  5. 保存并应用:返回 Config,确认刚编辑的配置处于选中状态;再到 Home 将 Global Routing 切换为 Config,重新建立连接。

需要固定 IP 例外时

[Rule]
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
DOMAIN-SUFFIX,example.net,PROXY
FINAL,DIRECT

192.0.2.0/24 是文档示例地址段。no-resolve 表示该 IP 规则不为匹配而额外触发域名解析,适合目标已经以 IP 形式出现的情况。不要根据一次解析结果就长期写死网站地址段,因为使用分布式网络的网站可能随地区、时间和网络条件返回不同地址。

如何验证规则确实只影响指定网站

保存成功不等于规则已经按预期工作。验证时应把「Config 是否启用」「目标域名是否完整」「规则是否被更早条目截获」「网站是否调用其他域名」分开检查。一次只改一个变量,才能判断现象由哪条规则引起。

  1. 确认姿态:在 Home 查看 Global Routing,确保当前为 Config,而不是 Proxy、Direct 或由 Scene 临时切换出的其他姿态。
  2. 确认配置:进入 Config,检查带有新规则的本地配置是否处于选中状态。编辑了未启用的副本不会改变当前流量。
  3. 先测普通网站:打开一个没有写入规则的站点。由于末行是 FINAL,DIRECT,它应继续按直接连接路径处理。
  4. 再测目标网站:打开已写入 DOMAIN-SUFFIX 的站点。如果主页可以打开但图片、登录或视频失败,通常说明页面还调用了其他域名。
  5. 补充依赖域名:根据 Shadowrocket 中可观察到的请求主机名,逐条添加确有需要的 DOMAIN 或 DOMAIN-SUFFIX,不要直接扩大为含义模糊的关键字。
  6. 复测例外:同时测试目标网站、普通网站和系统常用网络功能,确认新规则没有被放到 FINAL 后面,也没有覆盖无关域名。

用临时 REJECT 判断域名是否命中

当无法确认一个域名是否真正参与页面加载时,可以短暂把该域名的策略改为 REJECT。若对应资源立即停止加载,说明域名和规则位置有效;验证结束后应立即恢复为 PROXY 或 DIRECT。此方法用于定位规则,不适合作为长期配置。

[Rule]
DOMAIN-SUFFIX,assets.example.net,REJECT
FINAL,DIRECT

报错:Failed to load config

原因与解法:常见原因是 Rule 行缺少逗号、区段标题拼写不完整,或策略字段为空。回到 Config 检查每行是否保持「规则关键字,匹配值,策略」结构,并确认 [Rule] 独占一行后重新载入。

报错:Policy not found

原因与解法:规则末尾填写的策略名称在当前 Config 中不存在,或大小写与实际名称不一致。检查现有策略名称并逐字替换,不要沿用其他配置中的自定义名称。

常见偏差与进一步收窄方法

一个网站通常不只使用一个域名。主页面、静态资源、登录接口和媒体资源可能分别位于不同主机名下,因此只写主域名后出现「页面框架打开但内容缺失」并不表示 Shadowrocket 忽略了规则,而是未覆盖页面依赖的其他请求。

另一方面,DOMAIN-KEYWORD 虽然省事,但覆盖面难以从字面准确判断。例如关键字出现在多个无关域名中时,它们都会命中相同策略。长期配置应优先使用 DOMAIN 或 DOMAIN-SUFFIX,并把 DOMAIN-KEYWORD 作为经过验证的补充。

已经写了 DOMAIN-SUFFIX,为什么整个网站仍不能完整加载?

先记录失败资源对应的主机名。若登录、图片或媒体来自其他域名,需要分别补充 DOMAIN 或 DOMAIN-SUFFIX;不要把 URL 路径写进规则,因为域名规则不会匹配路径。

为什么所有网站都进入了代理策略?

先在 Home 检查 Global Routing 是否误设为 Proxy,再检查 Rule 末行是否为 FINAL,DIRECT。如果 FINAL 使用 PROXY,所有未提前命中的请求都会进入代理策略。

为什么规则改完后没有任何变化?

进入 Config 确认编辑的是当前选中的配置,然后返回 Home 选择 Config 姿态并重新建立连接。还要检查目标规则是否位于 FINAL 之前,以及前面是否已有更宽规则提前命中。

订阅更新后手工规则消失怎么办?

订阅内容更新时可能重写对应配置。修改前保留本地副本,并记录自定义 Rule;更新后对照副本恢复必要条目。订阅有效性与内容应向用户自己的服务商确认。

需要为 80 和 443 端口各写一条域名规则吗?

不需要。DOMAIN、DOMAIN-SUFFIX 和 DOMAIN-KEYWORD 匹配主机名,不按端口拆分。同一域名使用 80、443 或其他端口时,仍由同一条域名规则决定策略。

稳定配置的检查顺序