三層結構:核心、用戶端與規則集
Clash 生態裡的專案可以歸成三層:核心負責解析設定、建立連線、執行分流,是唯一真正處理流量的部分;用戶端提供視窗、系統匣、訂閱管理與行程守護,本身不解析規則;規則集與資料檔只是名單,由核心在執行時讀取。三層之間透過兩種檔案互動——一份 YAML 設定,和一批規則資料。
分層的意義在於定位問題。訂閱更新失敗、連線建立不了、某些網域走錯分支,這三類故障分別落在用戶端、核心、規則集上。先判斷故障屬於哪一層,再去對應的倉庫找答案,比在用戶端裡反覆切換開關有效得多。
先記住一組對應關係
設定能不能跑起來由核心決定,介面好不好用由用戶端決定。同一份設定在 A 用戶端正常、在 B 用戶端報錯,先比對兩者內建的核心名稱與版本,而不是懷疑設定寫錯了。
核心主線:原版 Clash、Clash Premium 與 mihomo
原版核心與它的維護終點
原版核心指 Dreamacro/clash,以 Go 撰寫。現在通用的 proxies、proxy-groups、rules 這套 YAML 結構就是它定下來的,所有用戶端讀取的設定格式都源自這裡。2023 年 11 月前後,原版核心停止更新,倉庫轉為唯讀,同一時期 Clash for Windows 也從 GitHub 下架。
它的能力邊界需要記清楚:不支援 rule-providers、proxy-providers 與 tun,出站協定以 Shadowsocks、VMess、Trojan、Snell 為主,規則類型集中在 DOMAIN、DOMAIN-SUFFIX、IP-CIDR、GEOIP、MATCH。設定裡只要出現 tun: 欄位,原版核心就會直接報錯結束。
Clash Premium:閉源二進位檔,隨主線一起下線
Clash Premium 是原作者發佈的閉源免費核心,補上了 tun、script、rule-providers、proxy-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)、listeners、sniffer、find-process-mode、geox-url; - 規則集格式:除了 YAML 與 text 之外,支援體積更小、載入更快的
mrs二進位格式; - 資料檔:除了
geoip.dat之外還可用geoip.metadb,支援依 ASN 比對。
相容方向是單向的:原版能跑的設定基本上可以直接放到 mihomo 上執行,反過來則不成立。移轉時先用 mihomo -t -f config.yaml 驗證一遍,哪些欄位超出範圍一目了然。
| 設定項目 | 原版 Clash | Clash Premium | mihomo |
|---|---|---|---|
| proxies / proxy-groups / rules | 支援 | 支援 | 支援 |
| rule-providers / proxy-providers | 不支援 | 支援 | 支援 |
| tun(虛擬網卡) | 不支援 | 支援 | 支援 |
| script(JavaScript 覆寫) | 不支援 | 支援 | 支援 |
| VLESS / Hysteria2 / TUIC | 不支援 | 不支援 | 支援 |
| 邏輯規則 / sub-rule / listeners | 不支援 | 不支援 | 支援 |
| mrs 規則集格式 | 不支援 | 不支援 | 支援 |
用戶端層:誰在維護,誰停在 2023 年
用戶端不定義設定格式,只決定三件事:內建哪個核心、設定檔放在哪、介面上開放哪些開關。所以挑用戶端的第一件事是看核心來源,第二件才是介面習慣。
| 用戶端 | 平台 | 內建核心 | 狀態 |
|---|---|---|---|
| Clash Verge Rev | Windows / macOS / Linux | mihomo | 活躍 |
| FlClash | Windows / macOS / Linux / Android | mihomo | 活躍 |
| Clash Nyanpasu | Windows / macOS / Linux | mihomo | 維護中 |
| ClashMetaForAndroid | Android | mihomo | 活躍 |
| OpenClash | OpenWrt | mihomo | 活躍 |
| Clash for Windows 0.20.39 | Windows | 原版核心 | 2023 年 11 月停止更新 |
| ClashX / ClashX Pro | macOS | 原版核心 / Premium | 停止更新 |
| Clash for Android | Android | 原版核心 | 停止更新 |
Clash Verge 原倉庫停止更新後由社群接手為 Clash Verge Rev,核心換成 mihomo,訂閱管理與 profile 的組織方式延續下來。桌面端如果還在用 Clash for Windows,換到以 mihomo 為基礎的用戶端是改動最小的一步:YAML 本身不用動,把設定重新匯入一次即可。
iOS 是另一條路徑
iOS 上沒有直接沿用 Clash 核心的用戶端。App Store 上的 Stash 一類應用程式是自己實作規則引擎,只讀取 Clash 風格的 YAML。「iOS 能匯入 Clash 設定」說的是格式相容,不是核心相同。判斷方式很直接:tun、script、rule-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 引用,或者透過 GEOSITE、GEOIP 讀取編譯好的 dat 檔案。這一層更新最頻繁,也最容易被誤當成核心的一部分。
常用的幾個倉庫:
Loyalsoldier/clash-rules:依 domain 與 ipcidr 分組的 rule-provider,release 分支提供reject.txt、direct.txt、proxy.txt、gfw.txt、cncidr.txt等檔案,可以直接寫進rule-providers;blackmatrix7/ios_rule_script:依服務拆分的規則集,路徑形如rule/Clash/<服務名>/<服務名>.yaml,串流與 AI 服務的細分名單幾乎都找得到;MetaCubeX/meta-rules-dat:為 mihomo 編譯的geosite.dat、geoip.dat、geoip.metadb與country.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 的取捨
GEOSITE、GEOIP讀取本機 dat 檔案,比對在記憶體中完成,速度快,代價是整包體積大、更新粒度是整份資料庫;RULE-SET依 provider 拉取單一名單,粒度細、可替換,代價是每個 provider 一次 HTTP 請求與一份本機快取;- mihomo 裡
geodata-mode: true時 GEOIP 規則讀geoip.dat,預設走country.mmdb;搭配geox-url可以把資料來源指向鏡像位址,避免下載失敗。
規則集與核心是兩條更新線
規則集倉庫停止更新不會讓核心報錯,只會讓新網域走錯分支;核心升級也不會自動替換你寫死的規則集位址。與其依賴訂閱每次自動更新,不如每季檢視一下所引用倉庫的最近提交時間。
設定相容性:一份可執行的檢查順序
- 先看核心名稱與版本。用戶端設定裡顯示
mihomo或Clash.Meta的屬於 Meta 分支;只寫Clash、更新時間停在 2023 年的,是原版核心。 - 再查高階欄位。設定裡出現
tun、rule-providers、proxy-providers、script、listeners、sub-rule中任意一項,原版核心就會直接報錯結束。 - 用核心內建的驗證參數跑一遍:
mihomo -t -f config.yaml只解析不啟動,原版核心同樣支援-t。 - 讀日誌裡的第一條錯誤。
unsupported proxy type指向協定,unsupported rule type指向規則,兩者都是核心版本問題,改設定寫法沒有用。 - 最後看連接埠。確認
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 區是否還有維護者回覆。三層結構裡任何一層停止更新,影響範圍都只落在這一層——核心停更影響協定與設定欄位,用戶端停更影響系統整合與介面,規則集停更影響分流準確度。把這三件事分開看,就不會因為某個用戶端下線而懷疑整份設定作廢。