Clash 開源生態梳理:核心、用戶端與規則集的關係

Clash 相關的倉庫數量多、名稱又彼此接近,把核心、圖形用戶端和規則集混為一談是很常見的起點。這篇按三層結構拆開來談:每一層由誰維護、什麼時候停止更新、設定裡的欄位到底由哪一層解析,最後給出一份判斷某個倉庫是否還值得關注的檢查清單。

三層結構:核心、用戶端與規則集

Clash 生態裡的專案可以歸成三層:核心負責解析設定、建立連線、執行分流,是唯一真正處理流量的部分;用戶端提供視窗、系統匣、訂閱管理與行程守護,本身不解析規則;規則集與資料檔只是名單,由核心在執行時讀取。三層之間透過兩種檔案互動——一份 YAML 設定,和一批規則資料。

分層的意義在於定位問題。訂閱更新失敗、連線建立不了、某些網域走錯分支,這三類故障分別落在用戶端、核心、規則集上。先判斷故障屬於哪一層,再去對應的倉庫找答案,比在用戶端裡反覆切換開關有效得多。

先記住一組對應關係

設定能不能跑起來由核心決定,介面好不好用由用戶端決定。同一份設定在 A 用戶端正常、在 B 用戶端報錯,先比對兩者內建的核心名稱與版本,而不是懷疑設定寫錯了。

核心主線:原版 ClashClash Premium 與 mihomo

原版核心與它的維護終點

原版核心指 Dreamacro/clash,以 Go 撰寫。現在通用的 proxiesproxy-groupsrules 這套 YAML 結構就是它定下來的,所有用戶端讀取的設定格式都源自這裡。2023 年 11 月前後,原版核心停止更新,倉庫轉為唯讀,同一時期 Clash for Windows 也從 GitHub 下架。

它的能力邊界需要記清楚:不支援 rule-providersproxy-providerstun,出站協定以 Shadowsocks、VMess、Trojan、Snell 為主,規則類型集中在 DOMAIN、DOMAIN-SUFFIX、IP-CIDR、GEOIP、MATCH。設定裡只要出現 tun: 欄位,原版核心就會直接報錯結束。

Clash Premium:閉源二進位檔,隨主線一起下線

Clash Premium 是原作者發佈的閉源免費核心,補上了 tunscriptrule-providersproxy-providers 四項能力,一度是 macOS 上 TUN 模式的主要選擇。它的發佈也隨原版主線一起停止,現在提到它只剩歷史價值:教學裡如果寫「請使用 Premium 核心」,那份文件大概率停在 2023 年之前。

Clash.Meta 與 mihomo:目前的事實主線

MetaCubeX 維護的 Clash.Meta 以原版為基礎補齊協定與設定能力,2024 年初更名為 mihomo,倉庫位址為 MetaCubeX/mihomo,執行檔名與預設設定目錄同步改為 mihomo。目前仍在更新的用戶端,內建核心基本上都是它或它的下游。

相對於原版,mihomo 的增量集中在四塊:

  • 出站協定:VLESS、Hysteria、Hysteria2、TUIC、WireGuard、SSH、ShadowTLS;
  • 設定能力:sub-rule、邏輯規則(AND / OR / NOT)、listenerssnifferfind-process-modegeox-url
  • 規則集格式:除了 YAML 與 text 之外,支援體積更小、載入更快的 mrs 二進位格式;
  • 資料檔:除了 geoip.dat 之外還可用 geoip.metadb,支援依 ASN 比對。

相容方向是單向的:原版能跑的設定基本上可以直接放到 mihomo 上執行,反過來則不成立。移轉時先用 mihomo -t -f config.yaml 驗證一遍,哪些欄位超出範圍一目了然。

核心能力對照(依設定欄位)
設定項目原版 ClashClash Premiummihomo
proxies / proxy-groups / rules支援支援支援
rule-providers / proxy-providers不支援支援支援
tun(虛擬網卡)不支援支援支援
script(JavaScript 覆寫)不支援支援支援
VLESS / Hysteria2 / TUIC不支援不支援支援
邏輯規則 / sub-rule / listeners不支援不支援支援
mrs 規則集格式不支援不支援支援

