使用 RADIUS 身份验证配置 VNet 的点到站点连接:PowerShell

本文介绍如何创建一个 VNet,其中具有使用 RADIUS 身份验证的点到站点 (P2S) 连接。 此配置只适用于资源管理器部署模型。 可以使用 PowerShell 或 Azure 门户创建此配置。

点到站点 VPN 网关用于创建从单个客户端计算机到虚拟网络的安全连接。 若要从远程位置连接到 VNet,例如从家里或会议室进行远程通信,可以使用 P2S VPN 连接。 如果只有一些客户端需要连接到 VNet,则可使用 P2S VPN 这种解决方案来代替站点到站点 VPN。

P2S VPN 连接是从 Windows 和 Mac 设备启动的。 本文帮助你配置一个使用 RADIUS 服务器进行身份验证的 P2S 配置。 如果你要使用其他方法进行身份验证,请参阅以下文章:

P2S 连接不需要 VPN 设备或面向公众的 IP 地址。 P2S 基于 SSTP(安全套接字隧道协议)、OpenVPN 或 IKEv2 创建 VPN 连接。

  • SSTP 是基于 TLS 的 VPN 隧道,仅在 Windows 客户端平台上受支持。 它可以穿透防火墙,因而非常适合在从任意位置将 Windows 设备连接到 Azure 时采用。 在服务器端,我们只支持 TLS 版本 1.2。 如需提高性能、可伸缩性和安全性,请考虑改用 OpenVPN 协议。

  • OpenVPN® 协议,一种基于 SSL/TLS 的 VPN 协议。 由于大多数防火墙都会打开 TLS 所用的出站 TCP 端口 443,因此 TLS VPN 解决方案可以穿透防火墙。 OpenVPN 可用于从 Android、iOS(版本 11.0 及更高版本)、Windows 和 Linux 设备进行连接。

  • IKEv2 VPN,这是一种基于标准的 IPsec VPN 解决方案。 IKEv2 VPN 可用于从 Windows、Linux 和 Mac 设备(macOS 10.11 及更高版本)进行连接。

对于此配置,连接需要以下各项:

  • RouteBased VPN 网关。
  • 用于处理用户身份验证的 RADIUS 服务器。 可将 RADIUS 服务器部署在本地或 Azure VNet 中。 还可以配置两个 RADIUS 服务器以实现高可用性。
  • VPN 客户端配置文件配置包。 VPN 客户端配置文件配置包是你生成的包。 它提供 VPN 客户端通过 P2S 进行连接所需的设置。

关于 P2S VPN 的 Active Directory (AD) 域身份验证

AD 域身份验证可让用户使用其组织域凭据登录到 Azure。 它需要一台与 AD 服务器集成的 RADIUS 服务器。 组织也可以利用其现有的 RADIUS 部署。

RADIUS 服务器可以驻留在本地或 Azure VNet 中。 在身份验证期间,VPN 网关充当传递设备,在 RADIUS 服务器与连接方设备之间来回转发身份验证消息。 VPN 网关必须能够访问 RADIUS 服务器。 如果 RADIUS 服务器位于本地,需要建立从 Azure 到本地站点的 VPN 站点到站点连接。

除了 Active Directory 以外,RADIUS 服务器还能与其他外部标识系统集成。 这样就为 P2S VPN 提供了大量的身份验证选项,包括 MFA 选项。 请查看 RADIUS 服务器供应商文档,获取该服务器可集成的标识系统列表。

RADIUS 身份验证 P2S 连接的图示。

重要

只能使用站点到站点 VPN 连接来与本地 RADIUS 服务器进行连接, 而不能使用 ExpressRoute 连接。

开始之前

确保拥有 Azure 订阅。 如果还没有 Azure 订阅,可以注册一个试用版

使用 Azure PowerShell

可以在计算机本地安装并运行 Azure PowerShell cmdlet。 PowerShell cmdlet 经常更新。 如果尚未安装最新版本,说明中指定的值可能会失败。 若要查找计算机上安装的 Azure PowerShell 版本,请使用 Get-Module -ListAvailable Az cmdlet。 若要进行安装或更新,请参阅安装 Azure PowerShell 模块

示例值

