简介
本文档介绍基于Microsoft Universal Windows Platform(UWP)构建的VPN应用的利用率。 这些应用程序通常在Windows 8或更高版本的Metro/Modern GUI中显示为应用程序。桌面应用程序和传统的Windows风格程序不使用UWP,也不会受到影响。
如果您看到非应用样式的Windows VPN或始终在VPN上出现问题,请参阅我们的在Umbrella漫游客户端的Windows VPN上的说明:软件和VPN兼容性指南。
AnyConnect Umbrella漫游模块不会导致相同的互操作性问题。
影响
当漫游客户端处于活动状态时,UWP VPN应用用户在尝试启动VPN会话时收到“No such host is known”或类似错误消息。这会阻止用户成功连接到VPN。如果漫游客户端停止或使用VPN客户端的桌面版本,则不会出现此错误。
例如,这些命令不起作用:
- Pulse Secure App +漫游客户端
- SonicWall MobileConnect +漫游客户端
对于这些设备,连接到同一VPN头端会正常工作:
- Pulse Secure桌面应用+漫游客户端
- SonicWall NetExtender或SonicWall Desktop应用程序+漫游客户端
- Pulse Secure App + AnyConnect Umbrella漫游模块*
- SonicWall MobileConnect + AnyConnect伞状漫游模块*
*AnyConnect Umbrella模块不会将127.0.0.1(另一个接口)设置为DNS设置,而是使用内核驱动程序将DNS重定向到127.0.0.1。UWP应用不知道它们使用的是不同的DNS适配器,目前不受影响。
根本原因
根据设计,微软在Windows 8+中构建了“现代”应用,使其更加沙盒。其中一项限制适用于VPN应用。基于UWP(应用)构建的VPN仅限于使用生成查询的接口。由于Umbrella漫游客户端正在侦听127.0.0.1(不同的接口l0),因此查询不会到达漫游客户端(或运行在127.0.0.1上的任何其他DNS转发)。
以下调用允许将套接字创建限制为一个接口。下面是已知UWP VPN应用将DNS限制在其接口上的情况:
ConnectAsync(主机名、字符串、SocketProtectionLevel、NetworkAdapter)
"ConnectAsync(Hostname, String, SocketProtectionLevel, NetworkAdapter)方法使用的名称解析机制仅限于域名系统(DNS)命名空间的指定接口。" https://learn.microsoft.com/en-us/uwp/api/windows.networking.sockets.streamsocket
Windows VPN API会使用此连接机制或类似的连接机制,导致UWP“应用”式VPN无法与漫游客户端配合工作,因为它将127.0.0.1用于DNS。因此,VPN连接失败,因为DNS被发送到127.0.0.1;但是,由于呼叫的限制,漫游客户端从未收到或应答该呼叫。因此,VPN连接由于DNS故障而失败。
根本原因与Windows NCSI连接指示器的设计限制类似,在该指示器中永远不查询127.0.0.1以确认DNS连接(由Microsoft解决)。
分辨率
目前,对于独立漫游客户端,没有可更改此Windows行为的漫游客户端更新,因为将127.0.0.1设置为本地DNS服务器。这是一个核心
漫游客户端正常运行的要求。在Microsoft允许UWP VPN应用将127.0.0.1用于DNS之前,唯一的选择是切换到VPN客户端的桌面版本,或者使用AnyConnect漫游模块,该模块使用内核驱动程序来引导DNS。