在 Windows 客户端中配置 VPN 设备隧道
Always On VPN 使你能够为设备或计算机创建专用的 VPN 配置文件。 Always On VPN 连接包括两种隧道:
设备隧道会在用户登录设备之前连接到指定的 VPN 服务器。 预登录连接方案和设备管理将使用设备隧道。
用户隧道只会在用户登录设备后进行连接。 用户隧道允许用户通过 VPN 服务器访问组织资源。
与用户隧道(仅在用户登录到设备或计算机后连接)不同,设备隧道允许 VPN 在用户登录之前建立连接。 设备隧道和用户隧道均使用其 VPN 配置文件独立运行,可以同时连接,并且可以根据需要使用不同的身份验证方法和其他 VPN 配置设置。 用户隧道支持 SSTP 和 IKEv2,而设备隧道仅支持 IKEv2,不支持 SSTP 回退。
已加入域、未加入域(工作组)或已加入 Microsoft Entra ID 的设备支持用户隧道,以同时支持企业与 BYOD 场景。 Always On VPN 在所有 Windows 版本中都可用,第三方可通过 UWP VPN 插件支持使用平台功能。
只能在运行 Windows 10 企业版或教育版 1709 或更高版本的已加入域的设备上配置设备隧道。 不支持第三方控制设备隧道。 如果系统上仅使用设备隧道,则你可以配置名称解析策略表 (NRPT)。 如果系统上使用用户隧道和设备隧道,则你只能在用户隧道上使用名称解析策略表 (NRPT)。
设备隧道不支持强制隧道。 必须将其配置为拆分隧道。 |
先决条件
必须为 VPN 连接启用计算机证书身份验证,并定义用于对传入 VPN 连接进行身份验证的根证书颁发机构。
$VPNRootCertAuthority = "Common Name of trusted root certification authority"
$RootCACert = (Get-ChildItem -Path cert:LocalMachine\root | Where-Object {$_.Subject -Like "*$VPNRootCertAuthority*" })
Set-VpnAuthProtocol -UserAuthProtocolAccepted Certificate, EAP -RootCertificateNameToAccept $RootCACert -PassThru
VPN 设备隧道配置
对于仅需要通过设备隧道进行客户端发起的拉取的方案,下面的示例配置文件 XML 提供了很好的指导。 利用流量筛选器将设备隧道限制为仅管理流量。 此配置适用于 Windows 更新、典型的组策略 (GP) 和 Microsoft Endpoint Configuration Manager 更新方案,以及在没有缓存凭据的情况下首次登录的 VPN 连接或密码重置方案。
对于服务器启动的推送案例(如 Windows 远程管理(WinRM)、远程 GPUpdate 和远程配置管理器更新方案),必须允许设备隧道上的入站流量,因此无法使用流量筛选器。 如果在设备隧道配置文件中打开流量筛选器,则设备隧道会拒绝入站流量。 将来的版本中会移除这一限制。
VPN 配置文件 XML 示例
下面是示例 VPN 配置文件 XML。
<VPNProfile>
<NativeProfile>
<Servers>vpn.contoso.com</Servers>
<NativeProtocolType>IKEv2</NativeProtocolType>
<Authentication>
<MachineMethod>Certificate</MachineMethod>
</Authentication>
<RoutingPolicyType>SplitTunnel</RoutingPolicyType>
<!-- disable the addition of a class based route for the assigned IP address on the VPN interface -->
<DisableClassBasedDefaultRoute>true</DisableClassBasedDefaultRoute>
</NativeProfile>
<!-- use host routes(/32) to prevent routing conflicts -->
<Route>
<Address>10.10.0.2</Address>
<PrefixSize>32</PrefixSize>
</Route>
<Route>
<Address>10.10.0.3</Address>
<PrefixSize>32</PrefixSize>
</Route>
<!-- traffic filters for the routes specified above so that only this traffic can go over the device tunnel -->
<TrafficFilter>
<RemoteAddressRanges>10.10.0.2, 10.10.0.3</RemoteAddressRanges>
</TrafficFilter>
<!-- need to specify always on = true -->
<AlwaysOn>true</AlwaysOn>
<!-- new node to specify that this is a device tunnel -->
<DeviceTunnel>true</DeviceTunnel>
<!--new node to register client IP address in DNS to enable manage out -->
<RegisterDNS>true</RegisterDNS>
</VPNProfile>
根据每个特定部署方案的需要,可以使用设备隧道配置的另一个 VPN 功能是可信网络检测。
<!-- inside/outside detection -->
<TrustedNetworkDetection>corp.contoso.com</TrustedNetworkDetection>
部署和测试
可以使用 Windows PowerShell 脚本和 Windows Management Instrumentation (WMI) 网桥来配置设备隧道。 必须在 LOCAL SYSTEM 帐户的上下文中配置 Always On VPN 设备隧道。 要实现这一点,必须使用 PsExec,这是 Sysinternals 实用程序套件中包含的 PsTools 之一。
有关如何基于设备部署 (.\Device)
与基于用户 (.\User)
配置文件进行部署的指南,请参阅将 PowerShell 脚本与 WMI 网桥提供程序一起使用。
运行以下 Windows PowerShell 命令,验证是否已成功部署设备配置文件:
Get-VpnConnection -AllUserConnection
输出显示设备上部署的设备范围 VPN 配置文件的列表。
Windows PowerShell 脚本示例
你可以使用以下 Windows PowerShell 脚本来帮助你创建自己的配置文件创建脚本。
Param(
[string]$xmlFilePath,
[string]$ProfileName
)
$a = Test-Path $xmlFilePath
echo $a
$ProfileXML = Get-Content $xmlFilePath
echo $XML
$ProfileNameEscaped = $ProfileName -replace ' ', '%20'
$Version = 201606090004
$ProfileXML = $ProfileXML -replace '<', '<'
$ProfileXML = $ProfileXML -replace '>', '>'
$ProfileXML = $ProfileXML -replace '"', '"'
$nodeCSPURI = './Vendor/MSFT/VPNv2'
$namespaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_VPNv2_01"
$session = New-CimSession
try
{
$newInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", "$nodeCSPURI", 'String', 'Key')
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", "$ProfileNameEscaped", 'String', 'Key')
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ProfileXML", "$ProfileXML", 'String', 'Property')
$newInstance.CimInstanceProperties.Add($property)
$session.CreateInstance($namespaceName, $newInstance)
$Message = "Created $ProfileName profile."
Write-Host "$Message"
}
catch [Exception]
{
$Message = "Unable to create $ProfileName profile: $_"
Write-Host "$Message"
exit
}
$Message = "Complete."
Write-Host "$Message"
其他资源
下面是有助于 VPN 部署的其他资源。
VPN 客户端配置资源
下面是 VPN 客户端配置资源。
远程访问服务器网关资源
以下是远程访问服务器 (RAS) 网关资源。
重要
将设备隧道与 Microsoft RAS 网关配合使用时,需要配置 RRAS 服务器以支持 IKEv2 计算机证书身份验证,方法是启用对 IKEv2 允许计算机证书身份验证,如此处所述。 启用此设置后,强烈建议将 Set-VpnAuthProtocol PowerShell cmdlet 与 RootCertificateNameToAccept 可选参数一起使用,以确保仅允许 RRAS IKEv2 连接用于链接到显式定义的内部/专用根证书颁发机构的 VPN 客户端证书。 或者,应修改 RRAS 服务器上的可信根证书颁发机构存储,以确保它不包含此处讨论的公共证书颁发机构。 对于其他 VPN 网关,可能还需要考虑类似的方法。