先確認問題是否源自本機回環限制

在 Windows 10 或 Windows 11 上,如果瀏覽器能透過 Clash 連線,但某個 UWP App 持續顯示連線失敗,請先確認該 App 是否受到 AppContainer 網路隔離限制。Clash 的系統代理通常會指向本機位址,例如 127.0.0.1:7890;在 AppContainer 中執行的 App 預設無法像一般桌面程式一樣存取本機回環服務,因此可能在流量進入代理核心前就連線失敗。

這裡所說的「回環豁免」,是允許指定 App 存取本機回環位址,並非取消代理規則、解除帳號限制,也不會自動替 App 新增網路功能。設定對象是 App 套件,而不是某個訂閱或代理節點。並非所有從 Microsoft Store 安裝的軟體都是 UWP;部分已封裝的桌面 App 會在完整信任處理程序中執行,不能只憑安裝來源判斷。

  • 符合排查條件:同一台電腦、同一個網路環境下,瀏覽器代理運作正常,特定 AppContainer App 無法連線,而且目前使用的是本機系統代理。
  • 先排除用戶端問題:如果瀏覽器也無法連線,請先檢查代理核心是否正在執行、監聽連接埠是否正確,以及節點是否可連線。
  • 先排除服務端問題:如果只有特定帳號、下載工作或目標網域出錯,也請檢查登入狀態、服務是否正常,以及連線記錄。

步驟一:確認系統代理與本機連接埠

在 Windows 11 開啟「設定」→「網路和網際網路」→「Proxy」→「手動設定 Proxy」→「編輯」;Windows 10 則前往「設定」→「網路和網際網路」→「Proxy」中的手動設定區域。確認 Proxy 伺服器位址與連接埠和用戶端設定一致。如果這些設定由用戶端的「系統代理」開關管理,請優先在用戶端切換,避免兩處設定互相覆寫。

系統代理需要使用 HTTP 代理連接埠,或支援 HTTP 的混合連接埠。請勿在此填入僅支援 SOCKS 的連接埠,也不要將代理核心的控制介面連接埠當成代理連接埠。控制介面用於管理設定及查詢狀態,不負責轉送 App 的 HTTP 代理要求。

使用 PowerShell 檢查 TCP 監聽狀態

PowerShell · 本機連接埠檢查
Test-NetConnection -ComputerName 127.0.0.1 -Port 7890

查看輸出中的 TcpTestSucceeded。值為 True 只表示 TCP 連接埠可建立連線,不代表節點、DNS 或目標網站都正常。如果值為 False,請先啟動代理核心或修正連接埠;服務未在監聽時,新增回環豁免也無法解決問題。

也可以使用 Windows 內建的 curl.exe 明確指定代理,檢查 HTTP 代理連線路徑。下方指令設定了 15 秒逾時,僅供診斷參考,並非實測結果。如果目標網站無法連線,請改用已知可正常存取的 HTTPS 網址再次測試。

PowerShell · 明確指定 HTTP 代理
curl.exe --proxy http://127.0.0.1:7890 --head --max-time 15 https://www.microsoft.com/

明確指定代理後要求成功,但目標 App 仍無法連線時,再繼續檢查回環權限。不要為了讓 UWP 存取本機代理而開啟「允許區域網路連線」:這項設定是讓其他裝置存取監聽服務,與本機 AppContainer 的回環隔離是不同功能。

步驟二:查詢 App 套件系列名稱並記錄現有豁免

CheckNetIsolation.exe 是 Windows 提供的網路隔離管理工具。新增或移除豁免時,請使用系統管理員終端機;查詢 App 時,則要使用實際執行該 App 的 Windows 使用者帳號。如果以提升權限方式登入了另一個系統管理員帳號,Get-AppxPackage 預設查詢的使用者也可能跟著變更,因而找不到目標套件。

  1. 先關閉目標 App,包括可能仍在背景執行的程序。
  2. 在目標使用者的 PowerShell 中執行下方查詢,找出目標 App。
  3. 在「開始」按鈕上按右鍵,選擇「終端機(系統管理員)」或「Windows PowerShell(系統管理員)」,並允許使用者帳戶控制提示。
  4. 查詢目前的豁免清單,並保留操作前的輸出,以便核對及還原。
