Windows UWP 应用不走代理:解除 Clash 回环限制的几种方法

解释 UWP 应用为何默认无法连接本机代理端口,对比客户端内置回环工具、CheckNetIsolation 命令和 TUN 模式三种解法的适用场景与操作步骤。

UWP 回环限制:浏览器正常,商店应用仍然失败

Windows 上开启 Clash 的「系统代理」后,浏览器可以访问目标网站,Microsoft Store 或部分 UWP 应用却一直加载。此时不要立即更换订阅。浏览器能用,只能证明该浏览器使用的代理路径可用,不能证明沙箱应用也能连接同一个本地端口。

UWP 应用通常运行在 AppContainer 隔离环境中。默认情况下,这类应用访问本机回环地址受到限制。Clash 系客户端常把 HTTP 或混合代理监听在 127.0.0.1,系统代理再把应用请求指向这个地址。若应用读取了系统代理,但沙箱不允许它连接回环端口,请求可能在到达 mihomo 内核前就失败,因此日志页也可能没有对应记录。

先区分三个层面

  • 系统代理:告诉愿意读取该设置的应用把请求交给本地代理,并不接管所有程序。
  • 回环豁免:允许指定 AppContainer 访问回环网络,不会自动替应用设置代理,也不会改变 Clash 规则。
  • TUN 模式:通过虚拟网络接口与路由接管符合条件的流量,不依赖每个应用主动读取 HTTP 系统代理。

操作前检查:监听端口、系统代理与规则命中

先在客户端确认实际监听端口。下文以 mixed-port: 7890 为例;这是示例值,不是所有客户端的默认值。若界面显示混合端口为 7897,后续命令也要改成 7897。不要把控制接口端口当成代理端口,external-controller 用于管理内核,不负责接收普通 HTTP 代理请求。

  1. 确认订阅已加载,客户端正在运行,并选中一个可用的代理组出口。
  2. 在 Windows 11 打开「设置」→「网络和 Internet」→「代理」,检查「手动设置代理」中的地址与端口是否对应当前客户端。Windows 10 的入口为「设置」→「网络和 Internet」→「代理」。
  3. 先保持 TUN 关闭,只开启系统代理,减少两种接管方式同时存在造成的干扰。
  4. 在 PowerShell 中测试本机端口,再通过显式代理请求检查代理链路。
Test-NetConnection -ComputerName 127.0.0.1 -Port 7890
curl.exe --proxy http://127.0.0.1:7890 --head https://www.microsoft.com/

TcpTestSucceeded: True 只说明运行 PowerShell 的桌面进程能建立本地 TCP 连接,不代表 UWP 沙箱已经获准访问。第二条命令用于检查 HTTP 代理是否能处理 HTTPS 隧道;若出现 HTTP 响应头,说明这条测试路径已产生响应,但仍需结合客户端日志判断目标连接走了哪个出口。

在「连接」或「日志」页面观察目标域名和策略。如果已出现应用请求,且命中 DIRECT,优先检查规则,而不是继续添加回环豁免。规则模式按顺序匹配,前面的域名规则会先于末尾的 MATCH 生效;回环设置不会把直连规则改成代理规则。

方法一:使用客户端内置的 UWP 回环工具

部分 Windows Clash 客户端集成了回环豁免入口。不同客户端、不同版本的设置位置不统一,可在「设置」中查找「UWP」「回环解锁」或「Loopback」字样。只有实际出现这个入口时才按此方法操作;没有入口并不表示内核缺少代理能力,可以直接使用下一节的系统命令。

  1. 打开内置回环工具。若 Windows 弹出用户账户控制提示,确认程序来源后授权;修改豁免通常需要管理员权限。
  2. 在应用列表中找到实际出问题的包,例如 Microsoft Store。只勾选需要排查的应用,不必一次放开整个列表。
  3. 点击工具中的「保存」或「应用」按钮。若工具采用即时生效方式,以其界面提示为准。
  4. 完全退出目标应用,再重新启动。窗口关闭后仍在后台运行的应用,可在任务管理器中结束相应进程后重试。
  5. 重新触发刚才失败的操作,同时查看 Clash 的连接记录,并用下一节的查询命令核对豁免是否实际写入。

这类工具本质上是管理 Windows 的回环豁免列表,不会修改订阅内容。保存后目标应用仍失败时,先检查是否勾选了正确的包,以及应用是否真正重启。不要把「界面显示已勾选」当成唯一验证依据。

方法二:用 CheckNetIsolation 精确添加和撤销豁免

CheckNetIsolation.exe 是 Windows 自带的网络隔离诊断工具。它适合客户端没有内置入口、需要确认当前豁免状态,或只想为某一个应用授权的场景。添加与删除操作请在当前登录用户的管理员 PowerShell 中执行;如果使用了另一个管理员账户的凭据,要特别核对查询到的应用是否属于目标用户。

1. 查询包系列名称

开始菜单中搜索 PowerShell,选择「以管理员身份运行」。先查询 Microsoft Store 的包身份:

Get-AppxPackage -Name Microsoft.WindowsStore |
  Select-Object Name, PackageFamilyName

命令返回的 PackageFamilyName 才是 -n= 所需的包系列名称。不要使用带版本号、架构字段的 PackageFullName,也不要直接填写开始菜单中的显示名称。其他应用可以先列出当前用户的包,再根据 Name 查找:

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