用戶端層:誰在維護,誰停在 2023 年

用戶端不定義設定格式,只決定三件事:內建哪個核心、設定檔放在哪、介面上開放哪些開關。所以挑用戶端的第一件事是看核心來源,第二件才是介面習慣。

常見用戶端與內建核心
用戶端平台內建核心狀態
Clash Verge RevWindows / macOS / Linuxmihomo活躍
FlClashWindows / macOS / Linux / Androidmihomo活躍
Clash NyanpasuWindows / macOS / Linuxmihomo維護中
ClashMetaForAndroidAndroidmihomo活躍
OpenClashOpenWrtmihomo活躍
Clash for Windows 0.20.39Windows原版核心2023 年 11 月停止更新
ClashX / ClashX PromacOS原版核心 / Premium停止更新
Clash for AndroidAndroid原版核心停止更新

Clash Verge 原倉庫停止更新後由社群接手為 Clash Verge Rev,核心換成 mihomo,訂閱管理與 profile 的組織方式延續下來。桌面端如果還在用 Clash for Windows,換到以 mihomo 為基礎的用戶端是改動最小的一步:YAML 本身不用動,把設定重新匯入一次即可。

iOS 是另一條路徑

iOS 上沒有直接沿用 Clash 核心的用戶端。App Store 上的 Stash 一類應用程式是自己實作規則引擎,只讀取 Clash 風格的 YAML。「iOS 能匯入 Clash 設定」說的是格式相容,不是核心相同。判斷方式很直接:tunscriptrule-providers 這些欄位在 iOS 上支援到什麼程度,以各 App 自己的文件為準,不能拿桌面端的經驗直接套用。

設定目錄:核心預設值與用戶端代管

核心單獨啟動時,原版預設讀取 ~/.config/clash/,Windows 下展開為 %USERPROFILE%\.config\clash\;mihomo 改為 ~/.config/mihomo/。帶介面的用戶端通常接管這件事,例如 Clash Verge Rev 把 profile 與規則快取放在自己的應用程式資料目錄(Windows 下為 %APPDATA%\io.github.clash-verge-rev.clash-verge-rev\),覆蓋安裝不會清掉訂閱。排查問題時,先確認核心實際讀的是哪份檔案,比反覆檢查 YAML 更有效。

規則集與資料檔:更新最頻繁的一層

規則集是純名單,不含任何網路實作。核心透過 rule-providers 拉取名單並用 RULE-SET 引用,或者透過 GEOSITEGEOIP 讀取編譯好的 dat 檔案。這一層更新最頻繁,也最容易被誤當成核心的一部分。

常用的幾個倉庫:

  • Loyalsoldier/clash-rules:依 domain 與 ipcidr 分組的 rule-provider,release 分支提供 reject.txtdirect.txtproxy.txtgfw.txtcncidr.txt 等檔案,可以直接寫進 rule-providers
  • blackmatrix7/ios_rule_script:依服務拆分的規則集,路徑形如 rule/Clash/<服務名>/<服務名>.yaml,串流與 AI 服務的細分名單幾乎都找得到;
  • MetaCubeX/meta-rules-dat:為 mihomo 編譯的 geosite.datgeoip.datgeoip.metadbcountry.mmdb,同時提供 mrs 格式的單條規則集,上游資料來自 v2fly 的 domain-list-community;
  • ACL4SSR/ACL4SSR:以 ACL4SSR_Online.ini 為代表的規則範本,通常搭配訂閱轉換工具使用;
  • tindy2013/subconverter:把非 Clash 格式的訂閱連結轉換成 Clash YAML,只做格式轉換,不參與執行。
