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

典型情況是瀏覽器可以透過 Clash 正常連線,但 Microsoft Store、Xbox、相片、郵件或其他從商店安裝的應用程式持續顯示離線。Microsoft 帳戶登入視窗也可能停留在載入畫面,或顯示「請檢查 Internet 連線」。關閉 Clash 的系統代理後,這些應用程式反而恢復直接連線。

這種差異通常不是節點整體失效。傳統桌面程式可以連線到 Clash 在本機監聽的代理埠,例如 127.0.0.1:7890;在 AppContainer 沙箱中執行的 UWP 應用程式,預設無法任意存取本機回環位址。即使系統代理已指向 Clash,應用程式仍無法完成連往本機代理埠的第一跳連線。

符合回環限制的三個特徵

  • Chrome、Firefox 或一般 Win32 程式可以連線,只有部分商店應用程式失敗。
  • Clash 已啟用系統代理,代理位址為 127.0.0.1,常見埠號是 7890
  • 故障應用程式發出請求時,Clash 的連線清單中沒有對應連線,日誌也看不到網域比對紀錄。

先排除一般代理故障

  1. 開啟 Clash 客戶端,確認核心狀態為執行中,而不是啟動失敗或反覆重新啟動。
  2. 進入「設定」→「系統代理」,確認系統代理已啟用。
  3. 檢查目前設定是否提供 HTTP 或 Mixed 監聽埠。只有 SOCKS 監聽時,Windows 系統代理無法直接按照一般 HTTP 代理方式使用。
  4. 在瀏覽器開啟可查看出口 IP 的頁面,確認一般桌面程式已經透過代理連線。
  5. 切換至另一個可用節點再測試一次,排除單一路線逾時。

UWP 為何無法直接連線本機 Clash 埠號

UWP 應用程式通常在 AppContainer 隔離環境中執行。Windows 會為應用程式配置套件身分、功能宣告與受限網路邊界。回環位址 127.0.0.1 與 IPv6 位址 ::1 都指向目前電腦,但沙箱應用程式預設無法透過它們存取其他本機程序提供的服務。

Clash 的系統代理模式正好依賴本機監聽。以常見設定為例,Windows 將 HTTP 請求交給 127.0.0.1:7890,Clash 接收連線後,再依規則選擇 DIRECT、代理節點或其他策略群組。UWP 應用程式連線至 127.0.0.1:7890 時會被系統邊界攔截,後續自然不會進行規則比對。

mixed-port: 7890
allow-lan: false
mode: rule

上面的 allow-lan: false 控制其他區域網路裝置能否存取監聽埠,不負責 UWP 的 AppContainer 權限。將它改為 true 不能取代回環豁免,還會改變區域網路的存取範圍。處理本機商店應用程式時,應修改對應應用程式的 Loopback Exempt 狀態。

回環豁免實際改變了什麼

豁免會將指定套件加入 Windows 的回環例外清單,讓該套件可以連線至本機服務。它不會自動啟動 Clash、不會替應用程式選擇節點,也不會強制所有流量進入代理。系統代理、Clash 監聽埠與規則模式仍必須維持正確。

環節 負責內容 失敗時的表現
Windows 系統代理 將支援系統代理的請求指向本機位址 應用程式直接連線,Clash 看不到請求
UWP 回環豁免 允許指定 AppContainer 存取本機代理 應用程式無法連線 127.0.0.1:7890
Clash 規則 依網域、IP 與規則集選擇出口 連線進入核心後套用錯誤策略
代理節點 建立遠端傳輸並提供出口 Clash 有請求紀錄,但出現逾時或握手錯誤

方法一:使用客戶端內建的回環工具逐一放行

部分 Windows Clash 圖形客戶端整合了 UWP Loopback 工具。以經典的 Clash for Windows 介面為例,入口位於「General」→「UWP Loopback」。不同維護分支可能將入口放在「設定」→「網路」或「工具」中,名稱通常包含「UWP」「Loopback」或「回環」。