2. 添加指定应用并查询结果

下面的命令自动读取 Microsoft Store 的包系列名称,避免手工复制时混入空格。若未找到包,会明确停止添加,而不是传入空参数:

$store = Get-AppxPackage -Name Microsoft.WindowsStore
if ($null -eq $store) {
    Write-Error "当前用户未找到 Microsoft.WindowsStore 包。"
} else {
    CheckNetIsolation.exe LoopbackExempt -a "-n=$($store.PackageFamilyName)"
}
CheckNetIsolation.exe LoopbackExempt -s

-a 表示添加,-s 表示列出当前豁免。输出中可能包含包名称或对应的 AppContainer SID;如需核对 SID,可执行 Get-AppContainerProfile -Name *。添加成功后完全退出 Microsoft Store,再启动并重试原操作。

3. 撤销本次添加

$store = Get-AppxPackage -Name Microsoft.WindowsStore
if ($null -ne $store) {
    CheckNetIsolation.exe LoopbackExempt -d "-n=$($store.PackageFamilyName)"
}
CheckNetIsolation.exe LoopbackExempt -s

-d 删除指定项。回退时只撤销本次修改,避免使用清空全部豁免的命令影响其他应用。应用卸载重装、包身份变化或系统重置后,应重新查询实际状态,不要仅凭以前执行成功的记录判断。

方法三:用 TUN 接管不读取系统代理的应用

如果目标应用不读取系统代理,添加回环豁免也不会让它自动连接 127.0.0.1:7890。这时可考虑支持 mihomo TUN 的客户端,让应用面向真实目标地址发起连接,再由虚拟网络接口接管。它改变的是流量进入内核的方式,不是取消 Windows 的全部网络隔离策略。

  1. 先关闭系统代理,暂时避免应用继续尝试访问本地代理端口。
  2. 按客户端提示安装或启动服务模式,再启用「TUN 模式」。Windows 下创建虚拟接口、设置路由通常需要相应权限。
  3. 暂时退出其他 VPN 或同类虚拟网卡代理,保留原有设置记录,不要直接删除系统路由。
  4. 完全重启目标应用,在连接页观察其目标地址、规则与代理组。
  5. 若没有连接记录,继续检查 TUN 路由、DNS 和应用自身网络权限;若已有记录,则根据规则命中结果排查。

对直接维护 mihomo 配置的用户,下面展示常见 TUN 字段。应合并到现有配置,而不是用这几行替换整份订阅。客户端若通过界面生成 TUN 设置,应优先使用界面,避免运行时覆写与手工配置互相覆盖。

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

auto-route 用于自动设置流量路由,auto-detect-interface 用于识别出口接口。dns-hijack 中的配置针对匹配的传统 DNS 流量,不等于接管所有加密 DNS。还需确认现有 dns 配置可用,并且当前客户端与内核支持所选协议栈。

TUN 不是所有商店应用问题的通用修复。AppContainer 能力限制、组织策略、应用自己的代理实现以及后台服务的网络行为仍可能影响连接。若应用继续显式连接本地 HTTP 代理,回环限制也可能仍然存在,因此测试 TUN 时关闭系统代理、重启应用这两步很重要。

三种方法怎么选:先改最小范围,再验证

方法 适用情况 验证与回退
客户端内置回环工具 应用读取系统代理,客户端提供 UWP 管理入口 查询豁免列表;取消目标应用的勾选并保存
CheckNetIsolation 需要精确指定包、核对状态或撤销单项授权 用 -s 查询;用 -d 删除指定项
TUN 模式 应用不读取系统代理,或需要接管更多网络流量 检查连接记录和路由;关闭 TUN 并恢复原接管方式

推荐先确认本地端口可用,再为单个目标应用添加回环豁免。如果应用仍没有任何请求进入内核,再单独测试 TUN。每轮只改变一种设置,否则即使连接恢复,也很难确定究竟是哪一步起作用。

仍然无法连接:按日志所在阶段继续排查

没有连接记录

  • 确认应用是否真正重新启动,以及修改的是当前用户使用的包。
  • 检查系统代理端口是否在客户端重启后变化,是否有另一个代理程序覆盖 Windows 设置。
  • 公司或学校管理的设备可能限制回环豁免、虚拟网卡或路由修改,应遵循设备管理策略。

有连接记录,但走了 DIRECT

回环通道已经不再是首要嫌疑。查看命中的规则类型、规则内容和策略组选择,确认该域名应当直连还是代理。Microsoft Store 的页面、登录、下载可能涉及不同域名与后台服务,不建议为了解决一次失败就把所有 Microsoft 域名都强制设为同一种策略。

已走代理,但登录或下载仍失败

分别记录失败环节:打开商店首页、登录账户、获取下载地址、实际下载安装包。首页可用不代表下载服务使用相同网络路径。此时再检查节点连通性、DNS 结果、系统时间与证书错误;不要把 netsh winhttp reset proxy 当成通用修复,因为 WinHTTP 配置与当前用户的系统代理并不是同一套设置。

排查完成后,保留确实需要的单项豁免,撤销临时改动。若只是需要让一个读取系统代理的 UWP 应用访问本地代理,回环豁免通常比长期启用整机 TUN 更容易核对;若多个程序都忽略系统代理,再评估 TUN 对整机路由和 DNS 的影响。

Clash下载