PowerShell · 查詢 App 身分與現有清單
Get-AppxPackage |
  Sort-Object Name |
  Select-Object Name, PackageFamilyName

CheckNetIsolation.exe LoopbackExempt -s

新增豁免指令需要使用 PackageFamilyName,也就是套件系列名稱;它不是顯示名稱,也不是包含版本、架構等資訊的 PackageFullName。套件系列名稱通常由 App 名稱、底線及發行者識別碼組成。請勿根據安裝資料夾名稱自行拼湊。

以 Windows 計算機示範指令

以下使用 Microsoft.WindowsCalculator 示範查詢方式。計算機執行一般運算不需要代理,因此僅用來說明指令格式,不適合作為網路修復的驗證對象。實際操作時,請將篩選名稱換成前一步清單中目標 App 的 Name。

PowerShell · 精確篩選套件
Get-AppxPackage -Name Microsoft.WindowsCalculator |
  Select-Object Name, PackageFamilyName

如果查詢沒有輸出,請先確認 App 是否安裝在目前帳號,以及名稱是否正確。App 在 Microsoft Store 顯示的名稱可能與內部套件名稱不同,可以先瀏覽完整清單。若桌面 App 是透過一般安裝程式部署,且沒有對應的套件身分,請勿繼續套用套件系列名稱指令。

步驟三:使用 CheckNetIsolation 為單一 App 新增豁免

確認 App 身分後,在系統管理員 PowerShell 中執行新增操作。以下仍以計算機為例,並透過變數讀取套件系列名稱,避免複製錯誤。指令只會在找到唯一符合的套件時執行;目標不明確就會停止,不會批次修改。

系統管理員 PowerShell · 新增單一套件
$apps = @(Get-AppxPackage -Name Microsoft.WindowsCalculator)
if ($apps.Count -ne 1) {
    throw "找不到唯一的 App 套件,請確認目前使用者及 App 名稱。"
}
$pfn = $apps[0].PackageFamilyName
CheckNetIsolation.exe LoopbackExempt -a "-n=$pfn"
CheckNetIsolation.exe LoopbackExempt -s

其中 LoopbackExempt 表示管理回環豁免,-a 表示新增,-n= 後方接套件系列名稱,-s 則用於顯示目前清單。工具也支援以 AppContainer SID 指定對象,但一般排查建議優先使用可直接從系統查得的套件系列名稱,避免混淆 App 身分。

  1. 確認新增指令沒有回報錯誤。如果出現拒絕存取,請確認終端機確實以系統管理員身分執行。
  2. 在 -s 的輸出中確認目標名稱或對應的 SID;指令執行完畢不代表 App 已恢復網路連線。
  3. 重新開啟目標 App,重試剛才失敗的網路操作。
  4. 同時查看 Clash 的連線頁面或記錄,確認要求是否進入代理核心,並核對命中的策略群組及最終出口。

替代方式:使用用戶端的 UWP 回環工具

部分 Windows 圖形介面用戶端提供回環豁免工具,但這不是 Clash 或 mihomo 設定檔通用的欄位。工具是否可用、按鈕名稱及所在頁面,取決於用戶端及其版本;找不到入口時,直接使用上方的系統指令即可,不必在 YAML 中新增所謂的 UWP 開關。

舊版 Clash for Windows 的操作路徑

已停止維護的 Clash for Windows 曾提供「General」→「UWP Loopback」→「Launch Helper」入口。如果電腦已安裝該用戶端,可在輔助視窗中勾選目標 App,再按「Save Changes」儲存;如出現權限提示,請依系統指示授權。這項說明是為了協助辨識既有安裝,不代表建議重新安裝舊版用戶端。

  • 在工具清單中確認目標 App 名稱,只勾選這次需要處理的 App。
  • 儲存後關閉並重新開啟目標 App,再次執行相同的網路操作。
  • 在系統管理員終端機中執行 CheckNetIsolation.exe LoopbackExempt -s,確認系統中的實際結果。
  • 其他用戶端若提供類似入口,請以目前版本的介面為準;「服務模式」、「系統代理」與「回環豁免」是不同功能。

