mihomo 核心與原版 Clash 核心差異:協定支援、規則集與設定相容性
比較 mihomo(原 Clash Meta)與原版 Clash 核心,整理新增協定、rule-providers、GEOSITE 規則、TUN 實作及設定欄位相容性,協助判斷現有設定能否直接遷移。
先說結論:基礎設定相近,擴充功能不可反向套用
如果設定只有常見節點、select 策略群組和網域分流規則,遷移至 mihomo 通常只需少量調整。但「能讀取 YAML」不代表「所有欄位都會依原本方式生效」。遇到新協定、規則資料檔、DNS 劫持或 TUN 接管時,應分項驗證,而不是直接覆蓋日常使用的設定。
這裡所說的「原版 Clash」得先區分兩種核心:原版開源核心,以及曾獨立發布的 Clash Premium 核心。兩者的功能範圍不同。尤其是規則提供者、TUN 等功能,不能因為某個舊用戶端支援,就推定原版開源核心也支援。mihomo 則是承接 Clash Meta 發展的專案,不是替舊核心換個顯示名稱。
- 舊設定遷移至 mihomo:基礎語法有不少共通之處,仍須檢查已移除、改名或由用戶端覆寫的項目。
- mihomo 設定遷移至舊核心:VLESS、Hysteria2、GEOSITE 等擴充內容不能假設可用。
- 更換圖形化用戶端:服務權限、設定目錄、覆寫規則和系統代理入口也會跟著改變,不能只比較核心。
協定支援:節點類型與傳輸參數都要檢查
原版開源 Clash 常見的出站類型包括 Shadowsocks、VMess、Trojan、SOCKS5 和 HTTP。mihomo 在此基礎上擴充協定與傳輸支援,例如 VLESS、Hysteria2、TUIC,以及相關的 REALITY 設定功能。實際可用的參數仍取決於安裝的 mihomo 建置版本,不能直接把新文件中的欄位套用至非常早期的 Clash Meta 二進位檔。
| 檢查項目 | 原版 Clash 開源核心 | mihomo |
|---|---|---|
| VMess、Trojan 等常見節點 | 有相應支援,參數以舊核心為準 | 支援,但仍須核對傳輸與 TLS 參數 |
| VLESS、Hysteria2、TUIC | 無法直接使用這些節點類型 | 提供相應實作,設定欄位各不相同 |
| rule-providers | 不能視為通用內建功能;舊版 Premium 須另外區分 | 支援外部規則提供者 |
| GEOSITE 規則 | 不支援 mihomo 的這種寫法 | 支援,須使用相應的網域分類資料 |
| TUN 接管 | 不可與舊版 Premium 的 TUN 功能混為一談 | 支援,效果取決於系統、權限與路由 |
協定名稱相同,也不代表節點可以原樣複製
例如使用 WebSocket 的節點,除了 type,還要核對 network、路徑、要求標頭和 TLS 伺服器名稱。REALITY 節點則有自己的公鑰、短 ID 等參數。只複製伺服器位址和連接埠,通常無法建立連線。訂閱轉換工具若不認得這些欄位,可能會直接捨棄資訊,最後就會出現「節點看得到,卻連不上」的情況。
- 先確認訂閱提供的是 mihomo 可讀取的設定格式,而不是其他用戶端使用的 JSON 設定。
- 檢查節點項目的
type,再確認該類型所需的完整參數。 - 需要 UDP 的服務,還要確認節點、策略與網路都允許 UDP;「網頁能開」不代表 UDP 可用。
支援更多協定不代表延遲一定更低。伺服器線路、網路壅塞、封包遺失,以及用戶端至伺服器間的網路狀況都會影響結果。選擇核心時看功能需求;比較節點時,則應在相同網路、相同目標和相同測試方式下進行。
規則集差異:rule-providers 不等於 GEOSITE
rule-providers 用來宣告外部規則來源,並在規則清單中透過 RULE-SET 引用。GEOSITE 則依網域分類資料庫中的類別進行比對。兩者都能減少主設定中的規則數量,但資料來源、檔案格式和更新方式並不相同。
先用本機規則檔確認引用關係
以下是 mihomo 的局部設定範例,須合併至現有設定,不能直接當成完整節點設定使用。範例會從設定目錄中的 rules/local-direct.yaml 讀取傳統規則,並將符合條件的連線交由 DIRECT 處理:
rule-providers:
local-direct:
type: file
behavior: classical
path: ./rules/local-direct.yaml
rules:
- RULE-SET,local-direct,DIRECT
- MATCH,DIRECT
對應的 rules/local-direct.yaml 內容如下。這裡以 example.com 示範網域後綴比對,實際使用時應替換為確實需要直連的服務網域:
payload:
- DOMAIN-SUFFIX,example.com
behavior: classical 的項目會包含規則類型,例如 DOMAIN-SUFFIX。如果改用 behavior: domain,就必須採用相應的網域規則格式,不能只改宣告而不調整檔案內容。二進位規則格式也各有支援範圍,不應只改副檔名,就交給另一種解析器處理。
使用 GEOSITE 時,資料庫與類別都要確認
例如 GEOSITE,cn,DIRECT 需要網域分類資料中包含 cn 類別。這與 GEOIP,CN,DIRECT 不同:前者依網域分類比對,後者依 IP 地理位置資料比對。網站若使用境外 CDN,兩種規則可能會得到不同結果;這是比對依據不同,不一定是核心出錯。
首次載入遠端規則或地理資料時可能需要連線。如果這些資源必須透過尚未建立的代理下載,就會形成啟動依賴。初次遷移時可先保留最精簡的規則,準備好所需的本機資料後,再逐步恢復遠端更新機制。
TUN 差異:核心支援只是接管流量的第一步
系統代理通常仰賴應用程式主動使用代理設定;TUN 則透過虛擬網路介面與路由接收流量。mihomo 支援 TUN,不代表勾選選項後所有應用程式就一定會走代理。系統權限、虛擬網卡建立、路由安裝,以及與其他 VPN 的衝突,都可能導致流量無法接管。
舊版 Clash Premium 也支援 TUN,但不能因此將它的整段 TUN 設定視為 mihomo 的標準寫法。遷移時應核對 stack、auto-route、auto-detect-interface 和 dns-hijack 等欄位,並依目前系統的支援狀況調整。
從三個層面確認 TUN 是否正常
- 介面層:確認啟動記錄顯示虛擬介面已成功建立,且沒有權限不足或裝置遭占用的錯誤。
- 路由層:確認目標流量已進入虛擬介面。多張網卡、其他 VPN 和手動靜態路由都可能改變流量出口。
- 連線層:使用目標應用程式建立新連線,並在連線面板查看目標位址、符合的規則和最終策略。
例如 dns-hijack 中常見的 any:53 是 DNS 接管設定,不是「攔截所有加密 DNS」的開關。應用程式自行發出的 HTTPS DNS 要求使用 HTTPS 連線,不能直接當成一般 53 連接埠查詢處理。IPv6 流量也應另外檢查,不能只看 IPv4 查詢結果就認定接管完整。
Linux 上可能需要 root 或適當的網路管理權限;Windows 與 macOS 的圖形化用戶端則可能透過背景服務處理權限操作。服務安裝方式會因用戶端而異,請依用戶端說明操作;排除問題時不要反覆疊加多張虛擬網卡和路由工具。
DNS 與設定相容性:先保留解析路徑,再切換進階模式
mihomo 沿用 Clash 設定中常見的 dns、nameserver、fallback 等概念,也支援更細緻的解析策略。但欄位的組合會決定查詢實際送往何處。把所有 DNS 位址都改成同一個服務,不保證相容性更好,反而可能掩蓋節點網域解析與服務網域解析之間的差異。
切換核心時不宜同時變更 fake-ip 與 redir-host
fake-ip 會為網域提供對應用的虛擬位址,常見位址範圍為 198.18.0.0/16。它用來關聯網域與後續連線,並非遠端伺服器的真實位址。redir-host 通常會回傳真實解析結果。兩種模式都可能影響區域網路裝置、仰賴真實 IP 的應用程式及既有 DNS 快取。
如果舊環境使用 redir-host,第一次遷移時先保留此模式。確認節點和規則都能正常運作後,再單獨測試 fake-ip。若特定應用程式異常,應依狀況設定適當的排除項目;不要因為一個應用程式出錯,就同時關閉 TUN、變更 DNS、切換節點。
- 無法解析節點網域:檢查建立節點連線前使用的解析路徑,必要時核對
proxy-server-nameserver等相關設定。 - 網域規則似乎沒生效:確認連線是否保留網域資訊,以及 DNS 是否確實經過預期的解析路徑。
- 修改後看起來仍沿用舊設定:確認用戶端是否透過合併、覆寫或訂閱更新重新寫入 DNS 區段。
不要把 fallback 理解成單純「主要 DNS 完全失效後才啟用備用 DNS」。它會與篩選條件一起決定採用哪個結果。遷移排解問題時,先查看目前設定與記錄,再判斷是否需要調整這個部分。
遷移步驟:從語法檢查到實際連線驗證
建議保留舊核心、舊設定和用戶端覆寫內容,另外建立測試目錄。以下以獨立二進位檔示範,目錄名稱 mihomo-test 僅為本次測試使用。命令中的檔案和工作目錄都以目前終端機所在位置為基準:
mihomo -v
mihomo -t -d ./mihomo-test -f ./mihomo-test/config.yaml
-t 用來測試設定,-d 指定工作目錄,-f 指定設定檔。語法檢查通過只代表設定測試階段未發現阻斷性錯誤,不代表伺服器可連線、系統代理已設定,或 TUN 路由已生效。
第一輪只驗證本機代理連接埠
測試設定可使用以下基本入口。7890 是此處明確設定的混合代理連接埠,並非所有用戶端都固定使用此連接埠。將這些欄位合併至包含有效節點和策略群組的設定後,再啟動測試:
mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
如果舊用戶端也占用 7890,請先停止舊核心,或為測試設定選擇未被使用的連接埠。不要只關閉舊用戶端視窗,因為背景服務可能仍在執行。此階段先不啟用 TUN,也不設定區域網路共享。
- 解析設定:修正未知節點類型、無效規則、缺少策略群組和規則檔路徑錯誤。
- 啟動核心:確認連接埠監聽成功,且沒有「位址已被占用」等啟動錯誤。
- 指定代理進行測試:在終端機執行下方命令,確認要求是否成功,以及連線面板是否有記錄。
- 恢復分流:分批加入規則提供者與地理規則,確認實際符合的規則。
- 最後再接管系統流量:先測試系統代理,再單獨啟用 TUN,避免同時引入多個變因。
curl --proxy http://127.0.0.1:7890 --connect-timeout 10 --max-time 20 -I https://example.com
這個命令會透過本機代理入口發出要求。若目標網域符合 DIRECT,仍可能以直連方式成功,因此還要查看連線面板中的策略鏈。測試通過不代表所有應用程式都經過遠端節點,也不代表下載速度已達線路上限。
常見遷移問題與選擇建議
| 現象 | 優先檢查 | 下一步操作 |
|---|---|---|
| unknown proxy type | 實際執行的核心、節點類型拼寫 | 確認用戶端沒有繼續呼叫舊二進位檔 |
| 找不到規則提供者 | RULE-SET 引用名稱、檔案路徑、下載記錄 | 先用本機的小型規則檔確認解析 |
| 設定測試成功但無法連線 | 監聽連接埠、節點可連線性、策略選擇 | 先使用明確指定的代理要求,排除系統設定影響 |
| 啟用 TUN 後部分應用程式異常 | 路由、DNS、IPv6、其他 VPN | 先恢復以系統代理為基準的設定,再逐項恢復流量接管 |
| 訂閱更新後設定遺失 | 設定來源、用戶端合併與覆寫順序 | 將自訂內容放在用戶端支援的持久化覆寫位置 |
需要 VLESS、Hysteria2、TUIC、GEOSITE 或更完整的現代分流設定時,mihomo 是較合適的比較對象。若只有基礎代理需求,則應繼續比較圖形化用戶端的維護狀態、平台整合與設定管理方式,而不是只看核心功能表做決定。
Clash評測網提供用戶端選擇與設定資料,並非用戶端開發者。實際遷移應以已安裝核心的文件、啟動記錄和連線記錄為準。將「設定能載入」、「要求能成功」、「規則符合正確」和「系統流量接管完整」分成四項驗收,會比一次替換所有設定更容易排除問題。
若要補足基礎概念,可查看名詞速查;規則和代理模式的檢查方式,請參閱使用手冊中的規則說明。