适用现象:浏览器正常,单个应用连接失败
Windows 已开启系统代理,浏览器可以通过客户端访问目标网站,但某个 UWP 应用持续显示网络错误,客户端连接列表也没有对应请求。这种情况可能与 AppContainer 网络隔离有关。应用尝试连接本机代理,例如 127.0.0.1:7890,却在到达 mihomo 内核之前被系统限制。
回环豁免解决的是“受隔离应用能否连接本机服务”,不是节点质量、订阅失效或代理规则问题。只有定位到这一层,添加豁免才有意义。Microsoft Store 分发渠道也不等于 UWP:商店内的传统桌面程序、打包的 Win32 程序,不一定受同一种限制。
- 优先考虑回环限制:本机代理正常,其他程序正常,只有受 AppContainer 隔离的应用无法连接。
- 优先检查客户端:所有程序都失败,代理端口未监听,或日志出现节点连接错误。
- 优先检查规则与服务端:应用请求已进入连接列表,但命中错误策略,或目标接口返回业务错误。
回环地址与 AppContainer 网络隔离
127.0.0.1 是 IPv4 回环地址,::1 是 IPv6 回环地址。访问这些地址时,流量仍留在当前计算机内。客户端把 HTTP 或混合代理端口绑定到回环地址,应用再把请求交给这个端口,由 mihomo 内核执行规则匹配与出站连接。
UWP 应用通常运行在 AppContainer 隔离环境中。Windows 对这类应用访问本机回环服务设置了限制;即使系统代理指向本机,应用也可能无法建立这一步连接。CheckNetIsolation.exe 提供的回环豁免机制,可以为指定应用容器放开相关限制。
豁免本身不会替应用设置代理,也不会增加应用清单中的网络能力。如果应用忽略系统代理、使用独立网络组件,或者受企业策略限制,还需要处理对应层面的问题。
操作前确认:代理端口与系统设置
核对当前监听端口
先在客户端查看正在使用的配置与端口设置。下面仅用 7890 演示混合端口,不代表所有客户端的默认值。若实际端口是 7897,后续命令和系统设置都应使用 7897。
mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
这是一段参数示意,不是完整配置。不要用它覆盖现有订阅。为本机 UWP 应用添加回环豁免,不需要把监听地址改为 0.0.0.0,也不需要开启“允许局域网连接”。远程订阅更新还可能覆盖直接写入的参数,应优先使用客户端提供的持久化设置或覆写功能。
确认 Windows 指向相同端口
- Windows 11 打开「设置」→「网络和 Internet」→「代理」→「手动设置代理」→「使用代理服务器」旁的「设置」。Windows 10 对应入口为「设置」→「网络和 Internet」→「代理」。
- 确认地址与端口对应当前客户端。客户端若负责自动管理系统代理,优先通过客户端开关修改,避免两处反复覆盖。
- 在 PowerShell 执行下面的监听检查。没有结果时,先启动内核或纠正端口,再处理应用豁免。
Get-NetTCPConnection -State Listen -LocalPort 7890 |
Select-Object LocalAddress, LocalPort, OwningProcess
curl.exe --proxy http://127.0.0.1:7890 --head --max-time 15 https://example.com/
curl.exe 明确指定代理,适合确认端口是否可以完成请求。收到 HTTP 响应说明这条测试链路已建立;超时则继续检查节点和日志。该命令运行在普通桌面进程中,成功并不能证明 UWP 回环限制已经解除,也不能单凭响应判断实际出口是否符合预期。
方法一:客户端内置回环豁免工具
部分 Windows 客户端提供回环豁免工具,入口可能使用“UWP 回环”“Loopback”或“回环豁免”等名称。功能入口随客户端和版本变化,不能把某个旧版本的菜单路径套用于所有 mihomo 客户端。
如果使用的是历史版本 Clash for Windows,可在「General」→「UWP Loopback」→「Launch Helper」打开相应工具。该客户端已停止维护,这里仅用于识别存量环境,不建议为了这个入口安装旧客户端。当前客户端找不到同名选项时,直接使用下一节的 Windows 命令即可。
- 打开工具,按需确认管理员权限提示。核对发布者与程序来源,不要运行来源不明的“修复工具”。
- 在应用列表中定位发生问题的应用,核对包信息,不要只凭相似的显示名称选择。
- 只勾选目标应用,点击工具提供的保存或应用按钮。仅勾选但未保存,通常不会写入豁免列表。
- 完全退出目标应用后重新打开。若窗口关闭后仍驻留后台,可在任务管理器中结束对应任务再测试。
图形工具通常只是对系统豁免机制的封装。操作后仍可用 CheckNetIsolation.exe LoopbackExempt -s 独立检查结果。工具中找不到应用时,先确认应用是否安装在当前账户,以及它是否属于适用的应用类型。
方法二:使用 CheckNetIsolation 添加指定应用
以管理员身份打开终端
在开始菜单搜索「终端」或「Windows PowerShell」,选择「以管理员身份运行」。以下示例使用 PowerShell 语法。若管理员认证使用了另一个账户,需要注意应用包查询的用户范围,避免把“当前用户没有安装”误判成程序不存在。
查询 PackageFamilyName
回环豁免的 -n 参数使用包系列名称 PackageFamilyName,不是桌面快捷方式名称,也不是带版本号和架构的 PackageFullName。先列出当前用户已安装的包:
Get-AppxPackage |
Sort-Object Name |
Select-Object Name, PackageFamilyName
以下用 Microsoft Store 包演示筛选过程。实际排查其他应用时,应从上面的列表中找到对应包,再替换查询条件,不要直接给无关应用添加权限。
Get-AppxPackage -Name Microsoft.WindowsStore |
Select-Object Name, PackageFamilyName
常见结果中的包系列名称为 Microsoft.WindowsStore_8wekyb3d8bbwe,仍应以本机输出为准。若查询为空,先确认用户范围和包名;不要根据网上其他设备的包全名猜测。
添加并查看豁免
CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s
-a 表示添加,-s 表示列出已有豁免。列表可能同时显示应用容器名称和 SID,核对目标包是否存在。若提示拒绝访问,确认终端已经提升权限;若提示找不到应用容器,则重新检查包系列名称和安装状态。
如果目标包已通过查询准确选中,也可在 PowerShell 中使用变量传递,减少手工复制错误:
$app = Get-AppxPackage -Name Microsoft.WindowsStore
if ($null -ne $app) {
CheckNetIsolation.exe LoopbackExempt -a "-n=$($app.PackageFamilyName)"
} else {
Write-Output "当前用户未找到指定应用包。"
}
验证结果:区分接入、规则与出口
验证时保持条件一致:使用同一网络、同一份配置、同一个目标操作。打开客户端连接页面,再在应用中刷新实际失败的页面或执行登录。不要仅用应用首页是否出现缓存内容作为成功依据。
| 观察结果 | 可能所在层级 | 下一步 |
|---|---|---|
| 豁免列表没有目标包 | 权限或包名称 | 管理员终端重新查询并添加 |
| 列表已有目标包,仍无连接记录 | 应用未使用该代理或请求未发出 | 重启应用,核对系统代理和应用网络设置 |
| 出现连接,但策略为 DIRECT | 规则分流 | 查看命中规则,确认是否应走代理策略 |
| 连接进入代理策略后超时 | 节点、DNS 或目标网络 | 查看内核日志及所选节点状态 |
| 网络请求成功,账户操作仍失败 | 应用业务或账户区域 | 检查服务状态、账户与错误码 |
客户端能显示进程名称时,可辅助识别目标应用;不能显示时,结合请求时间和域名判断。日志中出现 DNS、TLS 或认证错误,应沿相应链路排查,不要重复添加同一豁免。临时切换全局模式只能帮助判断规则影响,测试后应恢复原先模式。
TUN 模式与回环豁免的边界
系统代理把代理地址交给愿意使用它的应用;TUN 模式则通过虚拟网络接口和路由接管匹配流量。两者接入方式不同。如果应用不读取系统代理,回环豁免不会让它自动开始使用代理,这时可评估客户端的 TUN 模式。
但开启 TUN 也不等于必然消除 AppContainer 的全部网络限制。如果应用仍显式连接受限制的回环端口,相关限制仍需单独处理。TUN 是否成功接管还取决于权限、路由、DNS、接口排除规则,以及其他 VPN 软件的影响。
- 先完成系统代理与回环豁免的单独验证,再测试 TUN,避免同时改变多个变量。
- 启用 TUN 后检查实际连接是否进入内核,不要只看开关状态。
- 企业设备存在安全软件或网络策略时,按管理员要求处理,不要自行停用保护组件。
撤销豁免与后续维护
不再需要本机代理访问,或确认故障与回环无关时,可以删除刚添加的豁免。下面继续使用同一示例包,仅撤销这一项,不影响其他应用已有设置:
CheckNetIsolation.exe LoopbackExempt -d -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s
-d 表示删除指定项。执行后重新查看列表,确认目标项已移除。排查前最好先保存原始列表,便于区分此次添加的项目与设备原有设置。
正常更新若保持相同包系列名称,通常不必重复添加;卸载重装、更换发行渠道或包身份变化后,应重新查询。最小化处理顺序是:确认端口可用、确认应用类型、为目标包添加豁免、重启应用、查看连接与规则。只有接入已经正常而业务仍失败时,再继续排查节点、DNS 和账户服务。