圖形介面操作步驟

  1. 先完整啟動 Clash,確認 Mixed Port 或 HTTP Port 正在監聽,常見值為 7890
  2. 開啟回環工具。如果 Windows 跳出權限確認,確認程式來源後允許其執行系統設定。
  3. 等待工具讀取已安裝的 AppContainer 套件。清單通常會同時顯示應用程式名稱與 Package Family Name。
  4. 只勾選發生連線故障的應用程式,例如 Microsoft Store 或 Xbox,不必一次選取所有套件。
  5. 按一下「Save Changes」「Apply」或相應的儲存按鈕,將豁免清單寫入系統。
  6. 徹底關閉故障應用程式,再從開始功能表重新啟動。只將視窗最小化,可能仍會保留舊的網路程序。
  7. 保持 Clash 系統代理開啟,重新執行登入、下載或重新整理頁面等操作。

為何建議逐一新增

逐一放行便於復原,也方便找出真正受影響的套件。某些系統元件只會在帳戶驗證時呼叫另一個身分服務套件,只勾選前景應用程式仍可能無法登入。此時可以觀察故障發生在哪個視窗,再補充對應的 Microsoft Account、Xbox Identity Provider 或系統身分元件。

應用程式更新後,Package Family Name 通常會維持穩定,因此一般版本升級不需要重新設定。解除安裝後重新安裝、切換至其他發行通道,或應用程式更換套件身分時,舊的豁免可能不再對應目前安裝的套件,需要重新檢查。

方法二:使用 CheckNetIsolation 指令精確設定

沒有圖形工具時,可以使用 Windows 內建的 CheckNetIsolation.exe。命令列方法更適合確認目前清單、記錄修改對象,以及處理工具無法正確顯示名稱的套件。建議從開始功能表搜尋「終端機」,選擇「以系統管理員身分執行」。

第一步:找出應用程式的套件族名稱

在 PowerShell 中執行以下指令,列出應用程式名稱與 Package Family Name:

Get-AppxPackage | Select-Object Name, PackageFamilyName

如果清單較長,可以依名稱篩選。以下範例用於尋找 Microsoft Store:

Get-AppxPackage *WindowsStore* |
  Select-Object Name, PackageFamilyName

常見的 Microsoft Store 套件族名稱是 Microsoft.WindowsStore_8wekyb3d8bbwe。實際操作應以目前電腦的指令輸出為準,不要根據顯示名稱猜測套件族名稱。

第二步:查看現有回環豁免

CheckNetIsolation.exe LoopbackExempt -s

輸出會列出已取得回環存取權限的 AppContainer。先執行查詢可以避免重複新增,也能在修改前記錄原有狀態。如果目標套件已經存在,問題更可能出在系統代理未啟用、埠號不一致、應用程式不遵循系統代理或 Clash 規則錯誤。

第三步:新增指定應用程式

CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.WindowsStore_8wekyb3d8bbwe"

-a 代表新增,-n 後方必須填寫完整的 Package Family Name。指令成功後再次執行 -s,確認目標套件已進入清單。接著結束應用程式程序並重新開啟,不必為了單次修改立即重新啟動整台電腦。

需要撤銷時刪除單一項目

CheckNetIsolation.exe LoopbackExempt -d -n="Microsoft.WindowsStore_8wekyb3d8bbwe"

-d 只會刪除指定套件的豁免。排查時不建議直接清空整份清單,因為其他本機開發工具或系統應用程式可能已設定必要例外。保留修改前後的查詢結果,故障排除完成後更容易恢復原狀。

確認豁免是否真正生效

指令回傳成功只代表系統接受設定,還要確認應用程式的請求確實進入 Clash。驗證時應同時觀察監聽埠、應用程式表現與 Clash 連線紀錄,避免將切換節點或暫時恢復的網路誤判為豁免成功。

檢查 Clash 是否監聽預期埠號

在 Windows 終端機中執行:

netstat -ano | findstr :7890

正常情況下可以看到 127.0.0.1:78900.0.0.0:7890 或對應的 IPv6 位址處於 LISTENING。如果設定使用的是 mixed-port: 7891,系統代理也必須指向 7891。埠號不一致時,即使回環權限正確,應用程式仍會連線失敗。

在 Clash 連線面板中觀察請求

  1. 清除或暫停顯示舊連線,記住目前時間。
  2. 重新啟動目標 UWP 應用程式。
  3. 執行可重複的操作,例如重新整理商店首頁、搜尋應用程式或開啟帳戶登入頁面。
  4. 查看 Connections 或連線面板中是否出現新的網域、目標 IP 與命中規則。
  5. 如果已看到請求但狀態為逾時,切換節點或檢查對應策略群組。