rule-providers:
  reject:
    type: http
    behavior: domain
    format: yaml
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400
  cn-domain:
    type: http
    behavior: domain
    format: mrs
    url: "https://github.com/MetaCubeX/meta-rules-dat/raw/meta/geo/geosite/cn.mrs"
    path: ./ruleset/cn.mrs
    interval: 86400

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,cn-domain,DIRECT
  - GEOSITE,geolocation-!cn,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

這段設定裡,format: mrs 只有 mihomo 能讀;interval: 86400 的單位是秒,也就是每 24 小時檢查一次名單更新。rules 段依從具體到寬泛的順序排列,命中即停,最後一條 MATCH 作為最終比對,這也是判斷一份設定是否完整的最低要求。

GEOSITE / GEOIP 與 RULE-SET 的取捨

  • GEOSITEGEOIP 讀取本機 dat 檔案,比對在記憶體中完成,速度快,代價是整包體積大、更新粒度是整份資料庫;
  • RULE-SET 依 provider 拉取單一名單,粒度細、可替換,代價是每個 provider 一次 HTTP 請求與一份本機快取;
  • mihomo 裡 geodata-mode: true 時 GEOIP 規則讀 geoip.dat,預設走 country.mmdb;搭配 geox-url 可以把資料來源指向鏡像位址,避免下載失敗。

規則集與核心是兩條更新線

規則集倉庫停止更新不會讓核心報錯,只會讓新網域走錯分支;核心升級也不會自動替換你寫死的規則集位址。與其依賴訂閱每次自動更新,不如每季檢視一下所引用倉庫的最近提交時間。

設定相容性:一份可執行的檢查順序

  1. 先看核心名稱與版本。用戶端設定裡顯示 mihomoClash.Meta 的屬於 Meta 分支;只寫 Clash、更新時間停在 2023 年的,是原版核心。
  2. 再查高階欄位。設定裡出現 tunrule-providersproxy-providersscriptlistenerssub-rule 中任意一項,原版核心就會直接報錯結束。
  3. 用核心內建的驗證參數跑一遍:mihomo -t -f config.yaml 只解析不啟動,原版核心同樣支援 -t
  4. 讀日誌裡的第一條錯誤。unsupported proxy type 指向協定,unsupported rule type 指向規則,兩者都是核心版本問題,改設定寫法沒有用。
  5. 最後看連接埠。確認 mixed-port(常見寫法 7890)與 external-controller(常見寫法 127.0.0.1:9090)沒有被占用;能打開面板說明核心已經正常啟動,剩下的問題都在規則層。

別用「能匯入訂閱」判斷相容性

匯入只驗證 YAML 語法能不能解析。tun、協定類型、規則類型這些欄位是否被核心辨識,要等核心真正啟動才會顯露出來。

該關注哪個倉庫

依使用情境對應到具體倉庫:

  • 桌面端日常使用:關注用戶端自己的 release 節奏,核心更新跟著用戶端走;需要單獨升級時,在用戶端的設定裡找到核心版本區塊手動更新。
  • 需要 TUN、VLESS、Hysteria2 或邏輯規則:以 MetaCubeX/mihomo 倉庫與它的官方文件為準,設定欄位以文件為準,不要以舊教學為準。
  • 路由器:OpenWrt 用 OpenClash,或透過 SSH 部署 ShellClash,兩者內建的都是 mihomo。
  • 分流準確性:Loyalsoldier/clash-rules 負責按需拉取的名單,MetaCubeX/meta-rules-dat 負責 dat 與 mrs 資料,這兩個倉庫的提交時間決定了新網域能不能被正確分流。
  • 訂閱格式轉換:subconverter 或 Sub-Store,只做格式轉換,不參與執行。

判斷一個 Clash 相關倉庫是否還值得關注,看三點就夠了:最近一次提交時間、README 裡寫明的核心相依、issue 區是否還有維護者回覆。三層結構裡任何一層停止更新,影響範圍都只落在這一層——核心停更影響協定與設定欄位,用戶端停更影響系統整合與介面,規則集停更影響分流準確度。把這三件事分開看,就不會因為某個用戶端下線而懷疑整份設定作廢。

下載Clash