連線疑難排解 · Clash 技術部落格

Clash Verge Rev macOS 開啟 TUN 後 DNS 失效怎麼辦?

Clash Verge Rev 在 macOS 啟用 TUN 後網域打不開?比對訂閱、執行及基礎設定中的 DNS,確認是否殘留 dns 區塊;備份後依官方建議移除並驗證。

  • Clash Verge Rev
  • macOS
  • TUN
  • DNS
  • config.yaml
本文目錄

先確認 TUN 斷網是否真的出在 DNS 設定流程

Clash Verge Rev issue #8122 記錄一台 macOS 裝置在 v2.5.6、服務模式及 Mihomo v1.19.31 下的故障:一啟用 TUN,連原本能直接連線的網站也無法透過網域名稱開啟;回報者發現執行設定只剩 dns.enhanced-mode: redir-host。

該 issue 目前仍未關閉,只有一份詳細重現紀錄和少數類似回報,不能據此斷定所有 Mac 或所有訂閱都會受影響。

回報者最初推測,關閉「DNS 覆寫」後,應用程式移除了訂閱中的 dns。

專案成員在 issue 留言指出更具體的可能原因:基礎 config.yaml 留有不完整的 dns 區塊,產生執行設定時蓋過訂閱 DNS;殘留區塊缺少 enable: true,導致核心 DNS 無法使用。

官方擴充設定文件也指出,關閉 DNS 覆寫時,應用程式本身不會修改訂閱 dns。本文依照可檢查的殘留設定路徑排除故障,不把回報者最初的推測寫成專案結論。

適用前提是關閉 TUN 後,一般網路或同一節點的系統代理可用;開啟 TUN 後網域名稱解析失敗,而且基礎設定與執行設定確實有相應差異。

如果日誌首先出現 operation not permitted、get empty name、interface not found,或同一節點在系統代理模式也無法使用,應先排查權限、出口介面或節點,不要修改 DNS。

先區分看似相同的斷網

觀察到的證據優先判斷
執行設定的 dns 只剩 enhanced-mode,基礎 config.yaml 留有相同殘留區塊繼續核對本文的設定覆蓋路徑
TUN 開關立刻跳回或日誌出現 operation not permitted先檢查 macOS 服務授權
日誌先出現 get empty name / interface not found先檢查目前的出口介面
系統代理和 TUN 都無法連上同一網站先檢查 Profile、節點與共同的 DNS 故障

先恢復網路,再保留三份設定進行比對

先關閉 TUN,確認 macOS 的一般網路是否立即恢復。若系統代理原本可用,可以暫時只使用系統代理;若退出用戶端後仍無法上網,再檢查系統網路設定是否殘留舊代理或 DNS,不要為了測試反覆開啟故障中的 TUN。

修改前,分別保存原始訂閱或 Profile、基礎 config.yaml、應用程式產生的執行設定,並記錄目前的用戶端與核心版本。

基礎設定通常位於 ~/Library/Application Support/io.github.clash-verge-rev.clash-verge-rev/config.yaml。請透過本機應用程式目錄或檔案管理工具確認實際路徑。

不要把基礎設定與訂閱檔、dns_config.yaml 或產生的執行設定當成同一份檔案。

訂閱和設定可能含有節點憑證;備份應留在本機安全位置,公開回報時只使用已遮蔽敏感資訊的副本。

記錄同一網路下的三個狀態:關閉 TUN 時能否解析網域、開啟 TUN 後第一條 DNS 或 TUN 日誌,以及再次關閉後能否恢復。這樣才能判斷故障是否由 DNS 接管路徑觸發,而不是瀏覽器快取、節點失效或系統權限所致。

保留可還原的基準狀態

  1. 關閉故障中的 TUN

    先恢復系統直連或原本可用的系統代理,不在斷網狀態下大量修改設定。

  2. 保存原始檔案

    分別備份訂閱、基礎 config.yaml 和執行設定,記下檔案路徑與修改前的 dns 區塊。

  3. 記錄第一條錯誤

    匯出開啟 TUN 前後的日誌,並記錄 macOS、用戶端與核心版本。

如何判斷殘留的 dns 區塊覆蓋了訂閱?

先檢查原始訂閱的 dns 是否完整,尤其是 enable: true、nameserver 及原有的其他解析設定。再檢查基礎 config.yaml 是否只留下 dns.enhanced-mode: redir-host 或類似的不完整欄位。

最後檢查應用程式產生的執行設定,是否與這個殘留區塊相似,而沒有保留原始訂閱的 DNS。尚未比對三份檔案前,不要只因「DNS 覆寫」開關關閉就刪除設定。

Mihomo 官方文件將 dns.enable 定義為是否啟用核心 DNS,並列出 nameserver 等解析欄位;TUN 的 dns-hijack 會將 DNS 查詢交由核心處理。

如果執行設定沒有可用的 DNS 路徑,但 TUN 仍接管查詢,網域名稱請求就可能失敗。這能解釋為何先前系統代理或一般直連可用,TUN 接管後卻無法開啟網站;是否屬於 #8122,仍須以本機設定差異判斷。

Clash Verge Rev 官方文件說明,自 v2.5.5 起,擴充設定寫入的 dns 欄位會依規則覆蓋對應值;設定、全域擴充、訂閱擴充與應用程式回寫都有先後順序。即使訂閱原文正確,後續來源仍可能改動最終結果。若基礎 config.yaml 沒有殘留區塊,應檢查自己的擴充設定與腳本,不能硬套這次 issue 的處理步驟。

