小火箭只让部分网站走代理:DOMAIN-SUFFIX 规则写法示例

以「默认直连、指定站点走代理」为场景,逐行讲解 DOMAIN-SUFFIX、DOMAIN-KEYWORD、IP-CIDR 与 FINAL 的书写顺序,附一段可直接修改使用的 Config 片段。

本文速览

本文适合已在 Shadowrocket(小火箭)中添加自己已有服务、希望仅让指定网站使用代理的用户。操作核心是将 Global Routing 设为 Config,在当前配置的 [Rule] 中先写指定站点规则,再用 FINAL,DIRECT 处理剩余连接。下文提供规则片段、编辑步骤及验证方法,并说明域名、IP 与 DNS 的边界。

一、先确认 Global Routing 使用 Config

连接开关与分流模式是两件事:开启连接只是让流量进入系统 VPN 隧道,并不表示每条连接都会使用代理。要实现「默认直连、指定站点走代理」,应在 Home → Global Routing 中选择 Config,并确认 Config 中启用的是准备修改的配置文件。

本文以已有可用代理服务为前提。规则中的 PROXY 是处理策略,不是服务器地址,也不会自动生成可用服务;应先在 Home 选择可用服务器,并检查现有配置是否包含会影响选择的策略组。

设置项作用本文如何选择
Proxy按全局代理模式处理连接,而不是依照本文的域名白名单分流。不用于验证本文规则。
Direct按全局直连模式处理连接。不会因为写了指定域名规则就自动改走代理。
Config按当前启用配置中的规则选择处理策略。本文使用此项。
Scene按已设置的场景决定相应行为。先固定为 Config,避免把场景切换与规则修改混在一起。

Settings → On Demand 管理按需连接条件,不负责指定某个网站使用 DIRECT 还是 PROXY。排查时应把「隧道是否连接」与「连接匹配哪条规则」分别检查,不要通过反复切换 On Demand 来修正域名规则。

二、规则从上到下匹配,FINAL 放在末尾

在本文的基本规则场景中,一条连接命中前面的规则后,就采用该规则指定的策略;后面的规则不会再覆盖这个结果。因此,应把精确的例外写在宽泛的规则之前,把处理剩余连接的 FINAL 放在最后。

应用请求 系统隧道 规则匹配 策略选择 出站连接

DOMAIN-SUFFIX 的匹配对象是域名,不是网址全文。应填写 example.com,而不是 https://example.com/video。同一个域名下的不同路径不能靠这条规则区分;/video、查询参数和网页标题也不是该规则的匹配对象。

三、可修改使用的 Config 片段

下面只展示 [Rule] 段,不是完整的服务配置。域名与网段均用于说明语法;其中 203.0.113.0/24 是文档示例网段,不应拿来验证真实服务。实际使用时,替换成需要分流的真实域名或已确认的目标网段,并删除不需要的行。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
DOMAIN-KEYWORD,example-media,PROXY
IP-CIDR,203.0.113.0/24,PROXY,no-resolve
FINAL,DIRECT

第一行规则为 api.example.com 保留直连例外;随后两条后缀规则让两个指定站点及其子域名使用 PROXY。关键词规则仅用于展示写法,如果已掌握完整域名,通常优先使用 DOMAIN 或 DOMAIN-SUFFIX,减少误匹配。最后的 IP 规则补充已知网段,FINAL 则使其他连接默认直连。

  1. 备份配置

    进入 Config,打开当前启用的配置,先保留原文件副本或导出备份。远程配置应另存为可编辑的本地副本,避免后续更新覆盖本地修改。

  2. 编辑规则

    在 Config 中打开该本地文件的编辑功能,找到现有 [Rule] 段。将需要的规则合并到该段,不要重复追加第二个 [Rule],并检查原有 FINAL 的位置。

  3. 检查策略

    确认 DIRECT、PROXY 拼写正确;若保留原文件中的自定义策略组名称,应确认对应组仍存在。本文片段按通用 PROXY 策略说明,不要求新建同名服务器。

  4. 启用配置

    保存后在 Config 中选择修改后的文件,再到 Home → Global Routing 选择 Config。仅保存文件而未启用它,不会改变当前连接使用的规则。

  5. 重建连接

    断开再重新开启 Home 的连接开关,然后重新发起网页请求。已有的长连接可能继续沿用原出站,需要关闭相应页面或应用后再试。

