先确认故障是否属于本机回环限制

Windows 10、Windows 11 上,如果浏览器可以通过 Clash 访问网络,某个 UWP 应用却持续提示连接失败,应先检查该应用是否受到 AppContainer 网络隔离限制。Clash 的系统代理通常指向本机地址,例如 127.0.0.1:7890;运行在 AppContainer 中的应用默认不能像普通桌面程序一样访问本机回环服务,因此可能在流量进入代理内核之前就失败。

这里的“回环豁免”是允许指定应用访问本机回环地址,并不是取消代理规则、解除账号限制,也不会自动给应用添加网络能力。操作对象是应用包,而不是某个订阅或代理节点。并非所有微软商店安装的软件都属于 UWP;部分打包桌面应用运行在完整信任进程中,不应仅凭安装来源判断。

  • 符合排查条件:同一台电脑、同一网络下,浏览器代理正常,特定 AppContainer 应用失败,且当前使用的是本机系统代理。
  • 先排除客户端故障:如果浏览器也无法连接,应先检查内核运行状态、监听端口和节点连通性。
  • 先排除服务侧问题:如果只有某个账号、下载任务或目标域名报错,应同时检查登录状态、服务可用性及连接日志。

步骤一:核对系统代理与本地端口

在 Windows 11 打开「设置」→「网络和 Internet」→「代理」→「手动设置代理」→「编辑」;Windows 10 对应「设置」→「网络和 Internet」→「代理」中的手动设置区域。确认代理服务器地址和端口与客户端一致。若由客户端的“系统代理”开关管理这些值,优先在客户端切换,避免两处设置相互覆盖。

系统代理需要 HTTP 代理端口或支持 HTTP 的混合端口。不要把仅支持 SOCKS 的端口填入这里,也不要把代理内核的控制接口端口当作代理端口。控制接口用于管理配置和查询状态,不负责转发应用的 HTTP 代理请求。

用 PowerShell 检查 TCP 监听

PowerShell · 本机端口检查
Test-NetConnection -ComputerName 127.0.0.1 -Port 7890

查看输出中的 TcpTestSucceeded。值为 True 仅表示这个 TCP 端口可以建立连接,不代表节点、DNS 和目标网站都正常。若为 False,先启动内核或更正端口;此时添加回环豁免不能修复没有监听的服务。

还可以用 Windows 自带的 curl.exe 显式指定代理,检查 HTTP 代理路径。下面的命令设定了 15 秒超时;它是诊断示例,不是实测结果。目标站点不可达时,应换用你已知可访问的 HTTPS 地址复核。

PowerShell · 显式使用 HTTP 代理
curl.exe --proxy http://127.0.0.1:7890 --head --max-time 15 https://www.microsoft.com/

显式代理请求成功、目标应用仍然失败时,再继续检查回环权限。不要为了允许 UWP 访问本机代理就开启“允许局域网连接”:后者用于其他设备访问监听服务,与本机 AppContainer 的回环隔离不是同一个开关。

步骤二:查找应用包族名称并记录现有豁免

CheckNetIsolation.exe 是 Windows 提供的网络隔离管理工具。添加或删除豁免时使用管理员终端;查询应用时应对应实际运行应用的 Windows 用户。若提权时输入了另一个管理员账号,Get-AppxPackage 默认查询的用户可能随之改变,导致目标包查不到。

  1. 先关闭目标应用,包括它可能保留的后台进程。
  2. 在目标用户的 PowerShell 中运行下方查询,找到目标应用。
  3. 右键「开始」,选择「终端(管理员)」或「Windows PowerShell(管理员)」,批准用户账户控制提示。
  4. 运行豁免列表查询,并保留操作前的输出,便于核对和恢复。
PowerShell · 查询应用身份与现有列表
Get-AppxPackage |
  Sort-Object Name |
  Select-Object Name, PackageFamilyName

CheckNetIsolation.exe LoopbackExempt -s

添加命令所需的是 PackageFamilyName,即包族名称,不是显示名称,也不是包含版本、架构等信息的 PackageFullName。包族名称通常由应用名称、下划线和发布者标识组成。不要从安装目录名中手工拼接。

以 Windows 计算器作为命令演示

下面使用 Microsoft.WindowsCalculator 演示查找方式。计算器不需要代理才能完成普通计算,因此它只用于说明命令结构,不能作为联网修复的验证对象。实际处理时,应把筛选名称换成前一步列表中目标应用的 Name。

PowerShell · 精确筛选包
Get-AppxPackage -Name Microsoft.WindowsCalculator |
  Select-Object Name, PackageFamilyName

如果查询没有输出,先检查应用是否安装在当前账号下、名称是否匹配。应用的商店显示名可能与内部包名不同,可先浏览完整列表。对于通过普通安装程序部署、没有相应包身份的桌面应用,不要继续套用包族名称命令。

步骤三:用 CheckNetIsolation 添加单个应用豁免

确认应用身份后,在管理员 PowerShell 中执行添加操作。以下示例仍以计算器为演示对象,并通过变量读取包族名称,避免复制错误。脚本要求只匹配到一个包;目标不明确时会停止,不会批量修改。

管理员 PowerShell · 添加单个包
$apps = @(Get-AppxPackage -Name Microsoft.WindowsCalculator)
if ($apps.Count -ne 1) {
    throw "未找到唯一应用包,请核对当前用户与应用名称。"
}
$pfn = $apps[0].PackageFamilyName
CheckNetIsolation.exe LoopbackExempt -a "-n=$pfn"
CheckNetIsolation.exe LoopbackExempt -s

