· 故障排查 · 预计阅读 11 分钟

Windows 商店应用不走 Clash 代理:UWP 回环限制解除方法

解释 UWP 沙箱为何禁止访问本机回环地址,对比 CheckNetIsolation 命令、客户端内置豁免工具与 TUN 模式三种处理方式及各自适用场景。

先区分系统代理、应用沙箱与代理规则

浏览器能够通过 Clash 访问网络,但某个 Microsoft Store 应用持续提示连接失败,可能与 UWP 的回环限制有关。典型条件是:客户端已开启系统代理,代理服务器指向 127.0.0.1:7890,目标应用运行在受限制的 AppContainer 沙箱中。应用尝试连接本机代理时,在请求进入 Clash 内核之前就受到 Windows 网络隔离策略阻止。

UWP 是 Universal Windows Platform,即通用 Windows 平台;AppContainer 是 Windows 的应用隔离机制。回环地址指向当前计算机,例如 IPv4 的 127.0.0.1 和 IPv6 的 ::1。回环豁免允许指定应用容器访问本机网络服务,并不等于关闭整个 Windows 防火墙。

从 Microsoft Store 安装,不代表应用一定是 UWP。商店也分发普通 Win32 桌面程序和打包桌面应用。应结合应用包、运行方式及连接日志判断,不能把所有“商店应用联网失败”都归因于回环限制。

三种机制分别解决什么问题

  • 系统代理:向愿意读取 Windows 代理设置的应用提供 HTTP 代理地址,不会自动接管所有程序的 TCP、UDP 流量。
  • 回环豁免:允许指定应用容器连接本机代理;应用仍需实际使用该代理设置。
  • 规则模式:流量已经进入 Clash 或 mihomo 后,按 rules 决定直连或代理;无法修复请求进入内核之前的沙箱阻断。

因此,浏览器正常只能说明一条代理链路可用,不能证明目标应用能够访问同一个本机端口。反过来,应用已经出现在客户端连接列表中,也不代表一定经过远端节点,还应查看它命中的规则与最终出口。

处理前检查:端口、系统代理与连接记录

先确认客户端正在使用的本机监听端口。本文以 mixed-port: 7890 为例,它表示 HTTP 与 SOCKS5 共用端口;实际配置若是 7897,后续所有地址与检查命令都应使用实际值。不要把外部控制器端口当成代理端口,也不要为了本机应用访问而先打开 allow-lan。

  1. 在 Windows 11 打开「设置」→「网络和 Internet」→「代理」,检查「手动设置代理」里的地址与端口。Windows 10 对应「设置」→「网络和 Internet」→「代理」→「使用代理服务器」。使用 PAC 自动配置脚本时,应检查脚本返回的代理地址,而非额外叠加手动代理。
  2. 确认客户端内核已启动、所选节点可用,并记录当前使用的是规则模式还是全局模式。
  3. 打开客户端连接列表或日志,再让目标应用执行一次明确的联网操作,例如刷新内容。区分“没有连接记录”与“连接已出现但失败”。
  4. 暂时保持一种接管方式。排查系统代理时先记录并关闭已有 TUN,避免无法判断究竟是哪条路径生效。

在 PowerShell 中可检查端口是否存在监听,并直接测试 HTTP 代理。以下第二条命令只获取示例站点响应头,用于验证端口和基本代理链路,不代表目标应用已获得回环权限。

Get-NetTCPConnection -State Listen -LocalPort 7890
curl.exe --proxy http://127.0.0.1:7890 --head https://example.com/

如果端口没有监听,应先修复客户端启动或配置问题;如果明确指定代理的请求也失败,应先检查节点、认证和规则。不要在这一步反复添加应用豁免,因为豁免不会让一个未监听的端口开始工作。

方法一:用 CheckNetIsolation 添加单个应用豁免

CheckNetIsolation.exe 是 Windows 自带的网络隔离管理工具。建议只为确实需要本机代理的应用添加豁免,先保存现有列表,再进行修改。以下命令在管理员 PowerShell 中执行;应用包查询默认针对当前登录用户,若使用另一个管理员账户提权,需要注意查询到的可能不是原用户的应用。

第一步:查看现有豁免和应用包

CheckNetIsolation.exe LoopbackExempt -s

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

-s 用来显示当前豁免列表。PackageFamilyName 是包系列名称,通常由包名与发布者标识组成;它不同于带版本号、架构等信息的 PackageFullName。给 -n 传递参数时使用包系列名称,不要直接复制应用显示名称。

第二步:精确选包并添加

下面以包名为 Microsoft.WindowsStore 的 Microsoft Store 本体说明操作。如果故障发生在其他应用,应先从上一步列表确认它的 Name,再替换查询条件。不要因为下载来源是商店,就只给商店本体添加豁免。

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

if (@($pkg).Count -eq 1) {
    CheckNetIsolation.exe LoopbackExempt -a "-n=$($pkg.PackageFamilyName)"
} else {
    Write-Warning "未找到唯一应用包,请先核对当前用户和应用包名称。"
}

CheckNetIsolation.exe LoopbackExempt -s

-a 表示添加,-n= 后面紧跟包系列名称。命令报告成功后,再用 -s 确认对应记录存在。随后完全关闭目标应用,包括仍驻留的后台进程,再重新启动并触发联网操作。仅最小化窗口通常不够。

第三步:需要时撤销单项豁免

不再需要访问本机服务时,可使用同一个应用包变量删除对应记录。下面命令保留其他应用的设置;不要为了撤销一个应用而清空整个豁免列表。