可使用示例值创建测试环境,或参考这些值以更好地理解本文中的示例。 可以使用这些步骤作为演练并按原样使用这些值,或者根据环境更改这些值。

  • 名称:VNet1
  • 地址空间:10.1.0.0/16 和 10.254.0.0/16
    本示例中使用了多个地址空间,说明此配置可与多个地址空间一起使用。 但是,对于此配置,多个地址空间并不必要。
  • 子网名称:FrontEnd
    • 子网地址范围:10.1.0.0/24
  • 子网名称:BackEnd
    • 子网地址范围:10.254.1.0/24
  • 子网名称:GatewaySubnet
    要使 VPN 网关正常工作,必须使用子网名称 GatewaySubnet 。
    • 网关子网地址范围:10.1.255.0/27
  • VPN 客户端地址池:172.16.201.0/24
    使用此 P2S 连接连接到 VNet 的 VPN 客户端接收来自 VPN 客户端地址池的 IP 地址。
  • 订阅:如果有多个订阅,请确保使用正确的订阅。
  • 资源组:TestRG1
  • 位置:中国北部
  • DNS 服务器: 用于 VNet 名称解析的 DNS 服务器的 IP 地址。 (可选)
  • GW 名称:Vnet1GW
  • 公共 IP 名称:VNet1GWPIP
  • VpnType:RouteBased

1.设置变量

声明要使用的变量。 使用以下示例,根据需要将值替换为自己的值。 如果在练习期间的任何时候关闭了 PowerShell 会话,只需再次复制和粘贴这些值,以重新声明变量。

$VNetName  = "VNet1"
$FESubName = "FrontEnd"
$BESubName = "Backend"
$GWSubName = "GatewaySubnet"
$VNetPrefix1 = "10.1.0.0/16"
$VNetPrefix2 = "10.254.0.0/16"
$FESubPrefix = "10.1.0.0/24"
$BESubPrefix = "10.254.1.0/24"
$GWSubPrefix = "10.1.255.0/27"
$VPNClientAddressPool = "172.16.201.0/24"
$RG = "TestRG1"
$Location = "China North"
$GWName = "VNet1GW"
$GWIPName = "VNet1GWPIP"
$GWIPconfName = "gwipconf1"

2.创建资源组、VNet 和公共 IP 地址

以下步骤在包含三个子网的资源组中创建资源组和虚拟网络。 替换值时,请务必始终将网关子网特意命名为“GatewaySubnet”。 如果命名为其他名称,网关创建会失败;

  1. 创建资源组。

    New-AzResourceGroup -Name "TestRG1" -Location "China North"
    
  2. 为虚拟网络创建子网配置,并将其命名为 FrontEndBackEndGatewaySubnet。 这些前缀必须是已声明的 VNet 地址空间的一部分。

    $fesub = New-AzVirtualNetworkSubnetConfig -Name "FrontEnd" -AddressPrefix "10.1.0.0/24"  
    $besub = New-AzVirtualNetworkSubnetConfig -Name "Backend" -AddressPrefix "10.254.1.0/24"  
    $gwsub = New-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -AddressPrefix "10.1.255.0/27"
    
  3. 创建虚拟网络。

    在本示例中,-DnsServer 服务器参数是可选的。 指定一个值不会创建新的 DNS 服务器。 指定的 DNS 服务器 IP 地址应该是可以解析从 VNet 所连接到的资源名称的 DNS 服务器。 对于此示例,我们使用了专用 IP 地址,但这可能不是你 DNS 服务器的 IP 地址。 请务必使用自己的值。 指定的值将由部署到 VNet 的资源使用,而不是由 P2S 连接使用。

    New-AzVirtualNetwork -Name "VNet1" -ResourceGroupName "TestRG1" -Location "China North" -AddressPrefix "10.1.0.0/16","10.254.0.0/16" -Subnet $fesub, $besub, $gwsub -DnsServer 10.2.1.3
    
  4. VPN 网关必须具有公共 IP 地址。 请先请求 IP 地址资源,并在创建虚拟网关时参阅该资源。 创建 VPN 网关时,IP 地址是动态分配给资源的。 VPN 网关当前仅支持动态 公共 IP 地址分配。 不能请求静态公共 IP 地址分配。 但这并不意味着 IP 地址在分配到 VPN 网关后会更改。 公共 IP 地址只在删除或重新创建网关时更改。 该地址不会因为 VPN 网关大小调整、重置或其他内部维护/升级而更改。

    指定用于请求动态分配的公共 IP 地址的变量。

    $vnet = Get-AzVirtualNetwork -Name "VNet1" -ResourceGroupName "TestRG1"  
    $subnet = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet 
    $pip = New-AzPublicIpAddress -Name "VNet1GWPIP" -ResourceGroupName "TestRG1" -Location "China North" -AllocationMethod Dynamic 
    $ipconf = New-AzVirtualNetworkGatewayIpConfig -Name "gwipconf1" -Subnet $subnet -PublicIpAddress $pip
    

