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 这类数据,在 订阅与规则资源导航 里按项目收好了,每条写明收录理由和注意事项。选用时问自己三件事:

  1. 谁在维护:仓库是否仍在更新,说明文档是否讲清了内容来源。
  2. 适配什么内核:为别的内核准备的格式,放进来不一定能读。
  3. 内容是否可审:规则集是别人写的清单,你的内核会定期拉取并采用。来源不明的规则集,等于把分流的决定权交给陌生人。

另外要有个预期:规则集只管流量去哪,不管节点本身好不好用。节点慢,换规则集救不回来。

一次只换一套规则集:改规则的排错纪律

分流出了问题,最忌同时动好几处。建议按下面的纪律走:

  1. 先写下现象,比如“某个站点打不开”“国内网站变慢”,以及它在连接页里命中的规则。
  2. 只改一处:增加一条规则,或者换一套规则集,不要同时做两件事。
  3. 重载配置,再访问同一个站点,对比改动前后的命中情况。
  4. 不符合预期就立刻改回去,再换下一种思路。
症状 先怀疑什么 去哪个页面
国内网站明显变慢 国内域名没被判成直连 开了梯子后国内网站变慢
某个站点打不开 被规则送到了不可用的组 先在连接页看命中了哪条规则
换规则集后全部不通 behavior、format 与内容不符,或规则集没下载下来 看日志里的报错
改了规则没有变化 配置没重载,或被更靠前的规则抢先命中 检查顺序与重载

怎么确认 Clash 规则按预期命中了

最直接的办法是用三个域名各测一次:一个你希望直连的国内站点,一个你希望走代理的海外站点,以及一个你刚刚新加规则的域名。然后看客户端连接页或日志里,每个请求显示的命中规则和去向。两者对得上,规则就在起作用;对不上,就从命中的那一行往上找是哪条规则抢先了。

想把规则、策略组、DNS 放在一份最小配置里对照着看,可以用 Clash 最小配置生成器,它在浏览器里本地运行。配置整体的结构见 Clash 配置文件怎么看。

下一步:从读 Clash 规则到写规则

  1. 先把手上订阅自带的规则读一遍,记下最后一条 MATCH 的去向,和你常用的几个站点各自命中哪一条。
  2. 需要补规则时,优先在前面加精确的 DOMAIN-SUFFIX,而不是改动整套规则集。
  3. 想换规则集,先去 订阅与规则资源导航 看收录说明,一次只换一套并验证。
  4. 规则的目标常常是策略组,下一篇读 Clash 策略组是什么。

这篇没有覆盖的

  • 规则类型和 rule-providers 的字段随内核版本增减,本文只讲稳定的部分,细节以所用内核文档为准。
  • 本文不推荐具体的规则集仓库,也不判断哪个域名该直连还是代理。
  • 规则只能决定流量走向,不能改善节点本身的线路质量。

本文引用的官方来源

  1. Mihomo(Clash Meta)文档(wiki.metacubex.one)
  2. 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 规则引用。规则集的好处是可以按网址定期更新,不用每次改整个配置。

规则集更新失败会怎么样?

表现因客户端和内核而异:可能沿用本地已缓存的旧内容,也可能让配置加载失败。遇到这种情况,先看日志里提示的是网址打不开还是内容格式不对,再检查规则集的网址能否在当前网络下访问。

国内网站变慢,是规则的问题吗?

有可能。常见原因是国内域名没被规则判成直连,被送进了代理。可以在连接页看这些站点实际命中了哪条规则,再考虑补充直连规则或更换规则集。分层排查见梯子岛的分流设置自查页。

接着读

文中出现的术语

相关专题

接下来去哪儿?

找官方入口去网址导航,想核对仓库和版本看GitHub 项目导航;需要现成的机场,机场目录收了 28 家的价格与线路资料,性价比机场、便宜机场、VPN 机场分别有专项页。