部落格 進階配置 約 9 分鐘

TUN 模式深度解析

系統代理只是表層方案,TUN 模式才是讓「所有流量都走代理」的根本解法。本文從原理到配置,全面講解 TUN 模式的使用方法。


系統代理的侷限

Windows 和 macOS 都有「系統代理」機制:在系統偏好設定裡填入代理伺服器位址和連接埠,瀏覽器、郵件用戶端等有良好網路規範的程式會讀取這個設定並透過代理發送請求。這個機制實作簡單,相容性廣,是 Clash 最常用的工作方式。

但系統代理有一個根本性侷限:它完全依賴應用程式的自覺配合。系統代理的本質只是一個「建議」,作業系統無法強制所有程式遵守,應用程式可以直接呼叫底層網路 API 繞過它。以下幾類常見情境,系統代理完全無能為力:

遊戲用戶端:Steam、Epic Games、EA App 等遊戲平台通常自己管理網路請求,不讀取系統代理設定。玩需要低延遲的多人遊戲時,即使 Clash 已經開啟,遊戲流量仍然走直連,無法獲得代理加速,這對重視連線品質的玩家來說是常見痛點。

UWP 應用程式(Windows):Windows Store 應用程式運行在沙箱中,受 AppContainer 權限隔離,無法存取系統代理設定。Xbox 應用程式、Spotify Windows 版、部分微軟內建工具都屬於這類。

命令列工具:gitnpmpipdocker pull 等命令列工具在未手動配置 HTTP_PROXY 環境變數時不會使用系統代理。這對開發者來說尤為頭痛,每次在終端機操作都需要手動 export 代理變數。

iOS / Android 原生應用程式:行動裝置系統代理通常只對 HTTP/HTTPS 請求生效,UDP 通訊(如很多遊戲、視訊通話、DNS 請求)完全游離在代理之外。

什麼是 TUN 模式

TUN(TUNnel)是作業系統核心提供的一種虛擬網路裝置介面,最早用於 VPN 實作。TUN 模式讓 Clash 在系統核心層建立一張虛擬網卡(通常命名為 utunMeta),並透過修改系統路由表,將裝置上所有的網路流量(而不僅僅是支援系統代理的流量)轉發到這張虛擬網卡,再由 Clash 依規則分流處理。

這樣一來,流量在進入任何應用程式的網路函式庫之前,就已經在核心層被 Clash 接管了。不管應用程式是否遵守系統代理設定,不管使用什麼程式語言、什麼網路框架,只要產生網路請求,就必須經過 Clash 的規則引擎。這就是「真全域代理」的含義:沒有任何程式能逃脫代理的管轄。

iOS 和 Android 上的「VPN 模式」本質上也是 TUN——Clash 透過系統 VPN API 建立虛擬網卡,原理相同,只是名稱不同。

工作原理

開啟 TUN 模式後,Clash 對系統做了以下幾件事:

第一步,建立虛擬網卡。在作業系統核心註冊一張虛擬網路裝置,分配一個私有 IP 段(如 198.18.0.0/16)。這張網卡沒有實體對應,完全由 Clash 程式在使用者態模擬其行為。

第二步,修改系統路由表。向系統路由表新增兩條覆蓋全域的路由規則:所有目標為 0.0.0.0/1128.0.0.0/1 的流量(合起來等於全部 IPv4 位址)都轉發到虛擬網卡。這兩條路由的優先度高於預設閘道路由,確保所有出站流量都先經過 Clash。

第三步,DNS 劫持(Fake-IP)。TUN 模式通常搭配 Fake-IP DNS 模式使用。當應用程式發起 DNS 查詢時,Clash 立即回傳一個「假的」內部 IP(198.18.x.x),應用程式拿到這個假 IP 開始連線,Clash 在虛擬網卡層截獲這條連線,還原出原始網域,再依規則決定直連還是走代理。這個過程對應用程式透明,但省去了實際的 DNS 查詢延遲,速度更快,且徹底防止了 DNS 外洩(DNS 請求不會發到系統預設 DNS 伺服器)。

第四步,流量分流處理。Clash 接收到所有流量後,依照設定檔中的規則集判斷每條連線的去向:命中直連規則的直接轉發到真實網卡,命中代理規則的透過代理節點中轉,命中攔截規則的直接丟棄。

典型使用情境