圖形工具與命令列修改的是同類型的系統豁免設定,不會改變代理節點品質。如果輔助工具無法開啟、清單空白或儲存失敗,請回頭檢查套件身分及系統管理員權限,而不是不斷切換訂閱。

新增豁免後仍無法連線:沿著要求路徑逐步排查

觀察結果 下一步檢查
無法連線到本機 7890 連接埠 確認實際監聽的連接埠、代理核心執行狀態,以及該連接埠是否支援 HTTP。
瀏覽器正常,但豁免清單中找不到目標套件 確認 App 套件系列名稱、目前使用者、執行新增指令的權限,以及錯誤輸出。
豁免已存在,但用戶端沒有收到對應要求 確認 App 是否使用系統代理,以及連線是否由其他套件或背景服務發起。
記錄中出現要求,但命中 DIRECT 檢查規則順序、目標網域及策略群組;回環豁免不會強制流量經過代理。
要求進入代理後逾時或傳回錯誤 依記錄檢查節點、DNS、目標網站及帳號狀態,不要重複新增豁免。

Microsoft Store 與 Xbox 相關功能請分開驗證

Microsoft Store 頁面載入、帳號登入及 App 下載,可能由不同元件發出要求;其中一個畫面恢復正常,不代表所有背景傳輸都使用相同的套件身分或代理設定。Xbox 相關元件也可能涉及獨立服務、UDP 流量及不同的網路需求。請分別記錄失敗操作、時間及記錄,不要只替單一套件新增豁免,就認定已涵蓋所有元件。

TUN 模式不是回環豁免開關

mihomo 的 TUN 模式會透過虛擬網路介面及路由接管流量,處理路徑不同於 App 主動連線至本機 HTTP 代理。如果 App 不讀取系統代理,TUN 可作為另一種排查方向,但需要用戶端支援、相應權限,以及正確的路由與 DNS 設定。TUN 不等於自動解除所有 AppContainer 的網路限制,也不保證每種 UWP 網路連線方式都能正常運作。

測試 TUN 時,每次只變更一項設定,並記錄系統代理、TUN 及目標 App 的狀態。請勿同時修改 DNS、規則、節點及豁免清單,否則即使恢復正常,也無法判斷是哪項變更生效。相關概念請參閱概念速查;平台設定可接著查看全平台指南。

還原方式:移除這次新增的豁免

回環豁免會儲存在系統設定中,不會在退出 Clash 時自動撤銷。測試結束後不再需要、App 已改用其他網路連線方式,或需要恢復原本的隔離狀態時,可使用 -d 移除指定套件。以下示範沿用前面的計算機範例;實際還原時,必須指定這次操作的目標套件。

系統管理員 PowerShell · 移除並重新確認
$apps = @(Get-AppxPackage -Name Microsoft.WindowsCalculator)
if ($apps.Count -ne 1) {
    throw "找不到唯一的 App 套件,請使用操作前記錄的套件系列名稱進行確認。"
}
$pfn = $apps[0].PackageFamilyName
CheckNetIsolation.exe LoopbackExempt -d "-n=$pfn"
CheckNetIsolation.exe LoopbackExempt -s

如果 App 已解除安裝,可使用先前記錄的套件系列名稱執行移除,不必依賴目前的 Get-AppxPackage 查詢結果。使用圖形工具時,取消勾選目標 App 並儲存,再以系統指令確認結果。

完成後重新啟動目標 App,確認移除後是否出現預期變化。如果操作前該 App 已有豁免,不要為了「清理」而直接移除;還原的目標是回到原本狀態。最後可依序確認「本機連接埠可連線、目標套件豁免已核對、記錄中可確認要求路徑、App 實際操作成功」,留下完整的排查紀錄,避免將偶然成功誤認為問題已解決。