TUN 模式是什麼:虛擬網卡與第三層接管
TUN 是作業系統提供的虛擬網路裝置,運作於網路層(第三層),進出的都是標準 IP 封包。開啟 TUN 模式後,用戶端會依序做三件事:
- 向系統註冊一張虛擬網卡。Windows 上多顯示為 Mihomo 或帶有 utun 字樣的介面卡,macOS 與 Linux 上則會新增一個 utun 裝置。
- 改寫路由表,把預設路由指向這張網卡,整機發出的 IP 封包會先落到核心手上。
- 核心(mihomo)在網卡上讀取封包,解析目標網域與連接埠,依設定裡的規則判斷要直連還是交給節點,最後再從實體網卡送出。
關鍵在於層級。系統代理是應用層協定,應用程式必須主動讀取並遵守系統設定才會生效;TUN 則在網路層截取封包,應用程式根本不知道代理的存在,自然無所謂遵守與否。這正是 TUN 能接管終端機指令、遊戲流量、UWP 應用程式的原因。
代價是權限:建立虛擬網卡、改寫路由表都需要系統管理員(Windows / macOS)或 root(Linux)權限,所以首次開啟時系統會跳出授權提示,屬於正常現象。
TUN 模式與系統代理的差異
| 對比項目 | 系統代理 | TUN 模式 |
|---|---|---|
| 運作層級 | 應用層(HTTP / SOCKS) | 網路層(IP 封包) |
| 生效前提 | 應用程式主動讀取系統代理設定 | 不需應用程式配合,整機接管 |
| 涵蓋範圍 | 瀏覽器及遵守設定的應用程式 | 全部 TCP / UDP 流量 |
| UDP 支援 | 基本不支援 | 支援(視節點而定) |
| 權限要求 | 一般使用者即可 | 系統管理員 / root |
| 常見盲區 | 終端機、遊戲、UWP 應用程式 | 與其他 VPN 類軟體搶路由 |
兩條經驗:日常瀏覽網頁,系統代理已經足夠,開銷最小;若需要終端機走代理、替遊戲加速、或某個應用程式死活不讀系統代理時,就開 TUN。兩者可以同時開啟,不會衝突——TUN 接管後,系統代理那條路基本上會閒置。但排查問題時建議只留一個,變數太多不好定位。
開啟前的準備:核心、權限與設定
核心必須是 mihomo
TUN 由核心實作。原版 Clash 已停止維護,TUN 支援不完整;要使用穩定的 TUN 模式,用戶端核心需為 mihomo(Clash Meta)。本站收錄的 Clash Verge Rev、Clash Nyanpasu、FlClash、Clash Plus 等皆為 mihomo 核心。
設定層面,mihomo 的 TUN 區段寫法如下。圖形化用戶端一般只需切換開關,這些欄位會由用戶端自動填寫,了解含義即可:
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
stack:協定堆疊實作。system走系統協定堆疊,相容性最好;gvisor是使用者態協定堆疊,UDP 與遊戲場景更穩定;mixed讓 TCP 走 system、UDP 走 gvisor,日常推薐使用。auto-route:自動寫入路由表,接管整機流量。關閉的話網卡建立了但流量不會進來,等於沒開。auto-detect-interface:自動偵測實體出口網卡,多網卡機器建議保持開啟。dns-hijack:劫持發往 53 連接埠的 DNS 查詢,交由核心內建 DNS 處理,防止 DNS 洩漏導致分流判斷出錯。
DNS 建議搭配 fake-ip 模式,TUN 下分流最乾淨:
dns:
enable: true
enhanced-mode: fake-ip
各平台開啟 TUN 的步驟
Windows(以 Clash Verge Rev 為例)
- 打開設定頁,先安裝「服務模式」。它是一個常駐小幫手,裝好後 TUN 模式不需要每次都以系統管理員身分啟動用戶端。
- 回到設定頁,開啟「TUN 模式」開關。
- 系統跳出防火牆提示時選擇允許;網路連線清單裡會多出一張虛擬網卡。
- 不裝服務模式也能用,但每次啟動用戶端都要按右鍵選擇「以系統管理員身分執行」。
macOS
- 在 Clash Verge Rev 或 ClashX Meta 的設定裡開啟 TUN(部分用戶端稱為增強模式)。
- 首次開啟會要求輸入開機密碼,用於安裝特權輔助程式,輸入一次即可。
- 在終端機執行
ifconfig,能看到新增的 utun 裝置即代表開啟成功。
Linux
- 圖形化用戶端直接切換 TUN 開關即可;若以命令列執行 mihomo,則需 root 權限,或為執行檔授予
cap_net_admin能力。 - 桌面環境若安裝了多個 VPN 工具,注意路由表只能有一個贏家,多餘的請先停用。
Android 與 iOS
- Android 上的 Clash 用戶端(Clash for Android、FlClash、Clash Plus)基於系統 VpnService 運作,本質上就是 TUN,沒有獨立開關。點擊啟動,系統會跳出「連線要求」,確認後狀態列會出現鑰匙圖示,即已完成全域接管。
- 建議把用戶端加入電池最佳化白名單,避免背景被系統清除導致斷線。
- iOS 同理:用戶端透過系統網路擴充功能(Packet Tunnel)接管流量,首次啟動時授權新增 VPN 設定即可。
驗證 TUN 接管是否生效
三步驟確認:
- 看網卡。Windows 執行
ipconfig,能找到名稱含 Mihomo 或 utun 的介面卡;macOS 與 Linux 用ifconfig或ip addr查看 utun 裝置。 - 用不讀系統代理的工具測出口。在終端機執行:
curl ip.sb
curl 預設不讀系統代理設定。開啟 TUN 前執行一次,會回傳本機真實 IP;開啟後再執行,則回傳節點出口 IP,說明流量已被虛擬網卡接管。這是區分「系統代理生效」與「TUN 生效」最乾脆的辦法。
- 看連線頁面。用戶端的連線(Connections)面板裡應能看到 curl 對應處理程序產生的連線記錄,規則鏈欄位會顯示它命中了哪條規則。
如果 curl 回傳的還是本機 IP,優先檢查 auto-route 是否開啟、路由表是否被其他 VPN 軟體改寫。
常見問題與注意事項
與其他 VPN 類軟體衝突
企業 VPN、網路遊戲加速器、WSL2 虛擬交換器都會改寫路由表。多個軟體同時搶預設路由,結果是全部都不通。同一時間只保留一個接管者。
網頁能開,終端機沒走代理
多半是 auto-route 未生效,或路由表被其他軟體改寫。先關閉其他 VPN 類工具,再重新開啟 TUN;多網卡機器請確認 auto-detect-interface 處於開啟狀態。
DNS 異常:代理連通但網域解析出錯
檢查 dns-hijack 是否設定、enhanced-mode 是否為 fake-ip;系統 DNS 被寫死成不可達位址時也會出現同樣症狀。
遊戲 UDP 不通
TUN 只是管道,UDP 能不能轉發取決於節點本身是否支援 UDP。節點支援卻仍不通,把 stack 從 system 換成 gvisor 或 mixed 再試試看。
最後一點:TUN 讓整機流量多經過一次協定堆疊,會有輕微的效能與電量開銷。不需要全域接管的場景,關掉 TUN、只留系統代理,更省電。