使用 CLI 创建具有站点到站点 VPN 连接的虚拟网络

本文介绍如何使用 Azure CLI 创建站点到站点 VPN 网关连接,以便从本地网络连接到 VNet。 本文中的步骤适用于资源管理器部署模型。 也可使用不同的部署工具或部署模型创建此配置,方法是从以下列表中选择另一选项:

Site-to-site VPN Gateway cross-premises connection diagram for CLI article.

使用站点到站点 VPN 网关连接,通过 IPsec/IKE(IKEv1 或 IKEv2)VPN 隧道将本地网络连接到 Azure 虚拟网络。 此类型的连接要求位于本地的 VPN 设备分配有一个面向外部的公共 IP 地址。 有关 VPN 网关的详细信息,请参阅关于 VPN 网关

在开始之前

在开始配置之前,请验证是否符合以下条件:

  • 确保有一台兼容的 VPN 设备,并且可对其进行配置。 有关兼容的 VPN 设备和设备配置的详细信息,请参阅关于 VPN 设备
  • 确认 VPN 设备有一个面向外部的公共 IPv4 地址。
  • 如果不熟悉本地网络配置中的 IP 地址范围,则需咨询能够提供此类详细信息的人员。 创建此配置时,必须指定 IP 地址范围前缀,Azure 会将该前缀路由到本地位置。 本地网络的任何子网都不得与要连接到的虚拟网络子网重叠。
  • 如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI
    • 如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录
    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展
    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade
  • 本文需要 Azure CLI 版本 2.0 或更高版本。

示例值

可使用以下值创建测试环境,或参考这些值以更好地理解本文中的示例:

#Example values

VnetName                = VNet1
ResourceGroup           = TestRG1
Location                = chinanorth
AddressSpace            = 10.1.0.0/16
SubnetName              = Frontend
Subnet                  = 10.1.0.0/24
GatewaySubnet           = 10.1.255.0/27
LocalNetworkGatewayName = Site1
LNG Public IP           = <On-premises VPN device IP address>
LocalAddrPrefix1        = 10.0.0.0/24
LocalAddrPrefix2        = 20.0.0.0/24
GatewayName             = VNet1GW
PublicIP                = VNet1GWIP
GatewayType             = Vpn
ConnectionName          = VNet1toSite2

1.连接到订阅

使用 az login 命令登录到 Azure 订阅,并按照屏幕上的说明进行操作。 有关登录的详细信息,请参阅 Azure CLI 入门

az login

注意

在 Azure China 中使用 Azure CLI 2.0 之前,请首先运行 az cloud set -n AzureChinaCloud 更改云环境。 如果要切换回全局 Azure,请再次运行 az cloud set -n AzureCloud

如果有多个 Azure 订阅,请列出该帐户的订阅。

az account list --all

指定要使用的订阅。

az account set --subscription <replace_with_your_subscription_id>

2.创建资源组

以下示例在“chinanorth”位置创建名为“TestRG1”的资源组。 如果在需创建 VNet 的区域中已经有了一个资源组,则可改用该资源组。

az group create --name TestRG1 --location chinanorth

3.创建虚拟网络

如果还没有虚拟网络,请使用 az network vnet create 命令创建一个。 创建虚拟网络时,请确保指定的地址空间不与本地网络的任一个地址空间相重叠。

注意

为了让此 VNet 连接到本地位置,需与本地网络管理员协调操作,指定一个 IP 地址范围,将其专用于此虚拟网络。 如果 VPN 连接的两侧存在重复的地址范围,则流量不会按预期的方式路由。 另外,若要将此 VNet 连接到其他 VNet,则地址空间不能与其他 VNet 重叠。 请注意对网络配置进行相应的计划。

以下示例创建一个名为“VNet1”的虚拟网络和一个名为“Subnet1”的子网。

az network vnet create --name VNet1 --resource-group TestRG1 --address-prefix 10.1.0.0/16 --location chinanorth --subnet-name Subnet1 --subnet-prefix 10.1.0.0/24

4.创建网关子网

虚拟网络网关使用称作“网关子网”的特定子网。 网关子网是虚拟网络 IP 地址范围的一部分,该范围是在配置虚拟网络时指定的。 网关子网包含虚拟网络网关资源和服务使用的 IP 地址。 要使 Azure 能够部署网关资源,必须将子网命名为“GatewaySubnet”。 不能指定要将网关资源部署到的其他子网。 如果没有名为“GatewaySubnet”的子网,则无法创建 VPN 网关。

