先釐清用戶端、Clash 與 mihomo
Windows 上的 Clash 用戶端通常由圖形介面、背景服務與代理核心協同運作。圖形介面負責匯入訂閱、選擇策略組及設定系統代理;核心則負責協定連線、DNS 處理與規則比對。同一個用戶端介面在不同版本中可能採用不同核心。因此,介面能匯入 YAML,不代表核心支援其中所有欄位。
本文分開討論原專案的開源 Clash 與 Clash Premium。Premium 是原專案曾提供的閉源增強核心,不等同於開源版 Clash;mihomo 則源自 Clash Meta 專案,持續擴充協定與設定功能。「Clash 格式」只是常見說法,不能保證不同核心之間完全相容。
| 對象 | 主要用途 | 遷移時的注意事項 |
|---|---|---|
| 原版開源 Clash | 提供基礎代理協定、策略組與規則比對功能 | 不要假設它具備 Premium 的 TUN、規則提供器等增強功能 |
| Clash Premium | 原專案的增強核心,支援規則提供器、TUN 等功能 | 可核對並遷移既有的 rule-providers;Premium 腳本不能直接視為 mihomo 功能 |
| mihomo / Clash Meta | 持續擴充協定、嗅探、DNS 與規則功能的核心 | 需一併確認訂閱欄位、用戶端內含的版本及實際執行的核心 |
| Windows 圖形用戶端 | 管理設定、核心程序、系統代理與服務 | 用戶端軟體版本不等於 mihomo 核心版本 |
新增協定:節點顯示不代表可以連線
mihomo 的一項明顯差異是支援更多協定。包含 VLESS、Hysteria2 或 TUIC 的訂閱,不能直接交由原版 Clash 或 Premium 執行。不同核心對同名協定的選項支援也可能不同,例如傳輸方式、TLS 指紋及 UDP 處理選項,需依照實際版本確認。
| 協定或欄位 | 原版/Premium | mihomo 設定檢查重點 |
|---|---|---|
| Shadowsocks、VMess、Trojan | 具備基本支援,但可用的加密與傳輸選項會因版本而異 | 確認加密方式、傳輸類型、TLS 與伺服器設定一致 |
type: vless | 不支援 | 確認 UUID、傳輸方式;使用 REALITY 時還需正確的公鑰與 short-id |
type: hysteria2 | 不支援 | 確認驗證資訊、SNI、連接埠,以及伺服器端是否確實使用 Hysteria2 |
type: tuic | 不支援 | 確認伺服器端協定版本、UUID、密碼與 UDP 網路連通性 |
| Shadowsocks 2022 系列加密方式 | 不能據此推定一般 Shadowsocks 的支援情況 | 確認具體加密名稱與金鑰格式,並使用支援該加密方式的核心版本 |
Windows 上如何排查「匯入成功但節點無法使用」
- 在訂閱或節點詳細資料中確認
type,不要只看節點顯示名稱。名稱中的「高速」「專線」並不能說明協定類型。 - 查看日誌是否出現不支援的代理類型、未知的加密方式或缺少欄位等訊息。若設定階段已經報錯,請先處理核心相容性問題,不必反覆測速。
- 使用 Hysteria2、TUIC 時,確認目前的網路允許相應的 UDP 通訊。瀏覽器透過 HTTP 代理連線成功,不代表 UDP 通道也正常。
- 如果用戶端可選擇核心,請改用其支援的 mihomo 核心並重新啟動核心程序,再核對啟動日誌。不要只修改設定檔名稱。
改用 mihomo 不會自動修正錯誤的伺服器參數,也不會將一般訂閱轉換成另一種協定。伺服器端未啟用相應協定時,只修改用戶端的 type 會導致連線失敗。
rule-providers:Premium 已支援,mihomo 擴充格式
rule-providers 並非 mihomo 獨有的概念。Clash Premium 早已支援規則提供器;遷移時真正需要核對的是規則行為、檔案格式與引用順序。mihomo 也支援適用於大量網域與 IP 規則的 MRS 二進位格式,但這類檔案不能反過來交由舊核心使用。
先用本機規則集確認引用關係
以下是主設定中的片段,並非完整訂閱。這裡使用內建策略 DIRECT 和 REJECT,方便獨立檢查規則,不依賴特定節點組名稱。規則集檔案應放在核心可存取的設定資料夾中;相對路徑會依核心的工作目錄解析,不一定是依手動開啟的 YAML 所在資料夾解析。
rule-providers:
local-direct:
type: file
behavior: classical
format: yaml
path: ./rules/local-direct.yaml
rules:
- RULE-SET,local-direct,DIRECT
- DOMAIN-SUFFIX,example.org,REJECT
- MATCH,DIRECT
對應的 rules/local-direct.yaml 內容如下。classical 規則集中的項目只需寫比對條件,不要附加 DIRECT;最終動作由主設定中的 RULE-SET 指定。
payload:
- DOMAIN-SUFFIX,example.com
- IP-CIDR,192.168.0.0/16,no-resolve
behavior: domain:放置網域規則集內容,不要混入完整的DOMAIN-SUFFIX,網域規則行。behavior: ipcidr:放置 IP 網段,適合依目標位址比對。behavior: classical:放置包含規則類型的傳統規則,適合混合網域、IP 等條件。format: mrs:用於比對的 MRS 檔案,支援domain和ipcidr行為,不適用於classical。更改副檔名並不會完成格式轉換。
規則命中順序比規則集數量更重要
一般規則會依序比對,最先命中的規則決定流量去向。如果將 MATCH 放在規則集引用之前,後續規則就沒有機會處理連線。將遠端規則集接入實際訂閱後,也要確認動作引用的策略組確實存在;Proxy、PROXY 與中文組名不能任意互換。
在 Windows 用戶端中,請透過設定編輯、擴充設定或覆寫功能加入欄位,再到設定檢查與日誌確認規則提供器已成功載入。直接修改訂閱下載後產生的檔案,可能會在下次更新時被覆寫。完整規則寫法請參閱 YAML 手冊的規則語法。
sniffer 網域嗅探:補充網域線索,不會解密 HTTPS
當應用程式直接連線到 IP,或網域與 IP 的對應關係沒有進入核心 DNS 時,網域規則可能缺少比對依據。mihomo 的 sniffer 可嘗試從 HTTP Host、TLS 握手中的伺服器名稱等資訊取得網域,也支援辨識 QUIC 流量。這是它與原版 Clash、Premium 的重要設定差異之一。
sniffer:
enable: true
override-destination: false
sniff:
HTTP:
ports: [80, 8080-8880]
TLS:
ports: [443, 8443]
QUIC:
ports: [443]
skip-domain:
- "+.lan"
這裡的 80、443、8443 是嘗試嗅探的目標連接埠,不是新增的本機監聽連接埠。範例將 override-destination 設為 false,先觀察網域辨識與規則比對,避免一開始就改變連線目標的處理方式。
啟用後的三項檢查
- 在用戶端開啟設定編輯或覆寫功能,將
sniffer加在最外層,不要縮排到dns或任何節點之下。 - 重新載入後重新建立連線,再查看「連線」頁面或日誌中的目標網域與命中規則。修改規則不會自動重新建立既有的長連線。
- 如果特定內網服務發生異常,先停用嗅探並重新測試,再依實際網域加入略過項目。不要一次啟用多個進階開關,否則難以判斷是哪個設定改變了行為。
DNS 欄位:保留基本設定,再逐步加入分流策略
原版 Clash 已具備 DNS 模組與 fake-ip 等功能,因此「使用 fake-ip」不代表「正在使用 mihomo」。mihomo 在 DNS 路由與策略方面增加了更多欄位,例如 proxy-server-nameserver、direct-nameserver 和 respect-rules。這些欄位並非所有情境都需要啟用。
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "localhost"
nameserver:
- 223.5.5.5
proxy-server-nameserver:
- 223.5.5.5
以下是用來說明欄位關係的基本片段。127.0.0.1:1053 僅監聽本機;198.18.0.1/16 是範例中的 fake-ip 配置範圍,不是上游 DNS 位址。223.5.5.5 是明文 DNS 範例,不代表適用於所有網路,也不表示 DNS 流量已加密。
| 欄位 | 用途 | 常見誤解 |
|---|---|---|
nameserver | 指定一般網域查詢使用的上游伺服器 | 填入位址後,不會自動接管所有應用程式的 DNS |
nameserver-policy | 依比對條件選擇特定的查詢上游伺服器 | 它決定查詢送往何處,不會直接決定連線使用哪個節點 |
proxy-server-nameserver | 為代理伺服器網域指定專用的解析上游 | 節點網域解析失敗時,只修改一般 nameserver 未必能解決問題 |
direct-nameserver | 為直連出口所需的網域指定解析上游 | 需同時理解直連解析與策略比對之間的關係 |
respect-rules | 讓 DNS 上游連線遵循路由規則 | 應搭配 proxy-server-nameserver 處理節點網域解析,避免形成循環依賴 |
Windows 的系統代理主要影響遵循系統設定的應用程式,不會自動將所有系統 DNS 請求送往 1053。如果只設定了 dns.listen,卻沒有讓查詢進入該監聽連接埠,設定雖然存在,也可能沒有處理任何實際請求。應用程式內建的加密 DNS 也可能透過自己的網路連線存取解析服務,需另外檢查。
建議先維持 respect-rules 的預設行為,確認一般網頁瀏覽與節點網域解析正常;確實需要 DNS 上游分流時,再加入這個欄位並透過規則明確處理上游連線。其他欄位請參閱 DNS 設定說明,不要直接疊加不同教學中的整段設定。
TUN 與系統代理:需另外啟用流量入口
mihomo 支援 TUN,但 TUN 並非相較 Premium 才新增的功能。兩者的設定欄位與平台實作不能逐字照搬。在 Windows 上,系統代理適合瀏覽器等遵循代理設定的應用程式;TUN 則透過虛擬網卡與路由接入更多 IP 流量,通常需要用戶端服務或系統管理員權限。
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
以上僅為 TUN 設定片段,需搭配已啟用的核心 DNS 使用。any:53 用來處理進入 TUN 的傳統 DNS 請求,不會自動接管 DoH、DoT 等其他連接埠上的加密查詢。auto-detect-interface 也不是多網卡環境的萬用解法;同時使用企業 VPN、虛擬機網卡時,請檢查實際出口與路由。
在 Windows 用戶端中的啟用順序
- 先在一般代理模式下確認節點與規則運作正常,再考慮啟用 TUN。基礎連線若失敗,開啟虛擬網卡通常只會增加排查變數。
- 在用戶端的「設定」中找到服務模式相關選項,依照用戶端提示安裝或啟用服務。若系統要求權限,請確認後完成授權。
- 開啟介面中的「TUN 模式」或「虛擬網卡」開關,並重新查看日誌。用戶端可能會自行產生
tun欄位,請以合併後的設定為準。 - 測試瀏覽器與一個不使用系統代理的應用程式,並在連線清單中確認流量確實進入核心。發生異常時,關閉 TUN 再測試,保留日誌後檢查網卡與路由。
不同用戶端的選單並不一致,因此不要將特定介面的開關位置視為核心規範。可用功能取決於用戶端如何管理服務、核心版本及最終設定,而不只是 YAML 中是否出現 enable: true。
遷移檢查:確認最終設定,再測試實際流量
從 Premium 或舊版 Clash 遷移至 mihomo 時,建議先保留原設定備份,依照「基本代理 → 規則集 → DNS → 嗅探 → TUN」的順序逐步啟用。Premium 的 script 功能不能直接視為 mihomo 的同名功能;用戶端的 JavaScript 覆寫腳本則屬於另一層,用來產生或修改設定,並非核心規則腳本。
透過設定檢查區分語法錯誤與連線問題
將待測檔案儲存為 config.yaml,並在獨立的測試資料夾中執行以下命令。用戶端環境應檢查合併後的執行設定;訂閱來源檔案通過檢查,不代表覆寫後的檔案也一定沒問題。
.\mihomo.exe -t -f .\config.yaml
設定檢查可用來發現解析錯誤、缺少引用與部分無效欄位,但無法證明節點可連線,也不能保證所有無效或不支援的選項都會報錯。若檢查通過但功能未生效,請繼續查看啟動日誌、最終設定與實際連線的命中結果。
使用固定連接埠驗證代理連線
假設實際執行的設定使用 mixed-port: 7890,且允許本機連線,可在 Windows PowerShell 中執行以下命令。這裡明確使用 curl.exe,避免舊版 PowerShell 中同名別名造成參數差異。
Test-NetConnection 127.0.0.1 -Port 7890
curl.exe --proxy http://127.0.0.1:7890 --head --max-time 15 https://example.com/
TcpTestSucceeded: True只表示本機連接埠可連線,不代表遠端節點已正常運作。- 收到目標網站的 HTTP 回應後,再查看連線記錄中的規則與出口。範例網站僅供測試,不用於測速或判斷所有網站是否都能連線。
- 如果用戶端使用的連接埠不是
7890,請先從設定或最終設定中確認實際值,再修改命令;不要為了套用命令而任意更改連接埠。 - HTTP 代理測試不涵蓋 TUN、應用程式內建 DNS 或 UDP 通訊,這些都需要分別建立新連線驗證。