Clash 规则怎么写?rules 与 rule-providers 入门
Clash 规则是从上往下逐条匹配的名单,第一条命中的决定流量去向,所以顺序比语法更重要:精确的放前面,宽泛的放后面,MATCH 收尾。规则集用 rule-providers 引用,每次只换一套并验证。
Clash 规则就是一张从上往下查的名单:每条连接带着域名或 IP 过来,内核逐行对照,第一行对得上的,就决定它走代理、直连还是被拦截。写规则的难点不在语法,而在顺序。这篇先用一组虚拟请求演示匹配过程,再讲常见的规则类型、规则集的用法,以及怎样改动才不会把自己绕晕。
Clash 规则怎么匹配:先看一次完整的走查
下面是一份虚构的规则表,域名全是示例:
rules:
- DOMAIN,intranet.example.com,DIRECT
- DOMAIN-SUFFIX,example.org,代理组
- DOMAIN-KEYWORD,video,代理组
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,代理组
拿几类请求依次过一遍:
| 请求 | 命中第几条 | 去向 | 原因 |
|---|---|---|---|
| intranet.example.com | 第 1 条 | 直连 | 域名完全一致 |
| www.example.org | 第 2 条 | 代理组 | 属于 example.org 的子域名 |
| stream.video-demo.net | 第 3 条 | 代理组 | 域名里含有关键词 video |
| 192.168.1.20 | 第 4 条 | 直连 | 请求本身就是局域网 IP |
| 某个解析到国内地址的网站 | 第 5 条 | 直连 | 域名被解析后,IP 属于国内地理库 |
| 其余所有请求 | 第 6 条 | 代理组 | 前面都没命中,由 MATCH 兜底 |
这里藏着三个要点。第一,顺序即优先级:假如把第 5 条挪到第 2 条前面,example.org 下只要解析到国内地址的域名,就会在 GEOIP 这一条被直连,你写的后缀规则等于白写。第二,关键词规则覆盖面很大,容易误伤,除非确有必要,优先用后缀规则。第三,第 5 条没有写 no-resolve,域名请求走到这里时,内核需要先拿到 IP 才能比对,这会牵涉到 DNS 设置,详见 Clash DNS 设置详解。
常见规则类型:从精确到宽泛排好队
| 类型 | 匹配什么 | 适合场景 | 注意 |
|---|---|---|---|
| DOMAIN | 一个完整的域名 | 单个站点的精确处理 | 子域名不会被匹配 |
| DOMAIN-SUFFIX | 某个域名及其所有子域名 | 整站处理,最常用 | 不要写成顶级后缀,范围会过大 |
| DOMAIN-KEYWORD | 域名里含有的关键词 | 一类域名的粗略匹配 | 容易误伤,慎用 |
| IP-CIDR | 一个 IP 地址段 | 局域网、特定服务器网段 | 域名请求默认会触发解析,可加 no-resolve |
| GEOIP | IP 所属的国家或地区 | 按地理位置整体处理 | 依赖内核里的地理库,库过旧会判错 |
| PROCESS-NAME | 发起连接的程序名 | 让某个程序单独走特定出口 | 能否取到进程信息因平台和模式而异 |
| RULE-SET | 引用一份外部规则集 | 大批量规则的维护 | 需要先在 rule-providers 里声明 |
| MATCH | 所有请求 | 兜底,放在最后 | 它之后的规则不会被执行 |
规则的第三段是去向,可以是 DIRECT、REJECT 这样的内置动作,也可以是某个策略组的名字,名字要和配置里的完全一致,组的类型怎么选见 Clash 策略组是什么。规则类型的完整清单和写法,以所用内核的文档为准,词典里的 分流 和 GeoIP 可以先帮你理清概念。
rule-providers 与 clash规则集:把清单放到外面维护
规则写到几百上千条时,直接塞在配置里很难维护。这时可以把成批的域名或地址整理成独立的清单,再用 rule-providers 声明,用 RULE-SET 引用:
rule-providers:
my-direct:
type: http
behavior: domain
format: yaml
url: "https://rules.example.com/direct.yaml"
path: ./ruleset/my-direct.yaml
interval: 86400
rules:
- RULE-SET,my-direct,DIRECT
- MATCH,代理组
| 字段 | 作用 | 写错的后果 |
|---|---|---|
| type | 清单从网址拉取,还是读本地文件 | 类型与实际来源不符,加载失败 |
| behavior | 清单里装的是域名、IP 段,还是完整的规则行 | 与内容不匹配时,规则读不进去或永远不命中 |
| format | 清单文件的格式 | 格式对不上,解析失败 |
| url 与 path | 下载地址与本地保存位置 | 地址打不开,无法更新 |
| interval | 自动更新的间隔,按文档所写的单位填 | 过短会频繁请求,过长则更新滞后 |
这些字段的取值范围随内核版本有变化,动手前请查 Mihomo 文档 里的对应说明。“clash规则集”这个词,指的就是这样一份可以被引用、被更新的清单,词典里的 规则集 有简短释义。
规则集从哪找,怎么判断能不能信
规则集和 GeoIP、GeoSite 这类数据,在 订阅与规则资源导航 里按项目收好了,每条写明收录理由和注意事项。选用时问自己三件事:
- 谁在维护:仓库是否仍在更新,说明文档是否讲清了内容来源。
- 适配什么内核:为别的内核准备的格式,放进来不一定能读。
- 内容是否可审:规则集是别人写的清单,你的内核会定期拉取并采用。来源不明的规则集,等于把分流的决定权交给陌生人。
另外要有个预期:规则集只管流量去哪,不管节点本身好不好用。节点慢,换规则集救不回来。
一次只换一套规则集:改规则的排错纪律
分流出了问题,最忌同时动好几处。建议按下面的纪律走:
- 先写下现象,比如“某个站点打不开”“国内网站变慢”,以及它在连接页里命中的规则。
- 只改一处:增加一条规则,或者换一套规则集,不要同时做两件事。
- 重载配置,再访问同一个站点,对比改动前后的命中情况。
- 不符合预期就立刻改回去,再换下一种思路。
| 症状 | 先怀疑什么 | 去哪个页面 |
|---|---|---|
| 国内网站明显变慢 | 国内域名没被判成直连 | 开了梯子后国内网站变慢 |
| 某个站点打不开 | 被规则送到了不可用的组 | 先在连接页看命中了哪条规则 |
| 换规则集后全部不通 | behavior、format 与内容不符,或规则集没下载下来 | 看日志里的报错 |
| 改了规则没有变化 | 配置没重载,或被更靠前的规则抢先命中 | 检查顺序与重载 |
怎么确认 Clash 规则按预期命中了
最直接的办法是用三个域名各测一次:一个你希望直连的国内站点,一个你希望走代理的海外站点,以及一个你刚刚新加规则的域名。然后看客户端连接页或日志里,每个请求显示的命中规则和去向。两者对得上,规则就在起作用;对不上,就从命中的那一行往上找是哪条规则抢先了。
想把规则、策略组、DNS 放在一份最小配置里对照着看,可以用 Clash 最小配置生成器,它在浏览器里本地运行。配置整体的结构见 Clash 配置文件怎么看。
下一步:从读 Clash 规则到写规则
- 先把手上订阅自带的规则读一遍,记下最后一条 MATCH 的去向,和你常用的几个站点各自命中哪一条。
- 需要补规则时,优先在前面加精确的 DOMAIN-SUFFIX,而不是改动整套规则集。
- 想换规则集,先去 订阅与规则资源导航 看收录说明,一次只换一套并验证。
- 规则的目标常常是策略组,下一篇读 Clash 策略组是什么。
这篇没有覆盖的
- 规则类型和 rule-providers 的字段随内核版本增减,本文只讲稳定的部分,细节以所用内核文档为准。
- 本文不推荐具体的规则集仓库,也不判断哪个域名该直连还是代理。
- 规则只能决定流量走向,不能改善节点本身的线路质量。
本文引用的官方来源
- Mihomo(Clash Meta)文档(wiki.metacubex.one)
- Mihomo 内核官方仓库(github.com)
以上链接均为官方页面,梯子岛在 2026-10-09 核对过;个别网站会拦截自动化访问,用浏览器直接打开即可。平台规则可能随时调整,以官方页面当前内容为准。
Clash 规则常见问题
Clash 规则的顺序真的会影响结果吗?
会,而且影响很大。规则按从上到下的顺序匹配,一旦命中就不再往下看。把宽泛的规则放在前面,会把后面精确的规则挡掉;把 MATCH 放在中间,它后面的规则永远轮不到。精确的在前、宽泛的在后、MATCH 在最后,是最基本的写法。
规则里的 no-resolve 是什么意思?
IP 类规则(如 IP-CIDR、GEOIP)遇到域名请求时,默认可能先把域名解析成 IP 再比对。加上 no-resolve 后,只有请求本身就是 IP 时才比对,不会为此触发额外的域名解析。是否需要加,取决于你想不想让这条规则影响 DNS 行为。
规则集和订阅里自带的规则是一回事吗?
不是一回事。订阅里自带的规则是写在配置里的 rules 条目;规则集是单独存放的一份清单,通过 rule-providers 声明,再用 RULE-SET 规则引用。规则集的好处是可以按网址定期更新,不用每次改整个配置。
规则集更新失败会怎么样?
表现因客户端和内核而异:可能沿用本地已缓存的旧内容,也可能让配置加载失败。遇到这种情况,先看日志里提示的是网址打不开还是内容格式不对,再检查规则集的网址能否在当前网络下访问。
国内网站变慢,是规则的问题吗?
有可能。常见原因是国内域名没被规则判成直连,被送进了代理。可以在连接页看这些站点实际命中了哪条规则,再考虑补充直连规则或更换规则集。分层排查见梯子岛的分流设置自查页。
接着读
- 教程 · Clash 策略组是什么?select、url-test 与 fallback 的区别
- 教程 · Clash 配置文件怎么看?YAML 结构与常用字段讲解
- 教程 · Clash DNS 设置详解:fake-ip 与 redir-host 怎么选
- 排查 · 开了梯子后国内网站变慢?分流设置自查
- 术语 · 规则集是什么意思
- 术语 · 分流是什么意思