先确认故障是否来自 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 的连接列表里没有对应连接,日志中也看不到域名匹配记录。
先排除普通代理故障
- 打开 Clash 客户端,确认内核状态为运行中,而不是启动失败或反复重启。
- 进入「设置」→「系统代理」,确认系统代理已经启用。
- 检查当前配置是否提供 HTTP 或 Mixed 监听端口。只有 SOCKS 监听时,Windows 系统代理不能直接按常规 HTTP 代理方式使用。
- 在浏览器打开一个可用于观察出口 IP 的页面,确认普通桌面程序已经经过代理。
- 切换另一个可用节点再测试一次,排除单一线路超时。
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”或“回环”。
图形界面操作步骤
- 先完全启动 Clash,确认 Mixed Port 或 HTTP Port 正在监听,常见值为
7890。 - 打开回环工具。如果 Windows 弹出权限确认,核对程序来源后允许其执行系统配置。
- 等待工具读取已安装的 AppContainer 包。列表通常同时显示应用名与 Package Family Name。
- 只勾选出现联网故障的应用,例如 Microsoft Store 或 Xbox,不必一次选择全部包。
- 点击「Save Changes」「Apply」或对应的保存按钮,使豁免列表写入系统。
- 彻底关闭故障应用,再从开始菜单重新启动。仅最小化窗口可能保留旧的网络进程。
- 保持 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:7890、0.0.0.0:7890 或对应 IPv6 地址处于 LISTENING。如果配置使用的是 mixed-port: 7891,系统代理也必须指向 7891。端口数字不一致时,即使回环权限正确,应用仍会连接失败。
在 Clash 连接面板中观察请求
- 清空或暂停观察旧连接,记住当前时间。
- 重新启动目标 UWP 应用。
- 执行可重复的动作,例如刷新商店首页、搜索应用或打开账号登录页。
- 查看 Connections 或连接面板中是否出现新的域名、目标 IP 和命中规则。
- 如果请求已经出现但状态为超时,切换节点或检查对应策略组。
| 观察结果 | 更可能的原因 | 下一步 |
|---|---|---|
| 应用恢复,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 内核处理和远端出口已经形成完整链路。