故障排除 預計閱讀 12 分鐘

Windows UWP 應用程式無法走代理?透過回送豁免解除本機連線限制

說明 UWP 沙箱無法存取 127.0.0.1 的原因,並示範使用用戶端內建工具或 CheckNetIsolation 命令,為 Microsoft Store 應用程式新增回送豁免。

先確認:是否為本機回送限制

瀏覽器可以正常連線,某個 Windows 應用程式卻一直顯示網路錯誤時,先別急著更換訂閱。使用系統代理時,Clash 用戶端通常會讓應用程式連線到本機代理連接埠,例如 127.0.0.1:7890。部分在 AppContainer 中執行的 UWP 應用程式受到網路隔離限制,無法像一般桌面程式一樣直接存取這個本機端點。

回送豁免處理的是「應用程式能否連線到本機代理」這個環節。它不會匯入訂閱、修復失效節點,也不會自動將應用程式流量改走代理。請先確認問題符合以下特徵,再修改豁免清單。

  • Clash 核心正在執行,而且瀏覽器透過相同的系統代理可以連上目標網站。
  • 系統代理位址為 127.0.0.1 或 localhost,代理連接埠也與用戶端設定一致。
  • 問題只出現在某個使用 AppContainer 的應用程式,而非所有軟體都同時無法連線。
  • 重新開啟目標應用程式並送出請求後,用戶端的「連線」頁面沒有出現相應請求;這只能作為排查線索,不能單獨據此判定原因。

認識 127.0.0.1、系統代理與 AppContainer

127.0.0.1 是 IPv4 回送位址,指向目前這台電腦;IPv6 對應的位址則是 ::1。Clash 的 HTTP 或混合代理連接埠可以監聽回送介面,供同一台電腦上的應用程式使用。啟用「系統代理」後,只有會讀取 Windows 代理設定的應用程式才會嘗試連線。

AppContainer 為應用程式建立隔離邊界。一般情況下,普通 UWP 應用程式無法任意存取本機回送服務。即使代理連接埠確實開啟,網路隔離原則仍可能阻擋應用程式連線。新增回送豁免,是允許指定應用程式套件進行這類本機通訊,而不是開放所有網路權限。

設定項目用途無法取代的功能
系統代理告知支援此設定的應用程式要使用哪個代理位址與連接埠無法解除 AppContainer 的回送限制
回送豁免允許指定應用程式套件存取本機回送端點無法強制應用程式讀取系統代理設定
規則模式依據核心規則選擇 DIRECT、代理群組或其他策略無法修復應用程式連不上本機連接埠的問題
TUN 模式透過虛擬網卡接管符合路由條件的流量不會自動為系統代理新增豁免

不要為了解決回送問題,把監聽位址改成 0.0.0.0,也不要隨意啟用「允許區域網路連線」。這會改變代理的可存取範圍,卻不代表已解除應用程式沙箱限制。若只供本機使用,請維持回送位址監聽。

檢查代理連接埠與 Windows 設定

核對兩處連接埠設定

  1. 開啟用戶端「設定」,尋找「連接埠」、「混合連接埠」或 mixed-port。介面名稱會因用戶端而異,請以目前設定中的實際值為準。
  2. 在 Windows 11 中開啟「設定」→「網路和網際網路」→「Proxy」→「手動設定 Proxy」→「使用 Proxy 伺服器」旁的「編輯」。Windows 10 的路徑為「設定」→「網路和網際網路」→「Proxy」。
  3. 確認位址與連接埠相符。如果用戶端的混合連接埠是 7897,但系統代理仍填入 7890,請先修正連接埠,再排查 UWP。

7890 和 7897 都是常見範例值,不代表每款用戶端的固定預設值。HTTP 系統代理應連線至支援 HTTP 的監聽連接埠;請勿將僅支援 SOCKS 的連接埠填入 HTTP 代理欄位。

使用 PowerShell 檢查本機監聽狀態

以下範例假設實際連接埠為 7890。請先開啟用戶端,再於 PowerShell 執行:

Test-NetConnection -ComputerName 127.0.0.1 -Port 7890

查看輸出中的 TcpTestSucceeded。值為 True,表示目前的 PowerShell 程序可以建立 TCP 連線,但不代表 UWP 應用程式已獲准存取,也不代表遠端節點可用。值為 False,請先檢查核心是否已啟動、連接埠是否填錯,以及本機安全軟體是否阻擋監聽。

方法一:使用用戶端的回送豁免工具

部分用戶端提供圖形介面的回送豁免功能。以已停止維護的 Clash for Windows 為例,舊版介面可從「Settings」→「UWP Loopback」→「Launch Helper」開啟輔助工具。這是舊用戶端的操作參考,並非 Clash Verge Rev 或其他 mihomo 用戶端的通用選單。

  1. 先關閉發生問題的應用程式,避免它繼續沿用舊連線。若應用程式仍在背景執行,也請先結束程序再測試。
  2. 開啟用戶端中的回送豁免工具。若出現 Windows 使用者帳戶控制提示,請確認工具來源後再授權。
  3. 在應用程式清單中找到目標項目。應用程式顯示名稱可能與商店名稱不同,必要時可透過套件名稱辨識。
  4. 只勾選需要存取本機代理的應用程式,再按下工具提供的「Save Changes」或儲存按鈕。
  5. 重新啟動目標應用程式,觸發重新整理或登入,同時查看用戶端的「連線」與「日誌」。

如果工具清單中找不到目標應用程式,請先確認它已安裝在目前的 Windows 使用者帳戶下。以另一個系統管理員帳戶啟動工具時,顯示的應用程式範圍可能不同;請勿因此誤判為訂閱或節點故障。

