本文速览

适合已有可用服务器、希望仅把指定网站交给 PROXY 的用户。先把 Global Routing 设为 Config,再在当前启用配置的 [Rule] 中加入域名规则,最后用 FINAL,DIRECT 接住其余请求。下文给出可核对的匹配结果、规则顺序和验证步骤;示例域名只用于说明语法,不代表服务推荐。

1. 先确定 Global Routing 使用 Config

Shadowrocket 是通过 App Store 获取的 Apple 平台付费客户端,以 iPhone 和 iPad 为主要使用设备,开发者为 Shadow Launch Technology Limited。系统要求以 App Store 页面标注为准。本文以用户已有自己的服务商与可用连接参数为前提,不涉及服务选择;客户端购买与连接服务是两件事。

规则写对但路由姿态不对,也不会得到“指定网站代理、其他网站直连”的结果。打开 Home → Global Routing,确认当前选中 Config。这里的 Config 表示按配置文件中的规则处理请求,不要与底部用于管理文件的 Config 页面混淆。

Config

推荐

按照当前启用配置中的规则选择策略;本文的域名规则和 FINAL,DIRECT 在这个姿态下发挥作用。

适合:只让指定网站走 PROXY,其余请求直连。

Proxy

将接管的流量交给代理处理,不按本文规则逐项分流。临时切换可帮助判断故障是否来自规则匹配,但不能作为分流验证结果。

适合:短时检查所选服务器是否能够访问目标。

Direct

将接管的流量直接连接,不会因为配置里写了 PROXY 就改走代理。

适合:对照设备当前网络的直连表现。

Global Routing 中的 Scene 用于按场景切换,不等同于本文固定使用的 Config。初次验证时先固定姿态,避免场景切换改变路由结果。Settings → On Demand 管理按条件建立或断开连接,也不负责把某个域名判定为 PROXY。

2. 最小规则段:域名在前,FINAL 在后

以下是规则段,不是包含全部设置的完整配置文件。应把它合并到已有配置的 [Rule] 中;文件已经有这个段落时,不要重复添加段落标题。更改前保留一份原配置,尤其不要把已有的 DNS 或其他设置一并覆盖。

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

第一行域名规则匹配 example.com 及其子域名,例如 www.example.com、static.example.com。第二行处理另一个域名家族。两个条件都不满足时,请求落到 FINAL,DIRECT。实际使用时,把示例域名改成需要处理的真实域名,保留英文逗号与策略关键字。

2 条
示例 DOMAIN-SUFFIX 规则,分别覆盖两个域名家族。
1 条
FINAL,DIRECT 放在规则段末尾,承接未匹配请求。
3 字段
域名规则依次填写规则类型、匹配值、目标策略。

3. DOMAIN-SUFFIX 与 DOMAIN-KEYWORD 的边界

按网站分流时,优先考虑边界明确的 DOMAIN-SUFFIX。需要完全限定一个主机名时,可用 DOMAIN;只有确实希望进行字符串包含匹配时,才使用 DOMAIN-KEYWORD。关键词不是网站归属判断,名称相似的无关域名也可能命中。

按域名边界匹配

DOMAIN
www.example.com,PROXY
DOMAIN-SUFFIX
example.com,PROXY
FINAL
DIRECT

DOMAIN 只匹配指定主机名;DOMAIN-SUFFIX 同时覆盖主域名及其子域名。

按字符串包含匹配

DOMAIN-KEYWORD
example,PROXY
会命中
myexample.org
FINAL
DIRECT

关键词范围更宽。上面的 myexample.org 也包含 example,并不属于 example.com。

规则匹配值只填写域名或关键词,不填写完整网页地址。比如 example.com 是域名,example.com/account 含有路径,不应放进 DOMAIN-SUFFIX。域名规则也不能表达“同一网站只有登录页走 PROXY,其他页面直连”。

4. 自上而下匹配:例外要放在宽泛规则前

规则不是“越具体就自动越优先”。对同一个请求,前面已经命中的规则决定其策略,后面的规则不会再覆盖它。如果希望 example.com 的大部分请求走 PROXY,但 status.example.com 直连,就要先写这个主机名例外。

