本文速览

Shadowrocket(小火箭)的部分网站代理需要同时满足三个条件:Global Routing 使用 Config、目标域名规则位于兜底规则之前、最后一条使用 FINAL,DIRECT。本文适合已经导入自己已有连接服务的用户,提供最小规则片段、配置操作步骤及按请求记录验证的方法;示例域名用于说明语法,不是连接服务地址。

一、先区分 Global Routing 与规则策略

“只让指定网站走代理”不是在 Home 选中一个连接后就会自动发生。Home 的连接选择决定代理出口,而 Global Routing 决定请求如何分流。使用规则时,先把 Global Routing 设为 Config,再确认 Config 中选中了实际要使用的配置。修改了一个未启用的文件,不会改变当前连接的处理方式。

4 种
Global Routing 姿态:Proxy / Direct / Config / Scene
3 项
常见域名规则字段:类型、匹配值、策略
末尾 1 条
本例以 FINAL,DIRECT 处理未命中的请求

Proxy 用于全局代理,Direct 用于全局直连;Config 才按当前配置中的规则逐项判断。Scene 用于场景配置,不是本文这组规则的必要条件。排查期间固定使用 Config,避免场景切换改变正在观察的结果。

二、最小写法:DOMAIN-SUFFIX 后接 FINAL

以下片段表达“example.com 及其子域名走 PROXY,其余请求走 DIRECT”。它是配置中的规则部分,不是包含服务端参数的完整配置文件。若编辑器已经显示独立的规则列表,应添加两条规则,而不是把节标题当作规则添加。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
内容作用需要注意
[Rule]标记文本配置的规则节。在现有配置中找到对应节,避免重复创建。
DOMAIN-SUFFIX匹配指定域名及其子域名。example.com 同时覆盖 www.example.com。
PROXY把命中的请求交给代理策略。当前代理出口必须已经配置且可连接。
FINAL,DIRECT前面规则都未命中时直连。FINAL 只有策略字段,没有域名字段。

域名字段不要带 https://、路径、查询参数或端口。例如页面地址中即使含有 /watch?id=1,规则仍只写域名。DOMAIN-SUFFIX 不需要写 *.example.com;它按域名边界匹配,不会因为另一个域名只是包含相同字母就自动命中。

如果只想让某一个完整主机名代理,而不希望覆盖整个域名及全部子域名,可使用 DOMAIN,video.example.com,PROXY。这与 DOMAIN-SUFFIX 的范围不同,适合把网页入口与其他子域服务分别处理。

三、DOMAIN-KEYWORD 与规则顺序怎么取舍

规则按顺序匹配,前面已经命中并确定策略的请求,不会继续等后面的规则纠正。应把更明确的例外放在前面,把范围更大的规则放在后面,最后才放 FINAL。下面的示例让一个子域直连,其余 example.com 请求代理。

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

如果把 DOMAIN-SUFFIX 移到第一行,files.example.com 已经被它命中,后面的 DOMAIN 直连例外就没有机会生效。同样,FINAL 不能放在目标域名规则上方,否则后面的规则对这些请求不起作用。

GEOIP 和 IP-CIDR 属于地址层面的规则,不能替代域名清单。例如 IP-CIDR,192.0.2.0/24,DIRECT,no-resolve 按地址网段匹配,示例网段仅用于文档说明;no-resolve 表示不为这条 IP 规则额外触发域名解析。已有配置若在前面用 GEOIP 或较大的 IP-CIDR 范围选定策略,应检查其顺序,避免它抢先处理本来希望交给后续规则的请求。

四、在 Config 中保存并启用规则

先保留一份当前可用配置。订阅用于更新已有连接信息,Config 用于决定分流,两者不要混为一谈。本文不需要更换订阅,也不需要修改 Shadowsocks、VMess、VLESS、Trojan、Hysteria2 或 WireGuard 的服务端参数。

  1. 确认连接

    在 Home 确认已经导入自己的连接,并选中可用出口。若连接本身不可用,先解决连接问题,再测试规则。

  2. 备份配置

    进入 Config,找到当前使用的配置,保留副本或导出原文件。不要直接覆盖唯一一份可用配置。

  3. 编辑规则

    打开该配置的编辑界面,找到规则部分;文本编辑时定位到 [Rule],把目标 DOMAIN-SUFFIX 放在 FINAL 之前,并将兜底设为 FINAL,DIRECT。

  4. 启用配置

    保存修改,回到 Config 确认选中的是修改后的配置;再到 Home → Global Routing 选择 Config。

  5. 重建请求

    重新建立连接,并关闭后重新打开测试页面。已有长连接可能继续使用原来的出站路径,不能仅刷新一次就判断规则无效。