方法二:使用 CheckNetIsolation 新增豁免

先查看目前清單與應用程式套件識別資訊

在開始功能表搜尋「Windows PowerShell」,選擇「以系統管理員身分執行」。以下命令適用於 Windows 10、Windows 11。企業裝置可能透過原則限制修改,請先遵循組織的裝置管理規定。

CheckNetIsolation.exe LoopbackExempt -s

Get-AppxPackage |
  Sort-Object Name |
  Select-Object Name, PackageFamilyName

第一個命令會顯示現有豁免;第二個命令會列出目前使用者的應用程式套件。新增豁免時請使用 PackageFamilyName,不要以 PackageFullName 取代。完整套件名稱通常包含版本、架構等資訊;套件家族名稱則用來識別同一家族的應用程式套件。

使用已安裝的套件示範新增豁免

以下使用套件名稱為 Microsoft.WindowsCalculator 的 Windows 計算機,示範查詢與授權流程;這不代表計算機需要代理。實際排查時,請先從上方清單找到目標應用程式,再將查詢名稱改為該應用程式正確的 Name。腳本只會在查詢結果恰好為單一套件時繼續,避免空值或多筆結果造成誤操作。

$packages = @(Get-AppxPackage -Name 'Microsoft.WindowsCalculator')

if ($packages.Count -eq 1) {
    $family = $packages[0].PackageFamilyName
    Write-Output "準備新增回送豁免:$family"
    CheckNetIsolation.exe LoopbackExempt -a "-n=$family"
} else {
    Write-Warning '找不到唯一的應用程式套件,請先檢查目前使用者與套件名稱。'
}

LoopbackExempt -a 代表新增;-n= 後方需填入套件家族名稱。命令執行後,請再次查詢清單,不要只因終端機沒有顯示明顯錯誤就認定設定成功:

CheckNetIsolation.exe LoopbackExempt -s

確認清單中已出現目標套件家族,再關閉並重新開啟應用程式。如果新增失敗,請保留終端機顯示的完整錯誤訊息。權限不足、應用程式套件不存在、裝置原則限制,分別需要不同的處理方式;反覆更換代理節點通常無法解決。

驗證結果:分別檢查回送、規則與節點

新增豁免後,維持代理連接埠與節點不變,先用同一個應用程式測試相同操作。每次只變更一個條件,才能找出問題在哪個環節獲得修復。請依照以下順序檢查。

  1. 查看豁免清單。執行 CheckNetIsolation.exe LoopbackExempt -s,確認目標套件仍列在清單中。
  2. 確認請求是否進入核心。開啟 Clash 用戶端的「連線」頁面,再重新整理應用程式。部分連線可能不會顯示可辨識的程序名稱,請搭配目標網域、位址與觸發時間判斷。
  3. 檢查命中的規則。如果已看到請求,請確認流量走的是 DIRECT 還是代理群組。若應用程式仍無法連線,請進一步檢查策略、節點、DNS 與目標服務狀態。
  4. 查看日誌錯誤。連線逾時、網域解析失敗、遠端拒絕連線等問題,不應一概歸咎於 UWP 回送限制。

已新增豁免,為什麼還是沒有請求?

應用程式可能不會讀取 Windows 系統代理,也可能由另一個輔助程序發出請求,或根本沒有使用受此限制的 UWP 網路路徑。回送豁免不會替這些情況自動設定代理。請先確認應用程式本身是否提供代理設定,再判斷是否需要 TUN 模式。

TUN 模式可以取代回送豁免嗎?

在 mihomo 用戶端中,TUN 可以透過虛擬網卡接管流量,讓部分不支援系統代理的應用程式將流量送入核心。如果應用程式原本透過直接通訊端連線,這可能改變它的連線方式。不過,已讀取系統代理並嘗試連線至本機連接埠的應用程式,仍可能遇到回送限制;不能把「啟用 TUN」當成通用解法。

測試 TUN 前,請先確認用戶端要求的服務模式或系統管理員權限已就緒,並記錄原本的開關狀態。不要同時變更系統代理、TUN、DNS 模式與規則。Windows 上的其他 VPN、虛擬網卡與安全軟體也可能影響路由,請逐項比對,不要直接關閉防火牆。

撤銷回送豁免與後續維護

如果應用程式不再需要存取本機代理,或這次新增豁免只是為了確認問題,可以移除相應豁免。以下仍以計算機套件為例;實際操作時,請查詢先前新增豁免的目標套件。

$packages = @(Get-AppxPackage -Name 'Microsoft.WindowsCalculator')

if ($packages.Count -eq 1) {
    $family = $packages[0].PackageFamilyName
    CheckNetIsolation.exe LoopbackExempt -d "-n=$family"
} else {
    Write-Warning '找不到唯一的應用程式套件,請確認要撤銷的項目。'
}

CheckNetIsolation.exe LoopbackExempt -s

-d 只會刪除指定項目。請勿為了撤銷單一應用程式的豁免而清空整份清單,否則可能影響其他依賴本機服務的應用程式。如果應用程式已解除安裝、查不到套件,可以依照先前儲存的豁免清單確認識別資訊,再刪除該套件家族的項目。

  • 一般版本更新通常會保留相同的套件家族,不必每次重新授權;重新安裝、改用其他發行管道或更換 Windows 使用者後,則應重新檢查。
  • 記錄發生問題的應用程式名稱、實際代理連接埠、新增豁免前後的狀況,以及用戶端日誌中的錯誤類型,方便日後重現問題。
  • 提供日誌給他人前,請移除訂閱網址、存取權杖及其他帳戶資訊。排查回送限制不需要公開完整的訂閱連結。
下載 Clash