创建网关子网时,需指定子网包含的 IP 地址数。 所需的 IP 地址数目取决于要创建的 VPN 网关配置。 有些配置需要具有比其他配置更多的 IP 地址。 我们建议创建使用 /27 或 /28 的网关子网。

如果出现错误,指出地址空间与子网重叠,或者子网不包含在虚拟网络的地址空间中,请检查 VNet 地址范围。 出错的原因可能是为虚拟网络创建的地址范围中没有足够的可用 IP 地址。 例如,如果默认子网包含整个地址范围,则不会有剩余的 IP 地址用于创建更多子网。 可以调整现有地址空间中的子网以释放 IP 地址,或指定额外的地址范围并在其中创建网关子网。

使用 az network vnet subnet create 命令创建网关子网。

az network vnet subnet create --address-prefix 10.1.255.0/27 --name GatewaySubnet --resource-group TestRG1 --vnet-name VNet1

重要

使用网关子网时,避免将网络安全组 (NSG) 与网关子网关联。 将网络安全组关联到此子网可能会导致虚拟网络网关(VPN 和 ExpressRoute 网关)停止按预期方式工作。 有关网络安全组的详细信息,请参阅什么是网络安全组?

5.创建本地网关

本地网络网关通常是指本地位置。 可以为站点提供一个名称供 Azure 引用,并指定本地 VPN 设备的 IP 地址,以便创建一个连接来连接到该设备。 此外还可指定 IP 地址前缀,以便通过 VPN 网关将其路由到 VPN 设备。 指定的地址前缀是位于本地网络的前缀。 如果本地网络出现变化,可以轻松更新这些前缀。

使用以下值:

  • --gateway-ip-address 是本地 VPN 设备的 IP 地址。
  • --local-address-prefixes 是本地地址空间。

使用 az network local-gateway create 命令添加具有多个地址前缀的本地网关:

az network local-gateway create --gateway-ip-address 23.99.221.164 --name Site2 --resource-group TestRG1 --local-address-prefixes 10.0.0.0/24 20.0.0.0/24

6. 请求公共 IP 地址

VPN 网关必须使用公共 IP 地址。 请先请求 IP 地址资源,并在创建虚拟网关时参阅该资源。 创建 VPN 网关时,IP 地址是动态分配给资源的。 公共 IP 地址只在删除或重新创建网关时会更改。 该地址不会因为 VPN 网关大小调整、重置或其他内部维护/升级而更改。

使用 az network public-ip create 命令请求公共 IP 地址。

az network public-ip create --name VNet1GWIP --resource-group TestRG1 --allocation-method Static --sku Standard

7.创建 VPN 网关

创建虚拟网络 VPN 网关。 创建网关通常需要 45 分钟或更长的时间,具体取决于所选的网关 SKU。

使用以下值:

  • 站点到站点配置的 --gateway-typeVpn。 网关类型永远是你要实现的配置的特定类型。 有关详细信息,请参阅网关类型
  • --vpn-type 是 RouteBased(在某些文档中称为动态网关)
  • 选择要使用的网关 SKU。 某些 SKU 存在配置限制。 有关详细信息,请参阅网关 SKU

使用 az network vnet-gateway create 命令创建 VPN 网关。 如果使用“--no-wait”参数运行该命令,则不会显示任何反馈或输出。 此参数允许在后台创建网关。 创建网关需要 45 分钟或更长的时间。

az network vnet-gateway create --name VNet1GW --public-ip-address VNet1GWIP --resource-group TestRG1 --vnet VNet1 --gateway-type Vpn --vpn-type RouteBased --sku VpnGw1 --no-wait 

8.配置 VPN 设备

通过站点到站点连接连接到本地网络需要 VPN 设备。 在此步骤中,请配置 VPN 设备。 配置 VPN 设备时,需要以下项:

  • 共享密钥。 此共享密钥就是在创建站点到站点 VPN 连接时指定的共享密钥。 在示例中,我们使用基本的共享密钥。 建议生成更复杂的可用密钥。

  • 虚拟网络网关的公共 IP 地址。 可以通过 Azure 门户、PowerShell 或 CLI 查看公共 IP 地址。 若要查找虚拟网关的公共 IP 地址,请使用 az network public-ip list 命令。 为了方便阅读,对输出进行了格式化,以表格式显示一系列公共 IP。

    az network public-ip list --resource-group TestRG1 --output table
    

