TUN 要三樣東西,缺一樣就起不來

核心得建一塊虛擬網路卡,得改路由表把預設出口指過去,還得有足夠權限做這兩件事。少一樣,開關就按不住。先別急著重裝用戶端——打開日誌頁,翻到你按下開關的那一刻,TUN 那幾行會寫明是權限不足、裝置打不開,還是路由根本沒設成。讀懂那一行,下面的分診就快了。

  • 虛擬網路卡。Windows 靠 Wintun 驅動程式,macOS 和 Linux 用系統自己的 utun / tun 裝置。
  • 路由表。預設路由要搬到虛擬網路卡上,這在主流系統上都算特權操作。
  • 權限。系統管理員、root,或者用戶端事先裝好的背景服務。
合作推薦訂閱連結從哪來?本站合作機場註冊即送 1GB 香港高速體驗流量,可直接一鍵匯入。取得高速節點

Windows:驅動程式、提權,以及服務模式

  • 驅動程式檔案不見了。用戶端一般會把 Wintun 的 dll 放在執行檔旁邊,被防毒軟體隔離、或者解壓縮沒解完整,網路卡都建不起來。重新完整解壓一次,再把用戶端資料夾加進防毒白名單。
  • 沒有提權。最直接的做法是右鍵「以系統管理員身分執行」。嫌每次都要點很煩,就去裝服務模式。
  • 另一個 VPN 用戶端還在跑。公司 VPN、遊戲加速器、另一套代理軟體,誰先搶到預設路由誰算數。要完整結束,縮到系統匣不算。
  • Hyper-V、WSL2、Docker Desktop 都會往系統裡加虛擬網路卡,路由表比一般機器複雜。TUN 建得起來卻搶不到預設出口,看起來就像「開了卻沒網路」。

服務模式(有的用戶端寫作 Service Mode 或系統服務)值得單獨講。它裝一個常駐的系統服務,由服務去動網路卡和路由,用戶端本身就不必每次提權。Clash Verge Rev 的設定頁裡有單獨的安裝按鈕,裝完之後一般雙擊啟動也能開 TUN。安裝當下會跳一次 UAC,這一次躲不掉。

macOS:卡在授權那一步的人最多

  • 第一次開 TUN,系統會跳密碼框要你授權一個背景輔助程式。按了取消,之後常常就不再問,開關便一直彈回去。把用戶端關掉重開,或者在用戶端裡找重裝輔助程式的入口,讓它重新問一次。
  • 系統設定裡的登入項目與背景擴充功能清單,對應那一筆有可能被關掉過。關掉了輔助程式就起不來。
  • utun 裝置被佔住。公司 VPN、Tailscale 這類都會建自己的 utun。先斷掉再試。

Linux:權限與 /dev/net/tun

  1. 先確認 tun 裝置到底在不在。精簡核心和容器環境常常沒有,得先把 tun 模組載入。
  2. 用一般使用者身分跑執行檔沒有網路管理權限。要嘛用用戶端提供的服務模式,要嘛給執行檔加上 CAP_NET_ADMIN。
  3. 核心執行檔更新之後 capability 要重新加一次。覆蓋安裝會把它抹掉,毛病看起來像是全新的。
ls -l /dev/net/tun
sudo modprobe tun
sudo setcap cap_net_admin,cap_net_raw+ep /path/to/mihomo

開起來了,卻還是沒網路

route print 0.0.0.0
netstat -rn
ip route show

三條分別對應 Windows、macOS 和 Linux,看預設路由現在指向誰。還指著實體網路卡,就是 auto-route 沒生效,或者被別的程式改回去了。指向虛擬網路卡卻還是不通,那就往 DNS 和防火牆想:TUN 要接管 53 連接埠的查詢,系統或防毒軟體的防火牆擋住虛擬網路卡時,流量進得去出不來。還有一種是系統代理和 TUN 同時開著——有的用戶端會自己處理迴圈,有的不會,排查期間只留一個。

TUN 不是必需品。它處理的是「程式不讀系統代理」這一類問題;如果你的流量幾乎就是瀏覽器,系統代理就夠用,而且能省掉這篇裡所有驅動程式和權限的麻煩。為了開 TUN 耗掉一個下午之前,先想清楚到底需不需要它。