先釐清核心、客戶端與 Clash Premium
比較核心前,先釐清三個層次。核心負責解析設定、建立代理連線、處理 DNS 與比對規則;桌面或行動裝置客戶端負責管理設定、系統匣選單、更新訂閱及申請權限;訂閱則提供節點、策略組與規則資料。客戶端名稱中有 Clash,不代表它執行的是原版 Clash,也不代表支援所有 mihomo 設定。
原版 Clash 開源核心與 Clash Premium 的功能也不相同。Premium 是原專案提供的閉源增強核心,過去包含 TUN、規則集等進階功能。mihomo 是從 Clash Meta 延續而來的開源核心,保留許多 Clash 風格的 YAML 設定結構,並持續擴充協定、路由與 DNS 功能。原專案已停止維護,遷移時應依實際執行的二進位版本確認,不要把舊客戶端名稱當成功能清單。
| 對象 | 主要職責 | 確認位置 |
|---|---|---|
| 原版 Clash 開源核心 | 傳統代理協定、策略組與規則分流 | 核心版本與設定解析記錄 |
| Clash Premium | 原版基本功能與過往增強功能 | Premium 建置日期與對應文件 |
| mihomo | 新增協定、規則集擴充、TUN 與 DNS 設定 | 實際執行的 mihomo 版本 |
| 圖形介面客戶端 | 匯入訂閱、啟動核心、管理權限與覆寫設定 | 客戶端設定、啟動記錄與執行設定 |
用指令確認實際版本
mihomo -v
mihomo -t -d ./mihomo-data -f ./config.yaml
第一個指令可查看目前二進位檔的版本資訊;第二個指令指定工作目錄與設定檔,執行設定測試。這些檔案必須事先存在;測試通過只代表設定可被解析,不代表節點可用。圖形介面客戶端可能使用內建核心,終端機中的 mihomo 不一定與客戶端啟動的檔案相同,也應一併檢查客戶端記錄。
新增協定:VLESS、REALITY 與 Hysteria2
mihomo 與舊核心最直接的差異,在於能否辨識訂閱中的節點類型及其參數。原版 Clash 常見的協定包括 Shadowsocks、VMess、Trojan、SOCKS 和 HTTP。mihomo 擴充支援 VLESS、Hysteria2、TUIC 等協定,也支援特定協定組合中的 REALITY。不能只把 YAML 的 type 改掉,就將舊節點轉換成另一種協定;伺服器端必須提供相應的連線入口。
| 功能 | mihomo 設定重點 | 常見誤解 |
|---|---|---|
| VLESS | 確認 UUID、傳輸方式、TLS 與 flow | 直接將 VMess 節點的類型改成 VLESS |
| REALITY | 確認伺服器端要求的 SNI、公鑰與 short-id | 將 REALITY 當成獨立的節點類型 |
| Hysteria2 | 使用 type: hysteria2,確認密碼與 TLS 參數 | 沿用 Hysteria 第一代的整份設定 |
| TUIC | 確認伺服器版本、驗證欄位與 UDP 連線狀態 | 只測試 TCP 連接埠就判定節點正常 |
分別檢查協定支援與網路條件
Hysteria2 與 TUIC 使用 QUIC,連線仰賴 UDP。區域網路、防火牆或電信業者線路若限制 UDP,即使設定測試通過,也可能發生交握逾時。VLESS 是否可用則須視實際傳輸方式判斷,不能把所有 VLESS 節點都視為相同的網路行為。協定名稱本身也無法保證延遲更低或吞吐量更高。
- 顯示不支援節點類型:先確認客戶端是否確實啟動 mihomo,以及訂閱是否針對該核心輸出。
- 顯示驗證失敗:確認 UUID、密碼與伺服器協定版本,不要先修改 DNS。
- 顯示 TLS 交握錯誤:確認系統時間、SNI 與憑證要求,不要把略過憑證驗證當成一般修復方式。
- QUIC 節點持續逾時:換個網路進行交叉測試,再檢查 UDP 對外連線與伺服器狀態。
rule-providers:沿用架構,確認 behavior 與 format
rule-providers 並非 mihomo 獨有,Clash Premium 也支援這項機制。遷移時通常可以沿用「宣告規則集,再以 RULE-SET 引用」的基本架構。規則集用來描述比對目標,而 rules 中的引用則指定命中後採用的策略;兩者不要混在一起。
本機 domain 規則集範例
請將以下片段合併至現有設定中使用。此設定會將範例網域規則導向 DIRECT,不依賴節點名稱。工作目錄中必須有 rules/local-domains.yaml 檔案;若已有 rule-providers 或 rules,應合併內容,不要重複建立同名的頂層鍵。
rule-providers:
local-domains:
type: file
behavior: domain
format: yaml
path: ./rules/local-domains.yaml
rules:
- RULE-SET,local-domains,DIRECT
- MATCH,DIRECT
rules/local-domains.yaml 的檔案內容:
payload:
- '+.example.com'
- 'intranet.example.net'
+.example.com 用來比對該網域及其子網域。此範例採用直連作為預設策略,只示範引用方式,不能直接取代現有訂閱中的代理設定。實際遷移時,應保留自己的代理策略組與末尾的預設規則。
三種 behavior 不能互換
domain:項目是網域或支援的網域比對表示式,不含DOMAIN-SUFFIX前綴。ipcidr:項目是 IP 網段,例如192.168.0.0/16,不是完整的規則語句。classical:項目是規則表示式,例如DOMAIN-SUFFIX,example.com,通常不會在項目結尾寫上策略名稱。
如果把 DOMAIN-SUFFIX,example.com 放進 behavior: domain 的檔案,即使 YAML 縮排正確,內容格式仍不相符。檢查規則集時,應同時查看提供者宣告與下載後的檔案,不要只看副檔名。
mihomo 支援的規則集格式
mihomo 支援 YAML、純文字及 MRS 等規則集格式。MRS 是規則集專用的二進位格式,適用於 domain 與 ipcidr,不適用於 classical。不能因此推定舊版 Premium 設定可以直接讀取 MRS。採用這些格式前,應確認所用 mihomo 版本及規則來源的說明,避免將較新的設定欄位複製到舊核心中。
規則仍然依序由上而下比對。若將 MATCH 放在規則集引用前,後續規則就無法正常參與比對。排查分流錯誤時,優先查看連線詳細資訊中的命中規則與實際策略,不要只看策略組目前選取的節點。
TUN 實作:堆疊選擇、路由接管與系統權限
系統代理與 TUN 的流量入口不同。系統代理會讓遵循系統設定的應用程式連至代理連接埠;TUN 則會建立虛擬網路介面,配合路由規則接收 IP 流量。TUN 較適合處理不遵循系統代理設定的應用程式,但特定連線是否會被接管,仍受路由、介面選擇、排除項目及作業系統權限影響。
原版開源 Clash 與 Premium 支援的 TUN 功能範圍不同,不能一概而論地說「所有 Clash 都有 TUN」。Premium 過去的 TUN 方案與 gVisor 堆疊有關;mihomo 則提供 system、gvisor、mixed 等堆疊選項。實際支援範圍須依平台與版本而定,不能直接套用其他核心的 TUN 設定區段。
| stack 值 | 處理方式 | 選擇建議 |
|---|---|---|
system | 採用與系統網路堆疊相關的實作 | 先使用客戶端預設值建立可運作的基準 |
gvisor | 透過使用者空間網路堆疊處理流量 | 用於比對相容性,不預設一定較快 |
mixed | 結合 system 的 TCP 與 gVisor 的 UDP 處理方式 | 確認目前平台支援後再進行測試 |
桌面環境的設定片段
mixed-port: 7890
allow-lan: false
mode: rule
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
此處的 7890 是範例混合代理連接埠,並非所有客戶端的固定值。auto-route 用於自動設定路由,auto-detect-interface 則協助選擇對外介面;這些設定不能取代權限授予。Windows 通常需要透過客戶端服務或提權機制;Linux 需要適當的網路管理權限;macOS 則須依客戶端實作完成授權。
- 關閉其他 VPN 或另一個代理客戶端的 TUN,先減少路由衝突。
- 先確認系統代理模式可正常運作,再單獨啟用 TUN,避免同時引入兩組問題。
- 檢查記錄是否出現建立虛擬介面失敗、加入路由失敗或權限不足等訊息。
- 切換 Wi-Fi、有線網路或從休眠狀態恢復後,重新檢查對外介面與路由。
DNS 與 Fake-IP:保留機制,重新確認解析路徑
Fake-IP 並不是 mihomo 新增的功能。它會透過位址映射建立網域與連線之間的關聯,協助核心依網域比對規則。遷移時真正需要留意的是:DNS 查詢是否進入核心、哪些網域需要回傳真實位址,以及代理伺服器網域使用哪條解析路徑。
分開測試 DNS 與 TUN
dns:
enable: true
listen: 127.0.0.1:7874
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '*.lan'
- 'localhost'
nameserver:
- 223.5.5.5
- 119.29.29.29
以下片段用來示範解析行為:DNS 監聽本機的 7874,Fake-IP 使用 198.18.0.1/16 範圍,上游則是兩個明確的 IPv4 DNS 位址。上游 DNS 應依實際網路與隱私需求選擇,這裡列出的位址不保證適用於所有線路。fake-ip-filter 只會排除 Fake-IP 位址分配,不代表強制直連規則,也不能取代本機 DNS 伺服器設定。
在已安裝 dig 的環境中,可直接查詢核心 DNS:
dig @127.0.0.1 -p 7874 example.com A
未命中篩選項目時,回應通常會出現設定範圍內的映射位址。這是預期的運作方式,不代表網域伺服器回傳了錯誤的公網 IP。接著連線至該網域,再檢查核心連線記錄,確認連線能對應到網域並命中預期規則。
加密 DNS 與節點網域解析
- 瀏覽器獨立 DoH:瀏覽器可能會繞過系統 DNS 路徑。排查時先統一 DNS 解析入口,再比較結果。
- TUN 的 DNS 劫持:
any:53用於傳統 DNS 流量,不能解讀成可自動接管所有 DoH、DoT 要求。 - 節點網域解析:mihomo 可透過
proxy-server-nameserver指定代理伺服器網域的解析器,減少啟動時解析路徑彼此依賴的問題。 - 規則影響 DNS 對外連線:
respect-rules等設定會改變 DNS 連線的路由行為。必須依目前版本說明搭配設定,不能只啟用單一選項。
區域網路服務存取異常時,應確認本地域名後綴、路由器 DNS 與網段規則。只新增 *.lan 無法涵蓋企業內部使用的所有網域。切換增強模式後,也要考量瀏覽器、系統與應用程式快取;快取中舊的映射位址可能會短暫保留。
從 Clash Premium 遷移至 mihomo 的自我檢查步驟
遷移的重點不是重寫所有規則,而是找出依賴舊核心的部分。大多數基本欄位、傳統節點與規則語句都可作為起點,但不應原封不動保留 Premium 的腳本設定、舊實驗性欄位及特定 TUN 參數。mihomo 不能視為 Premium 腳本介面的直接替代品。
- 備份設定與執行環境:保留目前可用的 YAML,記錄監聽連接埠、選用的策略組、系統代理與 TUN 狀態。訂閱網址應存放於安全的位置,切勿公開分享。
- 確認訂閱輸出格式:優先使用服務提供者提供的 mihomo 或 Clash Meta 格式。若節點使用 VLESS、Hysteria2,請確認協定參數完整。
- 執行設定測試:執行
mihomo -t,先處理未知協定、欄位型別、規則檔案路徑與策略名稱錯誤。 - 只測試系統代理:先關閉 TUN,使用指定連接埠驗證節點與規則。例如實際連接埠為
7890時,可將支援代理的應用程式設為使用127.0.0.1:7890。 - 確認規則集:檢查
behavior、format、本機檔案內容與規則順序,並確認引用的策略組確實存在。 - 分別啟用 DNS 與 TUN:依序檢查權限、介面、路由與解析。每次只變更一個變數,並保留記錄以便前後比對。
- 確認客戶端覆寫設定:檢查最終執行的設定。客戶端可能會合併連接埠、DNS、TUN 或規則設定,因此編輯訂閱來源檔案不一定會改變實際執行值。
在可重現的條件下比較速度
擴充協定不代表速度會自動提升。比較兩個核心時,應固定節點、測試目標、網路與測試時段,並記錄單一連線下載速度、並行處理效能及 CPU 使用率。延遲測試只反映對指定目標的一次請求耗時,不能取代大型檔案的傳輸量測,也無法證明所有網站都使用同一條線路。
若需要新增協定、持續更新的規則集功能或更細緻的 DNS 設定,mihomo 是值得優先確認的核心。若只需要傳統協定與簡易系統代理,選擇時仍應著重客戶端的維護狀態、目前的系統相容性,以及設定是否容易管理。可先在術語表確認 Fake-IP、策略組與規則集的概念,再依照設定教學逐步測試。