mihomo 核心有哪些新功能?與原版 Clash 的功能差異一覽
整理 mihomo 新增的協定支援、規則集與 GEO 資料處理、TUN 強化等功能,並比較原版 Clash 的設定方式差異。
比較範圍:原版 Clash、Premium 與 mihomo
mihomo 是 Clash Meta 專案更名後採用的核心名稱。它沿用 Clash 的 YAML 設定架構,並持續擴充出站協定、規則表達方式、DNS 與流量接管功能。用戶端視窗仍顯示「Clash」或「Meta」,不代表目前執行的就是原版 Clash;介面名稱、設定格式名稱與核心名稱應分開判斷。
本文所稱的「原版 Clash」,限定為原專案停止維護前的開源核心,不包含 Clash Premium 的功能。Premium 曾提供 TUN、規則提供者等擴充功能,因此「原版開源核心沒有某項功能」,不代表歷來所有 Clash 分支都沒有。這項區分對舊設定檔的移轉尤其重要。
| 功能 | 原版開源 Clash | mihomo |
|---|---|---|
| HTTP、SOCKS、SS、VMess、Trojan 等常見出站協定 | 支援,實際參數依版本而異 | 沿用支援,並擴充部分參數 |
| VLESS、REALITY、Hysteria2、TUIC | 無法直接使用 mihomo 的設定寫法 | 支援,須符合協定與伺服器端參數 |
| 規則提供者 rule-providers | 不是原版開源核心的通用功能 | 支援多種行為類型與檔案格式 |
| GEOSITE 與邏輯規則 | 不支援 mihomo 對應的擴充寫法 | 支援,須準備相應資料或規則 |
| TUN 流量接管與 DNS 劫持 | 不提供 mihomo 這套設定方式 | 支援,會受系統權限與路由環境影響 |
| Fake-IP DNS | 已有相關功能 | 沿用並擴充,並非首次導入 |
協定擴充:先看訂閱中的 type,再檢查傳輸參數
最容易察覺的差異是新增了出站協定。舊版核心遇到 type: hysteria2 或 type: vless 時,可能在載入階段就回報不支援的代理類型。調整策略群組或規則順序都無法解決,因為出站連線根本尚未建立。
VLESS 與 REALITY 並非可互換的節點類型
VLESS 是代理協定;REALITY 則是可用於相應出站設定的安全握手機制。在 mihomo 中,VLESS 節點通常以 type: vless 宣告,REALITY 相關設定則位於 reality-opts。直接把節點類型改成 reality,並不等於完成轉換。
uuid是驗證參數,必須與伺服器端設定一致。servername、reality-opts.public-key和short-id必須依照伺服器端提供的資訊填寫,不能只憑網域名稱猜測。flow、傳輸方式與指紋選項之間也有搭配限制;只新增一個欄位,無法將既有的 VMess 節點轉成 VLESS 節點。
Hysteria2 與 TUIC 需要可用的 UDP 連線
Hysteria2 與 TUIC 都以 QUIC 為基礎,能否建立連線不只取決於核心是否支援。如果目前的網路封鎖或嚴格限制 UDP,TCP 節點可用,但這兩類節點逾時並不矛盾。Hysteria 與 Hysteria2 也不是只改名稱的同一套設定,請依訂閱實際宣告的協定類型設定。
例如伺服器端監聽 UDP 443 時,請確認本機防火牆、上游網路及伺服器安全性群組都允許該連接埠。瀏覽器可透過 TCP 443 開啟網頁,不代表同一個位址上的 UDP 通道也能使用。也不要將切換協定說成一定能加速:鏈路封包遺失、伺服器容量與限速策略都會影響結果。
規則集擴充:從內嵌 rules 到獨立維護的資料檔案
原版 Clash 已具備依序比對的規則機制,mihomo 並未改變「第一條符合的規則決定出站」這項基本邏輯。擴充之處主要在規則來源與表達能力:可透過 rule-providers 管理外部規則集,再以 RULE-SET 引用;也能使用 AND、OR、NOT 等邏輯規則組合條件。
本機規則提供者的基本結構
以下兩段請分別存成主設定檔與規則檔。範例只使用 DIRECT,用於確認規則載入結構,不會自動建立代理節點。請先在工作目錄建立 rules 資料夾,再將檔案放入其中;相對路徑會依核心執行環境解析,不一定是桌面上看到的訂閱檔位置。
# 主設定檔中的相關片段
rule-providers:
work-domains:
type: file
behavior: domain
format: yaml
path: ./rules/work-domains.yaml
rules:
- RULE-SET,work-domains,DIRECT
- MATCH,DIRECT
# ./rules/work-domains.yaml
payload:
- '+.example.com'
- 'example.org'
behavior: domain 表示檔案內容採用網域比對模式,不應直接在其中混入 IP-CIDR,192.168.0.0/16。若要在同一個規則集中放入多種規則語句,請選擇 classical,並依其格式整理內容。
- domain:適合用來整理網域清單。
- ipcidr:適合用來整理 IP 網段清單。
- classical:適合包含多種規則類型的規則集。
- mrs:是 mihomo 支援的二進位規則格式,主要適用於 domain、ipcidr 行為;並非將任意 YAML 檔案改個副檔名就能使用。
規則提供者與節點提供者也不能混為一談。rule-providers 提供比對條件,proxy-providers 提供代理節點。訂閱更新成功,只代表對應資源已完成更新,不代表另一類資源也已下載或生效。
GEO 資料:GEOIP 查 IP 位址,GEOSITE 查網域分類
GEOIP 規則並非 mihomo 獨有;原版 Clash 已能根據地理資料比對 IP。mihomo 的改進之一,是加入 GEOSITE 等資料驅動功能,並提供不同的 GEO 資料載入與更新選項。兩者比對的目標不同,不能只替換關鍵字,就期待結果相同。
| 規則範例 | 比對依據 | 使用前檢查 |
|---|---|---|
GEOIP,CN,DIRECT | 目標 IP 在資料庫中的項目 | 資料檔可讀;網域連線可能需要解析 |
GEOSITE,cn,DIRECT | 網域是否屬於指定分類 | 已載入 GEOSITE 資料,且包含 cn 分類 |
GEOIP,CN,DIRECT,no-resolve | 已有目標 IP 的地理資訊 | 不會為了這條規則額外解析網域 |
geodata-mode: true 用來切換 GEOIP 的資料處理方式,通常會用到 GeoIP.dat;另一種預設方式則使用 MMDB 資料。GEOSITE 使用自己的網域分類資料,開啟 GEOIP 模式後,並不會因此取得所有網域分類。請一併確認資源檔、核心版本與分類名稱。
不要把 cn 當成即時網路測量結果。資料集由維護者整理,網域是否歸入某個分類、某段 IP 的歸屬,都可能隨版本變動。若發生分流錯誤,請先確認實際命中的規則與本機資料更新時間,再決定是否新增一條優先順序更前面的精確網域規則。
TUN 強化:接管範圍不代表所有流量都走代理
系統代理通常只會影響遵循系統代理設定的應用程式;TUN 則透過虛擬網路介面與路由接管更多 IP 流量。mihomo 的 TUN 功能適合處理不讀取系統代理設定的程式,但仍會受到路由、權限與規則影響。啟用 TUN 後,符合 DIRECT 規則的連線仍會直接連線。
# 合併至既有且可正常連線的 mihomo 設定檔
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 1.1.1.1
這段設定只示範流量接管與 DNS 的關聯,不包含代理節點。1053 是內建 DNS 的監聽連接埠;dns-hijack 中的 53 是要攔截的傳統 DNS 目標連接埠,兩者不必使用相同數字。範例中的上游 DNS 僅供示範,實際使用時請改成可連線且符合網路政策的 DNS 解析服務。
分別檢查 stack 與權限
system、gvisor、mixed分別採用不同的協定堆疊處理方式;mixed通常以系統堆疊處理 TCP、以 gVisor 處理 UDP。是否可用仍須依目前平台與版本確認。- Windows 通常需要系統管理員權限,或由用戶端安裝特權服務;Linux 通常需要相應的網路管理權限,並確認
/dev/net/tun可用;macOS 則須依用戶端要求授權。 auto-route會調整路由設定。若同時使用其他 VPN、虛擬機網路或企業連線工具,請先關閉另一套流量接管工具,再進行對照測試。- 應用程式內建的 DoH 使用 HTTPS,不會因為攔截傳統 DNS 的 53 連接埠,就自動改走同一條解析路徑。
DNS 與流量嗅探:補充網域資訊,不取代代理規則
Fake-IP 的基本原理是先替網域指派映射位址,再於連線進入核心時還原網域資訊。範例中的 198.18.0.1/16 位於常用於此用途的基準測試保留位址範圍。看到這類解析結果時,不應直接判定為公用 DNS 故障;請確認發起連線的應用程式是否也由同一個核心接管。
mihomo 的嗅探功能可嘗試從 HTTP Host、TLS SNI 等協定內容取得網域,協助只有目標 IP 的連線套用網域規則。這並不是解密 HTTPS,也不保證每條連線都能擷取網域。遇到加密握手資訊、非標準協定或應用程式專用的連線方式時,仍可能無法取得可用的網域名稱。
sniffer:
enable: true
sniff:
HTTP:
ports: [80, 8080]
TLS:
ports: [443, 8443]
上例限定了嗅探協定與目標連接埠。若服務依賴指定 IP、使用內部憑證網域,或啟用後連線行為有所改變,請先比較停用嗅探後的結果,再依目前版本支援的略過條件縮小範圍。不要把嗅探當成解決所有規則未命中的通用開關。
移轉順序:語法檢查、節點測試、規則驗證,最後才啟用 TUN
舊設定檔不必為了移轉而全部重寫。先保留混合連接埠、既有節點與簡單規則,再逐項加入新功能,較容易判斷問題來自節點參數、規則資料或系統流量接管。以下順序適用於獨立核心,也可作為圖形化用戶端的檢查清單。
- 備份一份可還原的設定。記錄原用戶端、核心版本、設定來源與工作目錄。若用戶端支援訂閱覆寫或合併設定,也請一併備份。
- 確認設定檔能否載入。使用下方的測試指令。這能找出 YAML、部分欄位與資源載入問題,但無法證明遠端節點一定連得上。
- 先測試代理入口。確認
mixed-port實際監聽的連接埠,再透過本機代理傳送請求。下方範例使用7890;若設定不同,請一併修改指令。 - 確認規則比對結果。查看連線紀錄中的目標網域、命中規則與最終出站。加入 GEOSITE 或 RULE-SET 後,請再次測試同一個目標。
- 最後測試 TUN。先確認系統代理路徑正常,再啟用 TUN。分別測試瀏覽器、未讀取系統代理設定的應用程式、區域網路存取與 DNS 解析。
mihomo -v
mihomo -t -d ./mihomo-data -f ./config.yaml
curl -I --proxy http://127.0.0.1:7890 https://example.com/
若主設定檔引用相對路徑,測試時的 -d 應與預期工作目錄一致,並事先準備好規則檔。測試指令通過後,還要檢查用戶端實際交給核心的設定;有些用戶端會合併訂閱、覆寫與介面設定後才執行,因此磁碟上的訂閱原文不一定等於生效設定。
三類錯誤,對應三種排查方向
- 不支援的代理類型:先確認核心名稱與版本,再確認訂閱是否輸出 mihomo 相容格式;不要先改 DNS。
- 規則集或 GEO 資料載入失敗:檢查路徑、檔案格式、存取權限與下載連線;不要直接刪除所有分流規則來掩蓋問題。
- 代理可用,但 TUN 無法使用:檢查權限、預設網卡、衝突路由與 DNS 接管;不要因此判定遠端節點失效。
用戶端入口與安裝說明請參閱下載中心;第一次匯入訂閱可參考使用指南。若要進一步確認 DNS、策略群組與 TUN 欄位,請至設定大全依欄位查閱。