Shadowrocket 只让部分网站走代理:DOMAIN-SUFFIX 加 FINAL,DIRECT 的规则写法

以「指定域名走 PROXY、其余全部 DIRECT」为例,写出完整的规则段,讲解匹配顺序、关键字的选择,以及写好后如何验证规则是否生效。

本文速览

适用于已经在 Shadowrocket(小火箭)中配置好可用连接、只想让少数网站经过代理的用户。操作要点是:在 Config 的有效配置中加入域名规则,把 FINAL,DIRECT 放在末尾,并将 Home → Global Routing 设为 Config。随后用请求记录核对域名、命中规则与实际策略,而不是仅凭网页能否打开判断配置是否生效。

一、先区分规则分流与全局姿态

“只代理部分网站”包含两个条件:目标域名命中 PROXY,其他请求落到 DIRECT。前者由域名规则决定,后者由最后的 FINAL 规则决定。两者都依赖当前连接按配置规则运行;如果 Global Routing 选择了 Proxy 或 Direct,单独修改规则文件不能得到本文预期的分流结果。

Global Routing 选项判断方式本文操作
Config按当前配置中的规则决定策略。选择此项,验证域名规则。
Proxy以代理姿态处理流量,不按本文的域名白名单分流。不要用它验证 FINAL,DIRECT。
Direct以直连姿态处理流量。不要把直连结果误判为域名规则失效。
Scene按已配置的场景条件决定行为。初次排查先切到 Config,减少场景切换的影响。

本文的 PROXY 表示代理策略,DIRECT 表示直接连接目标。开始前先确认 Home 中选中的代理连接本身可用。若现有配置使用自定义策略组,需核对规则末尾引用的策略名是否真实存在,不要把其他配置中的组名原样粘贴过来。

2 类
目标结果:指定域名 PROXY,其余 DIRECT
1 条
FINAL 兜底规则,放在规则段末尾
3 组
验证对象:目标域名、无关域名、例外域名

二、DOMAIN-SUFFIX 加 FINAL,DIRECT 的完整规则段

下面是可用于说明语法的完整 [Rule] 段,不是包含连接参数、DNS 等设置的完整配置文件。example.com 与 example.net 是文档示例域名,需要替换为你实际需要代理的网站域名;不要把示例域名当成可用服务。

