一句话结论:Clash 分流靠两样东西配合工作,规则决定“这条连接交给谁”,策略组决定“交给谁之后用哪个节点”;规则从上往下匹配,命中即停,所以顺序比数量更重要。想改规则又不想被订阅更新覆盖,就用客户端的覆写或扩展配置功能,而不是直接修改订阅文件。
本文以 Clash Verge Rev(mihomo 内核)为例,FlClash、Clash Meta for Android 等同内核客户端的概念完全相同。还没导入订阅的读者,请先看 Clash 教程。
1. 三种运行模式
| 模式 | 行为 | 适用场景 |
|---|---|---|
| 规则模式 | 按规则列表逐条匹配,决定直连或走代理 | 日常使用,推荐常开 |
| 全局模式 | 所有流量走当前选中的节点 | 临时排查某网站是否被规则误判 |
| 直连模式 | 所有流量不走代理 | 临时关闭代理但保留客户端运行 |
本文讲的规则和策略组,只在规则模式下生效。
2. Clash 分流规则的常见类型
每条规则由三部分组成:类型、匹配内容、目标策略,例如 DOMAIN-SUFFIX,google.com,节点选择。常用类型如下:
| 类型 | 匹配方式 | 示例 |
|---|---|---|
| DOMAIN | 完整域名精确匹配 | DOMAIN,www.example.com,DIRECT |
| DOMAIN-SUFFIX | 域名及其所有子域名 | DOMAIN-SUFFIX,example.com,节点选择 |
| DOMAIN-KEYWORD | 域名中包含某个关键词 | DOMAIN-KEYWORD,example,节点选择 |
| GEOSITE | 按预置的域名分类库匹配 | GEOSITE,cn,DIRECT |
| GEOIP | 按目标 IP 所属国家或地区匹配 | GEOIP,CN,DIRECT |
| IP-CIDR | 按 IP 段匹配 | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve |
| PROCESS-NAME | 按发起连接的程序名匹配 | PROCESS-NAME,example.exe,DIRECT |
| MATCH | 兜底,以上都没命中时使用 | MATCH,漏网之鱼 |
DOMAIN-KEYWORD 范围很宽,容易误伤,能用后缀就别用关键词。PROCESS-NAME 只在电脑端和 TUN 模式下比较可靠,手机端很多场景拿不到进程名。IP 类规则后面加 no-resolve,可以避免为了匹配而提前做一次 DNS 解析。
3. Clash 规则顺序:从上到下,命中即停
Clash 拿到一条连接后,会从规则列表第一行开始往下比对,一旦命中就停止,后面的规则不再看。因此有三条经验:
- 越具体的规则越要放前面。想让某个子域名直连而主域名走代理,DOMAIN 规则必须写在 DOMAIN-SUFFIX 之前。
- 自定义规则要插在订阅自带规则的前面,否则可能早被一条宽泛规则抢先命中。
- MATCH 必须是最后一条,它后面的规则永远不会生效。
一份结构合理的规则列表,从上到下大致是这样的顺序:
- 你自己的特例规则,例如某个工作网站强制直连、某个服务固定地区。
- 局域网与保留地址直连,保证访问路由器后台、打印机、内网服务不受影响。
- 广告与追踪域名拒绝(可选),由规则集提供。
- 常见海外服务分类走对应策略组,例如流媒体、AI、即时通讯。
- 国内域名直连,再加一条国内 IP 直连作为补充。
- 最后一条 MATCH,把剩下的连接交给“漏网之鱼”,你可以自己决定它走代理还是直连。
域名规则通常放在 IP 规则之前:匹配域名不需要解析,速度更快,也更不容易出现 DNS 泄露。
4. Clash 策略组的四种类型
规则的目标可以是 DIRECT(直连)、REJECT(拒绝),也可以是一个策略组。机场订阅里常见的“节点选择”“自动选择”“香港节点”等,都是策略组:
| 类型 | 工作方式 | 适合用途 |
|---|---|---|
| select | 手动选择组内的节点 | 主出口,自己决定用哪个 |
| url-test | 定时测速,自动选延迟最低的节点 | 懒人自动切换 |
| fallback | 按顺序使用,前一个不可用才换下一个 | 需要稳定出口的服务 |
| load-balance | 把连接分散到多个节点 | 下载类,不适合需要固定 IP 的网站 |
策略组之间可以嵌套,例如“节点选择”组里包含“自动选择”“香港节点”和单个节点。url-test 的选择依据只是延迟,延迟低不等于带宽大,原因见 延迟、丢包与带宽。
5. 规则集 rule-providers
一条条手写规则既累又难维护,所以 mihomo 支持规则集:把一类域名或 IP 放在一个远程文件里,配置中只引用集合名,客户端会按设定间隔自动更新。引用写法类似 RULE-SET,ai-list,AI 服务。规则集分为域名型、IP 型和经典型几种行为,声明时要与文件内容一致,否则会解析失败。
现在新内核也越来越多地使用 GEOSITE 和二进制规则集,加载更快、占用更少内存。如果你的订阅已经自带完善的规则集,一般无需再加。需要注意,规则集文件来自第三方仓库,只引用长期维护、来源清楚的项目,不要随手复制来历不明的地址;手机端则可在 Shadowrocket 等客户端里用类似的规则集功能。
6. 用覆写保存自定义规则
直接编辑订阅生成的配置文件,下次自动更新时改动就会被覆盖。Clash Verge Rev 提供了覆写类功能(常见名称为扩展配置或扩展脚本,入口在订阅卡片的右键菜单或全局设置中),它在每次加载订阅后再把你的改动合并进去,订阅怎么更新都不会丢。
以“让 AI 类服务固定走美国节点”为例,思路分三步:
- 新建一个 select 类型的策略组,比如叫“AI 服务”,组内只放美国或其他目标地区的节点,可用节点名称过滤一次性筛出。
- 在规则列表最前面插入对应规则,例如
DOMAIN-SUFFIX,openai.com,AI 服务、DOMAIN-SUFFIX,anthropic.com,AI 服务、DOMAIN-SUFFIX,claude.ai,AI 服务。 - 保存后刷新配置,在代理页面的“AI 服务”组里选一个节点。
在扩展配置里,常见写法是用 prepend-rules 往规则前面插入、用 prepend-proxy-groups 或 append-proxy-groups 增加策略组。具体字段以你所用版本的说明为准,写完后先检查配置能否正常加载。如果机场提供的订阅格式不方便改,也可以借助 订阅转换 生成带自定义规则的配置。
7. 怎么确认规则已经生效
- 打开客户端的“连接”页面,访问目标网站,找到对应连接,查看“规则”和“链路”两栏:应显示命中了你写的规则,出口是你指定的策略组和节点。
- 如果显示命中的是 MATCH 或其他规则,说明你的规则顺序靠后或写法不对。
- 在“日志”页面把级别调到信息,也能看到每条连接的匹配结果。