3.设置 RADIUS 服务器

在创建和配置虚拟网络网关之前,应该正确配置 RADIUS 服务器,以便能够进行身份验证。

  1. 如果未部署 RADIUS 服务器,请部署一个。 有关部署步骤,请参阅 RADIUS 供应商提供的设置指南。
  2. 将 VPN 网关配置为 RADIUS 上的 RADIUS 客户端。 添加此 RADIUS 客户端时,请指定创建的虚拟网络 GatewaySubnet。
  3. 设置 RADIUS 服务器后,获取 RADIUS 服务器的 IP 地址和共享机密,RADIUS 客户端将使用这些信息来与 RADIUS 服务器通信。 如果 RADIUS 服务器在 Azure VNet 中,请使用 RADIUS 服务器 VM 的 CA IP。

网络策略服务器 (NPS) 一文提供了有关为 AD 域身份验证配置 Windows RADIUS 服务器 (NPS) 的指导。

4.创建 VPN 网关

为 VNet 配置和创建 VPN 网关。

  • -GatewayType 必须是“Vpn”,且 -VpnType 必须是“RouteBased”。
  • VPN 网关可能需要 45 分钟或更长时间才能完成,具体取决于所选网关 SKU
New-AzVirtualNetworkGateway -Name $GWName -ResourceGroupName $RG `
-Location $Location -IpConfigurations $ipconf -GatewayType Vpn `
-VpnType RouteBased -EnableBgp $false -GatewaySku VpnGw1

5.添加 RADIUS 服务器和客户端地址池

  • 可按名称或 IP 地址指定 -RadiusServer。 如果指定名称并且服务器驻留在本地,VPN 网关可能无法解析名称。 如果出现这种情况,最好是指定服务器的 IP 地址。
  • -RadiusSecret 应该与 RADIUS 服务器上配置的值匹配。
  • -VpnClientAddressPool 是连接方 VPN 客户端在连接时要从中接收 IP 地址的范围。 使用专用 IP 地址范围时,该范围不得与要通过其进行连接的本地位置重叠,也不得与要连接到其中的 VNet 重叠。 请确保配置足够大的地址池。  
  1. 为 RADIUS 机密创建安全字符串。

    $Secure_Secret=Read-Host -AsSecureString -Prompt "RadiusSecret"
    
  2. 系统会提示输入 RADIUS 机密。 输入的字符不会显示,而是被“*”字符取代。

    RadiusSecret:***
    
  3. 添加 VPN 客户端地址池和 RADIUS 服务器信息。

    对于 SSTP 配置:

    $Gateway = Get-AzVirtualNetworkGateway -ResourceGroupName $RG -Name $GWName
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $Gateway `
    -VpnClientAddressPool "172.16.201.0/24" -VpnClientProtocol "SSTP" `
    -RadiusServerAddress "10.51.0.15" -RadiusServerSecret $Secure_Secret
    

    对于 OpenVPN® 配置:

    $Gateway = Get-AzVirtualNetworkGateway -ResourceGroupName $RG -Name $GWName
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $Gateway -VpnClientRootCertificates @()
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $Gateway `
    -VpnClientAddressPool "172.16.201.0/24" -VpnClientProtocol "OpenVPN" `
    -RadiusServerAddress "10.51.0.15" -RadiusServerSecret $Secure_Secret
    

    对于 IKEv2 配置:

    $Gateway = Get-AzVirtualNetworkGateway -ResourceGroupName $RG -Name $GWName
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $Gateway `
    -VpnClientAddressPool "172.16.201.0/24" -VpnClientProtocol "IKEv2" `
    -RadiusServerAddress "10.51.0.15" -RadiusServerSecret $Secure_Secret
    

    对于 SSTP + IKEv2:

    $Gateway = Get-AzVirtualNetworkGateway -ResourceGroupName $RG -Name $GWName
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $Gateway `
    -VpnClientAddressPool "172.16.201.0/24" -VpnClientProtocol @( "SSTP", "IkeV2" ) `
    -RadiusServerAddress "10.51.0.15" -RadiusServerSecret $Secure_Secret
    

    若要指定两个 RADIUS 服务器,请使用以下语法。 根据需要修改 -VpnClientProtocol 值。

    $radiusServer1 = New-AzRadiusServer -RadiusServerAddress 10.1.0.15 -RadiusServerSecret $radiuspd -RadiusServerScore 30
    $radiusServer2 = New-AzRadiusServer -RadiusServerAddress 10.1.0.16 -RadiusServerSecret $radiuspd -RadiusServerScore 1
    
    $radiusServers = @( $radiusServer1, $radiusServer2 )
    
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $actual -VpnClientAddressPool 201.169.0.0/16 -VpnClientProtocol "IkeV2" -RadiusServerList $radiusServers
    

