Windows 上常见的一类代理故障是:浏览器和传统桌面软件可以正常经过 Clash,Microsoft Store 安装的某个应用却持续显示离线、登录失败或无法刷新内容。此时订阅节点通常没有问题,规则也未必写错。真正的差异可能来自 UWP 应用使用的 AppContainer 网络隔离机制,以及 Clash 本地代理监听在回环地址这一事实。
Clash、Clash Meta 或 mihomo 图形客户端启用系统代理后,通常会让 Windows 把 HTTP 与 HTTPS 请求交给本机监听地址,例如 127.0.0.1:7890。传统 Win32 应用可以连接这个地址,但受 AppContainer 约束的商店应用可能无法访问本机回环接口。结果是同一套系统代理设置对桌面程序有效,对特定 UWP 应用却无效。
回环限制为何只影响部分 Windows 应用
回环地址指向当前计算机自身。Clash 在本地启动代理端口后,应用需要先连接这个本机端口,代理内核再依据规则选择 DIRECT、REJECT 或某个代理策略组。对应用而言,第一段连接并不是直接访问目标网站,而是访问本机代理服务。
UWP 应用及部分采用 AppContainer 隔离的组件具有独立的网络能力边界。Windows 默认限制这些容器访问本机回环接口,目的是减少隔离应用与本机服务之间未经授权的通信。系统代理虽然记录了本地代理地址,但它不会自动替每个 AppContainer 应用开放回环访问。因此,设置界面显示代理已开启,也不代表所有商店应用都能连接 Clash 的监听端口。
常见症状
- Microsoft Store、计算器中的在线功能、天气类应用或其他商店应用提示无法连接。
- Chrome、Firefox、传统桌面客户端等 Win32 程序可以正常访问网络。
- 问题应用发起刷新操作时,Clash 日志中没有出现它访问目标域名的记录。
- 关闭系统代理后,应用可能恢复直连;重新启用代理后再次失败。
- 同一应用在另一台已配置回环豁免的电脑上工作正常。
并非所有从 Microsoft Store 安装的软件都一定受此限制。一些商店软件实际上是打包后的传统桌面程序,另一些应用会使用不同的网络组件。排查时应以应用的包身份、实际日志和连接行为为依据,而不是只看安装来源。
修改前检查 Clash 监听与系统代理
回环豁免只解决 AppContainer 访问本机代理端口的权限问题。若 Clash 没有运行、端口不一致或系统代理指向旧端口,添加豁免仍然不会恢复连接。建议先按以下顺序完成基础检查。
- 确认内核处于运行状态。打开当前使用的 Clash 图形客户端,检查配置已经载入,代理节点或策略组可以完成延迟测试。
- 确认系统代理已启用。客户端中的“系统代理”开关应处于开启状态。若使用手动设置,Windows 代理地址应与客户端展示的 HTTP 或 mixed-port 一致。
- 确认端口没有被其他进程占用。客户端反复启动失败、日志出现监听错误时,应先关闭占用进程或更换端口。
- 观察连接日志。用正常工作的桌面浏览器访问网页,确认 Clash 日志产生连接记录;随后操作故障应用,对比是否出现新请求。
- 暂时排除规则影响。如果故障应用的请求已经出现在日志中,问题更可能位于规则匹配、策略组、DNS 或节点,而不是回环限制。
可以在 PowerShell 中查看当前用户的 Internet 代理配置。该命令只用于核对,不会修改设置:
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" |
Select-Object ProxyEnable, ProxyServer, AutoConfigURL
ProxyEnable 为启用状态且 ProxyServer 指向本机地址时,说明手动系统代理已经写入。部分客户端可能使用 PAC 脚本,此时应同时查看 AutoConfigURL。此外,Windows 的 WinHTTP 代理与当前用户的 Internet 代理不是同一套设置,不应仅凭 netsh winhttp show proxy 的结果判断 Clash 系统代理是否生效。
识别 UWP 应用的包系列名称
CheckNetIsolation 使用的是 Package Family Name,也就是包系列名称,而不是开始菜单里显示的中文名称,也不是带完整版本号的 Package Full Name。选错字段时,命令可能无法作用于目标应用。
使用 PowerShell 查询
以 Windows 计算器为例,可以打开 PowerShell 并执行:
Get-AppxPackage -Name "*WindowsCalculator*" |
Select-Object Name, PackageFamilyName
输出中的 PackageFamilyName 类似 Microsoft.WindowsCalculator_8wekyb3d8bbwe。不同应用的值不同,应以本机查询结果为准。若不清楚包名,可以列出当前用户安装的应用并按名称排序:
Get-AppxPackage |
Select-Object Name, PackageFamilyName |
Sort-Object Name
应用数量较多时,可用名称片段缩小范围。例如查找 Microsoft Store:
Get-AppxPackage -Name "*WindowsStore*" |
Select-Object Name, PackageFamilyName
避免混淆两个包标识
| 字段 | 用途 | 识别特征 |
|---|---|---|
PackageFamilyName |
用于回环豁免 | 通常由包名与发布者标识组成,不含版本和架构 |
PackageFullName |
标识某个已安装版本 | 通常包含版本号、CPU 架构和资源信息 |
Name |
PowerShell 查询和包识别 | 比开始菜单显示名稳定,但不能直接替代包系列名称 |
如果电脑存在多个 Windows 用户,应在实际运行应用的账户中查询。某些包只为特定用户安装,管理员账户查到的应用集合不一定与日常账户完全相同。
使用 CheckNetIsolation 添加回环豁免
确认目标应用和 Clash 基础连接正常后,可以使用 Windows 自带的 CheckNetIsolation.exe 管理 AppContainer 回环豁免。建议先关闭目标应用,再以管理员身份打开 PowerShell 或 Windows 终端。
为单个应用添加权限
下面的 PowerShell 命令先获取计算器包,再把本机实际查询到的包系列名称传给系统工具:
$pkg = Get-AppxPackage -Name "*WindowsCalculator*"
CheckNetIsolation.exe LoopbackExempt -a -n="$($pkg.PackageFamilyName)"
若查询返回多个包,不应直接批量执行。先查看每一项的 Name 与 PackageFamilyName,确认目标后再添加。也可以把已经核对过的包系列名称直接写入命令:
CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.WindowsCalculator_8wekyb3d8bbwe"
命令中的 -a 表示添加,-n 后面是包系列名称。执行完成后,完全退出目标应用并重新打开。只关闭窗口有时不足以结束后台进程,可以在任务管理器中确认应用已经停止。
查看当前豁免列表
CheckNetIsolation.exe LoopbackExempt -s
列表能够帮助确认豁免是否已经写入,也能发现以前遗留的设置。输出形式可能更偏向系统标识,不一定与开始菜单名称一致,因此仍应结合 PowerShell 查询结果核对。
授权后验证代理、规则与 DNS
回环权限添加成功只代表应用可以尝试连接本地代理,并不等于后续代理链路一定正确。验证时应从应用、Clash 日志、规则匹配和目标服务四个层面逐步确认。
- 重启目标应用。重新执行登录、刷新或内容加载操作,观察错误提示是否变化。
- 检查 Clash 日志。如果开始出现目标域名或连接记录,说明应用已经能够触达本地代理端口。
- 查看命中规则。确认请求落入预期策略组,而不是被
REJECT、错误域名规则或不适用的直连规则拦截。 - 切换可用策略。在策略组中选择已确认可连接的节点,避免把节点故障与回环权限混在一起。
- 检查 DNS。若日志显示域名解析失败,应检查 Clash DNS 配置、系统 DNS、Fake IP 兼容性以及应用是否使用特殊解析方式。
如果连接记录已经出现,但应用仍提示失败,可以临时切换到规则更简单的配置进行对照。测试目的不是长期绕过分流,而是确认问题位于规则层还是应用层。测试结束后应恢复原配置,并针对实际域名调整规则。
某些应用会同时访问身份认证、内容分发、遥测或证书状态服务。只允许主域名并不一定足够。此时应根据日志识别完整请求集合,避免凭名称猜测域名。对于需要直连的 Windows 服务,可以建立明确的 DIRECT 规则;需要代理的内容域名则应放入对应策略组。
系统代理与 TUN 模式的区别
系统代理依赖应用主动读取 Windows 代理设置,并连接 Clash 暴露的本地 HTTP 或混合端口。UWP 回环限制正是在这一连接阶段产生影响。TUN 模式则通过虚拟网络接口接管更广泛的流量,一些不遵循系统代理的应用也可能被覆盖。
但 TUN 不是回环问题的通用替代答案。启用 TUN 还涉及管理员权限、虚拟网卡、路由、DNS 劫持、防火墙和其他 VPN 软件兼容性。若需求只是让少数 UWP 应用使用现有系统代理,添加精确的回环豁免通常更容易验证。若大量应用不读取系统代理,且已经理解路由与 DNS 设置,再考虑使用 mihomo 内核支持的 TUN 模式更合适。
仍然无法连接时的分层排查
Clash 日志完全没有请求
先再次运行豁免列表命令,确认目标包已经存在。随后检查应用是否属于另一个包、是否在更新后更换了包身份,以及当前运行用户是否与查询包信息的用户一致。还应确认系统代理地址确实是回环地址,并核对应用是否绕过了系统代理。
日志出现请求但连接超时
这通常说明回环阶段已经通过。接下来检查节点连通性、策略组选项、目标端口和网络环境。可以用桌面浏览器访问同一服务作为对照,但要注意浏览器与应用访问的域名集合可能不同。
日志显示 DIRECT 后失败
检查规则顺序。Clash 规则按照配置中的顺序匹配,较宽泛的直连规则可能先于目标规则命中。调整时应保持规则含义清晰,并确保列表末尾存在合理的最终处理策略,例如 MATCH 对应的策略组。
启用 TUN 后仍无效
检查 TUN 是否真正启动,路由表是否被其他 VPN 或安全软件改写,以及 DNS 请求是否进入预期解析链路。不要同时开启多个会创建虚拟网卡的工具。若关闭其他网络工具后恢复,问题更可能是路由优先级或驱动冲突。
Microsoft Store 能浏览但不能下载
商店页面加载与应用包下载可能经过不同服务。此时除了查看 Clash 规则,还要确认 Windows Update、后台智能传输服务和相关系统服务状态。回环豁免只影响容器访问本机,不负责修复被停用的系统服务、账户授权或商店缓存。
撤销回环豁免与恢复设置
当应用不再需要经过 Clash、已经卸载,或排查证明问题与回环无关时,可以撤销对应豁免。删除命令中的 -d 表示移除:
$pkg = Get-AppxPackage -Name "*WindowsCalculator*"
CheckNetIsolation.exe LoopbackExempt -d -n="$($pkg.PackageFamilyName)"
也可以使用已经核对过的包系列名称:
CheckNetIsolation.exe LoopbackExempt -d -n="Microsoft.WindowsCalculator_8wekyb3d8bbwe"
撤销后再次运行 CheckNetIsolation.exe LoopbackExempt -s,确认目标项已从列表移除。然后重启应用并验证其网络行为。如果排查期间修改过系统代理、Clash 端口、DNS、规则模式或 TUN 开关,也应逐项恢复,而不是只删除回环豁免。
建议保留的排查记录
- 目标应用的名称与 Package Family Name。
- Clash 使用的内核、监听端口和代理模式。
- 添加豁免前后的日志差异。
- 请求命中的规则与策略组。
- 是否启用 TUN、其他 VPN 或网络过滤软件。
- 最终解决步骤以及撤销命令。
这类记录有助于区分“应用不能访问本地代理”和“代理收到请求但后续连接失败”。前者重点检查 AppContainer 与回环权限,后者重点检查规则、DNS、节点和目标服务。按照连接链路分层判断,通常比反复重装客户端或更换订阅更快定位原因。