小火箭只让指定网站走代理:DOMAIN-SUFFIX 加 FINAL,DIRECT 的分流写法

用 DOMAIN-SUFFIX、DOMAIN-KEYWORD 列出需要走 PROXY 的站点,其余流量交给 FINAL,DIRECT,并说明规则顺序与验证方法。

本文速览

Shadowrocket(小火箭)可以通过“指定域名使用 PROXY,其余请求使用 DIRECT”的配置实现按站点分流。本文适合已经有自己的订阅、能够正常连接,但不希望所有网站都走代理的用户。操作重点是启用 Global Routing → Config、把目标域名规则放在前面,并以 FINAL,DIRECT 收尾;验证时需要同时检查匹配规则、最终策略与网页依赖域名。

一、先确认 Config 模式与已有连接

规则决定的是请求采用哪一种策略,并不创建可用的代理连接。开始前,先在 Home 确认自己已有的订阅已经导入,选中的服务器能够连接。本文不提供、不销售、不推荐节点或订阅;示例只演示本地规则结构,不包含可连接的服务地址。

在 Home → Global Routing 中选择 Config,才会按照当前配置中的规则进行分流。Proxy 是整体使用代理的姿态,Direct 是整体直连的姿态,都不适合用来检查本文的按域名分流。Scene 用于场景选择,不作为本次最小验证的入口,避免场景切换干扰判断。

客户端购买与线路使用是两件事:客户端买断 ≠ 线路套餐。Shadowrocket 是闭源商业应用,只在 Apple 平台发行,唯一获取入口为 App Store;iPhone、iPad 及其他兼容设备的系统要求,以 App Store 页面标注为准。

二、最小规则:指定域名在前,FINAL,DIRECT 在后

下面的代码属于配置文件的 [Rule] 段,不是完整配置文件。example.com 和 example.net 是示例域名,应替换成实际需要分流的域名。不要把整段代码贴进订阅地址栏,也不要直接用它覆盖包含 DNS、策略组等设置的完整配置。

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

DOMAIN-SUFFIX,example.com,PROXY 匹配 example.com 本身及其子域名,例如 www.example.com、api.example.com。填写时只写域名,不带 https://、端口、路径或查询参数。它不会因为文字相似而匹配 notexample.com。

FINAL,DIRECT 表示前面的规则都未命中时采用 DIRECT。规则按顺序检查,先命中的规则决定策略,因此 FINAL 应位于规则末尾。若前面仍有覆盖范围更大的 PROXY 规则,那么这些请求不会再落到 FINAL;只修改最后一行,不能保证实现“其余全部直连”。

先备份完整配置

在 Config 保存原配置副本,再修改工作副本。已有配置含有多个规则段、规则集引用或复杂策略时,先检查它们的顺序与用途。不要为了得到三行示例而直接删除自己仍需使用的其他设置。

三、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD 的选择

已知目标网站的主域名时,优先使用 DOMAIN-SUFFIX。DOMAIN-KEYWORD 是域名字符串的关键字匹配,范围通常更宽,不是“网站名称识别”。例如用 example 作为关键字,可能把包含同一字符串、但属于其他主体的域名也送到 PROXY。

规则匹配范围适用情况
DOMAIN,api.example.com,PROXY仅指定的完整域名只调整一个接口域名
DOMAIN-SUFFIX,example.com,PROXY主域名及其子域名同一域名体系整体分流
DOMAIN-KEYWORD,example,PROXY域名中包含指定字符串已核对范围的关键字规则

如果确实需要关键字规则,可以在 FINAL 之前增加下面一行。不要同时添加很多未经核对的关键字,否则普通网站也可能命中 PROXY,排查时很难判断是哪一条规则扩大了范围。

DOMAIN-KEYWORD,example,PROXY

规则不能根据完整网页路径来区分同一域名下的页面。访问 https://example.com/news 与 https://example.com/account 时,DOMAIN-SUFFIX 看到的目标域名相同;不能把带路径的 URL 填进这条规则,期待它只代理其中一个页面。

四、在 Config 中按五步应用规则

修改过程中保持变量最少:保留同一台设备、同一个网络、同一个已选服务器,一次只修改一组规则。订阅中服务器列表的更新与本地规则文件的编辑不是同一件事,刷新订阅不等于启用了刚修改的 Config。

  1. 备份配置

    进入 Config,找到当前使用的配置并保存副本。记下原来选中的文件,确保发生异常时可以切回原配置。

  2. 编辑规则

    打开工作副本的编辑入口,定位 [Rule] 段。把目标 DOMAIN-SUFFIX 规则放在会与它冲突的宽泛规则之前;只需要局部直连例外时,把更精确的 DOMAIN,DIRECT 规则放得更靠前。

  3. 检查收尾

    确认规则末尾为 FINAL,DIRECT,并检查前面是否残留覆盖所有请求或过宽范围的 PROXY 规则。保存后,在 Config 中启用这个工作副本。

  4. 选择模式

    返回 Home → Global Routing → Config,确认所选服务器可用,再开启连接。不要停在 Proxy 或 Direct 模式测试规则是否生效。

  5. 重新验证

    关闭旧网页连接并重新发起访问;必要时重新建立 Shadowrocket 连接。在连接记录中核对目标域名、命中规则及最终策略,再测试一个未列入规则的网站。

