手寫 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