[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,example,PROXY
FINAL,DIRECT
待匹配域名首条命中规则结果
status.example.comDOMAIN 精确例外DIRECT
www.example.comDOMAIN-SUFFIXPROXY
myexample.orgDOMAIN-KEYWORDPROXY
example.orgDOMAIN-KEYWORDPROXY
example.netFINALDIRECT

这张表是按上方规则推导的预期结果,不是网络测速记录。它也说明关键词很容易超出原先设想:example.org 同样包含 example。如果只需要 example.com 这个域名家族,删掉 DOMAIN-KEYWORD 即可,没必要为了展示规则类型而保留它。

5. 在 Config 保存、启用并验证

编辑了文件并不代表该文件已经用于当前连接。按以下顺序操作,每次只改一组规则;先验证简单域名,再增加例外和关键词。订阅更新也不等于本地 Config 规则已经保存或启用,服务器列表与配置文件需要分别核对。

  1. 备份原文件

    进入 Config,找到当前使用的配置,先保留副本。确认后续编辑的是本地可控文件,避免远程配置刷新覆盖本地修改。

  2. 编辑规则段

    在 Config 中打开目标文件的编辑入口,定位 [Rule]。添加域名规则,把例外放前面,将 FINAL,DIRECT 保留在末尾,然后保存。

  3. 启用目标配置

    回到 Config 文件列表,确认刚保存的文件为当前选用项。返回 Home → Global Routing,选择 Config,而不是 Proxy 或 Direct。

  4. 确认服务器

    在 Home 核对当前服务器选择,建立连接。若先前存在长连接,重新建立连接后再发起测试,避免沿用旧连接影响判断。

  5. 对照新请求

    分别访问一个命中域名和一个未命中域名。在请求记录中核对目标主机、匹配规则及连接策略;预期分别为 PROXY 和 DIRECT。

验证时不要只看“网页能否打开”。同一网页无论直连还是代理都可能正常显示,服务器延迟读数也不能证明该网页走了哪条规则。应查看实际新请求的匹配信息;若请求仍复用旧连接,关闭相关页面后重新访问,必要时重新建立应用连接再检查。

6. GEOIP、IP-CIDR 与 DNS:何时需要排查

“只让指定网站走 PROXY”的最小配置通常不需要添加 GEOIP。GEOIP,CN,DIRECT 按目标 IP 的地区信息判断,不是“中文网站直连”,也不代表某个域名的所有服务都位于同一区域。若把宽泛的 IP 规则放在域名规则前,可能提前决定请求策略。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,DIRECT

这个附加示例明确让目标位于 192.168.0.0/16 的请求直连。no-resolve 表示不为了匹配这一条 IP 规则而主动解析域名,不表示全局关闭 DNS。此例已经有 FINAL,DIRECT,IP-CIDR 对最终策略通常是冗余的,保留它只是为了展示 IP 规则的语法与适用边界。

7. 常见写错位置与恢复方法

排查时按“是否启用 → 是否命中 → 策略是否可用”的顺序检查。一次同时改 DNS、服务器、规则和 On Demand,会失去对照条件。先恢复可解释的三行最小规则,再逐项增加条件,比继续堆叠规则更容易定位问题。

现象优先核对处理方法
所有新请求都走 PROXYGlobal Routing 是否为 Proxy;前方是否有宽泛代理规则切回 Config,检查整个 [Rule] 的前置规则和末尾 FINAL。
目标域名仍走 DIRECT当前配置、规则位置、实际请求域名确认启用文件,把目标规则放在可能提前命中的规则之前。
规则保存后不能正常载入逗号、字段数量、段落标题使用英文逗号;域名规则为三字段,FINAL 为两字段。
命中 PROXY 但连接失败所选服务器及其连接参数先确认代理连接可用;规则命中不等于远端连接成功。
稍后发现修改消失是否编辑了会被远程更新覆盖的配置恢复本地备份,并在独立本地配置中管理自定义规则。
FINAL,DIRECT 会让代理断开吗?

不会。它决定未命中请求采用 DIRECT,并不等同于断开应用连接。连接是否建立与请求如何分流是两个层面;On Demand 处理前者的条件触发,规则处理后者的策略选择。

需要按 Shadowsocks 或 VLESS 分别写域名规则吗?

不需要。域名规则描述匹配条件及目标策略,不用为每种服务器协议重复写一套。实际采用的连接协议由所选服务器配置决定。更换服务器后,仍应确认连接可用,再验证相同规则的结果。

怎样撤销这次规则修改?

在 Config 重新选择修改前保存的配置副本,确认 Home → Global Routing 仍是预期姿态,再重新建立连接。不要只删除 FINAL,因为失去明确兜底会让后续结果更难核对。