练习 - 创建 Azure VPN 网关

已完成

你希望确保能够使用横跨公共 Internet 的加密隧道将自己环境中的客户端或站点连接到 Azure 中。 在本单元中,请先创建一个点到站点 VPN 网关,然后从客户端计算机连接到该网关。 将使用本机 Azure 证书身份验证连接以确保安全性。

您将执行以下过程:

  1. 创建 RouteBased VPN 网关。

  2. 为了身份验证目的上传根证书的公钥。

  3. 从根证书生成客户端证书,然后在连接到虚拟网络的每个客户端计算机上安装客户端证书,以便进行身份验证。

  4. 创建 VPN 客户端配置文件,其中包含客户端连接到虚拟网络时所需的信息。

设置

若要完成本模块,请使用本地 Windows 计算机的 Azure PowerShell。

  1. 在本地安装了 Azure PowerShell 模块的 Windows 计算机上打开新的 PowerShell 会话。

  2. 运行 PowerShell cmdlet Connect-AzAccount 登录到 Azure。

  3. 设置用于创建虚拟网络的变量。 复制以下变量并将其粘贴到 PowerShell。

$VNetName  = "VNetData"
$FESubName = "FrontEnd"
$BESubName = "Backend"
$GWSubName = "GatewaySubnet"
$VNetPrefix1 = "192.168.0.0/16"
$VNetPrefix2 = "10.254.0.0/16"
$FESubPrefix = "192.168.1.0/24"
$BESubPrefix = "10.254.1.0/24"
$GWSubPrefix = "192.168.200.0/26"
$VPNClientAddressPool = "172.16.201.0/24"
$ResourceGroup = "VpnGatewayDemo"
$Location = "East US"
$GWName = "VNetDataGW"
$GWIPName = "VNetDataGWPIP"
$GWIPconfName = "gwipconf"

配置虚拟网络

  1. 运行以下命令来创建资源组。

    New-AzResourceGroup -Name $ResourceGroup -Location $Location
    
  2. 运行以下命令,为虚拟网络创建子网配置。 这些配置的名称为 FrontEnd、BackEnd 和 GatewaySubnet。 所有这些子网都存在于虚拟网络前缀中。

    $fesub = New-AzVirtualNetworkSubnetConfig -Name $FESubName -AddressPrefix $FESubPrefix
    $besub = New-AzVirtualNetworkSubnetConfig -Name $BESubName -AddressPrefix $BESubPrefix
    $gwsub = New-AzVirtualNetworkSubnetConfig -Name $GWSubName -AddressPrefix $GWSubPrefix
    
  3. 接下来,运行以下命令,使用子网值和静态 DNS 服务器创建虚拟网络。

    New-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroup -Location $Location -AddressPrefix $VNetPrefix1,$VNetPrefix2 -Subnet $fesub, $besub, $gwsub -DnsServer 10.2.1.3
    
  4. 现在,请为创建的这个网络指定变量。

    $vnet = Get-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroup
    $subnet = Get-AzVirtualNetworkSubnetConfig -Name $GWSubName -VirtualNetwork $vnet
    
  5. 运行以下命令,请求动态分配的公共 IP 地址。

    $pip = New-AzPublicIpAddress -Name $GWIPName -ResourceGroupName $ResourceGroup -Location $Location -AllocationMethod Static -Sku Standard -Zone 1,2,3
    $ipconf = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfName -Subnet $subnet -PublicIpAddress $pip
    

创建 VPN 网关

创建此 VPN 网关时,必须符合以下条件:

  • GatewayType 必须是 Vpn
  • VpnType 必须是 RouteBased

此部分的练习可能需要长达 45 分钟的时间才能完成。

  1. 若要创建 VPN 网关,请运行以下命令并按 Enter

    New-AzVirtualNetworkGateway -Name $GWName -ResourceGroupName $ResourceGroup `
    -Location $Location -IpConfigurations $ipconf -GatewayType Vpn `
    -VpnType RouteBased -EnableBgp $false -GatewaySku VpnGw1AZ -VpnClientProtocol "IKEv2"
    
  2. 等待命令输出显示。

添加 VPN 客户端地址池

  1. 运行以下命令,添加 VPN 客户端地址池。

    $Gateway = Get-AzVirtualNetworkGateway -ResourceGroupName $ResourceGroup -Name $GWName
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $Gateway -VpnClientAddressPool $VPNClientAddressPool
    
  2. 等待命令输出显示。

生成客户端证书