6. 配置 VPN 客户端和连接

VPN 客户端配置文件配置包包含帮助你配置 VPN 客户端配置文件以连接到 Azure VNet 的设置。

若要生成 VPN 客户端配置包并配置 VPN 客户端,请参阅以下文章之一:

配置 VPN 客户端后,连接到 Azure。

验证连接

  1. 如果要验证用户的 VPN 连接是否处于活动状态,请打开提升的命令提示符,并运行 ipconfig/all

  2. 查看结果。 请注意,收到的 IP 地址是在配置中指定的 P2S VPN 客户端地址池中的地址之一。 结果与以下示例类似:

    PPP adapter VNet1:
       Connection-specific DNS Suffix .:
       Description.....................: VNet1
       Physical Address................:
       DHCP Enabled....................: No
       Autoconfiguration Enabled.......: Yes
       IPv4 Address....................: 172.16.201.3(Preferred)
       Subnet Mask.....................: 255.255.255.255
       Default Gateway.................:
       NetBIOS over Tcpip..............: Enabled
    

若要对 P2S 连接进行故障排除,请参阅排查 Azure 点到站点连接问题

连接到虚拟机

你可以通过建立与 VM 的远程桌面连接来连接部署到虚拟网络的 VM。 若要通过初始验证来确认能否连接到 VM,最好的方式是使用其专用 IP 地址而不是计算机名称进行连接。 这种方式测试的是能否进行连接,而不是测试名称解析是否已正确配置。

  1. 定位专用 IP 地址。 如需查找 VM 的专用 IP 地址,可以通过在 Azure 门户中查看 VM 的属性或通过使用 PowerShell 实现。

    • Azure 门户:在 Azure 门户中找到你的 VM。 查看 VM 的属性。 专用 IP 地址已列出。

    • PowerShell:通过此示例查看资源组中 VM 的列表及其专用 IP 地址。 在使用此示例之前不需对其进行修改。

      $VMs = Get-AzVM
      $Nics = Get-AzNetworkInterface | Where-Object VirtualMachine -ne $null
      
      foreach ($Nic in $Nics) {
      $VM = $VMs | Where-Object -Property Id -eq $Nic.VirtualMachine.Id
      $Prv = $Nic.IpConfigurations | Select-Object -ExpandProperty PrivateIpAddress
      $Alloc = $Nic.IpConfigurations | Select-Object -ExpandProperty PrivateIpAllocationMethod
      Write-Output "$($VM.Name): $Prv,$Alloc"
      }
      
  2. 验证是否已连接到虚拟网络。

  3. 通过在任务栏上的搜索框中输入“RDP”或“远程桌面连接”,打开远程桌面连接。 然后选择“远程桌面连接”。 也可在 PowerShell 中使用 mstsc 命令来打开远程桌面连接

  4. 在“远程桌面连接”中,输入 VM 的专用 IP 地址。 你可以选择“显示选项”来调整其他设置,然后进行连接

如果无法通过 VPN 连接连接到 VM,请检查以下各项:

  • 验证 VPN 连接是否成功。
  • 验证是否已连接到 VM 的专用 IP 地址。
  • 如果可以使用专用 IP 地址连接到 VM,但不能使用计算机名称进行连接,则请验证是否已正确配置 DNS。 若要详细了解如何对 VM 进行名称解析,请参阅针对 VM 的名称解析

若要详细了解 RDP 连接,请参阅排查远程桌面连接到 VM 的问题

  • 验证是否在为 VNet 指定 DNS 服务器 IP 地址之后,才生成 VPN 客户端配置包。 如果更新了 DNS 服务器 IP 地址,请生成并安装新的 VPN 客户端配置包。

  • 使用“ipconfig”来检查分配给以太网适配器的 IPv4 地址,该适配器所在的计算机正是你要从其进行连接的计算机。 如果该 IP 地址位于要连接到的 VNet 的地址范围内,或者位于 VPNClientAddressPool 的地址范围内,则称为地址空间重叠。 当地址空间以这种方式重叠时,网络流量不会抵达 Azure,而是呆在本地网络中。

FAQ

有关常见问题解答信息,请参阅“常见问题解答”的点到站点 - RADIUS 身份验证部分。

后续步骤

连接完成后,即可将虚拟机添加到虚拟网络。 有关详细信息,请参阅虚拟机。 若要详细了解网络和虚拟机,请参阅 Azure 和 Linux VM 网络概述