什麼是 TUN 模式?與系統代理有何不同
Clash 提供兩種工作模式將流量接入代理:系統代理和 TUN 模式。理解它們的差異,是正確使用 Clash 的關鍵。
| 比較維度 | 系統代理(HTTP/SOCKS5) | TUN 模式(虛擬網路卡) |
|---|---|---|
| 工作層級 | 應用層(L7) | 網路層(L3) |
| 攔截方式 | 應用程式主動設定代理位址 | 作業系統核心層級流量劫持 |
| 覆蓋範圍 | 僅支援代理協定的應用程式 | 所有 TCP/UDP 流量,無需應用程式配合 |
| UDP 支援 | 有限,依賴應用程式實作 | 完整 UDP 支援 |
| 所需權限 | 一般使用者權限 | 管理員 / root 權限 |
系統代理本質上是在作業系統層面設定一個 HTTP/SOCKS5 代理位址(如 127.0.0.1:7890)。瀏覽器等支援代理協定的應用程式會將請求傳送到這個位址,由 Clash 轉發。但遊戲用戶端、指令列工具、部分 Electron 應用程式往往不讀取系統代理設定,流量仍然直連。
TUN 模式透過在作業系統中建立一塊虛擬網路卡(Mihomo TUN),在驅動層攔截所有流出的網路封包,無論應用程式是否支援代理協定,流量都會被強制捕獲並由 Clash 的規則引擎處理。這才是真正意義上的「全域透明代理」。
何時需要開啟 TUN 模式
以下情境強烈建議開啟 TUN 模式:
- 遊戲加速:Steam、Epic Games、Battle.net 等遊戲用戶端通常不走系統代理,開啟 TUN 後可直接代理遊戲流量
- 指令列工具:
git clone、npm install、pip install、docker pull等預設不走系統代理,需要 TUN 或手動設定環境變數 - UDP 協定應用程式:視訊通話(Zoom、Teams)、語音(Discord)、DNS 查詢等依賴 UDP,系統代理對 UDP 支援有限
- 非標準代理應用程式:部分開發工具、學術軟體、VPN 用戶端不遵循系統代理設定
- iOS/macOS 全域代理:搭配 Stash/Surge,TUN 可接管系統全部流量,包括系統更新
Windows 平台開啟 TUN 模式(Clash Verge Rev)
前置條件
TUN 模式需要以管理員身分執行 Clash Verge Rev。在工作列圖示上按右鍵 → 「以管理員身分重新啟動」,或在開始功能表中右鍵應用程式圖示 → 「以管理員身分執行」。
首次啟動 TUN 時,程式會自動安裝 wintun.dll 驅動程式(Windows TUN 虛擬網路卡驅動程式)。此過程需要連線下載約 1 MB 的驅動程式檔案,安裝完成後無需重複操作。
開啟步驟
- 確認 Clash Verge Rev 以管理員身分執行(標題列或工作列圖示應顯示盾牌標誌)
- 點擊左側導覽的「設定」
- 找到「系統設定」區域,開啟「TUN 模式」開關
- 若彈出驅動程式安裝提示,點擊「確認」並等待安裝完成
- 開啟後,工作管理員的網路介面卡清單中會出現「Mihomo」虛擬網路卡
macOS 平台開啟 TUN 模式(Clash Verge Rev)
開啟步驟
- 在 Clash Verge Rev 的「設定」頁面,找到「TUN 模式」並開啟
- 系統會彈出安全提示,前往「系統偏好設定 → 隱私權與安全性」
- 在頁面底部找到「已封鎖使用系統延伸功能」的提示,點擊「允許」
- 輸入 macOS 使用者密碼完成授權,返回 Clash Verge Rev 再次開啟 TUN 開關
macOS Sequoia(15)及以上版本還需在「系統設定 → VPN 與篩選器」中手動允許 Mihomo 的網路延伸功能。
Android 平台 TUN 模式(ClashMeta for Android)
Android 版 CMFA 的 TUN 模式基於系統的 VpnService API 實作,無需 root 權限。啟動代理時系統彈出的 VPN 權限請求即為 TUN 模式的授權。
- 啟動 CMFA,確保設定檔已啟用
- 點擊主介面的啟動按鈕,首次啟動會彈出 VPN 權限請求
- 點擊「確定」,Android 狀態列出現鑰匙圖示即表示 TUN 已啟用
- 在「設定 → 覆寫設定」中可調整 TUN 的工作模式(Mixed / TUN only / System Proxy only)
Android 的 TUN 預設接管所有 APP 的流量,無需額外設定。可在應用程式清單中排除特定 APP(如銀行 APP),避免觸發風控機制。
TUN 模式 YAML 設定詳解
透過在設定檔中新增 tun 欄位,可以對 TUN 模式進行精細控制:
tun:
enable: true
stack: mixed # mixed(推薦)/ system / gvisor
auto-route: true # 自動新增路由規則,讓流量進入 TUN
auto-detect-interface: true # 自動偵測出口網路卡,多網路卡環境下必開
dns-hijack:
- any:53 # 劫持所有 DNS 請求(含 UDP 53 埠)
strict-route: false # true 時丟棄非 TUN 流量,安全性更高但會影響區域網路
mtu: 9000 # 最大傳輸單元,9000 可減少分封,提升吞吐量
# DNS 設定需搭配 TUN 使用
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- tls://8.8.8.8:853
- tls://1.1.1.1:853
fallback-filter:
geoip: true
geoip-code: CN
stack 參數選擇
| stack 值 | 說明 | 推薦情境 |
|---|---|---|
mixed | TCP 用系統堆疊,UDP 用 gVisor,相容性最佳 | 預設推薦,大多數情境 |
system | 全部使用系統網路堆疊,效能最高 | Linux / macOS 高效能情境 |
gvisor | 使用者態虛擬網路堆疊,隔離性佳 | 遇到相容性問題時嘗試 |
TUN 模式常見問題排查
開啟後無法上網
- 確認以管理員權限執行(Windows)或已授權網路延伸功能(macOS)
- 檢查設定檔中是否包含
GEOIP,CN,DIRECT規則,避免國內流量迴圈 - 查看 Clash 紀錄,確認 TUN 介面已成功建立(紀錄中出現 "inbound started" for tun)
- 暫時關閉防毒軟體,部分安全軟體會攔截虛擬網路卡驅動程式
遊戲還是直連
確認以下設定均已完成:
- TUN 開關已開啟,且
auto-route: true - 代理模式為「規則」或「全域」,不是「直連」
- 設定檔中遊戲伺服器網域/IP 對應的規則指向代理策略而非 DIRECT
- 在 Clash 紀錄中搜尋遊戲程序名稱,確認流量確實經過了 Clash
DNS 迴圈 / 解析失敗
TUN 開啟後,dns-hijack: any:53 會捕獲所有 DNS 請求交由 Clash 處理。若 Clash 的 DNS 設定本身有問題(如 nameserver 無法存取),會導致 DNS 解析失敗。
排查步驟:暫時將 DNS nameserver 改為 223.5.5.5(阿里 DNS),確認基礎連通性後再調整。
開啟 TUN 後速度變慢
TUN 模式因需在核心層處理封包,有約 5–15% 的額外 CPU 開銷。如遇明顯速度下降:
- 將
stack從gvisor改為mixed或system - 確認
auto-route: true已開啟(避免路由表衝突) - 檢查是否有其他 VPN 軟體同時執行,造成雙重代理
總結:TUN 模式使用要點
- TUN 模式在驅動層攔截所有流量,系統代理只覆蓋支援代理協定的應用程式
- 遊戲、指令列工具、UDP 應用程式情境下,TUN 是唯一可靠的解決方案
- Windows 需管理員權限 + wintun 驅動程式;macOS 需授權網路延伸功能;Android 基於 VpnService 無需 root
- YAML 設定中
stack: mixed+auto-route: true+dns-hijack: any:53是最佳實踐組合 - 設定檔必須包含國內直連規則(
GEOIP,CN,DIRECT),否則國內流量也會走代理造成速度損失
延伸閱讀
- 規則分流設定說明:深入理解 DOMAIN / IP-CIDR / GEOIP 等規則類型
- DNS 防污染設定:搭配 TUN 模式徹底解決 DNS 洩漏問題
- Clash 完整安裝設定教學:從零開始的新手入門指南