在 Azure 上创建网络基础结构后,我们需要在本地计算机上创建自签名客户端证书。 此创建过程与大多数作系统类似,但我们将介绍如何在 Windows 上使用 PowerShell 和 Azure PowerShell 模块和 Windows 证书管理器 实用工具在 Windows 上生成客户端证书。

  1. 首先创建自签名根证书。 运行以下命令。

    $cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature `
    -Subject "CN=P2SRootCert" -KeyExportPolicy Exportable `
    -HashAlgorithm sha256 -KeyLength 2048 `
    -CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign
    
  2. 接下来,生成由新根证书签名的客户端证书。

    New-SelfSignedCertificate -Type Custom -DnsName P2SChildCert -KeySpec Signature `
    -Subject "CN=P2SChildCert" -KeyExportPolicy Exportable `
    -HashAlgorithm sha256 -KeyLength 2048 `
    -CertStoreLocation "Cert:\CurrentUser\My" `
    -Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
    

导出证书公钥

生成证书后,我们需要导出根证书的公钥。

  1. 从 PowerShell 运行 certmgr 以打开证书管理器。

  2. 转到个人>证书

  3. 右键单击列表中的“P2SRootCert”证书,然后选择所有操作>。

  4. 在“证书导出向导”中,选择“下一步”。

  5. 确保选中“否,不导出私钥”,然后选择“下一步”。

  6. 在“导出文件格式”页面上,确保选中“Base-64 编码的 X.509 (.CER)”,然后选择“下一步”。

  7. 在“要导出文件”页面的“文件名”下,导航到将记住的位置并将文件另存为“P2SRootCert.cer”,然后选择“下一步”。

  8. 在“完成证书导出向导”页面中选择“完成”。

  9. 在“证书导出向导”消息框中,选择“确定”。

上传根证书的公钥信息

  1. 在 PowerShell 窗口中运行以下命令,声明与证书名称相对应的变量。

    $P2SRootCertName = "P2SRootCert.cer"
    
  2. <cert-path> 占位符替换为根证书的导出位置,然后运行以下命令。

    $filePathForCert = "<cert-path>\P2SRootCert.cer"
    $cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2($filePathForCert)
    $CertBase64 = [system.convert]::ToBase64String($cert.RawData)
    $p2srootcert = New-AzVpnClientRootCertificate -Name $P2SRootCertName -PublicCertData $CertBase64
    
  3. 设置组名称后,使用以下命令将证书上传到 Azure。

    Add-AzVpnClientRootCertificate -VpnClientRootCertificateName $P2SRootCertName -VirtualNetworkGatewayname $GWName -ResourceGroupName $ResourceGroup -PublicCertData $CertBase64
    

    Azure 现在可以将此证书识别为受信任的虚拟网络根证书。

配置本机 VPN 客户端

  1. 运行以下命令,以 .ZIP 格式创建 VPN 客户端配置文件。

    $profile = New-AzVpnClientConfiguration -ResourceGroupName $ResourceGroup -Name $GWName -AuthenticationMethod "EapTls"
    $profile.VPNProfileSASUrl
    
  2. 复制此命令的输出中返回的 URL,并将其粘贴到浏览器中。 此时浏览器就会开始下载一个 .ZIP 文件。 提取存档内容并将其放在合适的位置。

    最初,某些浏览器将尝试以危险下载的形式阻止下载此 ZIP 文件。 需要在浏览器中重写此位置,才能提取存档内容。

  3. 在提取的文件夹中,导航到 WindowsAmd64 文件夹(适用于 64 位 Windows 计算机)或 WindowsX86 文件夹(适用于 32 位计算机)。

    如果要在非 Windows 计算机上配置 VPN,可以使用“Generic”文件夹中的证书和设置文件。

  4. 双击 VpnClientSetup{architecture}.exe 文件,其中 表示你的体系结构。

  5. 在“Windows 保护的电脑”屏幕中选择“更多信息”,然后选择“仍然运行”

  6. 在“用户帐户控制”对话框中,选择“是”。

  7. 在“VNetData”对话框中,选择“是”。

连接到 Azure

  1. Windows 键,输入“设置”,然后按 Enter

  2. 在“设置”窗口中,选择“网络和 Internet”。

  3. 在左侧窗格中,选择“VPN”。

  4. 在右侧窗格中选择“VNetData”,然后选择“连接”。

  5. 在 VNetData 窗口中,选择“连接”。

  6. 在下一 VNetData 窗口中,选择“继续”。

  7. 在“用户帐户控制”消息框中,选择“是”。

如果这些步骤不起作用,可能需要重启计算机。

验证连接

  1. 在新的 Windows 命令提示符下,运行 IPCONFIG /ALL

  2. 复制 PPP 适配器 VNetData 下的 IP 地址,或者将其写下来。

  3. 确认 IP 地址位于 VPNClientAddressPool 范围 172.16.201.0/24 中。

  4. 已成功连接到 Azure VPN 网关。

你刚刚设置了一个 VPN 网关,因此可在 Azure 中以加密客户端连接的方式连接到虚拟网络。 此方法适用于客户端计算机和较小型的站点到站点连接。