使用 PowerShell 配置 VNet 到 VNet VPN 网关连接

本文介绍如何使用 VNet 到 VNet 连接类型来连接虚拟网络。 虚拟网络可以位于相同或不同的区域中。

本文中的步骤适用于 Resource Manager 部署模型并使用 PowerShell。 也可使用不同的部署工具或部署模型创建此配置,方法是从以下列表中选择另一选项:

关于连接 VNet

可通过多种方式来连接 VNet。 以下各节介绍了如何通过不同方式来连接虚拟网络。

VNet 到 VNet

配置一个 VNet 到 VNet 连接即可轻松地连接 VNet。 使用 VNet 到 VNet 连接类型 (VNet2VNet) 将一个虚拟网络连接到另一个虚拟网络类似于创建到本地位置的站点到站点 IPsec 连接。 这两种连接类型都使用 VPN 网关来提供使用 IPsec/IKE 的安全隧道,二者在通信时使用同样的方式运行。 连接类型的差异在于本地网关的配置方式。 创建 VNet 到 VNet 连接时,看不到本地网关地址空间。 它是自动创建并填充的。 如果更新一个 VNet 的地址空间,另一个 VNet 会自动知道路由到更新的地址空间。 与在 VNet 之间创建站点到站点连接相比,创建 VNet 到 VNet 连接通常速度更快且更容易。

站点到站点 (IPsec)

如果要进行复杂的网络配置,则与使用 VNet 到 VNet 步骤相比,使用站点到站点步骤来连接 VNet 会更好。 使用站点到站点步骤时,可以手动创建和配置本地网关。 每个 VNet 的本地网关都将其他 VNet 视为本地站点。 这样可以为本地网关指定路由流量所需的其他地址空间。 如果 VNet 的地址空间更改,则需根据更改更新相应的本地网关。 它不自动进行更新。

VNet 对等互连

可以考虑使用 VNet 对等互连来连接 VNet。 VNet 对等互连不使用 VPN 网关,并且有不同的约束。 另外,VNet 对等互连定价的计算不同于 VNet 到 VNet VPN 网关定价的计算。 有关详细信息,请参阅 VNet 对等互连

为何创建 VNet 到 VNet 连接?

你可能会出于以下原因而使用 VNet 到 VNet 连接来连接虚拟网络:

  • 跨区域地域冗余和地域存在

    • 可以使用安全连接设置自己的异地复制或同步,而无需借助于面向 Internet 的终结点。
    • 使用 Azure 流量管理器和负载均衡器,可以设置支持跨多个 Azure 区域实现异地冗余的高可用性工作负荷。 一个重要的示例就是对分布在多个 Azure 区域中的可用性组设置 SQL Always On。
  • 具有隔离或管理边界的区域多层应用程序

    • 在同一区域中,由于存在隔离或管理要求,可以设置具有多个虚拟网络的多层应用程序,这些虚拟网络相互连接在一起。

可以将 VNet 到 VNet 通信与多站点配置组合使用。 这样,便可以建立将跨界连接与虚拟网络间连接相结合的网络拓扑。

应使用哪些 VNet 到 VNet 步骤?

此配置的步骤使用 TestVNet1 和 TestVNet4。

此图显示的 VNet 到 VNet 步骤适用于同一订阅中的 VNet。

如何连接相同订阅中的 VNet

准备阶段

备注

本文已经过更新,以便使用 Azure Az PowerShell 模块。 若要与 Azure 交互,建议使用的 PowerShell 模块是 Az PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

如果更想本地安装最新版本的 Azure PowerShell 模块,请参阅如何安装和配置 Azure PowerShell

步骤 1 - 规划 IP 地址范围

以下步骤将创建两个虚拟网络,以及它们各自的网关子网和配置。 然后在两个 VNet 之间创建 VPN 连接。 必须规划好网络配置的 IP 地址范围。 请记住,必须确保没有任何 VNet 范围或本地网络范围存在任何形式的重叠。 在这些示例中,我们没有包括 DNS 服务器。 如果需要虚拟网络的名称解析,请参阅名称解析

示例中使用了以下值:

TestVNet1 的值:

  • VNet 名称:TestVNet1
  • 资源组:TestRG1
  • 位置:中国北部
  • TestVNet1:10.11.0.0/16 和 10.12.0.0/16
  • FrontEnd:10.11.0.0/24
  • BackEnd:10.12.0.0/24
  • GatewaySubnet:10.12.255.0/27
  • GatewayName:VNet1GW
  • 公共 IP:VNet1GWIP
  • VPNType:RouteBased
  • 连接(1 到 4):VNet1 到 VNet4
  • 连接类型:VNet2VNet

