适合已有可用服务器、希望仅把指定网站交给 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。实际使用时,把示例域名改成需要处理的真实域名,保留英文逗号与策略关键字。
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,其他页面直连”。
- 不写协议前缀,不把
https://放进域名字段。 - 不加
*.example.com这样的星号;DOMAIN-SUFFIX 本身已包含子域名匹配语义。 - 不把端口并入域名;例如网页使用 443 端口时,匹配值仍然是
example.com。 - 一个网站可能调用独立的图片、登录或接口域名;是否补充规则应依据实际请求,而不是不断扩大关键词。
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.com | DOMAIN 精确例外 | DIRECT |
www.example.com | DOMAIN-SUFFIX | PROXY |
myexample.org | DOMAIN-KEYWORD | PROXY |
example.org | DOMAIN-KEYWORD | PROXY |
example.net | FINAL | DIRECT |
这张表是按上方规则推导的预期结果,不是网络测速记录。它也说明关键词很容易超出原先设想:example.org 同样包含 example。如果只需要 example.com 这个域名家族,删掉 DOMAIN-KEYWORD 即可,没必要为了展示规则类型而保留它。
5. 在 Config 保存、启用并验证
编辑了文件并不代表该文件已经用于当前连接。按以下顺序操作,每次只改一组规则;先验证简单域名,再增加例外和关键词。订阅更新也不等于本地 Config 规则已经保存或启用,服务器列表与配置文件需要分别核对。
-
备份原文件
进入 Config,找到当前使用的配置,先保留副本。确认后续编辑的是本地可控文件,避免远程配置刷新覆盖本地修改。
-
编辑规则段
在 Config 中打开目标文件的编辑入口,定位 [Rule]。添加域名规则,把例外放前面,将 FINAL,DIRECT 保留在末尾,然后保存。
-
启用目标配置
回到 Config 文件列表,确认刚保存的文件为当前选用项。返回 Home → Global Routing,选择 Config,而不是 Proxy 或 Direct。
-
确认服务器
在 Home 核对当前服务器选择,建立连接。若先前存在长连接,重新建立连接后再发起测试,避免沿用旧连接影响判断。
-
对照新请求
分别访问一个命中域名和一个未命中域名。在请求记录中核对目标主机、匹配规则及连接策略;预期分别为 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 规则的语法与适用边界。
- 请求有域名:先核对 DOMAIN 或 DOMAIN-SUFFIX 是否与记录里的主机名一致,而不是根据网页标题猜域名。
- 请求只有 IP:可能不具备域名规则需要的信息,不能假定 DOMAIN-SUFFIX 一定能够匹配;应检查请求记录与解析情况。
- 页面部分加载:核对独立资源域名。例如主页面命中 PROXY,不代表另一个域名提供的图片或登录接口也会命中。
- 直接访问 IP:域名规则不会仅凭网站归属识别它。确需 IP 规则时再使用 IP-CIDR,不要随意把整段公共地址加入 PROXY。
7. 常见写错位置与恢复方法
排查时按“是否启用 → 是否命中 → 策略是否可用”的顺序检查。一次同时改 DNS、服务器、规则和 On Demand,会失去对照条件。先恢复可解释的三行最小规则,再逐项增加条件,比继续堆叠规则更容易定位问题。
| 现象 | 优先核对 | 处理方法 |
|---|---|---|
| 所有新请求都走 PROXY | Global Routing 是否为 Proxy;前方是否有宽泛代理规则 | 切回 Config,检查整个 [Rule] 的前置规则和末尾 FINAL。 |
| 目标域名仍走 DIRECT | 当前配置、规则位置、实际请求域名 | 确认启用文件,把目标规则放在可能提前命中的规则之前。 |
| 规则保存后不能正常载入 | 逗号、字段数量、段落标题 | 使用英文逗号;域名规则为三字段,FINAL 为两字段。 |
| 命中 PROXY 但连接失败 | 所选服务器及其连接参数 | 先确认代理连接可用;规则命中不等于远端连接成功。 |
| 稍后发现修改消失 | 是否编辑了会被远程更新覆盖的配置 | 恢复本地备份,并在独立本地配置中管理自定义规则。 |
FINAL,DIRECT 会让代理断开吗?
不会。它决定未命中请求采用 DIRECT,并不等同于断开应用连接。连接是否建立与请求如何分流是两个层面;On Demand 处理前者的条件触发,规则处理后者的策略选择。
需要按 Shadowsocks 或 VLESS 分别写域名规则吗?
不需要。域名规则描述匹配条件及目标策略,不用为每种服务器协议重复写一套。实际采用的连接协议由所选服务器配置决定。更换服务器后,仍应确认连接可用,再验证相同规则的结果。
怎样撤销这次规则修改?
在 Config 重新选择修改前保存的配置副本,确认 Home → Global Routing 仍是预期姿态,再重新建立连接。不要只删除 FINAL,因为失去明确兜底会让后续结果更难核对。