先确认故障是否来自 UWP 回环限制

典型现象是浏览器可以通过 Clash 正常访问网络,但 Microsoft Store、Xbox、照片、邮件或其他商店安装的应用持续显示离线。微软账号登录窗口也可能停在加载页,或者返回“请检查 Internet 连接”。关闭 Clash 的系统代理后,这些应用反而恢复直连。

这种差异通常不是节点整体失效。传统桌面程序可以连接 Clash 监听在本机的代理端口,例如 127.0.0.1:7890;运行在 AppContainer 沙箱中的 UWP 应用默认不能随意访问本机回环地址。系统代理虽然已经指向 Clash,应用却无法完成到本地代理端口的第一跳连接。

符合回环限制的三个特征

  • Chrome、Firefox 或普通 Win32 程序可以联网,只有部分商店应用失败。
  • Clash 已开启系统代理,代理地址是 127.0.0.1,常见端口为 7890
  • 失败应用发起请求时,Clash 的连接列表里没有对应连接,日志中也看不到域名匹配记录。

先排除普通代理故障

  1. 打开 Clash 客户端,确认内核状态为运行中,而不是启动失败或反复重启。
  2. 进入「设置」→「系统代理」,确认系统代理已经启用。
  3. 检查当前配置是否提供 HTTP 或 Mixed 监听端口。只有 SOCKS 监听时,Windows 系统代理不能直接按常规 HTTP 代理方式使用。
  4. 在浏览器打开一个可用于观察出口 IP 的页面,确认普通桌面程序已经经过代理。
  5. 切换另一个可用节点再测试一次,排除单一线路超时。

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”或“回环”。

图形界面操作步骤

  1. 先完全启动 Clash,确认 Mixed Port 或 HTTP Port 正在监听,常见值为 7890
  2. 打开回环工具。如果 Windows 弹出权限确认,核对程序来源后允许其执行系统配置。
  3. 等待工具读取已安装的 AppContainer 包。列表通常同时显示应用名与 Package Family Name。
  4. 只勾选出现联网故障的应用,例如 Microsoft Store 或 Xbox,不必一次选择全部包。
  5. 点击「Save Changes」「Apply」或对应的保存按钮,使豁免列表写入系统。
  6. 彻底关闭故障应用,再从开始菜单重新启动。仅最小化窗口可能保留旧的网络进程。
  7. 保持 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:78900.0.0.0:7890 或对应 IPv6 地址处于 LISTENING。如果配置使用的是 mixed-port: 7891,系统代理也必须指向 7891。端口数字不一致时,即使回环权限正确,应用仍会连接失败。

在 Clash 连接面板中观察请求

  1. 清空或暂停观察旧连接,记住当前时间。
  2. 重新启动目标 UWP 应用。
  3. 执行可重复的动作,例如刷新商店首页、搜索应用或打开账号登录页。
  4. 查看 Connections 或连接面板中是否出现新的域名、目标 IP 和命中规则。
  5. 如果请求已经出现但状态为超时,切换节点或检查对应策略组。
观察结果 更可能的原因 下一步
应用恢复,Clash 出现连接 回环豁免已生效 保留当前单项豁免
应用仍失败,Clash 没有连接 包选错、进程未重启或应用忽略系统代理 核对包族名称并结束相关进程
Clash 有连接,但持续超时 节点、DNS 或策略组故障 切换节点并检查规则匹配
关闭系统代理后恢复直连 本地代理链路仍未建立 核对监听端口与回环列表

豁免后仍无法联网的六项检查

1. 系统代理端口与 Clash 配置不一致

Clash 配置可能从 7890 改为 7897,但 Windows 代理仍保留旧端口。进入「设置」→「网络和 Internet」→「代理」,查看当前手动代理地址;同时核对客户端显示的 Mixed Port 或 HTTP Port。使用客户端自动管理系统代理时,可以先关闭再重新开启一次。

2. 只放行了前台应用,身份组件仍受限

微软账号登录可能调用独立的身份代理、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 内核处理和远端出口已经形成完整链路。