Shadowrocket(小火箭)可以通过“指定域名使用 PROXY,其余请求使用 DIRECT”的配置实现按站点分流。本文适合已经有自己的订阅、能够正常连接,但不希望所有网站都走代理的用户。操作重点是启用 Global Routing → Config、把目标域名规则放在前面,并以 FINAL,DIRECT 收尾;验证时需要同时检查匹配规则、最终策略与网页依赖域名。
一、先确认 Config 模式与已有连接
规则决定的是请求采用哪一种策略,并不创建可用的代理连接。开始前,先在 Home 确认自己已有的订阅已经导入,选中的服务器能够连接。本文不提供、不销售、不推荐节点或订阅;示例只演示本地规则结构,不包含可连接的服务地址。
在 Home → Global Routing 中选择 Config,才会按照当前配置中的规则进行分流。Proxy 是整体使用代理的姿态,Direct 是整体直连的姿态,都不适合用来检查本文的按域名分流。Scene 用于场景选择,不作为本次最小验证的入口,避免场景切换干扰判断。
- Home:确认所选服务器与连接开关,再进入 Global Routing 选择 Config。
- Config:确认当前启用的是准备编辑的配置,而不是仅保存了另一个同名文件。
- Settings → On Demand:记录当前设置。On Demand 影响自动建立连接的条件,不负责把某个域名指定为 PROXY。
客户端购买与线路使用是两件事:客户端买断 ≠ 线路套餐。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。
-
备份配置
进入 Config,找到当前使用的配置并保存副本。记下原来选中的文件,确保发生异常时可以切回原配置。
-
编辑规则
打开工作副本的编辑入口,定位 [Rule] 段。把目标 DOMAIN-SUFFIX 规则放在会与它冲突的宽泛规则之前;只需要局部直连例外时,把更精确的 DOMAIN,DIRECT 规则放得更靠前。
-
检查收尾
确认规则末尾为 FINAL,DIRECT,并检查前面是否残留覆盖所有请求或过宽范围的 PROXY 规则。保存后,在 Config 中启用这个工作副本。
-
选择模式
返回 Home → Global Routing → Config,确认所选服务器可用,再开启连接。不要停在 Proxy 或 Direct 模式测试规则是否生效。
-
重新验证
关闭旧网页连接并重新发起访问;必要时重新建立 Shadowrocket 连接。在连接记录中核对目标域名、命中规则及最终策略,再测试一个未列入规则的网站。
五、验证分流:看请求,不只看网页结果
一个页面通常会请求多个域名:页面主体、图片、脚本、登录接口和媒体资源未必共用主域名。主页面命中 PROXY,并不代表所有依赖请求都命中同一条规则。出现页面能打开但图片缺失的情况,应先观察失败资源对应的实际域名,而不是立即把 Global Routing 改成 Proxy 长期使用。
这个流程说明两件事:VPN 标识出现,只能说明系统隧道处于工作状态,不能证明每个请求都经由代理服务器;DIRECT 请求也可能先进入隧道,再由 Shadowrocket 按规则直连目标。不要把“连接开关已开启”当成“所有网站都走代理”的证据。
- 目标网站测试:访问已加入规则的域名,核对是否命中对应 DOMAIN-SUFFIX,最终策略是否为 PROXY。
- 对照网站测试:访问未被其他规则覆盖的域名,核对是否落入 FINAL,最终策略是否为 DIRECT。
- 依赖资源测试:若页面部分失败,记录失败请求域名,确认确有需要后逐条补充,而非用过宽关键字一次覆盖。
- 连接复用检查:规则修改后仍沿用旧连接时,关闭页面或应用的旧连接后再测,避免把已有连接结果误当作新规则结果。
域名规则还依赖请求中可获得的域名信息。对于应用直接连接 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 在最后。每次新增域名后完成一次目标测试和一次直连对照测试,比反复切换全局模式更容易确认真正生效的分流结果。