觀察結果 較可能的原因 下一步
應用程式恢復正常,Clash 出現連線 回環豁免已生效 保留目前的單項豁免
應用程式仍失敗,Clash 沒有連線 套件選錯、程序尚未重新啟動,或應用程式忽略系統代理 核對套件族名稱並結束相關程序
Clash 有連線,但持續逾時 節點、DNS 或策略群組故障 切換節點並檢查規則比對
關閉系統代理後恢復直接連線 本機代理鏈路仍未建立 核對監聽埠與回環清單

豁免後仍無法連線的六項檢查

1. 系統代理埠號與 Clash 設定不一致

Clash 設定可能從 7890 改為 7897,但 Windows 代理仍保留舊埠號。進入「設定」→「網路和 Internet」→「代理」,查看目前手動代理位址;同時核對客戶端顯示的 Mixed Port 或 HTTP Port。使用客戶端自動管理系統代理時,可以先關閉再重新開啟一次。

2. 只放行前景應用程式,身分元件仍受限

Microsoft 帳戶登入可能會呼叫獨立的身分代理、Xbox Identity Provider 或系統 Web 帳戶元件。商店首頁可以開啟,但登入按鈕一直轉圈,通常表示基本商店套件已放行,而驗證流程所關聯的另一個套件尚未加入。請根據彈出視窗名稱與套件清單逐項測試,不要反覆新增同一個商店套件。

3. 應用程式沒有重新建立網路程序

關閉視窗不一定會結束 UWP 背景工作。開啟「工作管理員」→「程序」,結束目標應用程式及其相關程序,再從開始功能表啟動。如果仍保留舊狀態,可以登出目前的 Windows 帳戶後重新登入。

4. 應用程式本身不使用 Windows 系統代理

回環豁免只允許存取本機,不會強制應用程式讀取系統代理。少數應用程式使用自訂網路堆疊、固定直連或特殊 UDP 通訊,此時系統代理模式無法涵蓋相關流量。可以在客戶端中啟用基於 mihomo 核心的 TUN 模式,讓流量透過虛擬網路介面進入核心。

啟用路徑通常位於「設定」→「TUN 模式」。開啟後先確認客戶端已取得建立虛擬網卡所需的權限,並檢查系統中是否出現對應介面。TUN 與系統代理的處理路徑不同,啟用前應先儲存目前設定,避免同時修改埠號、DNS 與規則,造成變數過多。

5. DNS 或規則將請求送往錯誤出口

當連線已出現在 Clash 面板中,回環問題基本上就已解決。接下來檢查命中的規則與策略群組。例如帳戶網域被規則送往 DIRECT,但目前網路無法直接連線;或者 DNS 回傳異常結果,導致連線呈現握手失敗、逾時或反覆重試。此時應針對日誌中的實際網域調整規則,而不是繼續增加回環項目。

6. 埠號遭其他程式佔用

如果 netstat 顯示 7890 已被另一個 PID 佔用,Clash 可能沒有成功繫結埠號。可以在工作管理員的「詳細資料」頁面依 PID 尋找程序,或將設定中的 mixed-port 改為未被佔用的埠號,例如 7897,重新載入設定後同步更新系統代理。

完成後的穩定設定建議

只保留實際需要的套件即可。記錄目標應用程式的 Package Family Name、Clash 監聽埠與修改日期,日後重新安裝系統或更換客戶端時即可快速恢復。如果不再使用某個應用程式,可以透過 CheckNetIsolation.exe LoopbackExempt -d 刪除對應項目。

日常使用時,先固定一個 Mixed Port,例如 7890,再讓客戶端接管系統代理。排查過程中不要同時更換核心、訂閱、DNS 模式、埠號與 TUN 設定。一次只修改一項,並透過應用程式重新啟動、連線面板與埠號監聽這三項結果確認變化。

最終判斷標準很明確:目標應用程式能完成登入或載入,Clash 連線面板能看到對應請求,規則命中結果符合預期。滿足這三點,表示 UWP 到本機代理埠、Clash 核心處理與遠端出口已形成完整鏈路。