Clash 规则的核心只有一句话:规则从上到下匹配,排在前面的优先。规则决定每个请求走代理、直连还是拒绝。大多数用户直接使用机场订阅自带的规则就够了,只有在需要指定某个网站走某个节点时才要自己写。本文内容以 Mihomo 内核的官方文档为准,界面入口可能随版本变化,以你的软件当前界面为准。
规则的基本格式
一条规则由类型、匹配内容和目标三部分组成,先看懂这个格式。
格式是“类型,内容,目标”。目标可以是策略组的名称,也可以是 DIRECT(直连)或 REJECT(拒绝)。下面这段配置写了四条规则:谷歌相关域名走名为 PROXY 的策略组,局域网地址和中国 IP 直连,其余流量走 PROXY。
rules:
- DOMAIN-SUFFIX,google.com,PROXY
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,PROXY
策略组的名称要和配置文件里 proxy-groups 定义的一致。不同机场的策略组名称不同,比如“节点选择”“自动选择”,不要直接照抄 PROXY。
| 组成部分 | 含义 | 示例 |
|---|---|---|
| 类型 | 用什么方式匹配 | DOMAIN-SUFFIX |
| 内容 | 匹配什么 | google.com |
| 目标 | 匹配后去哪里 | PROXY、DIRECT、REJECT |
常用的规则类型
Mihomo 支持的规则类型很多,入门时掌握下面几种就够用了。
DOMAIN 匹配完整域名,DOMAIN-SUFFIX 匹配域名后缀,也包括它的子域名,所以最常用。DOMAIN-KEYWORD 匹配包含关键词的域名,范围较大,要小心误伤。GEOIP 和 GEOSITE 分别按 IP 归属和域名分类匹配。RULE-SET 用来引入一组规则,适合规则很多的情况。MATCH 放在最后,匹配所有剩余流量。
| 规则类型 | 作用 | 写法示例 |
|---|---|---|
| DOMAIN | 完整域名 | DOMAIN,www.example.com,PROXY |
| DOMAIN-SUFFIX | 域名后缀 | DOMAIN-SUFFIX,example.com,PROXY |
| DOMAIN-KEYWORD | 域名关键词 | DOMAIN-KEYWORD,example,PROXY |
| GEOSITE | 域名分类 | GEOSITE,cn,DIRECT |
| GEOIP | IP 归属地 | GEOIP,CN,DIRECT |
| IP-CIDR | IP 地址段 | IP-CIDR,10.0.0.0/8,DIRECT |
| RULE-SET | 引入规则集合 | RULE-SET,my-rules,PROXY |
| MATCH | 匹配剩余全部流量 | MATCH,PROXY |
匹配顺序为什么重要
顺序写错是最常见的问题,规则本身没错,结果却不符合预期。
一个请求进来后,Clash 从第一条规则开始检查,命中后就按这条规则处理,后面的规则不再看。所以如果你把 MATCH,PROXY 放在中间,它下面的规则都不会生效。同样的道理,范围大的规则要放在范围小的规则下面。
例如你想让 ai.example.com 走美国节点,其他 example.com 走默认节点,就要把具体的规则写在前面。如果顺序反过来,请求会先命中 example.com,就不会走到美国节点了。
rules:
- DOMAIN,ai.example.com,美国节点
- DOMAIN-SUFFIX,example.com,节点选择
- MATCH,节点选择
下面是一个推荐的顺序,可以作为自己写规则时的参考。
| 顺序 | 放什么规则 | 原因 |
|---|---|---|
| 第一 | 个别网站的特殊规则 | 优先生效 |
| 第二 | 拒绝广告等规则 | 需要时再加 |
| 第三 | 局域网直连规则 | 不影响本地设备 |
| 第四 | 中国域名和 IP 直连 | 国内网站不走代理 |
| 最后 | MATCH | 处理剩余流量 |
自己的规则放在哪里
不要直接修改订阅配置,否则更新订阅时可能被覆盖。
Clash Verge Rev 提供了配置增强功能,官方说明里写有 Merge 和 Script 两种方式,可以在不改动订阅的前提下增加规则。具体入口会随版本变化,以软件当前界面为准。使用前先备份配置。添加后要重新激活配置,再用日志确认规则是否生效。
如果你还没有导入订阅,先看 Clash 怎么导入订阅。如果想了解客户端和内核的关系,可以看 Clash、Mihomo、Clash Verge 是什么关系。
如果你买的是专属客户端品牌,订阅导入这一步就不适用。很多品牌不提供通用订阅,详情可以看 机场专属客户端是什么。购买前要先确认能否导入 Clash。
规则模式和其他模式
规则只在规则模式下生效,这一点也经常被忽略。
Clash Verge Rev 的官方术语说明里有三种模式。规则模式按规则分流,是日常使用的模式。全局模式让流量走手动选择的节点,直连模式让流量全部直连。如果你发现规则完全不起作用,先检查当前是不是规则模式。
| 模式 | 流量怎么走 | 什么时候用 |
|---|---|---|
| 规则 | 按规则分流 | 日常使用 |
| 全局 | 走手动选择的节点 | 临时排查问题 |
| 直连 | 全部直连 | 临时关闭代理 |
规则不生效怎么排查
遇到问题时不要急着改规则,先看请求实际命中了什么。
打开客户端的连接或日志页面,访问目标网站,看这个请求的域名和命中的规则。常见原因有这几种:域名写错,实际请求的是另一个域名;规则顺序不对,被前面的规则命中;策略组名称写错,配置报错;网站同时使用了多个域名,只写了其中一个。如果规则确认没问题,再换节点测试,这时候问题可能在节点上。
系统代理只对遵守代理设置的程序有效,有些程序需要开启 TUN 模式才能被接管,方法见 Clash TUN 模式怎么开。
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 规则完全不起作用 | 不是规则模式 | 切换到规则模式 |
| 配置导入报错 | 策略组名称写错 | 核对名称 |
| 网站部分内容打不开 | 还有其他域名 | 从日志找出全部域名 |
| 下面的规则不生效 | 被前面的规则命中 | 调整顺序 |
| 程序不走代理 | 程序不遵守系统代理 | 考虑 TUN 模式 |
几个常见场景的写法
下面是几个实际场景,把网站和策略组换成你自己的就可以使用。
第一个场景是让一个网站走固定节点。例如你想让某个工作网站始终走日本节点,先确认配置里有名为“日本节点”的策略组,再把规则写在前面。第二个场景是让公司内网直连。把内网域名或地址段设置为 DIRECT。第三个场景是规则很多时,用 RULE-SET 引入规则集,这样配置更整洁。
rule-providers:
my-rules:
type: http
behavior: domain
url: "https://example.com/rules.yaml"
interval: 86400
rules:
- DOMAIN-SUFFIX,company.example,DIRECT
- RULE-SET,my-rules,节点选择
- MATCH,节点选择
上面的地址只是示例,要换成你信任的规则来源。使用别人的规则集前,要看清楚内容,因为规则决定了你的流量走向。
| 场景 | 规则写法 | 注意事项 |
|---|---|---|
| 网站走固定节点 | DOMAIN-SUFFIX 加策略组 | 策略组名称要存在 |
| 公司内网直连 | DOMAIN-SUFFIX 或 IP-CIDR 加 DIRECT | 放在代理规则前面 |
| 规则数量很多 | RULE-SET | 确认规则来源可信 |
| 屏蔽某个域名 | DOMAIN-SUFFIX 加 REJECT | 可能影响网站功能 |
使用 IP 类规则时,Clash 可能需要先解析域名。no-resolve 表示不主动解析,常用于局域网这类规则。如果不了解具体影响,可以先按上面的示例使用。
总结
写 Clash 规则,记住“格式、顺序、验证”三件事。
先用订阅自带的规则,确实有需要时再添加。具体规则放前面,MATCH 放最后,改完看日志确认。规则类型和最新写法以 Mihomo 官方文档为准。