其中 LoopbackExempt 表示管理回环豁免,-a 表示添加,-n= 后跟包族名称,-s 用于显示当前列表。工具也支持按 AppContainer SID 指定对象,但常规排查优先使用能直接从系统查询的包族名称,减少身份混淆。

  1. 检查添加命令是否报告错误。若提示访问被拒绝,确认终端标题或权限状态确实为管理员。
  2. 在 -s 输出中核对目标名称或对应 SID;不要仅因命令执行完毕就判定应用联网恢复。
  3. 重新打开目标应用,执行刚才失败的同一项联网操作。
  4. 同时查看 Clash 的连接页或日志,确认请求是否进入内核,并核对命中的策略组和最终出口。

替代方法:使用客户端的 UWP 回环工具

部分 Windows 图形客户端提供回环豁免工具入口,但它不是 Clash 或 mihomo 配置文件的通用字段。能否使用、按钮名称和所在页面都取决于客户端及其版本;找不到入口时,直接使用上面的系统命令即可,不需要在 YAML 中添加所谓的 UWP 开关。

旧版 Clash for Windows 的操作路径

已停止维护的 Clash for Windows 曾提供「General」→「UWP Loopback」→「Launch Helper」入口。若电脑已经安装该客户端,可在辅助窗口中勾选目标应用,再点击「Save Changes」保存;如出现权限提示,按系统提示授权。该路径用于解释现有安装,不作为改装旧客户端的理由。

  • 在工具列表中核对目标应用名称,只勾选本次需要处理的应用。
  • 保存后关闭并重新打开目标应用,重复同一联网操作。
  • 在管理员终端运行 CheckNetIsolation.exe LoopbackExempt -s,核对系统中的实际结果。
  • 其他客户端若提供类似入口,以当前版本界面为准;不要把“服务模式”“系统代理”和“回环豁免”当成同一功能。

图形工具和命令行修改的是同类系统豁免设置,并不会改变代理节点质量。如果辅助工具打不开、列表为空或保存失败,应回到包身份和管理员权限检查,而不是连续切换订阅。

添加后仍不能联网:按请求路径继续定位

观察结果 下一步检查
本机 7890 端口连接失败 确认实际监听端口、内核运行状态,以及该端口是否支持 HTTP。
浏览器正常,豁免列表没有目标包 核对应用包族名称、当前用户和添加命令的权限及错误输出。
豁免已存在,客户端没有对应请求 确认应用是否使用系统代理,是否由另一个包或后台服务发起连接。
日志出现请求,但命中 DIRECT 检查规则顺序、目标域名与策略组;回环豁免不会强制走代理。
请求进入代理后超时或返回错误 按日志检查节点、DNS、目标站点和账号状态,不再重复添加豁免。

微软商店与 Xbox 相关功能要分开验证

商店页面加载、账号登录、应用下载可能由不同组件发起请求;一个界面恢复,并不代表所有后台传输都使用同一包身份或相同代理设置。Xbox 相关组件也可能涉及独立服务、UDP 流量和不同的网络要求。应分别记录失败动作、时间与日志,不能只给一个包添加豁免后就认定所有组件已经覆盖。

TUN 模式不是回环豁免开关

mihomo 的 TUN 模式通过虚拟网络接口和路由接管流量,处理路径与应用主动连接本机 HTTP 代理不同。若应用不读取系统代理,TUN 可以作为另一条排查路线,但需要客户端支持、相应权限以及正确的路由和 DNS 设置。它并不等于为所有 AppContainer 自动解除网络限制,也不能保证每种 UWP 网络路径都可用。

测试 TUN 时一次只改变一个因素,记录系统代理开关、TUN 开关和目标应用状态。不要同时修改 DNS、规则、节点和豁免列表,否则即使恢复也无法确认生效原因。相关概念可查阅概念速查,平台设置可继续查看全平台指南。

恢复方法:删除本次添加的豁免

回环豁免保存在系统设置中,不会随着 Clash 退出而自动撤销。测试结束不再需要、应用已改用其他网络路径,或需要恢复原先隔离状态时,可使用 -d 删除指定包。以下示例对应前面的计算器演示;实际恢复必须使用本次操作的目标包。

管理员 PowerShell · 删除并复查
$apps = @(Get-AppxPackage -Name Microsoft.WindowsCalculator)
if ($apps.Count -ne 1) {
    throw "未找到唯一应用包,请使用操作前记录的包族名称核对。"
}
$pfn = $apps[0].PackageFamilyName
CheckNetIsolation.exe LoopbackExempt -d "-n=$pfn"
CheckNetIsolation.exe LoopbackExempt -s

若应用已经卸载,可使用此前保存的包族名称执行删除,而不是依赖当前的 Get-AppxPackage 结果。使用图形工具时,取消目标应用的勾选并保存,再用系统命令复查。

完成后重新启动目标应用,检查删除是否产生预期变化。如果操作前已经存在该应用的豁免,不应为了“清理”而直接删除;恢复的目标是回到原状态。最终可用“本机端口可连接、目标包豁免已核对、请求路径在日志中可确认、应用实际操作成功”四项结果形成完整记录,避免把一次偶然成功当作故障解决。