手写 Clash 规则的最大痛点是维护困难:随着规则条目越来越多,配置文件变得臃肿,更新某类网站的域名列表时还要手动修改 YAML。Rule Provider 是 Clash 提供的模块化规则管理机制——将规则列表单独存放在外部文件,Clash 定期自动拉取更新,配置文件只需引用而不需要内联所有条目。本文详解其完整用法与最佳实践。
Rule Provider 的基本结构
Rule Provider 由两部分组成:规则集文件(域名/IP 列表)和配置文件中的引用声明。规则集文件支持两种格式:
- YAML 格式:每条规则写一行,形如
DOMAIN,example.com或IP-CIDR,8.8.8.8/32,有显式的类型前缀,适合复杂混合规则集。 - text 格式:每行直接写域名或 IP(无类型前缀),Clash 根据
behavior字段自动推断类型,文件更简洁,适合纯域名或纯 IP 列表。
payload: - DOMAIN,google.com - DOMAIN-SUFFIX,youtube.com - DOMAIN-SUFFIX,github.com - DOMAIN-KEYWORD,openai - IP-CIDR,8.8.8.8/32,no-resolve
baidu.com taobao.com jd.com bilibili.com iqiyi.com
在配置文件中声明 Rule Provider
使用 rule-providers 字段声明规则集来源,支持 http(远程 URL)和 file(本地路径)两种类型。
rule-providers: proxy-list: type: http behavior: classical # 规则格式:classical / domain / ipcidr url: https://raw.githubusercontent.com/yourrepo/rules/proxy.yaml path: ./ruleset/proxy-list.yaml interval: 86400 # 自动更新间隔,单位秒(此处为 24 小时) direct-list: type: http behavior: domain url: https://raw.githubusercontent.com/yourrepo/rules/direct.txt path: ./ruleset/direct-list.txt interval: 86400 cn-ip: type: http behavior: ipcidr url: https://raw.githubusercontent.com/yourrepo/rules/cn-ip.txt path: ./ruleset/cn-ip.txt interval: 604800 # IP 列表更新频率可以低一些(7 天)
behavior 字段详解
behavior 决定了 Clash 如何解析和索引规则集,直接影响匹配性能:
- classical:规则集中每条都有完整类型前缀(如
DOMAIN-SUFFIX,google.com),可以混合不同类型的规则。灵活,但匹配速度略低。 - domain:规则集中每行只有域名,Clash 将其建立为域名树(Trie),支持通配符前缀匹配(如
+.google.com匹配所有子域名)。纯域名场景下性能最优。 - ipcidr:规则集中每行只有 CIDR 格式的 IP 段,Clash 建立基数树索引,查找速度极快。适合国内 IP 直连等场景。
尽量将规则集按类型拆分:域名规则使用
domain behavior,IP 规则使用 ipcidr behavior,避免都用 classical。专用 behavior 的内部数据结构针对其类型优化,查找速度可提升数倍。在 rules 中引用规则集
声明好 rule-providers 后,在 rules 字段中使用 RULE-SET 关键字引用:
rules: - RULE-SET,direct-list,DIRECT # 直连域名列表 → 直连 - RULE-SET,proxy-list,节点选择 # 代理域名列表 → 代理策略组 - RULE-SET,cn-ip,DIRECT # 国内 IP → 直连 - GEOIP,CN,DIRECT # 兜底:GEOIP 国内 IP → 直连 - MATCH,节点选择 # 最终匹配 → 代理
规则优先级与顺序设计
Clash 按 rules 列表从上到下匹配,命中第一条即停止。因此规则顺序至关重要。推荐的顺序策略如下:
- 内网 / 本地域名(
DOMAIN-SUFFIX,.local、IP-CIDR,192.168.0.0/16)置于最前,防止内网请求被错误代理。 - 已知直连域名规则集(国内主流网站)。
- 已知代理域名规则集(境外主要服务)。
- GEOIP,CN,DIRECT 兜底直连所有国内 IP。
- MATCH 兜底代理所有未匹配流量。
避免将
MATCH,DIRECT 作为最终规则——这会让所有未明确标注的境外流量直连,无法享受代理加速,且境外连接可能极慢甚至失败。本地 file 类型规则集:离线使用
网络受限或需要自定义规则时,使用 type: file 指向本地文件。路径相对于 Clash 的 Home 目录(通常为 ~/.config/clash/ 或 ~/.local/share/mihomo/)。
rule-providers: my-custom-rules: type: file behavior: domain path: ./ruleset/my-custom.txt