代理加速遊戲:這是 TUN 模式最常見的使用動機。Steam 下載、遊戲內配對服務、語音通話(Discord)等均使用 UDP,系統代理完全無效。開啟 TUN 模式後,UDP 流量同樣被接管,可以有效降低跨區遊戲的延遲並提升穩定性,這也是許多玩家改善連線品質的常見做法。

開發者工具:不再需要手動 export 代理環境變數。npm installgit clonedocker pull 等命令在 TUN 模式下自動走代理,開發體驗大幅改善。

串流解鎖:部分串流用戶端(如 Netflix 官方 App 而非瀏覽器版)會繞過系統代理,TUN 模式確保其流量也能經過解鎖節點,方便觀看其他地區限定的影片內容。

iOS 全域流量管理:iOS 上 Clash Plus 預設就是 TUN/VPN 模式,所有 App 的流量(包括 UDP 視訊通話)都在代理的管轄下,可以統一管理和分流。

各平台配置方法

Windows

以管理員權限執行 Clash Plus(按右鍵→「以管理員身分執行」或在工作管理員中確認行程權限)。進入「Settings → TUN Mode」,打開「Enable TUN Mode」開關。首次啟用時,程式會嘗試安裝虛擬網卡驅動程式,系統彈出 UAC 授權框時點選「是」。安裝完成後,在裝置管理員中可以看到名為「Mihomo」或「WinTun」的虛擬網卡,代表安裝成功。

macOS

進入「Settings → TUN Mode」,打開開關。首次啟用時,macOS 會彈出「系統延伸功能已阻擋」的通知,前往「系統設定→隱私權與安全性」,在「安全性」區域找到相關延伸功能,點選「允許」。此後需要輸入管理員密碼並重新啟動 Clash Plus。之後每次開啟 TUN 模式時,無需再次授權。

Android / iOS

行動裝置版的 Clash Plus 預設即為 TUN/VPN 工作模式,點選主畫面的「連線」按鈕,系統彈出 VPN 權限請求時點選「允許」,代理即處於 TUN 模式下,無需額外配置。iOS 上建議同時開啟「On Demand(按需連線)」,避免鎖定畫面後代理中斷。

Stack 模式選擇

Clash Plus(Mihomo 核心)的 TUN 模式支援三種網路協議堆疊(Stack),在設定檔的 tun 部分用 stack 欄位指定:

Stack實作方式適用情境
system呼叫作業系統的 TCP/IP 協議堆疊相容性最好,效能穩定,建議預設使用
gvisor使用 Go 語言實作的使用者態網路堆疊(Google gVisor)隔離性更強,適合有特殊隔離需求的情境
mixedTCP 用 system,UDP 用 gvisor兼顧 TCP 效能與 UDP 相容性,建議使用

對於大多數使用者,建議選擇 mixed 模式:TCP 連線使用作業系統協議堆疊保證效能,UDP 連線使用 gVisor 確保更好的 DNS 處理和 UDP 穿透相容性。如果你遇到某些 UDP 應用程式異常,可以嘗試將 Stack 切換回 system 排查問題。

注意事項

權限要求:TUN 模式需要管理員 / root 權限,因為修改系統路由表是特權操作。Windows 上忘記以管理員權限執行 Clash Plus 是 TUN 模式啟動失敗的最常見原因。

與系統代理疊加:開啟 TUN 模式時,可以同時保留系統代理。對於支援系統代理的應用程式,系統代理處理其 HTTP(S) 請求;TUN 模式兜底接管其他所有流量。兩者不會衝突,只是系統代理處理的那部分流量在 TUN 層面會形成回環,Clash 內部會自動處理,防止無限循環。

效能開銷:TUN 模式在核心層攔截並處理所有流量,比系統代理消耗更多的 CPU 和記憶體。在低階裝置(老款手機、樹莓派)上可能出現明顯的效能降低,日常輕量使用建議優先選擇系統代理。

防止代理環路:確保 Clash 連接代理伺服器的流量本身不經過 TUN 接管,否則會形成死循環。Mihomo 核心會自動將出站代理連線標記為直連流量,正常情況下無需手動干預,但如果遇到連線卡住的情況,檢查是否有路由環路問題。

開啟 TUN 模式後如果網路完全中斷,首先檢查:①Clash Plus 是否以管理員權限執行;②防毒軟體是否攔截了虛擬網卡驅動;③路由表是否被其他 VPN 軟體覆蓋(同時運行多個 VPN/代理工具會衝突)。
Clash

還沒安裝用戶端?

前往下載頁取得適合你系統的版本,TUN 模式在設定中一鍵開啟。