Clash 规则怎么写:匹配顺序、规则类型与兜底规则
Clash 规则由“类型、匹配值、策略”三段组成,内核自上而下匹配、命中即停,末尾用兜底规则接住剩余连接。本文给出常用规则类型对照、排序原则、自定义规则放在哪里才不会被订阅更新覆盖,以及写错后的典型表现与核对方法。
先记住一句话:三段式、自上而下、命中即停
一条 Clash 规则由“规则类型、匹配值、策略名称”三段组成,用英文逗号分隔;内核从列表顶部开始逐条比对,第一条命中的规则决定这条连接的去向,后面的规则不再检查;列表最后一条应是兜底规则,接住所有未命中的连接。 写规则时出现的绝大多数问题,都能用这句话解释。
本文针对以 mihomo 为内核的 Clash 系客户端,只讲规则写法,不涉及任何品牌。三种代理模式的区别见 规则模式、全局模式与直连模式。以下写法是通用格式示意,字段支持情况以你所用客户端和内核的文档为准。
一条规则长什么样
在 YAML 配置里,规则写在 rules 列表下,每行一条:
rules:
- DOMAIN,login.example.com,节点选择
- DOMAIN-SUFFIX,example.org,节点选择
- DOMAIN-KEYWORD,examplecdn,DIRECT
- IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,节点选择
三段的含义:
- 规则类型:用什么条件匹配,例如完整域名、域名后缀、IP 段;
- 匹配值:条件的具体内容,例如某个域名或网段;
- 策略名称:命中后交给谁,可以是策略组名、
DIRECT(直连)或REJECT(拒绝)。
部分类型还允许第四段参数,最常见的是 IP 类规则后的 no-resolve。
常用规则类型对照
| 类型 | 匹配什么 | 适合的用途 | 注意 |
|---|---|---|---|
| DOMAIN | 完整域名 | 精确指定单个地址 | 子域名不会被匹配 |
| DOMAIN-SUFFIX | 域名后缀 | 一个网站及其全部子域名 | 日常最常用 |
| DOMAIN-KEYWORD | 域名中包含的词 | 临时覆盖一类域名 | 范围宽,容易误伤 |
| GEOSITE | 域名分类数据 | 按服务类别批量匹配 | 依赖外部数据文件 |
| IP-CIDR / IP-CIDR6 | 目标 IP 网段 | 无域名的直连 IP 连接 | 建议加 no-resolve |
| GEOIP | IP 归属地区 | 本地地区 IP 直连 | 依赖 IP 数据库准确度 |
| PROCESS-NAME | 发起连接的程序名 | 让某个软件整体直连或代理 | 多在 TUN 下才可用 |
| RULE-SET | 引用外部规则集 | 维护大量域名或 IP | 规则集需定期更新 |
| MATCH | 全部剩余连接 | 兜底 | 只能放在最后 |
规则集的来源和更新方式另有专文:规则集是什么:远程规则的更新与维护。
排序的五条原则
规则是按位置生效的,同样的几条规则换个顺序,结果可能完全不同。排序时可以遵循:
- 越精确越靠前。 完整域名放在后缀前,后缀放在关键词前。否则一条宽泛的关键词规则会“抢走”本该命中精确规则的连接。
- 拒绝类规则放在最前。 屏蔽广告或跟踪域名的规则若放在后面,可能已被前面的代理或直连规则截走。
- 域名规则放在 IP 规则之前。 匹配 IP 规则时,内核可能需要先把域名解析成 IP,这会增加延迟,也可能产生本地 DNS 查询。
- 中段的 IP 规则加 no-resolve。 让域名连接直接跳过这些 IP 规则,只让真正以 IP 发起的连接参与匹配。
- GEOIP 与 MATCH 放在最后两行。 地区 IP 规则用于兜住“域名规则没认出来、但目标在本地”的连接,MATCH 则兜住其余全部。
组合条件:逻辑规则的用途
有时一个条件不够精确,例如“某个程序访问某类域名时才走代理”。部分内核支持逻辑规则,用“与、或、非”把多个条件组合成一条:
- AND,((PROCESS-NAME,example-app),(DOMAIN-SUFFIX,example.net)),节点选择
逻辑规则写法的括号层级容易出错,加载失败时多数是括号不配对或内部条件用错了分隔符。它适合少数确有需要的场景,不建议用来代替普通的后缀规则;能用一条简单规则表达的,就不要写成组合条件,否则日后很难看懂当初的用意。
自定义规则应该放在哪里
很多人直接打开配置文件,在规则列表里加几行,结果下一次订阅更新后全部消失。原因是订阅更新会整份替换配置文件。更稳妥的做法:
- 使用客户端提供的覆写、合并或扩展配置功能,把自定义规则写成“插入到规则列表前部”;
- 只放少量真正需要的规则,大批量的域名应改用规则集;
- 每条自定义规则附带一个用途注释,日后清理时知道它为什么存在。
自定义规则放在前部是有意为之:它们代表你的明确意图,应当优先于机场下发的通用规则。订阅更新机制本身见 订阅链接导入与更新。
写错时的典型表现
| 表现 | 常见原因 |
|---|---|
| 客户端提示配置加载失败 | 缩进错误、使用了全角逗号、规则类型拼写错误 |
| 某条规则从不生效 | 被前面更宽泛的规则截走 |
| 加载成功但连接被拒 | 策略名称与策略组名称不完全一致 |
| 网页打开变慢 | IP 类规则过早出现且未加 no-resolve |
| 兜底规则失效 | MATCH 后面还有规则,或写了多条 MATCH |
策略名称必须与策略组名称逐字一致,包括空格、表情符号和大小写。机场配置的分组名常带有地区旗帜或符号,最省事的办法是从配置里直接复制分组名,而不是手动输入。分组本身怎么设计,见 Clash 策略组详解。
怎样确认规则真的生效
改完规则后,不要只凭“网页能打开”判断。可以这样核对:
- 重新加载配置,确认客户端没有报错;
- 打开客户端的连接或日志页面,访问目标网站;
- 在连接记录里查看这条连接命中的规则名称和最终使用的策略;
- 若命中的不是你新加的那条,往上查找是哪一条规则提前截走了它。
连接记录会直接显示“命中哪条规则、走哪个分组、用哪个节点”,这是判断规则问题最直接的依据。
小结
写 Clash 规则时,先确定三段式格式正确,再按“精确在前、拒绝在前、域名在 IP 前、兜底在最后”排序,自定义规则通过覆写功能注入而非直接改配置文件。客户端选择与安装见 桌面端客户端:Windows 与 macOS,其他排查主题可回到 规则分流与故障排查专题页。规则应在遵守所在地法律法规与平台条款的前提下使用。
常见问题
自己加的 Clash 规则为什么更新订阅后就没了?
订阅更新会用机场下发的整份配置覆盖本地配置,直接写在配置文件里的自定义规则会一起被替换。应使用客户端提供的覆写、合并或扩展配置功能,让自定义规则在每次更新后自动插入到规则列表前部。
IP 类规则后面的 no-resolve 有什么用?
它告诉内核:遇到域名连接时不要为了匹配这条 IP 规则而先做 DNS 解析,直接跳过。这样可以避免不必要的解析延迟和本地 DNS 查询,常用于放在规则列表中段的 IP 段规则。
兜底规则应该指向代理还是直连?
取决于你的使用习惯。多数配置让未命中的连接走代理,以免海外新域名访问失败;也有人让它直连以节省流量。无论选哪种,兜底规则都只能有一条,并且必须放在列表最后。
来源与更新
品牌字段来自本站品牌数据文件(整理自 2026-09-04 品牌清单,Vendor Data,官网待核实);测速截图为 2026-10-18 复核后发布的单次 Measured Data;AI 与流媒体均为 Not Tested。发布 2026-10-18,最近更新 2026-10-18。本页不承诺任何平台的收录、排名或引用。