五、验证分流:看请求,不只看网页结果

一个页面通常会请求多个域名:页面主体、图片、脚本、登录接口和媒体资源未必共用主域名。主页面命中 PROXY,并不代表所有依赖请求都命中同一条规则。出现页面能打开但图片缺失的情况,应先观察失败资源对应的实际域名,而不是立即把 Global Routing 改成 Proxy 长期使用。

请求产生 隧道接收 规则匹配 策略选择 连接目标

这个流程说明两件事:VPN 标识出现,只能说明系统隧道处于工作状态,不能证明每个请求都经由代理服务器;DIRECT 请求也可能先进入隧道,再由 Shadowrocket 按规则直连目标。不要把“连接开关已开启”当成“所有网站都走代理”的证据。

域名规则还依赖请求中可获得的域名信息。对于应用直接连接 IP、缓存了地址或采用特殊解析方式的请求,不能假定一定会命中 DOMAIN-SUFFIX。需要按 IP 分流时,应单独核对 IP-CIDR 的网段范围与顺序;GEOIP 匹配的是 IP 地址的地理位置,不能据此判断网站运营方的所在地。

六、打不开时:区分解析、连接与规则问题

下列是浏览器可能显示的网络错误原文,不是 Shadowrocket 固定弹窗;不同浏览器的显示方式可能不同。先确认失败发生在哪一步,再决定是否修改规则。超时不自动等于规则错误,解析失败也不自动等于服务器不可用。

ERR_NAME_NOT_RESOLVED

原因:浏览器未能完成目标域名解析,可能涉及域名拼写或当前 DNS 路径。

解法:先核对域名,再检查 Config 中现有 DNS 设置与连接记录;不要用添加更多 DOMAIN-SUFFIX 的方式代替解析排查。

ERR_CONNECTION_TIMED_OUT

原因:目标连接在等待时间内没有完成,可能涉及直连路径、所选服务器或目标站点。

解法:先核对该请求实际命中的策略,再分别检查对应出站路径;若已经命中 PROXY,优先确认 Home 所选服务器的连通性。

如果所有网站都走 PROXY,先检查 Global Routing 是否仍为 Proxy,再检查目标规则前面是否有更宽的匹配项。如果所有网站都直连,先确认当前模式为 Config、工作副本确已启用,并检查域名是否填写成了带协议或路径的 URL。

规则名与策略目标分别核对

PROXY 表示选择代理策略,不是某个协议名称。若原配置使用自定义策略组,应确认规则末列引用的名称存在,并核对组内实际选中的出站。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 等连接协议的配置,不由 DOMAIN-SUFFIX 这一行修改。

七、指定网站分流的常见问题

我只想让一个子域名走代理,怎么写?

在 [Rule] 中使用 DOMAIN,api.example.com,PROXY,并保留末尾的 FINAL,DIRECT。若前面有覆盖该域名的 DIRECT 规则,应把这条精确规则移动到它之前;不需要为此添加整个主域名的 DOMAIN-SUFFIX。

整个站走代理,但一个接口要直连呢?

先写 DOMAIN,api.example.com,DIRECT,下一行再写 DOMAIN-SUFFIX,example.com,PROXY。更精确的例外在前,较宽的域名规则在后,最后才是 FINAL,DIRECT。

更新订阅后,还要重新写规则吗?

先区分更新的是 Home 中的服务器订阅,还是 Config 中的远程配置。前者通常更新服务器列表,后者可能改变配置内容;更新远程配置前保留本地副本,更新后重新检查 [Rule]、当前启用文件和策略组名称,不要假定手工修改一定被保留。

FINAL,DIRECT 能保证其他请求都直连吗?

它只处理已经进入当前规则流程、且未被前面规则命中的请求。先在 Home → Global Routing 选择 Config,再检查此前所有规则及引用内容。它不是对整台设备所有网络行为的独立保证,也不会规定 DNS 查询必须采用哪一种路径。

最终保留一份能解释每条规则用途的配置:目标域名清单在前,必要的精确例外更靠前,FINAL,DIRECT 在最后。每次新增域名后完成一次目标测试和一次直连对照测试,比反复切换全局模式更容易确认真正生效的分流结果。

App Store 正版核验