本文适合已在 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,api.example.com,DIRECT:只匹配这个完整域名,适合在整个站点走代理时单独保留一个直连例外。DOMAIN-SUFFIX,example.com,PROXY:匹配example.com及其子域名,例如www.example.com,不会匹配notexample.com。DOMAIN-KEYWORD,example-media,PROXY:匹配域名中包含该字符串的连接,范围比域名后缀更宽,应谨慎使用。IP-CIDR,203.0.113.0/24,PROXY,no-resolve:按目标 IPv4 网段匹配;no-resolve表示不为匹配这条规则而主动解析域名。FINAL,DIRECT:前面的规则都没有命中时使用 DIRECT,不需要再填写域名或网段。
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 则使其他连接默认直连。
-
备份配置
进入 Config,打开当前启用的配置,先保留原文件副本或导出备份。远程配置应另存为可编辑的本地副本,避免后续更新覆盖本地修改。
-
编辑规则
在 Config 中打开该本地文件的编辑功能,找到现有 [Rule] 段。将需要的规则合并到该段,不要重复追加第二个 [Rule],并检查原有 FINAL 的位置。
-
检查策略
确认 DIRECT、PROXY 拼写正确;若保留原文件中的自定义策略组名称,应确认对应组仍存在。本文片段按通用 PROXY 策略说明,不要求新建同名服务器。
-
启用配置
保存后在 Config 中选择修改后的文件,再到 Home → Global Routing 选择 Config。仅保存文件而未启用它,不会改变当前连接使用的规则。
-
重建连接
断开再重新开启 Home 的连接开关,然后重新发起网页请求。已有的长连接可能继续沿用原出站,需要关闭相应页面或应用后再试。
如果原配置还包含 GEOIP,CN,DIRECT,它表示按目标 IP 的地区信息选择 DIRECT,不依据网页内容或域名后缀判断。在本文默认直连的场景中,这条规则通常不是必需项;若决定保留,应放在明确的站点代理规则之后、FINAL 之前,防止提前命中。
四、用连接记录验证,不只看网页是否打开
网页能打开,只能说明这次请求有响应,不能证明它采用了哪条策略。应结合连接记录中的目标域名、目标 IP、命中规则与处理策略验证。记录入口和字段显示可能随界面有所不同,核对的重点是同一条新建连接的实际结果。
| 测试对象 | 预期命中 | 预期策略 |
|---|---|---|
api.example.com | 最前面的 DOMAIN 例外 | DIRECT |
www.example.com | DOMAIN-SUFFIX | PROXY |
static.example.net | DOMAIN-SUFFIX | PROXY |
| 未匹配任何前置规则的实际站点 | FINAL | DIRECT |
表中是规则推导出的预期结果,不是这些示例域名的连通性测试。实际验证时,用已经替换进配置的真实站点测试。每次只改一条规则,重新建立连接后记录结果;这样才能分辨是规则顺序、配置未启用,还是服务本身不可达。
- 首页能开、图片失败:检查图片、登录和接口请求是否使用其他域名。只补充记录中确认需要代理的域名,不必直接放大成过宽的关键词规则。
- 只看到目标 IP:应用可能直接请求 IP,或该连接未关联到域名信息。域名规则无法仅凭网页名称匹配这类连接。
- IP 规则没有命中:检查是否实际使用 IPv6;IPv4 的 IP-CIDR 不匹配 IPv6,后者需要单独评估 IP-CIDR6 规则。
- 端口不同:普通 HTTPS 常见目标端口为 443,但本文的域名规则没有限定端口;不要在 DOMAIN-SUFFIX 的域名后面附加
:443。
五、超时与解析错误分别排查
规则选中 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。应按实际连接记录判断。