先確認實作方式: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 的排查項目,並不是用來降低延遲的開關。

先用系統代理測試節點

  1. 匯入訂閱並完成更新,確認設定檔通過用戶端的語法檢查。
  2. 選擇規則模式,並在代理群組中指定可用節點。
  3. 啟用系統代理,用瀏覽器開啟實際需要使用的服務,並查看連線記錄。
  4. 確認節點運作正常後,關閉系統代理,再單獨測試 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

如果設定頁面出現「服務模式」、「輔助服務」或「特權服務」,通常應採用這種方式。以下列出操作順序,但各用戶端的選單名稱不一定相同;請以目前應用程式介面和專案說明為準。

  1. 進入用戶端的「設定」,找到服務管理區,按一下「安裝」或「安裝輔助服務」。只有在你主動執行此操作後,才確認系統驗證提示。
  2. 使用管理員帳戶授權。系統可能會要求輸入密碼或使用 Touch ID;若帳戶沒有管理員權限,請聯絡裝置管理員。
  3. 等待介面顯示服務正在執行,再依用戶端提示重新啟動核心。不要只因安裝按鈕消失,就判定服務已正常啟動。
  4. 進入網路或 TUN 設定,啟用 TUN 模式;首次測試時,保留用戶端建議的通訊協定堆疊與路由選項。
  5. 查看啟動記錄,確認沒有權限不足、介面建立失敗或新增路由失敗等錯誤,再檢查實際連線是否出現在記錄中。

特權輔助服務通常透過系統服務管理機制執行,不等於第三方核心擴充功能。如果此時沒有出現「允許系統擴充功能」按鈕,不代表漏做授權步驟。也不要為了繞過權限問題而長期使用 sudo 啟動整個圖形介面用戶端。

輔助服務無法啟動時的檢查順序

  • 確認目前啟動的是「應用程式」資料夾中的同一份用戶端,而不是下載資料夾或磁碟映像檔中的副本。
  • 如果應用程式升級後出現服務不相容,優先使用用戶端內建的「解除安裝服務」及「重新安裝服務」功能。
  • 在 macOS 13、14 中,可檢查「系統設定」→「一般」→「登入項目」中的背景項目;在 macOS 15 中,對應位置為「登入項目與擴充功能」。只有實際註冊背景項目的應用程式才會顯示相關項目。
  • 記下首次失敗的時間與錯誤訊息,不要為了試錯而連續安裝多個用戶端的輔助服務。

服務識別碼、安裝路徑與管理指令由用戶端決定。不要照抄其他專案的 launchctl 刪除指令,也不要大量刪除 /Library/LaunchDaemons/ 中的檔案。

方式二:核准 VPN 設定與網路擴充功能

只有在用戶端明確採用 Network Extension,且實際跳出相應請求時,才使用這種方式。Apple 的 Network Extension 架構有多種部署形式;VPN 設定許可、應用程式擴充功能與系統擴充功能核准是不同環節,不應將所有提示都稱為「驅動程式授權」。

  1. 在用戶端啟用隧道功能。如果 macOS 提示應用程式要新增 VPN 設定,請確認應用程式名稱後選擇允許。
  2. 若出現系統擴充功能遭封鎖的提示,請依指示開啟「系統設定」。在 macOS 13、14 中,常見的核准入口位於「隱私權與安全性」頁面下方,而且只有存在待核准的請求時才會顯示。
  3. 在 macOS 15 中,前往「系統設定」→「一般」→「登入項目與擴充功能」→「網路擴充功能」查看;列表內容會依應用程式採用的擴充功能類型與安裝狀態而異。
  4. 只有在系統或用戶端要求時才重新啟動。接著返回應用程式連線隧道,並在「系統設定」→「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

停止使用時如何復原

  1. 在用戶端關閉 TUN,等待連線中斷後再結束應用程式,不要一開始就強制結束核心。
  2. 如果曾啟用系統代理,也請在用戶端關閉,並使用 scutil --proxy 檢查是否有殘留設定。
  3. 還原先前記錄的手動 DNS 設定;原本使用自動 DNS 的網路,不要額外保留臨時設定的公共 DNS。
  4. 若不再使用該用戶端,請透過應用程式提供的入口解除安裝輔助服務;若採用 Network Extension,則依所屬應用程式的解除安裝說明移除相關設定。
  5. 重新測試直接連線的網路;必要時中斷目前的網路服務,再重新連線。

如需進一步排查,請參閱疑難排解手冊;首次匯入訂閱與選擇代理群組的操作,請參閱快速入門。提交問題時,附上系統版本、用戶端與核心版本、啟用方式,以及已移除敏感資訊的第一筆錯誤記錄,會比只提供開關截圖更有幫助。