如果原配置还包含 GEOIP,CN,DIRECT,它表示按目标 IP 的地区信息选择 DIRECT,不依据网页内容或域名后缀判断。在本文默认直连的场景中,这条规则通常不是必需项;若决定保留,应放在明确的站点代理规则之后、FINAL 之前,防止提前命中。

四、用连接记录验证,不只看网页是否打开

网页能打开,只能说明这次请求有响应,不能证明它采用了哪条策略。应结合连接记录中的目标域名、目标 IP、命中规则与处理策略验证。记录入口和字段显示可能随界面有所不同,核对的重点是同一条新建连接的实际结果。

测试对象预期命中预期策略
api.example.com最前面的 DOMAIN 例外DIRECT
www.example.comDOMAIN-SUFFIXPROXY
static.example.netDOMAIN-SUFFIXPROXY
未匹配任何前置规则的实际站点FINALDIRECT

表中是规则推导出的预期结果,不是这些示例域名的连通性测试。实际验证时,用已经替换进配置的真实站点测试。每次只改一条规则,重新建立连接后记录结果;这样才能分辨是规则顺序、配置未启用,还是服务本身不可达。

五、超时与解析错误分别排查

规则选中 PROXY 后,仍然可能因 DNS、服务器连接或目标服务状态而失败。下面列出系统网络错误中常见的原文标识;只有实际日志出现相应内容时,才按该方向排查。它们不是「规则写错」的专属错误,也不能单凭错误码判断哪一端故障。

NSURLErrorDomain Code=-1001

原因与解法:请求超时,可能发生在连接或等待响应阶段。先核对这条连接实际使用 DIRECT 还是 PROXY,再用同一代理访问其他已知可用的目标,区分单站点问题与代理通路问题。

NSURLErrorDomain Code=-1003

原因与解法:无法找到主机,通常需要检查域名及解析结果。先核对真实访问域名是否拼写正确,再检查当前配置 [General] 中的 dns-server 设置;修改前保留原值,不要用新增 FINAL 规则代替 DNS 排查。

域名规则表达的是「识别到这个域名后采用什么策略」,并不保证所有 DNS 查询都经由同一代理。DNS 的来源、解析路径和出站连接是相关但不同的设置。对于带 no-resolve 的 IP-CIDR 规则,也不能假定每个域名请求都会先被解析,再与该网段比较。

六、部分网站分流的常见问题

只添加一条 DOMAIN-SUFFIX 就够了吗?

还要检查 Global Routing 是否为 Config,以及当前配置末尾的 FINAL 是否为 DIRECT。如果原文件保留 FINAL,PROXY,未匹配的其他连接仍会使用 PROXY,不能实现本文的默认直连目标。

能不能用 *.example.com 匹配子域名?

在 DOMAIN-SUFFIX 中直接填写 example.com,不加星号、不加协议头,也不带路径。该写法已经覆盖根域名及其子域名;若只想匹配一个主机,改用 DOMAIN。

为什么更新后规则变回原样?

先确认更新的是 Home 中的服务订阅,还是 Config 中的远程配置。远程配置重新获取时可能覆盖文件内容;将自定义分流保存在独立本地配置中,并在更新后重新确认当前启用文件。

换成 Hysteria2 或 WireGuard 要重写域名吗?

协议负责代理连接方式,DOMAIN-SUFFIX 负责匹配目标,二者不是同一层设置。更换服务时先确认新服务可用、规则引用的策略有效,再用同一组站点复测,不需要仅因协议名称改变而改写域名。

指定网站代理以后,其他应用也会受影响吗?

本文按连接目标分流,不按应用名称分流。其他应用只要访问同一匹配域名,也可能使用 PROXY;同一个应用访问未匹配的域名,则会落到 FINAL,DIRECT。应按实际连接记录判断。

App Store 下载先核对正版信息