Clash 规则怎么写:规则类型、匹配顺序与 no-resolve
本文以 mihomo(Clash Meta)内核的官方文档为准。ACL4SSR 的 .list 规则碎片里每一行就是一条规则,只是省略了最后的策略名,由订阅转换在引用时统一指定。
规则的格式#
一条规则由三部分组成:
规则类型,匹配内容,策略
- DOMAIN-SUFFIX,google.com,PROXY
- GEOIP,CN,DIRECT
- MATCH,PROXY
匹配顺序#
规则从上到下匹配,列表顶部的规则优先级高于下面的规则,命中一条就停止。所以去广告、局域网直连这类规则通常放在最前面,MATCH 放在最后兜底。
文档还特别说明:如果请求是 UDP,而命中的代理节点不支持 UDP,会继续向下匹配。
常用规则类型#
| 类型 | 作用 | 例子 |
|---|---|---|
DOMAIN | 匹配完整域名 | DOMAIN,ad.com,REJECT |
DOMAIN-SUFFIX | 匹配域名后缀。google.com 能匹配 www.google.com、mail.google.com 和 google.com,但不匹配 content-google.com | DOMAIN-SUFFIX,google.com,PROXY |
DOMAIN-KEYWORD | 域名包含关键字即匹配 | DOMAIN-KEYWORD,google,PROXY |
IP-CIDR / IP-CIDR6 | 匹配 IP 地址范围,两者效果一样,IP-CIDR6 只是别名 | IP-CIDR,127.0.0.0/8,DIRECT,no-resolve |
GEOIP | 匹配 IP 所属国家代码 | GEOIP,CN,DIRECT |
GEOSITE | 匹配 Geosite 数据库中的域名分类 | GEOSITE,youtube,PROXY |
PROCESS-NAME | 按发起连接的进程名匹配 | PROCESS-NAME,curl,PROXY |
RULE-SET | 引用一个规则集合(rule provider) | RULE-SET,providername,PROXY |
MATCH | 匹配所有请求,用作最后的兜底 | MATCH,PROXY |
no-resolve 是什么#
no-resolve 只对目标 IP 类规则(如 IP-CIDR、GEOIP)有效。当一个域名请求匹配到 IP 类规则时,内核会先做 DNS 解析,拿到 IP 再判断是否命中;加上 no-resolve 就跳过这次解析。
文档同时说明:如果更早的规则已经触发过 DNS 解析,带 no-resolve 的 IP 规则仍然会用解析结果来匹配。
和 ACL4SSR 的关系#
ACL4SSR 的规则碎片大量使用 DOMAIN-SUFFIX、DOMAIN-KEYWORD 和 IP-CIDR。subconverter 在转换时按 .ini 配置里 ruleset= 的先后顺序展开这些碎片,所以 .ini 里规则集的顺序就是最终配置里的匹配顺序。
常见问题
- Clash 规则的匹配顺序是怎样的?
- 规则从上到下匹配,顶部的规则优先级更高,命中一条就停止;MATCH 匹配所有请求,一般放在最后兜底。
- no-resolve 有什么用?
- no-resolve 只对目标 IP 类规则有效,作用是在匹配该规则时跳过 DNS 解析;如果更早的规则已经触发过解析,仍会用解析结果匹配。
- DOMAIN-SUFFIX 和 DOMAIN-KEYWORD 有什么区别?
- DOMAIN-SUFFIX 匹配域名后缀,google.com 能匹配 www.google.com 和 google.com,但不匹配 content-google.com;DOMAIN-KEYWORD 只要域名包含该关键字就匹配。