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

Clash Verge Rev TUN 回環崩潰怎麼修?

Windows 上 Clash Verge Rev 開啟 TUN 後若日誌出現 reject loopback、CPU 衝高甚至核心崩潰,可檢查自動選擇的出口網路介面卡,固定物理介面,並按清單驗證與還原。

  • Clash Verge Rev
  • Windows
  • TUN
  • reject loopback
  • 虛擬網路介面卡
本文目錄

確認日誌正在形成 TUN 回環風暴

本文只處理一組明確的 Windows 症狀:Clash Verge Rev 的系統代理原本可用,一開啟 TUN,日誌就連續出現 reject loopback connection,verge-mihomo.exe 對節點的撥號反覆失敗,CPU 隨後明顯升高,嚴重時核心報 thread exhaustion 並崩潰。

官方 issue #7764 在服務模式、Clash Verge Rev v2.5.2 與 Mihomo v1.19.29、v1.19.30 上記錄了這條故障鏈。報告者最終確認,自動檢測選中了 v2rayN 的 Wintun 虛擬網路介面卡;手動固定實際以太網介面後,回環日誌、CPU 異常與執行緒耗盡都停止。

這是一台同時裝有多塊虛擬網路介面卡的電腦得到的閉環結果,不代表所有 TUN 超時都來自介面選擇。日誌沒有 reject loopback,或關閉 TUN 後系統代理也失敗時,應先檢查訂閱、節點、DNS 或服務模式。

用三個信號限定問題範圍

信號本問題中的表現不符合時
觸發動作開啟 TUN 後數秒開始系統代理也失敗時先查共同鏈路
日誌主體verge-mihomo.exe 撥號節點並反覆 reject loopback只有普通應用超時不算同一故障
資源變化CPU 快速升高,可能出現 thread exhaustion資源穩定時繼續按首條錯誤分流
Windows TUN 出口誤選後的回環路徑
  1. verge-mihomo.exe向目前代理節點發起出站撥號
  2. 誤選的虛擬網路介面卡auto-detect-interface 沒有使用實際物理出口
  3. Mihomo TUN核心自己的撥號再次進入 TUN
  4. 回環檢測與重試持續 reject loopback,CPU 與執行緒快速增長

把出站介面固定為目前預設路由使用的實體網路介面卡後,核心撥號不再回到自己的 TUN,回環日誌與資源風暴應同時停止。

關閉 TUN,先讓電腦恢復穩定

發現日誌密集重複時,先關閉 TUN,不要同時切節點、改 DNS 或反覆重載核心。等待 CPU 回落後,用原 Profile、原節點開啟系統代理做一次網頁存取;系統代理恢復,說明訂閱和節點仍有可用基礎,故障更集中在 TUN 出口選擇。

若介面已經卡住,先從任務管理器正常結束 Clash Verge Rev,再確認 Windows 系統代理沒有繼續指向已停止的本機連接埠。恢復直連後再匯出應用日誌、目前執行設定和網路介面卡清單,設定副本必須去掉訂閱 token、節點位址與密碼。

建立可還原的檢查基線

  1. 關閉 TUN

    停止新的回環撥號,等待 CPU 和日誌寫入恢復正常。

  2. 驗證系統代理

    保持原 Profile 與節點不變,只開啟系統代理髮起一次新請求。

  3. 儲存目前 Merge

    複製正在使用的覆寫和最終設定,後續只改出口介面兩個欄位。

  4. 保留首段日誌

    記錄用戶端、核心與 Windows 版本,以及第一條 reject loopback 前後的脫敏內容。

查出目前真正聯網的實體網路介面卡

保持 TUN 關閉,在 PowerShell 中同時查看可見網路介面卡和 IPv4 預設路由。Get-NetAdapter 的 Name 是後面需要填寫的介面名;Get-NetRoute 則能說明此刻哪張網路介面卡承擔預設出口。無線網路可能叫 Wi-Fi,有線網路可能叫以太網或 Ethernet,必須使用本機結果。

Windows 只讀檢查網路介面卡與目前預設路由
Get-NetAdapter -Name * |
  Format-Table Name, InterfaceDescription, Status, LinkSpeed, ifIndex

Get-NetRoute -DestinationPrefix "0.0.0.0/0" |
  Sort-Object RouteMetric |
  Format-Table InterfaceAlias, NextHop, RouteMetric, InterfaceMetric

從結果裡排除錯誤候選

結果判斷
Status 為 Up,且預設路由使用同一 InterfaceAlias優先作為目前實際出口候選
名稱或描述含 Wintun、TAP、VMware、VirtualBox屬於虛擬介面卡時不能只憑 LinkSpeed 選擇
網路介面卡 Up,但沒有目前預設路由可能只服務虛擬機、VPN 或區域網路
同時有 Wi-Fi 和以太網預設路由先斷開不用的一條,再重新確認實際出口

把自動選擇結果與預設路由對照

開啟剛才儲存的執行設定與本次啟動日誌,確認 auto-detect-interface 是否啟用,並尋找 Mihomo 實際採用的出站介面。若系統預設路由是物理 Wi-Fi 或以太網,日誌卻顯示節點撥號綁定 Wintun、TAP 或 VMware 介面,這才與官方 issue 的根因一致。

