系統代理與 TUN:流量進入方式不同
瀏覽器可以上網,但命令列工具、遊戲或其他應用程式沒有出現在 Clash 連線清單中,首先應檢查流量從哪裡進入。系統代理只是提供代理位址給應用程式,例如 127.0.0.1:7890。應用程式採用這項設定後,才會將請求傳送至本機代理;自行直接連線、只讀取環境變數,或使用獨立網路設定的程式,不一定會使用系統代理。
TUN 是第三層虛擬網路裝置。作業系統依據路由表將 IP 封包送入虛擬網卡,再由 mihomo 讀取封包、辨識連線並套用分流規則。不必要求每個應用程式都支援 HTTP 或 SOCKS 代理,因此更適合接管一般直接連線應用程式的 TCP、UDP 流量。
| 比較項目 | 系統代理 | TUN 虛擬網卡 |
|---|---|---|
| 連線方式 | 應用程式連線至本機代理連接埠 | 由系統路由引導 IP 封包 |
| 應用程式條件 | 必須採用代理設定 | 一般 IP 應用程式通常不必另行設定 |
| UDP | 僅設定 HTTP 系統代理通常無法涵蓋 | 可接管,但節點與協定仍須支援 |
| 權限 | 通常不必建立網路裝置 | 桌面版通常需要提升權限或使用背景服務 |
| 故障排查重點 | 代理位址、連接埠、應用程式設定 | 網卡、路由、DNS、權限與分流規則 |
啟用前檢查:核心、訂閱與權限
Clash 常用來泛指一系列用戶端與核心生態,但不代表每個安裝套件都支援相同的 TUN 參數。本文的 YAML 範例適用於 mihomo,也就是常說的 Clash Meta 核心。舊版 Clash、其他分支及行動版用戶端可能採用不同欄位或設定入口,不能只憑軟體名稱判斷相容性。
- 確認核心。在用戶端的「關於」、核心資訊或執行記錄中尋找 mihomo 標示。若介面沒有 TUN 開關,請先確認用戶端是否支援,不要直接加入大量不明設定。
- 先確認訂閱可用。先透過系統代理確認至少有一個節點可連線,且策略群組已選取有效節點。TUN 解決的是流量入口問題,無法修復失效的訂閱或節點驗證錯誤。
- 記下原有設定。記錄系統代理連接埠、目前的 DNS、正在使用的 VPN 和區域網路網段。首次設定時請保留本機操作方式,避免在遠端 SSH 工作階段中直接修改預設路由。
- 準備系統授權。Windows 通常需要服務模式或系統管理員權限;macOS 需依用戶端提示安裝特權輔助元件;Linux 則需要存取
/dev/net/tun,並具備管理網路的權限。
先退出其他使用虛擬網卡的 VPN,再測試 Clash TUN。多個用戶端同時新增預設路由或變更 DNS,容易造成流量路徑反覆切換。如需同時使用,請先確認各自能正常運作,再逐項設定排除路由與出口介面。
gvisor、system 與 mixed 網路堆疊
tun.stack 用來指定虛擬網卡流量採用哪種網路堆疊處理,不是節點協定選項,也不會把 Trojan 節點轉成 VLESS 節點。mihomo 常見的值有 gvisor、system 和 mixed;實際支援情況請以所用核心版本為準。
- gvisor:使用使用者空間網路堆疊處理連線。排查相容性時可用來比較,但不能因此保證它在所有系統上都更穩定。
- system:使用作業系統的網路堆疊處理連線。效能與相容性會受作業系統、驅動程式和網路環境影響,不宜直接認定它在所有裝置上都比較快。
- mixed:mihomo 會組合兩種處理方式:TCP 使用 system,UDP 使用 gvisor。這是網路堆疊的組合,與同時接收 HTTP 和 SOCKS 請求的
mixed-port無關。
如何判斷是否要切換網路堆疊
每次只變更一個參數,接著重新啟動核心並建立新的測試連線。若網頁正常,但語音或遊戲無法使用,先檢查節點是否支援 UDP,以及規則是否命中,再比較不同網路堆疊。若所有連線都沒有出現在面板中,應先檢查權限與路由;此時反覆切換 gvisor、system 通常無法找到根本原因。
mihomo TUN 設定:一併設定路由與 DNS
以下是要合併至現有設定檔的片段,不是完整訂閱。內容未定義節點、策略群組或分流規則,無法取代可用的完整設定。若頂層已有 tun 或 dns,應合併欄位,避免重複鍵值遭解析器覆寫。
mixed-port: 7890
allow-lan: false
mode: rule
tun:
enable: true
stack: gvisor
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 1.1.1.1
- 9.9.9.9
範例中的兩個上游 DNS 位址是明確的設定範例,並非適用於所有網路的推薦值。請選擇目前網路可連線且符合使用需求的 DNS 解析服務。若訂閱已有完整的 DNS 策略,建議保留原有上游與網域分流設計,只補上必要的 TUN 欄位。
auto-route 與 auto-detect-interface
auto-route: true 會讓核心自動設定路由,將流量導入 TUN;auto-detect-interface: true 則用於自動辨識實際出口介面,協助代理連線經由實體網路送出,避免再次進入自身的 TUN。若使用多張網卡、虛擬機橋接、企業 VPN,或同時連接 Wi-Fi 與有線網路,自動辨識仍可能選錯介面,需查看記錄確認。
不要只確認路由表中是否有 0.0.0.0/0。不同平台可能透過更細分的路由、不同路由表或策略路由來接管流量。請一併參考路由查詢結果和用戶端連線記錄,判斷設定是否生效。
dns-hijack、1053 與 fake-ip
dns-hijack 會將符合條件的 DNS 流量交由 mihomo 內建 DNS 處理。範例中的 any:53 適用於常見的 UDP 53 查詢;若確實需要處理 TCP 53,可依核心支援情況加入 tcp://any:53。它並非所有 DNS 解析協定的總開關,也無法直接辨識或劫持瀏覽器透過 HTTPS 傳送的 DoH 請求。
127.0.0.1:1053 是 DNS 監聽位址範例,不代表要在系統 DNS 設定中填入含連接埠的字串。多數系統的 DNS 設定只接受 IP 位址;TUN 接管路徑、監聽連接埠和系統 DNS 設定應分開理解。
fake-ip 會為網域指派虛擬位址,再由核心記錄網域與連線之間的對應關係。範例位址池 198.18.0.1/16 屬於保留的測試位址範圍,解析出這個範圍內的位址不代表 DNS 發生錯誤。需要取得真實解析結果的區域網路服務,應透過適當的 fake-ip-filter 和 DNS 分流處理,而不是排除所有網域。
Windows、macOS 與 Linux 的 TUN 設定步驟
各用戶端的選單名稱並不一致,以下依功能入口說明。若介面提供 TUN、網路堆疊和 DNS 接管選項,建議優先使用這些設定。不少用戶端會在執行時重新產生設定檔,直接修改產生的檔案可能在下次啟動時失效;訂閱更新也可能覆寫手動修改,請使用用戶端提供的持續性覆寫或合併功能。
Windows:服務權限與虛擬網卡
- 匯入訂閱,確認透過系統代理可連線至目標服務,再暫時關閉其他 VPN。
- 前往用戶端設定中的服務模式,依提示安裝並啟動服務;若用戶端採用其他提升權限的方式,請依其說明授予系統管理員權限。
- 開啟 TUN,選擇核心支援的網路堆疊,並套用設定。若出現安裝驅動程式或授權網路裝置的提示,請先確認提示來自目前使用的用戶端。
- 開啟 PowerShell,檢查新增的虛擬網卡和 IPv4 路由;同時查看用戶端記錄,確認是否有權限不足、建立裝置失敗或新增路由失敗等訊息。
Get-NetAdapter
Get-NetRoute -AddressFamily IPv4 |
Sort-Object RouteMetric |
Format-Table DestinationPrefix,InterfaceAlias,NextHop,RouteMetric
網卡名稱取決於用戶端和設定,不一定會叫做 Clash。網卡存在只代表裝置已建立,不能單憑這點確認應用程式流量已套用代理策略。
macOS:輔助元件與 utun 介面
- 確認目前使用的用戶端和核心支援 TUN,並完成所需的特權輔助元件安裝。
- 在用戶端啟用 TUN 或同等的虛擬網卡功能,並依提示確認系統授權。
- 使用以下命令查看介面、路由和系統 DNS,再與啟用前的結果比較。
ifconfig
netstat -rn -f inet
scutil --dns
macOS 可能同時有多個 utun 介面,其他 VPN 和系統功能也會建立這些介面。不要只因看到 utun 就認定它屬於 Clash,也不要手動刪除所有同類介面。請比較啟用前後的差異,並參考路由和記錄確認介面所屬。
Linux:TUN 裝置與網路管理權限
桌面用戶端通常會透過服務程序提升權限。以命令列部署時,程序至少必須具備建立 TUN 和管理路由的權限,通常會涉及 CAP_NET_ADMIN;其他所需權限則須視核心功能、服務限制和執行方式確認。不要直接套用來路不明的 capabilities 清單。
test -c /dev/net/tun && echo "TUN device available"
ip link show
ip rule show
ip route show table all
resolvectl status
resolvectl 適用於使用 systemd-resolved 的系統;找不到此命令不代表 TUN 故障。在容器中執行時,主機也必須提供 TUN 裝置和相應的網路權限,只在容器內改用 root 不一定足夠。首次測試請在本機進行,避免路由變更中斷遠端管理連線。
Android 與 iOS:系統 VPN 授權
Android 用戶端通常透過系統 VPN 介面接管流量,不必照搬桌面版的網卡驅動程式安裝步驟。匯入相容的設定後,選擇 VPN 或虛擬網卡模式;首次連線時,請允許系統 VPN 權限。若已啟用依應用程式代理,請確認目標應用程式在接管範圍內;遭排除的應用程式不會因桌面範例設定了 auto-route 就自動納入。
iOS 用戶端通常使用系統提供的網路延伸功能。請先確認 App 支援相應的設定格式,再新增系統 VPN 設定並授權連線。桌面版 mihomo 的所有 TUN 欄位不能直接視為通用的 iOS 設定,也不能假設每個支援 Clash 訂閱的 App 都採用 mihomo 核心。
行動裝置通常無法同時啟用兩個同類型的一般 VPN 通道。若連線後立即中斷,請先檢查其他 VPN、隨選連線規則和系統背景限制,不要反覆更換節點協定。
確認流量接管:連線記錄、DNS 與 UDP
先排除系統代理造成的誤判
暫時關閉用戶端的系統代理,保留 TUN。使用原本未設定代理的程式送出新請求,並查看連線面板中的程序、目標、規則和出口策略。也可執行以下命令,明確要求 curl 不使用顯式代理;這只能排除該請求使用顯式代理的可能,無法單獨證明 TUN 已接管流量。
curl --noproxy '*' -I https://example.com
若網頁可正常存取,且連線記錄中找到對應請求,再確認命中的策略。命中 DIRECT 是正常的規則結果,不代表 TUN 失效。切換節點後,已建立的長連線也可能繼續使用原有路徑;測試時請重新建立連線。
分別測試 DNS 與 UDP
- DNS:使用系統解析工具查詢未快取的網域,並觀察核心記錄。若瀏覽器啟用了安全 DNS,查詢結果不一定會經過系統的 UDP 53 路徑。
- UDP:使用實際的語音、遊戲或 QUIC 應用程式檢查連線清單。網頁能透過 TCP 443 開啟,不代表 UDP 443 也能正常使用。
- IPv6:雙協定網路需分別檢查 IPv4 和 IPv6。若只設定 IPv4 接管,部分應用程式可能優先使用另一條 IPv6 路徑。
- 區域網路:測試路由器管理頁面、印表機和內網網域。需要直連的目的位址應設定明確規則;特殊網路環境也可能需要排除路由。
啟用 TUN 後無法上網:逐層排查與復原
| 狀況 | 優先檢查 | 處理方式 |
|---|---|---|
| 未建立虛擬網卡 | 服務、授權、裝置存取權限 | 修正權限後重新啟動核心,並查看第一筆啟動錯誤 |
| 網卡已建立,但連線清單空白 | 路由、依應用程式排除、IPv6 | 確認實際請求是否進入接管路徑 |
| 無法連線至網域 | DNS 上游、接管、快取 | 確認解析服務可連線,再檢查 fake-ip 設定 |
| 網頁正常,遊戲無法連線 | 節點的 UDP 支援與分流規則 | 檢查目標規則,再比較不同網路堆疊 |
| 切換網路後無法上網 | 出口介面與舊路由 | 重新建立 TUN,讓核心重新辨識出口介面 |
| 無法連線至區域網路裝置 | 私有網路規則、路由衝突、內網 DNS | 明確設定直連與排除範圍,保留內網解析 |
復原時,先在用戶端關閉 TUN,再正常結束用戶端,並確認系統代理是否仍指向 127.0.0.1:7890。若代理程序已停止,但系統代理仍開啟,瀏覽器可能持續顯示連線失敗;這和殘留的 TUN 路由是兩種不同問題。
接著還原先前記錄的 DNS,並中斷後重新連線目前的網路。若路由仍有異常,再檢查背景服務是否仍在執行;必要時重新啟動系統,還原網路狀態。不要批次刪除不熟悉的路由或網卡,企業網路、虛擬機和其他 VPN 可能仍在使用它們。
若要進一步整理設定結構,請參閱Clash 設定說明;尚未決定使用哪個用戶端,可先閱讀用戶端選擇指南,依平台和核心功能挑選。