先釐清用戶端、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 處理選項,需依照實際版本確認。

協定或欄位原版/Premiummihomo 設定檢查重點
Shadowsocks、VMess、Trojan具備基本支援,但可用的加密與傳輸選項會因版本而異確認加密方式、傳輸類型、TLS 與伺服器設定一致
type: vless不支援確認 UUID、傳輸方式;使用 REALITY 時還需正確的公鑰與 short-id
type: hysteria2不支援確認驗證資訊、SNI、連接埠,以及伺服器端是否確實使用 Hysteria2
type: tuic不支援確認伺服器端協定版本、UUID、密碼與 UDP 網路連通性
Shadowsocks 2022 系列加密方式不能據此推定一般 Shadowsocks 的支援情況確認具體加密名稱與金鑰格式,並使用支援該加密方式的核心版本

Windows 上如何排查「匯入成功但節點無法使用」

  1. 在訂閱或節點詳細資料中確認 type,不要只看節點顯示名稱。名稱中的「高速」「專線」並不能說明協定類型。
  2. 查看日誌是否出現不支援的代理類型、未知的加密方式或缺少欄位等訊息。若設定階段已經報錯,請先處理核心相容性問題,不必反覆測速。
  3. 使用 Hysteria2、TUIC 時,確認目前的網路允許相應的 UDP 通訊。瀏覽器透過 HTTP 代理連線成功,不代表 UDP 通道也正常。
  4. 如果用戶端可選擇核心,請改用其支援的 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

規則命中順序比規則集數量更重要

一般規則會依序比對,最先命中的規則決定流量去向。如果將 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,先觀察網域辨識與規則比對,避免一開始就改變連線目標的處理方式。

啟用後的三項檢查

  1. 在用戶端開啟設定編輯或覆寫功能,將 sniffer 加在最外層,不要縮排到 dns 或任何節點之下。
  2. 重新載入後重新建立連線,再查看「連線」頁面或日誌中的目標網域與命中規則。修改規則不會自動重新建立既有的長連線。
  3. 如果特定內網服務發生異常,先停用嗅探並重新測試,再依實際網域加入略過項目。不要一次啟用多個進階開關,否則難以判斷是哪個設定改變了行為。

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 用戶端中的啟用順序

  1. 先在一般代理模式下確認節點與規則運作正常,再考慮啟用 TUN。基礎連線若失敗,開啟虛擬網卡通常只會增加排查變數。
  2. 在用戶端的「設定」中找到服務模式相關選項,依照用戶端提示安裝或啟用服務。若系統要求權限,請確認後完成授權。
  3. 開啟介面中的「TUN 模式」或「虛擬網卡」開關,並重新查看日誌。用戶端可能會自行產生 tun 欄位,請以合併後的設定為準。
  4. 測試瀏覽器與一個不使用系統代理的應用程式,並在連線清單中確認流量確實進入核心。發生異常時,關閉 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/