不要根據虛擬網路介面卡標稱的高速率判斷。#7764 的環境裡,vgate0 報告 100 Gbps,自動檢測卻因此選錯出口。介面證據一致後再新增覆寫;找不到選擇結果時,可以先把網路介面卡清單與首段日誌提交給專案維護者,而不是猜一個名稱。

預設路由是以太網,執行日誌卻使用 vgate0

符合介面誤選,繼續做最小覆寫。

預設路由和 Mihomo 都使用同一實體網路介面卡

不符合已知根因,停止套用本文設定。

日誌只有 dns resolve failed

先按 DNS 鏈路檢查,不把它當 reject loopback。

關閉其他 VPN 後故障消失

記錄衝突軟體與網路介面卡,不必再固定介面。

在 Merge 中只固定出口介面

Mihomo 官方設定把 interface-name 定義為頂層出站介面,把 auto-detect-interface 放在 tun 下。開啟目前 Profile 的 Merge 或覆寫,只新增這兩個欄位;不要複製 issue 中整段 TUN 和 DNS 設定,也不要把實體網路介面卡名稱寫進 tun.device。

把「以太網」替換成上一步查到的實際 Name
interface-name: "以太网"
tun:
  auto-detect-interface: false

讓改動保持最小

  1. 確認介面名完全一致

    包括空格、連字元和語言,不使用 InterfaceDescription 代替 Name。

  2. 儲存並執行設定驗證

    interface-name 位於頂層,auto-detect-interface 只在 tun 下縮進兩個空格。

  3. 保持其他欄位不變

    繼續使用原節點、規則、DNS、stack 和 strict-route,避免一次引入第二個變數。

  4. 完整重啟核心

    確認新執行設定已經包含兩個覆寫值,再進行一次受控 TUN 測試。

用一次受控測試驗證介面修復

重啟核心後先開啟日誌,再開啟 TUN。保持測試視窗可見,發起一個普通 HTTPS 請求;如果 reject loopback 再次密集出現,立即關閉 TUN。真正的修復必須同時改變日誌、CPU、核心存活和實際連線,不能只看 TUN 開關保持開啟。

官方 issue 的報告者在固定物理以太網後確認,回環風暴完全消失,CPU 恢復正常,v1.19.29 與 v1.19.30 都不再出現執行緒耗盡。上游 issue #3122 隨後以無需 Mihomo 核心改動關閉,所以本案例不應寫成某個新核心版本已經修復。

介面修復的完成標準

  • 開啟 TUN 後不再出現新的 reject loopback connection
  • 任務管理器中的 verge-mihomo.exe CPU 保持穩定
  • 核心持續執行,沒有 thread exhaustion 或反覆 reload
  • 同一節點能完成一次新的 HTTPS 請求並出現在連線記錄
  • 關閉 TUN 後系統直連仍能立即恢復

回環消失後,剩餘 DNS 錯誤另行處理

#7764 在介面問題解決後還暴露了獨立 DNS 設定錯誤,其中一次來自 DoH 網域的自舉循環。維護者也糾正了報告者對 proxy-server-nameserver 的早期判斷。不要把 issue 中的 DoT、nameserver-policy 或整段 DNS 示例複製到自己的設定中。

如果 reject loopback 已消失、CPU 正常,但網頁仍報 dns resolve failed,應保留已經驗證的介面覆寫,再以相同節點比較網域解析與直接存取。只有 DNS 證據明確時才改對應上游或策略,避免把兩個已經分開的故障重新混在一起。

介面修復後的下一條錯誤

現象處理
連線記錄有網域,節點撥號正常介面問題已閉環,繼續驗證實際業務
只有 dns resolve failed檢查 DNS 上游、自舉和 proxy-server-nameserver
仍然 reject loopback關閉 TUN,重新核對實際介面名與執行設定
設定驗證失敗撤銷覆寫,檢查頂層欄位和 YAML 縮進

切換網路後更新介面,失效就完整還原

關閉自動檢測後,Mihomo 會持續使用手動指定的網路介面卡。從有線切到 Wi-Fi、手機熱點或 USB 網路介面卡時,原介面可能不再承擔預設路由。切網後若 TUN 重新失效,先關閉 TUN 並重複只讀檢查,不要把舊介面名永久留在所有網路環境。

覆寫無效時恢復原狀態

  1. 關閉 TUN

    確認 Windows 直連恢復後再編輯 Merge。

  2. 移除兩個欄位

    刪除頂層 interface-name 和本次加入的 tun.auto-detect-interface。

  3. 重新載入原 Profile

    用系統代理確認原訂閱、節點與規則仍可工作。

  4. 保留脫敏證據

    提交實際網路介面卡清單、首條錯誤和執行設定差異,不公開訂閱與節點認證資訊。

六項檢查確認 Windows TUN 已恢復

最終驗證清單

  • 系統代理可用,開啟 TUN 後原請求仍能正常完成
  • 新日誌沒有 reject loopback、thread exhaustion 或核心替換循環
  • 執行設定中的 interface-name 與目前預設路由介面一致
  • 任務管理器觀察一段時間後 CPU 與執行緒沒有持續增長
  • 切換節點或發起新連線時,連線頁能顯示預期規則與出口
  • 關閉 TUN 和退出用戶端後,Windows 普通網路可以恢復

參考資料