虛擬網路卡把不聽話的程式一併接管
TUN 會建立一張虛擬網路卡,讓系統把流量都交給它。程式不需要知道代理是什麼,封包送出來就進了這張卡,剩下的交給核心處理。不認系統代理的遊戲、下載工具、命令列程式,就是這樣被接管的。
代價是它跑在更底層。系統代理出問題頂多是某個瀏覽器不通,TUN 出問題是整台機器一起不通。
另外有個前提:Windows 要先安裝服務模式,macOS 和 Linux 第一次開啟會要求輸入系統管理員密碼安裝輔助元件。少了這一步,開關會自己彈回去。
開關自己彈回去不算故障
那只是表示需要較高權限的那一塊還沒到位。先把服務裝好,再回來撥開關。
開之前先把這三件事定下來
- 1
把系統代理關掉
兩個都開不會更快。涵蓋範圍一重疊,某個程式出狀況時你分不清它是從網路卡進來的還是讀了系統代理進來的,疑難排解瞬間變成猜謎。留一條路最好查。
- 2
協定堆疊先別動
設定裡可以選 gVisor、system、mixed 這幾種實作。預設那個相容性最好,先用著。真的遇到某類流量異常再去換,而且換完要把 TUN 關一次再開,堆疊是網路卡起來時決定的,不重開等於沒換。
- 3
想好哪些流量不該上這張卡
公司內部網域、區域網路裡的裝置名稱、印表機和 NAS,這些最好先在規則裡放行。等到要用才發現連不上,你會先懷疑裝置而不是懷疑 TUN。
DNS 被一併接管之後
TUN 開啟後 DNS 也歸它管,這不是副作用,而是它能生效的關鍵:沒有接管解析,流量就沒辦法依網域分流。麻煩也出在這裡,公司內部網域和區域網路的裝置名稱可能解析不出來,或者解析出來又被送到遠端節點。在規則裡給內部網段和這些網域加上 DIRECT,或者在 DNS 設定裡讓它們走本地伺服器,就能放行。至於遊戲,TUN 對 UDP 的支援比系統代理好,但實際體驗取決於你選的節點支不支援 UDP 轉送,節點不支援的話換什麼模式都一樣。
- 開著 TUN 就把系統代理關掉
- 內部網段和裝置名稱放在規則靠前的位置走 DIRECT
- 換過協定堆疊就把 TUN 關一次再開
常見問題
TUN 和系統代理可以同時開嗎?
可以開,但基本上沒必要。兩者涵蓋範圍大部分重疊,一起開不會更快,只會多一層不確定:某個程式怪怪的時候,你沒辦法判斷它的封包是走網路卡進來的還是讀了系統代理進來的。用 TUN 就把系統代理關掉,只留一條路最好定位。
開了 TUN 之後,區域網路裡的 NAS 和印表機連不上了?
路由和 DNS 都被虛擬網路卡接管了,裝置名稱解析不出來,或者解析出來又被送去代理。在規則清單靠前的位置給你的內部網段和裝置名稱加一條 DIRECT,再到 DNS 設定裡讓這些網域走本地 DNS。另外 fake-ip 預設網段是 198.18.0.1/16,你的內部網路如果剛好用到相近網段,也要一併排除。