先確認問題是否源自 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 的連線清單中沒有對應連線,日誌也看不到網域比對紀錄。
先排除一般代理故障
- 開啟 Clash 客戶端,確認核心狀態為執行中,而不是啟動失敗或反覆重新啟動。
- 進入「設定」→「系統代理」,確認系統代理已啟用。
- 檢查目前設定是否提供 HTTP 或 Mixed 監聽埠。只有 SOCKS 監聽時,Windows 系統代理無法直接按照一般 HTTP 代理方式使用。
- 在瀏覽器開啟可查看出口 IP 的頁面,確認一般桌面程式已經透過代理連線。
- 切換至另一個可用節點再測試一次,排除單一路線逾時。
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」或「回環」。
圖形介面操作步驟
- 先完整啟動 Clash,確認 Mixed Port 或 HTTP Port 正在監聽,常見值為
7890。 - 開啟回環工具。如果 Windows 跳出權限確認,確認程式來源後允許其執行系統設定。
- 等待工具讀取已安裝的 AppContainer 套件。清單通常會同時顯示應用程式名稱與 Package Family Name。
- 只勾選發生連線故障的應用程式,例如 Microsoft Store 或 Xbox,不必一次選取所有套件。
- 按一下「Save Changes」「Apply」或相應的儲存按鈕,將豁免清單寫入系統。
- 徹底關閉故障應用程式,再從開始功能表重新啟動。只將視窗最小化,可能仍會保留舊的網路程序。
- 保持 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:7890、0.0.0.0:7890 或對應的 IPv6 位址處於 LISTENING。如果設定使用的是 mixed-port: 7891,系統代理也必須指向 7891。埠號不一致時,即使回環權限正確,應用程式仍會連線失敗。
在 Clash 連線面板中觀察請求
- 清除或暫停顯示舊連線,記住目前時間。
- 重新啟動目標 UWP 應用程式。
- 執行可重複的操作,例如重新整理商店首頁、搜尋應用程式或開啟帳戶登入頁面。
- 查看 Connections 或連線面板中是否出現新的網域、目標 IP 與命中規則。
- 如果已看到請求但狀態為逾時,切換節點或檢查對應策略群組。
| 觀察結果 | 較可能的原因 | 下一步 |
|---|---|---|
| 應用程式恢復正常,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 核心處理與遠端出口已形成完整鏈路。