故障排查 预计阅读 12 分钟

Windows UWP 应用不走代理?用回环豁免解除本地连接限制

解释 UWP 沙盒禁止访问 127.0.0.1 的原因,演示用客户端内置工具或 CheckNetIsolation 命令为商店应用添加回环豁免。

先判断:是否属于本地回环限制

浏览器能正常访问,某个 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 打开「设置」→「网络和 Internet」→「代理」→「手动设置代理」→「使用代理服务器」旁的「编辑」。Windows 10 对应路径为「设置」→「网络和 Internet」→「代理」。
  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下载