先確認實作方式:TUN 不一定需要系統擴充功能
在 macOS 啟用 Clash TUN,關鍵是讓核心取得建立虛擬網路介面和調整路由的權限。使用 mihomo 的用戶端,常見做法是安裝特權輔助服務,再由核心操作系統提供的 utun 介面;採用 Apple Network Extension 的應用程式,則可能需要新增 VPN 設定或核准網路擴充功能。這兩種方式不可混為一談,也不需要全部操作一遍。
本文以 macOS 13 及以上版本的系統設定介面為例,分別說明輔助服務與網路擴充功能的操作方式。按鈕名稱會依用戶端版本而異;操作前請先在「關於」或「核心」頁面記下用戶端版本、mihomo 版本與 macOS 版本。Apple 晶片 Mac 優先選擇 arm64 版本,Intel Mac 則選擇 x86_64;處理器架構不會免除網路權限要求。
虛擬網卡接管的是 IP 流量,不代表所有連線都會自動走代理
TUN 是第三層虛擬網路介面。應用程式產生的 IP 封包經系統路由送入虛擬介面後,由代理核心讀取,再依規則選擇代理節點、直接連線或拒絕連線。這能涵蓋許多不讀取系統 HTTP 代理設定的程式,但實際範圍仍受路由、排除清單、IPv6 設定及其他 VPN 影響。
因此,「啟用 TUN」和「所有流量都走代理」是兩項不同設定。TUN 搭配規則模式時,符合 DIRECT 規則的連線仍會直連;切換至全域模式,也不能假設所有遭系統排除的流量都會經過核心。UDP 是否可用,還取決於所選節點、通訊協定與伺服器端支援。
系統代理與 TUN:依應用需求選擇
| 項目 | 系統代理 | TUN 模式 |
|---|---|---|
| 流量入口 | 應用程式讀取系統代理設定,再連至本機代理連接埠 | 系統路由將符合條件的 IP 封包送入虛擬介面 |
| 常見使用情境 | 瀏覽器、遵循系統代理設定的桌面應用程式 | 部分命令列工具、遊戲及不讀取代理設定的應用程式 |
| UDP 處理 | 一般 HTTP 代理無法通用地承載 UDP | 可接收 UDP,但出口仍須支援 UDP 轉發 |
| 權限需求 | 變更系統代理設定可能需要授權 | 通常需要授權輔助服務或網路擴充功能 |
| 故障影響範圍 | 主要影響使用代理的應用程式 | 路由或 DNS 設定錯誤時,可能影響整台裝置的網路連線 |
如果只是用 Safari 瀏覽網頁,先使用系統代理即可。若瀏覽器能正常連線,終端工具卻直接連線,請先檢查工具本身的代理參數,再決定是否啟用 TUN。TUN 能涵蓋更多流量,但也增加路由與 DNS 的排查項目,並不是用來降低延遲的開關。
先用系統代理測試節點
- 匯入訂閱並完成更新,確認設定檔通過用戶端的語法檢查。
- 選擇規則模式,並在代理群組中指定可用節點。
- 啟用系統代理,用瀏覽器開啟實際需要使用的服務,並查看連線記錄。
- 確認節點運作正常後,關閉系統代理,再單獨測試 TUN,避免混淆兩種流量入口。
部分用戶端可同時使用系統代理與 TUN,但首次排查時建議只保留一種流量入口。若節點本身握手失敗,切換至 TUN 無法修復訂閱過期、節點密碼錯誤或伺服器無法連線等問題。
啟用前:備份設定並記錄網路狀態
先將用戶端移至「應用程式」資料夾,再從該處啟動。直接從磁碟映像檔執行,或安裝服務後才移動應用程式,可能導致輔助服務指向的程式路徑與目前安裝位置不一致。請備份目前的設定、覆寫檔案和代理群組選擇;訂閱連結含有存取憑證,請勿貼到公開的支援工單。
- 暫停其他通道:暫時中斷其他 VPN、TUN 代理及可能接管路由的網路工具。公司管理的裝置請先確認管理規範,不要移除公司推送的網路設定。
- 記下 DNS 設定:開啟「系統設定」→「網路」→目前的網路服務→「詳細資訊」→「DNS」,記下手動設定的伺服器位址。
- 確認本機連接埠:查看用戶端實際使用的 HTTP、SOCKS 或混合連接埠。以下以
7890為例,但並非所有用戶端都使用這個固定值。 - 預留離線復原方式:事先開啟用戶端設定頁,確認 TUN 開關與輔助服務管理入口,避免斷網後才查找復原方法。
在「應用程式」→「工具程式」→「終端機」執行以下唯讀指令,可記錄切換前的狀態。輸出內容含網路位址與介面資訊,分享記錄前請先移除敏感資料。
sw_vers
uname -m
scutil --proxy
scutil --dns
route -n get 1.1.1.1
ifconfig -l
uname -m 在原生 Apple 晶片的終端機環境通常會回傳 arm64;若終端機透過 Rosetta 執行,可能顯示 x86_64,因此仍應從 Apple 選單→「關於這台 Mac」確認機型。route -n get 可查看指定目的地的路由,比只查看預設路由更適合用來驗證 TUN。
方式一:安裝輔助服務並啟用 mihomo TUN
如果設定頁面出現「服務模式」、「輔助服務」或「特權服務」,通常應採用這種方式。以下列出操作順序,但各用戶端的選單名稱不一定相同;請以目前應用程式介面和專案說明為準。
- 進入用戶端的「設定」,找到服務管理區,按一下「安裝」或「安裝輔助服務」。只有在你主動執行此操作後,才確認系統驗證提示。
- 使用管理員帳戶授權。系統可能會要求輸入密碼或使用 Touch ID;若帳戶沒有管理員權限,請聯絡裝置管理員。
- 等待介面顯示服務正在執行,再依用戶端提示重新啟動核心。不要只因安裝按鈕消失,就判定服務已正常啟動。
- 進入網路或 TUN 設定,啟用 TUN 模式;首次測試時,保留用戶端建議的通訊協定堆疊與路由選項。
- 查看啟動記錄,確認沒有權限不足、介面建立失敗或新增路由失敗等錯誤,再檢查實際連線是否出現在記錄中。
特權輔助服務通常透過系統服務管理機制執行,不等於第三方核心擴充功能。如果此時沒有出現「允許系統擴充功能」按鈕,不代表漏做授權步驟。也不要為了繞過權限問題而長期使用 sudo 啟動整個圖形介面用戶端。
輔助服務無法啟動時的檢查順序
- 確認目前啟動的是「應用程式」資料夾中的同一份用戶端,而不是下載資料夾或磁碟映像檔中的副本。
- 如果應用程式升級後出現服務不相容,優先使用用戶端內建的「解除安裝服務」及「重新安裝服務」功能。
- 在 macOS 13、14 中,可檢查「系統設定」→「一般」→「登入項目」中的背景項目;在 macOS 15 中,對應位置為「登入項目與擴充功能」。只有實際註冊背景項目的應用程式才會顯示相關項目。
- 記下首次失敗的時間與錯誤訊息,不要為了試錯而連續安裝多個用戶端的輔助服務。
服務識別碼、安裝路徑與管理指令由用戶端決定。不要照抄其他專案的 launchctl 刪除指令,也不要大量刪除 /Library/LaunchDaemons/ 中的檔案。
方式二:核准 VPN 設定與網路擴充功能
只有在用戶端明確採用 Network Extension,且實際跳出相應請求時,才使用這種方式。Apple 的 Network Extension 架構有多種部署形式;VPN 設定許可、應用程式擴充功能與系統擴充功能核准是不同環節,不應將所有提示都稱為「驅動程式授權」。
- 在用戶端啟用隧道功能。如果 macOS 提示應用程式要新增 VPN 設定,請確認應用程式名稱後選擇允許。
- 若出現系統擴充功能遭封鎖的提示,請依指示開啟「系統設定」。在 macOS 13、14 中,常見的核准入口位於「隱私權與安全性」頁面下方,而且只有存在待核准的請求時才會顯示。
- 在 macOS 15 中,前往「系統設定」→「一般」→「登入項目與擴充功能」→「網路擴充功能」查看;列表內容會依應用程式採用的擴充功能類型與安裝狀態而異。
- 只有在系統或用戶端要求時才重新啟動。接著返回應用程式連線隧道,並在「系統設定」→「VPN」或「網路」相關頁面確認連線狀態。
不要一併刪除與目前用戶端無關的 VPN 設定。個人 VPN、公司 VPN 與內容過濾器可能屬於不同網路元件;刪除前請記下名稱與用途,並優先在所屬應用程式中中斷連線或解除安裝。
mihomo 設定:分別檢查 TUN、DNS 與規則
許多圖形介面用戶端會在啟動前合併訂閱、覆寫設定與介面選項。直接編輯訂閱快取檔案,下一次更新時可能會被覆蓋。請優先使用用戶端的 TUN 設定或持久化覆寫功能,並檢查最後實際載入的設定;原版 Clash、舊版 Premium 與 mihomo 支援的設定功能並不完全相同。
以下是 mihomo 的局部設定範例,並非可直接匯入的完整訂閱。範例沒有節點、代理群組和規則,應合併至現有設定,避免產生重複的頂層 tun 或 dns 鍵。若用戶端已產生這些欄位,請以用戶端的設定機制為準。
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 1.1.1.1
auto-route:讓核心自動設定通往 TUN 的路由。是否設定成功,仍須查看記錄與實際路由。auto-detect-interface:嘗試識別對外連線介面。Wi-Fi、有線網路與其他 VPN 同時啟用時,請特別確認是否選錯出口。dns-hijack:將進入 TUN 且符合條件的傳統 DNS 請求交由核心 DNS 處理。範例涵蓋 UDP 與 TCP 的 53 連接埠,但不會自動解密任意加密 DNS。fake-ip-range:為 fake-ip 對應配置位址範圍,並非代理伺服器位址。若與現有網路用途衝突,請依網路環境調整。
範例中的 DNS 上游是明文解析器,只用來說明設定結構,並非適用於所有網路環境的建議。公司內網網域可能只有公司 DNS 能解析;應依網域規劃 nameserver-policy 等設定,不要直接以公共 DNS 取代所有解析路徑。
兩個容易忽略的注意事項
IPv6 需要另外驗證。這段範例並非完整的 IPv6 流量接管方案。若網路同時支援 IPv4 與 IPv6,請檢查核心的 IPv6 設定、TUN 路由與實際連線記錄;不能只因 IPv4 測試通過,就認定所有連線都依預期轉發。
DNS 正常不代表規則正確。規則仍會依序比對,通常在首次符合時決定策略。公司網域應直連或經由特定出口,需要在規則中明確指定;TUN 本身不會修正規則順序,也不會自動補上訂閱缺少的規則集。
確認是否生效:同時檢查介面、路由與連線記錄
TUN 開關亮起只代表介面狀態有變化;只看到 utun 也不足以確認目前用戶端已成功接管流量。macOS 系統服務和其他 VPN 都可能建立 utun 介面,編號也會變動,因此不能將 utun0 或 utun3 當成固定答案。
ifconfig -l
route -n get 1.1.1.1
scutil --dns
scutil --proxy
lsof -nP -iTCP:7890 -sTCP:LISTEN
比較啟用前後的介面列表,並確認特定目的地的路由是否符合用戶端設計。有些實作會使用多條較具體的路由,而不是取代唯一的預設路由。lsof 這項指令只能檢查範例本機連接埠是否有程序監聽,不能用來證明 TUN 已生效。
執行一次不明確指定代理的連線測試
curl --noproxy '*' --connect-timeout 10 --max-time 20 -I https://example.com
此指令不會明確使用 HTTP 或 SOCKS 代理,適合搭配 TUN 測試;連線逾時設為 10 秒、總逾時設為 20 秒,失敗時能較快返回。接著在用戶端的連線頁面搜尋 example.com,檢查符合的規則、代理群組與實際節點。收到 HTTP 回應只代表請求已完成,無法單獨證明流量經過代理。
- 先測試一個預期應直連的目標,確認記錄顯示預期的直連策略。
- 再測試一個預期應走代理的目標,確認它符合正確的代理群組,而不是意外套用規則末尾的預設策略。
- 若需要使用 UDP,請以實際需要的 UDP 應用程式測試;TCP 請求成功不代表 UDP 轉發正常。
- 切換 Wi-Fi 或從睡眠狀態恢復後再測試一次,確認自動偵測介面功能能配合網路變化。
常見故障與復原步驟
啟用後整台裝置無法連網
先關閉 TUN,確認基本網路恢復,再查看記錄中最早出現的錯誤。如果關閉後網路恢復,優先檢查 DNS 請求、路由設定與對外介面;如果仍無法連線,請檢查系統代理是否仍指向已停止的本機連接埠,以及其他 VPN 是否仍處於連線狀態。
系統代理可用,但 TUN 顯示權限不足
先處理輔助服務狀態,不要急著更換節點。確認服務是否已安裝、目前應用程式路徑是否變更,以及升級後是否需要更新服務。若錯誤明確指出建立介面或新增路由失敗,請保留該筆記錄,再依所用用戶端的服務管理方式修復。
網頁可用,但遊戲或語音無法使用
檢查該連線是否確實進入 TUN、節點是否支援 UDP,以及規則是否選到正確出口。若只有特定網路發生問題,再考慮路徑 MTU 或電信業者的網路限制;不要直接照抄較小的 MTU 數值,請先記錄失敗情境並逐項測試。
裝置從睡眠狀態喚醒後無法解析網域
先重新連線 TUN,並檢查實際對外介面與 DNS 狀態。若需要清除系統 DNS 快取,請先確認路由與核心 DNS 已恢復,再執行下列指令;這些指令無法修復錯誤的 DNS 上游或規則。
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
停止使用時如何復原
- 在用戶端關閉 TUN,等待連線中斷後再結束應用程式,不要一開始就強制結束核心。
- 如果曾啟用系統代理,也請在用戶端關閉,並使用
scutil --proxy檢查是否有殘留設定。 - 還原先前記錄的手動 DNS 設定;原本使用自動 DNS 的網路,不要額外保留臨時設定的公共 DNS。
- 若不再使用該用戶端,請透過應用程式提供的入口解除安裝輔助服務;若採用 Network Extension,則依所屬應用程式的解除安裝說明移除相關設定。
- 重新測試直接連線的網路;必要時中斷目前的網路服務,再重新連線。
如需進一步排查,請參閱疑難排解手冊;首次匯入訂閱與選擇代理群組的操作,請參閱快速入門。提交問題時,附上系統版本、用戶端與核心版本、啟用方式,以及已移除敏感資訊的第一筆錯誤記錄,會比只提供開關截圖更有幫助。