下载 VPN 设备配置脚本:

根据所用的 VPN 设备,有时可以下载 VPN 设备配置脚本。 有关详细信息,请参阅下载 VPN 设备配置脚本

参阅以下链接了解其他配置信息:

9.创建 VPN 连接

在虚拟网关和本地 VPN 设备之间创建站点到站点 VPN 连接。 请特别注意共享密钥值,该值必须与为 VPN 设备配置的共享密钥值相符。

使用 az network vpn-connection create 命令创建连接。

az network vpn-connection create --name VNet1toSite2 --resource-group TestRG1 --vnet-gateway1 VNet1GW -l chinanorth --shared-key abc123 --local-gateway2 Site2

在一小段时间后,将建立该连接。

10.验证 VPN 连接

可使用 az network vpn-connection show 命令来验证连接是否成功。 在此示例中,“--name”是指要测试的连接的名称。 当连接处于建立过程中时,连接状态会显示“正在连接”。 建立连接后,状态更改为“已连接”。 使用你的环境的值修改以下示例。

az network vpn-connection show --name <connection-name> --resource-group <resource-group-name>

若要使用其他方法来验证连接,请参阅验证 VPN 网关连接

连接到虚拟机

你可以通过建立与 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 的问题

常见任务

本部分包含各种常用命令,这些命令在进行站点到站点配置时很有用。 有关 CLI 网络命令的完整列表,请参阅 Azure CLI - 网络

查看本地网关

若要查看本地网关的列表,请使用 az network local-gateway list 命令。

az network local-gateway list --resource-group TestRG1

修改本地网关 IP 地址前缀 - 无网关连接

如果没有网关连接且需要添加或删除 IP 地址前缀,则可使用 az network local-gateway create 命令,该命令也是用来创建本地网关的。 也可使用该命令来更新 VPN 设备的网关 IP 地址。 请使用本地网关的现有名称来覆盖当前设置。 如果使用其他名称,请创建一个新的本地网关,而不是覆盖现有的。

每次进行更改时,必须指定前缀的完整列表,不能仅指定要更改的前缀。 仅指定需要保留的前缀。 此例中为 10.0.0.0/24 和 20.0.0.0/24

az network local-gateway create --gateway-ip-address 23.99.221.164 --name Site2 -g TestRG1 --local-address-prefixes 10.0.0.0/24 20.0.0.0/24

修改本地网关 IP 地址前缀 - 存在网关连接

如果有网关连接且需要添加或删除 IP 地址前缀,可使用 az network local-gateway update 更新前缀。 这会导致 VPN 连接中断一段时间。 修改 IP 地址前缀时,不需删除 VPN 网关。

每次进行更改时,必须指定前缀的完整列表,不能仅指定要更改的前缀。 在此示例中,10.0.0.0/24 和 20.0.0.0/24 已存在。 我们会添加前缀 30.0.0.0/24 和 40.0.0.0/24,并在更新时指定所有 4 个前缀。

az network local-gateway update --local-address-prefixes 10.0.0.0/24 20.0.0.0/24 30.0.0.0/24 40.0.0.0/24 --name VNet1toSite2 -g TestRG1

修改本地网关的“gatewayIpAddress”

如果要连接的 VPN 设备已更改其公共 IP 地址,则需根据该更改修改本地网关。 可以更改网关 IP 地址而不删除现有的 VPN 网关连接(如果有)。 要修改网关 IP 地址,请使用 az network local-gateway update 命令将值“Site2”和“TestRG1”替换为自己的值。

az network local-gateway update --gateway-ip-address 23.99.222.170 --name Site2 --resource-group TestRG1

验证输出中的 IP 地址是否正确:

"gatewayIpAddress": "23.99.222.170",

验证共享密钥值

验证共享密钥值与用于 VPN 设备配置的值是否相同。 如果不同,请使用设备提供的值再次运行链接,或者使用返回的值更新设备。 值必须匹配。 若要查看共享的密钥,请使用 az network vpn-connection-list

az network vpn-connection shared-key show --connection-name VNet1toSite2 --resource-group TestRG1

查看 VPN 网关的公共 IP 地址

若要查找虚拟网关的公共 IP 地址,请使用 az network public-ip list 命令。 为了方便阅读,对本示例的输出进行了格式化,以表格式显示一系列公共 IP。

az network public-ip list --resource-group TestRG1 --output table

后续步骤