远程配置更新可能覆盖本地修改。若配置来源会定期更新,应保留修改记录,并在更新后检查目标规则与 FINAL 是否仍然存在。仅更新 Home 中的连接订阅,不等于已经更新或启用了 Config 中的规则文件。

五、按请求记录验证,不只看网页出口

规则处理的是请求,不是浏览器里一个完整标签页。一个网站可能分别从主域名、静态资源域名、登录域名和媒体域名加载内容。只代理页面主域名后出现“文字能显示、图片加载失败”,应先检查失败资源使用的域名,而不是直接把所有请求改成 Proxy。

应用请求 域名识别 顺序匹配 策略选择 出站连接

测试一个查询出口地址的页面,只能说明该查询页面自己的请求怎样出站,不能证明所有网站都采用相同策略。浏览器缓存、连接复用以及应用自身的 DNS 行为也可能影响观察结果。若记录只出现 IP 而没有预期域名,应先检查请求是否直接使用 IP、应用是否采用独立解析,以及当前 DNS 设置是否影响域名识别,不宜立刻扩大到整个地址段。

六、连接错误与规则错误分开排查

以下是网络错误的常见原文片段,不是规则编辑器固定显示的提示。出现错误后,先看该请求命中了 PROXY 还是 DIRECT,再检查对应路径。不要因为一次超时,就同时修改域名规则、DNS 和服务端端口,否则难以判断哪项改动产生作用。

报错:Connection timed out

原因与解法:连接在等待时间内没有建立,可能涉及代理出口或目标站点的可达性。先核对请求的最终策略;若为 PROXY,测试当前已有连接,若为 DIRECT,则检查本地网络能否直连该目标。

报错:Connection refused

原因与解法:目标地址上的连接被拒绝,常见于端口未监听或连接参数不一致。核对自己的服务端地址与端口;若代理连接正常而单个站点报错,再检查该站点,不要把端口号填进 DOMAIN-SUFFIX。

报错:no such host

原因与解法:域名解析未获得可用结果。确认域名拼写及当前 DNS 配置,排除把完整 URL 填进域名字段的情况;解析恢复后再验证策略命中。

如果没有网络错误,但所有请求都显示 PROXY,优先检查 Global Routing 是否仍停在 Proxy,以及前面是否有范围过大的规则。如果所有请求都显示 DIRECT,则检查是否选了 Direct、是否启用了正确的 Config,以及实际请求域名是否与写入值一致。

七、部分网站代理的常见问题

只想代理一个页面,能写完整 URL 吗?

不能用 DOMAIN-SUFFIX 区分同一域名下的页面路径。它处理域名,不处理 /news 或 /video 这样的路径。先确认目标能否通过独立子域名区分;若共用同一主机名,本例会对该主机名的请求使用同一策略。

为什么网站能打开,视频却一直转圈?

重新发起播放并检查请求记录。视频可能来自另一个媒体域名,未被主站 DOMAIN-SUFFIX 覆盖。确认该资源域名及最终策略后,再在 FINAL 前增加相应规则;同时排除当前连接对媒体请求不可用的情况。

开了 On Demand,还需要写规则吗?

需要。Settings → On Demand 处理按需建立连接的触发条件,Config 中的规则处理连接建立后的请求分流。测试本文规则时先手动保持连接,确认分流正确后,再单独验证 On Demand 的自动连接行为。

加了几十条规则后,怎样确认没有冲突?

先保留具体 DOMAIN 例外,再检查 DOMAIN-SUFFIX 与 DOMAIN-KEYWORD 的范围,最后确认只有一个有效兜底。每次只改一组域名,使用一个代理目标和一个直连目标对照测试,记录命中结果后再继续扩展。

最后检查四件事即可:Config 是否启用、目标域名是否准确、规则顺序是否从具体到宽泛、FINAL 是否为 DIRECT。先让最小规则稳定生效,再逐项增加网站依赖,通常比导入大量不明用途的规则更容易维护。