原始訂閱 DNS 完整,基礎設定不完整,執行設定也不完整

備份後只處理基礎設定中已確認的殘留區塊。

原始訂閱本身沒有 enable 或 nameserver

先向訂閱提供者確認原始設定,不把故障歸因於基礎設定覆蓋。

基礎設定正常,執行設定卻改變

檢查全域/訂閱擴充、腳本與應用程式設定的寫入順序。

執行設定 DNS 完整,仍無法上網

轉而檢查 DNS 上游是否可達、規則、節點、介面與服務日誌。

確認殘留後,只移除基礎設定的這個區塊

只有三份檔案的比對支持上述原因時,才依照專案成員在 #8122 的建議處理。先完全結束 Clash Verge Rev,包括選單列處理程序;並確認已備份基礎 config.yaml。

再用文字編輯器,從該檔案移除確認殘留的頂層 dns 區塊,保留其他鍵值與訂閱原文。不要刪除整份 config.yaml、dns_config.yaml、Profile 或應用程式資料目錄,也不要直接修改會重新產生的執行設定。

儲存後重新啟動 Clash Verge Rev,先保持 TUN 關閉。檢查執行設定是否恢復訂閱原本預期的 DNS 欄位,並先通過設定檢查,再以系統代理進行一次真實 HTTPS 請求。這一層正常後,才短暫重新開啟 TUN 測試。

回報者曾把完整 DNS 放進全域 Merge 作為暫時繞行方式,但官方文件說明擴充設定會依優先順序覆蓋訂閱;直接複製他人的 DNS 或整組規則,可能覆蓋自己的區域網路、公司 DNS 與節點解析策略。本文不把全域 Merge 注入當成通用修復。若裝置受組織管理、設定由他人統一下發,先聯絡管理員,不要自行修改受管理設定。

最小修改順序

  1. 完全退出應用程式

    關閉 TUN 並從選單列退出,避免應用程式繼續寫入同一檔案。

  2. 確認備份與目標

    核對基礎 config.yaml 的實際路徑和不完整的 dns 區塊,確認原始訂閱已另行保存。

  3. 只移除殘留區塊

    刪除基礎檔案中已確認覆蓋訂閱的頂層 dns 對映,保留其餘設定,不碰產生的檔案。

  4. 先檢查再開啟 TUN

    重新啟動後檢查執行設定與日誌,確認系統代理正常,再限時測試 TUN。

重新啟動後如何驗證解析流程確實恢復?

先核對重新產生的執行設定:dns.enable、nameserver 應與預期的原始訂閱或擴充設定一致;不能只看介面上的 DNS 覆寫開關。接著固定同一個 Profile 與節點,分別在系統代理和 TUN 模式下請求同一個真實 HTTPS 網站,並從連線紀錄及日誌確認解析是否成功。

再完全退出並重新啟動一次應用程式,重複 TUN 測試;若只在這次工作階段有效,表示仍有設定來源在重新啟動時寫回。關閉 TUN 後也要確認一般網路恢復,不必重啟整台 Mac 才能上網。

不要只憑 DNS 檢測頁顯示某個位址、TUN 開關維持亮起,或延遲測試出現數字判定成功。目標網域能解析、網頁完整載入、連線紀錄符合預期,而且重啟後仍有效,才算完成驗證。

還原驗證清單

  • 原始訂閱、基礎 config.yaml 與修改前執行設定的私密備份仍可還原
  • 基礎設定中確認的殘留 dns 區塊已移除,其他欄位未被覆蓋
  • 重啟後執行設定保留預期的 enable 與 nameserver,而非只剩 enhanced-mode
  • 相同 Profile 與節點在系統代理及 TUN 下均完成真實 HTTPS 請求
  • 連線與日誌不再出現這次 DNS 失敗,關閉 TUN 後一般網路立即恢復
  • 再次退出並啟動應用程式後仍有效,且沒有複製陌生 DNS 或腳本

仍然失敗時,如何還原並回報上游?

若移除殘留區塊後設定檢查失敗、原有分流被改動或 TUN 仍然斷網,先關閉 TUN,從修改前的備份還原基礎 config.yaml,再重新啟動應用程式。舊設定可能仍會觸發這次 DNS 故障,因此還原的目的是保存原設定與證據;暫時上網則使用已驗證可用的系統代理或不接管 DNS 的一般網路。

若執行設定已有完整 DNS,網域卻仍解析失敗,應另查 nameserver 本身是否可達、目前網路是否使用企業 DNS、是否有其他 VPN/TUN,以及第一條核心錯誤。不要為了消除錯誤訊息而關閉系統安全保護、清空全部 Profile、刪除整個應用程式資料目錄或隨機更換公共 DNS。

向 #8122 回報時,提供 macOS、Clash Verge Rev、Mihomo 版本,TUN/系統代理對照,三份設定中與 dns 相關的去識別化片段,以及重啟前後結果。回報者的解釋與專案成員的殘留設定判斷應分開記錄;目前沒有正式版公告能保證所有類似斷網都已修復。

處理失敗時的回復標準

  • TUN 已關閉,系統直連或原本可用的系統代理已恢復
  • 基礎 config.yaml 已從事前備份還原,訂閱與擴充設定未遺失
  • 原始日誌與設定留在本機,只分享移除 token、密碼和個人路徑的副本
  • 後續是否更改版本或設定,應以官方 issue、文件和 Release 的新證據為準

參考資料