[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。它不会把 notexample.com 或 example.com.other.net 当成同一域名后缀。这里的匹配对象是域名,不是网页地址中的任意文字。

三、按顺序安装规则,而不是只保存文本

以下路径以 Home、Config、Settings 的界面结构说明。不同平台的编辑入口表现可能不同,但都要完成“编辑文件、保存、使其成为当前配置、按 Config 运行”四个动作。订阅提供连接信息与规则配置是否启用,是两个需要分别确认的问题。

  1. 备份配置

    进入 Config,先保留当前文件的副本或导出备份。记下当前正在使用的配置,避免编辑了另一个文件却继续用旧配置连接。

  2. 整理规则

    打开待使用文件的编辑入口,定位 [Rule]。写入需要的 DOMAIN-SUFFIX 规则,检查已有规则,把 FINAL,DIRECT 留在末尾。

  3. 启用文件

    保存修改,在 Config 中确认该文件成为当前使用的配置。若文件来自远程更新,先确认后续更新是否会覆盖本地编辑。

  4. 切换姿态

    返回 Home → Global Routing,选择 Config,再确认 Home 中选中的代理连接可用并开启连接。

  5. 重建请求

    在可以中断连接的情况下重新连接,关闭原网页后重新打开,生成新的网络请求,再检查请求记录中的匹配结果。

已有订阅链接应从你的服务商处获取。不要为了修改分流规则反复删除订阅,也不要把订阅地址粘贴到 DOMAIN-SUFFIX 的域名字段。Settings → On Demand 负责自动连接条件,不负责决定某个域名走 PROXY 还是 DIRECT;排查期间应留意它是否重新触发连接,避免把自动连接现象当成规则变化。

四、DOMAIN 与 DOMAIN-SUFFIX 怎么选,例外放在哪里

规则按从上到下的顺序匹配,先命中的规则决定该请求使用的策略。因此,“整个站点代理,但某个子域名直连”需要把更具体的例外放在前面。下面让 status.example.com 直连,其余属于 example.com 的域名走代理。

[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
规则关键字适用范围本场景的注意点
DOMAIN精确匹配一个域名。只代理某个主机,或为一个子域名设置例外。
DOMAIN-SUFFIX匹配域名本身及其子域名。适合网站主域及同后缀服务一起分流。
IP-CIDR匹配 IPv4 地址网段。适合明确的地址范围,不能表达网站路径。
GEOIP按目标 IP 的地理归属匹配。不依据页面内容、域名后缀或用户所在地判断。
FINAL接住没有命中前序规则的请求。本文使用 DIRECT,末尾不再添加其他规则。

例如 IP-CIDR,192.168.0.0/16,DIRECT,no-resolve 表示匹配这一私有地址范围并直连,no-resolve 用于避免仅为匹配这条 IP 规则而发起域名解析。它不是所有规则都必须附加的参数,也不能解决网站遗漏了其他资源域名的问题。

判断:域名白名单不需要先写地理分流

如果目标就是“只有列出的域名代理”,先保留精确例外、域名代理与 FINAL,DIRECT 即可。加入 GEOIP 或宽泛 IP 代理规则前,先说明它要改变哪一类请求,否则“其余全部直连”的边界会被提前命中的规则改变。

五、验证规则是否生效:对照域名、规则与策略

网页打开成功不能证明它走了代理,打不开也不能证明规则没有匹配。规则选择正确之后,代理连接、目标服务、DNS 或 TLS 仍可能失败。验证时应查看应用提供的请求记录或连接详情,将一次新请求的目标域名、命中规则以及最终策略放在一起判断;记录入口与字段展示以当前平台界面为准。

测试输入预期命中预期策略
www.example.comDOMAIN-SUFFIX,example.comPROXY
status.example.comDOMAIN,status.example.comDIRECT
www.example.orgFINALDIRECT

上表是规则推演,不是对示例站点的联网实测。实际验证时替换为你有权访问的真实域名,并逐一建立新连接。浏览器可能复用既有连接,也可能直接展示缓存内容;修改配置后只看原页面,未必会生成能验证新规则的请求。

六、页面只加载一半与连接报错的排查

网站页面可能同时请求主站、登录域名、静态资源域名及视频域名。主域名走代理不代表所有资源都属于同一后缀。例如页面还访问 assets.example.net,仅写 DOMAIN-SUFFIX,example.com,PROXY 不会覆盖它。先从失败请求中确认真实域名,再决定是否新增规则,不要凭猜测扩大代理范围。

报错:connection refused

原因:连接目标端口被拒绝,可能发生在代理服务器或直连目标一侧。解法:先核对该记录的策略与远端地址;若走 PROXY,按已有服务资料检查服务器地址和端口,不要仅为消除错误把所有域名改成代理。

报错:i/o timeout

原因:网络操作在等待期限内没有完成,单凭此消息无法判断是规则、线路还是目标故障。解法:先确认规则命中,再分别测试当前代理连接与同一目标的新请求,一次只改变一个条件。

报错:no such host

原因:域名解析没有得到可用结果,可能是拼写错误或 DNS 查询失败。解法:核对实际请求域名与现有 DNS 配置;先解决解析问题,再观察它命中 DOMAIN-SUFFIX 还是 FINAL。

以上是网络日志中常见的错误文本片段,完整消息可能带有地址、端口与其他上下文,并非每个平台都会显示完全相同的弹窗。若需提供记录协助排查,保留时间、目标域名、规则与策略即可;分享前移除订阅令牌、密码和其他连接凭据。

七、常见问题:路径分流、更新覆盖与直连边界

只想让一个网站的 /video 走代理,可以写进规则吗?

不能用 DOMAIN-SUFFIX 按 URL 路径分流。它匹配域名,不读取 /video 作为匹配字段;HTTPS 路径也不是普通域名规则可直接使用的信息。先确认业务是否使用独立子域名,若有,可用 DOMAIN 精确匹配该子域名。

设置了 FINAL,DIRECT,为什么还有别的网站走代理?

先在 Home → Global Routing 确认是 Config,再检查 FINAL 之前的规则。较早命中的 DOMAIN-SUFFIX、IP-CIDR、GEOIP 或规则集都可能先决定策略。FINAL 只处理剩余请求,不会覆盖先前命中的结果。

昨天有效,更新配置后规则怎么不见了?

在 Config 中打开当前文件,查找新增的域名行。远程配置更新可能替换本地文本;保留独立的本地配置副本,更新前后核对规则。不要把连接订阅刷新与远程规则文件更新当成同一件事。

其余 DIRECT,是不是说明其他应用都不经过代理?

它表示进入当前规则处理流程、又没有命中前序规则的请求采用 DIRECT,不等于设备所有流量的总保证。按应用实际产生的请求记录核对;同时检查是否有其他系统代理、VPN 或应用内代理设置影响测试环境。

完成后应保留一份可复现的最小规则:需要代理的域名、必要的精确例外,以及末尾的 FINAL,DIRECT。后续每新增一个站点,都重复“建立新请求、查看命中、检查策略”的过程。需要扩展到更多规则类型时,可查阅规则参考;术语含义可在术语手册核对。

下载 Shadowrocket