$pkg = Get-AppxPackage -Name Microsoft.WindowsStore
if (@($pkg).Count -eq 1) {
    CheckNetIsolation.exe LoopbackExempt -d "-n=$($pkg.PackageFamilyName)"
}
CheckNetIsolation.exe LoopbackExempt -s
  • 提示拒绝访问:检查 PowerShell 是否以管理员身份启动,以及设备是否受组织策略管理。
  • 查询结果为空:确认包名拼写、当前用户和应用安装状态;它也可能是普通桌面应用,不适用此查询路径。
  • 添加成功但仍失败:检查应用是否使用系统代理、实际连接是否进入内核,不要把成功提示当作网络已恢复。

方法二:使用客户端内置回环豁免工具

部分 Windows 客户端提供 UWP 回环豁免工具,界面可能标为「UWP 回环」「Loopback」或「应用容器豁免」。不同客户端和版本的入口并不统一,应以当前版本设置页与说明为准;不能把其他客户端的菜单路径直接套用。

  1. 在客户端设置中查找回环相关工具,按提示授予管理员权限。若当前客户端没有该功能,使用前述系统命令即可。
  2. 在列表中确认目标应用名称和包标识,只勾选需要通过本机代理联网的应用,然后执行保存或应用操作。
  3. 关闭并重新启动目标应用,观察客户端是否收到新的连接。
  4. 必要时执行 CheckNetIsolation.exe LoopbackExempt -s,核对系统层面的豁免是否真正写入。

此类工具通常只是把同一项系统设置做成可视化操作,并不会自动提供节点、修复订阅或改变规则。若工具只显示进程名称、没有清楚展示目标应用包,应谨慎核对,避免把无关应用一并放行。

优先采用按应用授权。全选所有应用会扩大可访问本机服务的范围,也会让后续排查更难追踪。应用卸载重装、包身份变化后,应重新核对列表,而不是默认旧记录仍适用。

方法三:用 mihomo TUN 接管应用流量

如果目标程序不读取系统代理,添加回环豁免也不会强制它使用 127.0.0.1:7890。此时可以评估 TUN 模式:通过虚拟网络接口和路由,把原本直接发往远端的流量交给 mihomo,再由规则决定出口。mihomo 是 Clash Meta 延续发展的内核,客户端是否支持 TUN 还取决于它集成的内核及系统服务。

Windows 下启用 TUN 通常需要管理员权限,或客户端预先安装并启动的服务。建议先通过客户端提供的开关完成配置,查看是否成功创建接口、设置路由与启动 DNS 处理,不要在不了解现有配置的情况下整份替换订阅。

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

这是 mihomo 的 TUN 配置片段,不是完整可运行配置。auto-route 用于设置路由,auto-detect-interface 用于自动识别出口接口;dns-hijack 将匹配的普通 DNS 请求交给内核 DNS 模块处理,还需配套有效的 dns 配置。这里的 any:53 不等于接管所有 DoH 或 DoT 加密 DNS。

TUN 测试要避免继续撞上原来的回环限制

如果应用仍读取系统代理并主动连接本机回环地址,启用 TUN 并不保证能绕过那次被沙箱阻止的连接。测试 TUN 时,可先记录原系统代理设置,再暂时关闭系统代理,让应用尝试正常访问远端,由 TUN 接管;随后彻底重启应用,查看实际连接。确实需要显式本机代理的应用,仍可能需要回环豁免。

  • 先确认普通网页与目标应用都能联网,再检查它们命中的规则,避免“有连接”却误走直连。
  • 同时运行其他 VPN、虚拟网卡或企业安全软件时,检查默认路由和接口冲突,不要一次启用多个全局接管方案。
  • 出现域名解析失败时,单独排查 DNS;启用 TUN 不会自动让所有 DNS 上游都可达。
  • 测试结束后恢复计划采用的系统代理状态,并检查本地网络、打印机或企业内网是否受到新路由影响。

三种处理方式的适用范围

处理方式适用情况主要边界
CheckNetIsolation 命令已确认应用容器需要访问本机代理不强制应用使用系统代理,需准确识别包系列名称
客户端内置豁免工具需要通过界面管理单个应用授权依赖客户端提供入口,效果仍受系统权限与策略约束
mihomo TUN 模式应用不读取系统代理,需要按路由接管流量需配置权限、路由与 DNS,不保证绕过显式回环连接限制

如果只有一个应用遇到问题,优先验证包身份和单项豁免,改动范围更小。如果多个不遵循系统代理的程序都需要接管,再评估 TUN。企业设备还应遵守设备管理策略,不应通过关闭防火墙或移除安全策略来替代故障定位。

豁免后仍无法联网的排查顺序

  1. 先看内核是否收到请求:没有记录时,回到应用代理行为、进程重启、包身份及 TUN 路由检查。注意日志过滤条件可能隐藏记录。
  2. 再看命中的规则:连接显示 DIRECT,说明当前规则选择直连;应核对目标域名和规则顺序,而不是继续添加豁免。
  3. 再看出口与协议:登录、图片、媒体内容可能使用不同域名;部分功能还涉及 UDP。浏览器能打开主页,并不能证明应用涉及的所有服务都可达。
  4. 最后区分账户与网络:登录令牌过期、系统时间错误、服务区域限制和服务端故障,也可能表现为连接失败。不要据此导入来源不明的证书或关闭证书验证。

一次只修改一个变量,并记录修改前后的状态:本机端口、系统代理、豁免列表、TUN 开关、命中规则。恢复的判断标准应是目标应用功能正常、连接路径符合预期,而不只是命令执行成功。需要重新梳理配置导入与规则模式时,可查看入门指南;需要选择支持相应接管方式的客户端时,再按平台查看下载页。

下载Clash