TestVNet4 的值:

  • VNet 名称:TestVNet4
  • TestVNet2:10.41.0.0/16 和 10.42.0.0/16
  • FrontEnd:10.41.0.0/24
  • BackEnd:10.42.0.0/24
  • GatewaySubnet:10.42.255.0/27
  • 资源组:TestRG4
  • 位置:中国北部
  • GatewayName:VNet4GW
  • 公共 IP:VNet4GWIP
  • VPNType:RouteBased
  • 连接:VNet4 到 VNet1
  • 连接类型:VNet2VNet

步骤 2 - 创建并配置 TestVNet1

  1. 验证订阅设置。

    连接到帐户。

    Connect-AzAccount -Environment AzureChinaCloud
    

    检查该帐户的订阅。

    Get-AzSubscription
    

    如果有多个订阅,请指定要使用的订阅。

    Select-AzSubscription -SubscriptionName nameofsubscription
    
  2. 声明变量。 此示例使用本练习中的值来声明变量。 在大多数情况下,应该将这些值替换为自己的值。 但是,如果执行这些步骤是为了熟悉此类型的配置,则可以使用这些变量。 根据需要修改变量,并将其复制并粘贴到 PowerShell 控制台中。

    $RG1 = "TestRG1"
    $Location1 = "China North"
    $VNetName1 = "TestVNet1"
    $FESubName1 = "FrontEnd"
    $BESubName1 = "Backend"
    $VNetPrefix11 = "10.11.0.0/16"
    $VNetPrefix12 = "10.12.0.0/16"
    $FESubPrefix1 = "10.11.0.0/24"
    $BESubPrefix1 = "10.12.0.0/24"
    $GWSubPrefix1 = "10.12.255.0/27"
    $GWName1 = "VNet1GW"
    $GWIPName1 = "VNet1GWIP"
    $GWIPconfName1 = "gwipconf1"
    $Connection14 = "VNet1toVNet4"
    $Connection15 = "VNet1toVNet5"
    
  3. 创建资源组。

    New-AzResourceGroup -Name $RG1 -Location $Location1
    
  4. 创建 TestVNet1 的子网配置。 本示例创建一个名为 TestVNet1 的虚拟网络和三个子网:一个名为 GatewaySubnet、一个名为 FrontEnd,还有一个名为 Backend。 替换值时,请务必始终将网关子网特意命名为 GatewaySubnet。 如果命名为其他名称,网关创建会失败。 因此,名称不是通过下面的变量分配的。

    以下示例使用前面设置的变量。 在本示例中,网关子网使用 /27。 尽管创建的网关子网最小可为 /29,但建议至少选择 /28 或 /27,创建包含更多地址的更大子网。 这样便可以留出足够的地址,满足将来可能需要使用的其他配置。

    $fesub1 = New-AzVirtualNetworkSubnetConfig -Name $FESubName1 -AddressPrefix $FESubPrefix1
    $besub1 = New-AzVirtualNetworkSubnetConfig -Name $BESubName1 -AddressPrefix $BESubPrefix1
    $gwsub1 = New-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -AddressPrefix $GWSubPrefix1
    
  5. 创建 TestVNet1。

    New-AzVirtualNetwork -Name $VNetName1 -ResourceGroupName $RG1 `
    -Location $Location1 -AddressPrefix $VNetPrefix11,$VNetPrefix12 -Subnet $fesub1,$besub1,$gwsub1
    
  6. 请求一个公共 IP 地址,以分配给要为 VNet 创建的网关。 请注意,AllocationMethod 为 Dynamic。 无法指定要使用的 IP 地址。 它会动态分配到网关。

    $gwpip1 = New-AzPublicIpAddress -Name $GWIPName1 -ResourceGroupName $RG1 `
    -Location $Location1 -AllocationMethod Dynamic
    
  7. 创建网关配置。 网关配置定义要使用的子网和公共 IP 地址。 使用该示例创建网关配置。

    $vnet1 = Get-AzVirtualNetwork -Name $VNetName1 -ResourceGroupName $RG1
    $subnet1 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet1
    $gwipconf1 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfName1 `
    -Subnet $subnet1 -PublicIpAddress $gwpip1
    
  8. 为 TestVNet1 创建网关。 本步骤为 TestVNet1 创建虚拟网络网关。 VNet 到 VNet 配置需要基于路由的 VPN 类型。 创建网关通常需要 45 分钟或更长的时间,具体取决于所选网关 SKU。

    New-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1 `
    -Location $Location1 -IpConfigurations $gwipconf1 -GatewayType Vpn `
    -VpnType RouteBased -GatewaySku VpnGw1
    

完成命令后,创建此网关将需要多达 45 分钟的时间。

步骤 3 - 创建并配置 TestVNet4

配置 TestVNet1 后,请创建 TestVNet4。 遵循以下步骤,并根据需要替换为自己的值。

  1. 连接并声明变量。 请务必将值替换为要用于配置的值。

    $RG4 = "TestRG4"
    $Location4 = "China North"
    $VnetName4 = "TestVNet4"
    $FESubName4 = "FrontEnd"
    $BESubName4 = "Backend"
    $VnetPrefix41 = "10.41.0.0/16"
    $VnetPrefix42 = "10.42.0.0/16"
    $FESubPrefix4 = "10.41.0.0/24"
    $BESubPrefix4 = "10.42.0.0/24"
    $GWSubPrefix4 = "10.42.255.0/27"
    $GWName4 = "VNet4GW"
    $GWIPName4 = "VNet4GWIP"
    $GWIPconfName4 = "gwipconf4"
    $Connection41 = "VNet4toVNet1"
    
  2. 创建资源组。

    New-AzResourceGroup -Name $RG4 -Location $Location4
    
  3. 创建 TestVNet4 的子网配置。

    $fesub4 = New-AzVirtualNetworkSubnetConfig -Name $FESubName4 -AddressPrefix $FESubPrefix4
    $besub4 = New-AzVirtualNetworkSubnetConfig -Name $BESubName4 -AddressPrefix $BESubPrefix4
    $gwsub4 = New-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -AddressPrefix $GWSubPrefix4
    
  4. 创建 TestVNet4。

    New-AzVirtualNetwork -Name $VnetName4 -ResourceGroupName $RG4 `
    -Location $Location4 -AddressPrefix $VnetPrefix41,$VnetPrefix42 -Subnet $fesub4,$besub4,$gwsub4
    
  5. 请求公共 IP 地址。

    $gwpip4 = New-AzPublicIpAddress -Name $GWIPName4 -ResourceGroupName $RG4 `
    -Location $Location4 -AllocationMethod Dynamic
    
  6. 创建网关配置。

    $vnet4 = Get-AzVirtualNetwork -Name $VnetName4 -ResourceGroupName $RG4
    $subnet4 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet4
    $gwipconf4 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfName4 -Subnet $subnet4 -PublicIpAddress $gwpip4
    
  7. 创建 TestVNet4 网关。 创建网关通常需要 45 分钟或更长的时间,具体取决于所选网关 SKU。

    New-AzVirtualNetworkGateway -Name $GWName4 -ResourceGroupName $RG4 `
    -Location $Location4 -IpConfigurations $gwipconf4 -GatewayType Vpn `
    -VpnType RouteBased -GatewaySku VpnGw1
    

步骤 4 - 创建连接

等待两个网关完成创建。

  1. 获取两个虚拟网关。

    $vnet1gw = Get-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1
    $vnet4gw = Get-AzVirtualNetworkGateway -Name $GWName4 -ResourceGroupName $RG4
    
  2. 创建 TestVNet1 到 TestVNet4 的连接。 本步骤创建从 TestVNet1 到 TestVNet4 的连接。 示例中引用了共享密钥。 可以对共享密钥使用自己的值。 共享密钥必须与两个连接匹配,这一点非常重要。 创建连接可能需要简短的一段时间才能完成。

    New-AzVirtualNetworkGatewayConnection -Name $Connection14 -ResourceGroupName $RG1 `
    -VirtualNetworkGateway1 $vnet1gw -VirtualNetworkGateway2 $vnet4gw -Location $Location1 `
    -ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'
    
  3. 创建 TestVNet4 到 TestVNet1 的连接。 此步骤类似上面的步骤,只不过是创建 TestVNet4 到 TestVNet1 的连接。 确保共享密钥匹配。 几分钟后会建立连接。

    New-AzVirtualNetworkGatewayConnection -Name $Connection41 -ResourceGroupName $RG4 `
    -VirtualNetworkGateway1 $vnet4gw -VirtualNetworkGateway2 $vnet1gw -Location $Location4 `
    -ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'
    

如何验证连接

重要

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

可以验证连接是否成功,方法是使用“Get-AzVirtualNetworkGatewayConnection”cmdlet,带或不带“-Debug”。

  1. 使用以下 cmdlet 示例,配置符合自己需要的值。 如果出现提示,请选择“A”运行“所有”。 在此示例中,“ -Name”是指要测试的连接的名称。

    Get-AzVirtualNetworkGatewayConnection -Name VNet1toSite1 -ResourceGroupName TestRG1
    
  2. cmdlet 运行完毕后,查看该值。 在以下示例中,连接状态显示为“已连接”,且可以看到入口和出口字节数。

    "connectionStatus": "Connected",
    "ingressBytesTransferred": 33509044,
    "egressBytesTransferred": 4142431
    

VNet 到 VNet 常见问题解答

VNet 到 VNet 连接常见问题解答适用于 VPN 网关连接。 有关 VNet 对等互连的信息,请参阅虚拟网络对等互连

Azure 会对 VNet 之间的流量收费吗?

当使用 VPN 网关连接时,同一区域中的 VNet 到 VNet 流量双向均免费。 跨区域 VNet 到 VNet 传出流量根据源区域的出站 VNet 间数据传输费率收费。 有关详细信息,请参阅 VPN 网关定价。 如果你使用 VNet 对等互连而非 VPN 网关连接 VNet,请参阅虚拟网络定价

VNet 到 VNet 流量是否流经 Internet?

否。 VNet 到 VNet 流量会流经 Azure 主干,而非 Internet。

是否可以跨 Azure Active Directory (AAD) 租户建立 VNet 到 VNet 连接?

是的。使用 Azure VPN 网关的 VNet 到 VNet 连接可以跨 AAD 租户工作。

VNet 到 VNet 通信安全吗?

安全,它通过 IPsec/IKE 加密进行保护。

是否需要 VPN 设备将 VNet 连接到一起?

否。 将多个 Azure 虚拟网络连接在一起不需要 VPN 设备,除非需要跨界连接。

我的 VNet 是否需要位于同一区域?

否。 虚拟网络可以在相同或不同的 Azure 区域(位置)中。

能否在单独的 Azure 实例中使用 VNet 到 VNet 通信来连接虚拟网络?

否。 VNet 到 VNet 通信支持在同一 Azure 实例中连接虚拟网络。 例如,不能在全球 Azure 和中国/德国/美国政府 Azure 实例之间创建连接。 对于上述情形,请考虑使用站点到站点 VPN 连接。

能否将 VNet 到 VNet 用于多站点连接?

是的。 虚拟网络连接可与多站点 VPN 同时使用。

一个虚拟网络可以连接到多少个本地站点和虚拟网络?

请参阅网关要求表。

能否使用 VNet 到 VNet 来连接 VNet 外部的 VM 或云服务?

否。 VNet 到 VNet 通信支持连接虚拟网络。 它不支持连接不在虚拟网络中的虚拟机或云服务。

云服务或负载均衡终结点能否跨 VNet?

否。 云服务或负载均衡终结点不能跨虚拟网络,即使它们连接在一起,也是如此。

能否将 PolicyBased VPN 类型用于 VNet 到 VNet 连接或多站点连接?

否。 VNet 到 VNet 连接和多站点连接需要 RouteBased(以前称为动态路由)VPN 类型的 Azure VPN 网关。

是否可以将 RouteBased VPN 类型的 VNet 连接到另一个 PolicyBased VPN 类型的 VNet?

不能,两种虚拟网络都必须使用基于路由的(以前称为“动态路由”)VPN。

VPN 隧道是否共享带宽?

是的。 虚拟网络的所有 VPN 隧道共享 Azure VPN 网关上的可用带宽,以及 Azure 中的相同 VPN 网关运行时间 SLA。

是否支持冗余隧道?

将一个虚拟网络网关配置为主动-主动模式时,支持在一对虚拟网络之间使用冗余隧道。

对于 VNet 到 VNet 配置,能否使用重叠地址空间?

否。 不能有重叠的 IP 地址范围。

连接的虚拟网络与内部本地站点之间能否存在重叠的地址空间?

否。 不能有重叠的 IP 地址范围。

后续步骤