使用 PowerShell 配置 ExpressRoute 和站点到站点共存连接

本文有助于配置可共存的 ExpressRoute 和站点到站点 VPN 连接。 能够配置站点到站点 VPN 和 ExpressRoute 具有多项优势。 可以将站点到站点 VPN 配置为 ExpressRoute 的安全故障转移路径,或者使用站点到站点 VPN 连接到不是通过 ExpressRoute 进行连接的站点。 我们在本文中介绍这两种方案的配置步骤。 本文适用于 Resource Manager 部署模型。

配置站点到站点 VPN 和 ExpressRoute 共存连接具有多项优势:

  • 可以将站点到站点 VPN 配置为 ExpressRoute 的安全故障转移路径。
  • 另外,还可以使用站点到站点 VPN 连接到未通过 ExpressRoute 连接的站点。

本文中介绍了这两种方案的配置步骤。 本文适用于 Resource Manager 部署模型并使用 PowerShell。 也可以使用 Azure 门户配置这些方案,但目前还没有文档。 可以先配置任一网关。 通常,添加新网关或网关连接时不会导致停机。

限制和局限性

  • 仅支持基于路由的 VPN 网关。 必须使用基于路由的 VPN 网关。 还可以将基于路由的 VPN 网关与为“基于策略的流量选择器”配置的 VPN 连接一起使用,如连接到多个基于策略的 VPN 设备中所述。
  • 基本 SKU 不支持 ExpressRoute-VPN 网关共存配置。
  • 如果要在 ExpressRoute 和 VPN 之间使用传输路由,则必须将 Azure VPN 网关的 ASN 设置为 65515 并应使用 Azure 路由服务器。Azure VPN 网关支持 BGP 路由协议。 要使 ExpressRoute 和 Azure VPN 协同工作,必须将 Azure VPN 网关的自治系统编号保留为其默认值 65515。 如果先前选择的是其他 ASN(而不是 65515),并且将设置更改为 65515,则必须重置 VPN 网关才能使设置生效。
  • 网关子网必须是 /27 或更短的前缀(例如 /26、/25),否则,添加 ExpressRoute 虚拟网络网关时将收到错误消息。
  • 不支持双堆栈虚拟网络中的共存。 如果使用的是 ExpressRoute IPv6 支持和双堆栈 ExpressRoute 网关,则将无法与 VPN 网关共存。

配置设计

将站点到站点 VPN 配置为 ExpressRoute 的故障转移路径

可以将站点到站点 VPN 连接配置为 ExpressRoute 连接的备份。 此连接仅适用于链接到 Azure 专用对等互连路径的虚拟网络。 对于可通过 Azure Microsoft 对等互连访问的服务,没有基于 VPN 的故障转移解决方案。 ExpressRoute 线路始终是主链接。 仅当 ExpressRoute 线路失败时,数据才会流经站点到站点 VPN 路径。 若要避免不对称路由,本地网络配置还应当引用基于站点到站点 VPN 的 ExpressRoute 线路。 对于接收 ExpressRoute 的路由,可以通过设置更高的本地优先级来首选 ExpressRoute 路径。

注意

  • 如果已启用 ExpressRoute Microsoft 对等互连,则可以在 ExpressRoute 连接上接收 Azure VPN 网关的公共 IP 地址。 若要将站点到站点 VPN 连接设置为备份,必须配置本地网络,以便将 VPN 连接路由到 Internet。

  • 虽然在两个路由相同的情况下 ExpressRoute 线路路径优先于站点到站点 VPN,Azure 仍会使用最长的前缀匹配来选择指向数据包目标的路由。

Diagram that shows a site-to-site VPN connection as a backup for ExpressRoute.

配置站点到站点 VPN,以便连接到不通过 ExpressRoute 进行连接的站点

可以对网络进行配置,使得部分站点通过站点到站点 VPN 直接连接到 Azure,部分站点通过 ExpressRoute 进行连接。

Coexist

选择要使用的步骤

有两组不同的过程可供选择。 选择的配置过程将取决于有要连接到的现有虚拟网络,还是要创建新的虚拟网络。

  • 我没有 VNet,需要创建一个。

    如果没有虚拟网络,此过程将指导你使用资源管理器部署模型创建新的虚拟网络,然后创建新的 ExpressRoute 和站点到站点 VPN 连接。

  • 我已有一个 Resource Manager 部署模型 VNet。

    你可能已在具有现有站点到站点 VPN 连接或 ExpressRoute 连接的位置拥有虚拟网络。 在此场景下,如果网关子网前缀为 /28 或更长(/29、/30 等),则必须删除现有网关。 为现有的 VNet 配置共存连接部分的步骤将指导你删除网关,然后创建新的 ExpressRoute 连接和站点到站点 VPN 连接。

    如果删除并重新创建网关,则跨界连接将会中断一段时间。 但是,在配置网关时,如果进行了相应配置,VM 和服务可以通过 Internet 进行连接。

准备阶段

本文中的步骤和示例使用 Azure PowerShell Az 模块。 若要在计算机上本地安装 Az 模块,请参阅安装 Azure PowerShell。 若要详细了解新 Az 模块,请参阅新 Azure Powershell Az 模块简介。 PowerShell cmdlet 经常更新。 如果未运行最新版本,在说明中指定的值可能无法使用。 若要在系统上查找已安装的 PowerShell 版本,请使用 Get-Module -ListAvailable Az cmdlet。

本过程指导你创建 VNet,以及创建将共存的站点到站点连接和 ExpressRoute 连接。 针对此配置使用的 cmdlet 可能与你熟悉的 cmdlet 稍有不同。 请务必使用说明内容中指定的 cmdlet。

  1. 登录并选择订阅。

    若要在本地登录,请使用提升的权限打开 PowerShell 控制台,并运行 cmdlet 以进行连接。

    Connect-AzAccount -Environment AzureChinaCloud
    

    如果有多个订阅,请获取 Azure 订阅的列表。

    Get-AzSubscription
    

    指定要使用的订阅。

    Select-AzSubscription -SubscriptionName "Name of subscription"
    
  2. 定义变量并创建资源组。

    $location = "China North"
    $resgrp = New-AzResourceGroup -Name "ErVpnCoex" -Location $location
    $VNetASN = 65515
    
  3. 创建包括 GatewaySubnet 的虚拟网络。 有关创建虚拟网络的详细信息,请参阅创建虚拟网络。 有关创建子网的详细信息,请参阅创建子网

    重要

    “GatewaySubnet”必须是 /27 或更短的前缀(例如 /26 或 /25)。

    创建新的虚拟网络。

    $vnet = New-AzVirtualNetwork -Name "CoexVnet" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -AddressPrefix "10.200.0.0/16"
    

    添加两个名为“App”和“GatewaySubnet”的子网。

    Add-AzVirtualNetworkSubnetConfig -Name "App" -VirtualNetwork $vnet -AddressPrefix "10.200.1.0/24"
    Add-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet -AddressPrefix "10.200.255.0/24"
    

    保存虚拟网络配置。

    $vnet = Set-AzVirtualNetwork -VirtualNetwork $vnet
    
  4. 接下来,创建站点到站点 VPN 网关。 有关 VPN 网关配置的详细信息,请参阅使用站点到站点连接配置 VNet。 只有 VpnGw1VpnGw2VpnGw3标准高性能 VPN 网关支持 GatewaySku。 基本 SKU 不支持 ExpressRoute-VPN 网关共存配置。 VpnType 必须为 RouteBased

    $gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet
    $gwIP = New-AzPublicIpAddress -Name "VPNGatewayIP" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -AllocationMethod Dynamic
    $gwConfig = New-AzVirtualNetworkGatewayIpConfig -Name "VPNGatewayIpConfig" -SubnetId $gwSubnet.Id -PublicIpAddressId $gwIP.Id
    New-AzVirtualNetworkGateway -Name "VPNGateway" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -IpConfigurations $gwConfig -GatewayType "Vpn" -VpnType "RouteBased" -GatewaySku "VpnGw1"
    

    Azure VPN 网关支持 BGP 路由协议。 通过在以下命令中添加 -Asn 标志,可为该虚拟网络指定 ASN(AS 编号)。 若未指定 Asn 参数,则默认 AS 编号为“65515”。

    $azureVpn = New-AzVirtualNetworkGateway -Name "VPNGateway" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -IpConfigurations $gwConfig -GatewayType "Vpn" -VpnType "RouteBased" -GatewaySku "VpnGw1"
    

    注意

    对于共存的网关,必须使用默认 ASN 65515。 有关详细信息,请参阅限制和局限性

    可以通过运行 $azureVpn.BgpSettings.BgpPeeringAddress$azureVpn.BgpSettings.Asn 来查找 Azure 用于 VPN 网关的 BGP 对等 IP 和 AS 编号。 有关详细信息,请参阅为 Azure VPN 网关配置 BGP

  5. 创建一个本地站点 VPN 网关实体。 此命令不会配置本地 VPN 网关, 而是允许提供本地网关设置(如公共 IP 和本地地址空间),以便 Azure VPN 网关可以连接到它。

    如果本地 VPN 设备仅支持静态路由,可按以下方式配置静态路由:

    $MyLocalNetworkAddress = @("10.100.0.0/16","10.101.0.0/16","10.102.0.0/16")
    $localVpn = New-AzLocalNetworkGateway -Name "LocalVPNGateway" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -GatewayIpAddress *<Public IP>* -AddressPrefix $MyLocalNetworkAddress
    

    如果本地 VPN 设备支持 BGP,并且想要启用动态路由,那么需要知道本地 VPN 设备的 BGP 对等 IP 和 AS 编号。

    $localVPNPublicIP = "<Public IP>"
    $localBGPPeeringIP = "<Private IP for the BGP session>"
    $localBGPASN = "<ASN>"
    $localAddressPrefix = $localBGPPeeringIP + "/32"
    $localVpn = New-AzLocalNetworkGateway -Name "LocalVPNGateway" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -GatewayIpAddress $localVPNPublicIP -AddressPrefix $localAddressPrefix -BgpPeeringAddress $localBGPPeeringIP -Asn $localBGPASN
    
  6. 配置本地 VPN 设备以连接到新的 Azure VPN 网关。 有关 VPN 设备配置的详细信息,请参阅 VPN 设备配置

  7. 将 Azure 上的站点到站点 VPN 网关连接到本地网关。

    $azureVpn = Get-AzVirtualNetworkGateway -Name "VPNGateway" -ResourceGroupName $resgrp.ResourceGroupName
    New-AzVirtualNetworkGatewayConnection -Name "VPNConnection" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -VirtualNetworkGateway1 $azureVpn -LocalNetworkGateway2 $localVpn -ConnectionType IPsec -SharedKey <yourkey>
    
  8. 如果要连接到现有 ExpressRoute 线路,请跳过步骤 8 和 9,直接跳到步骤 10。 配置 ExpressRoute 线路。 有关配置 ExpressRoute 线路的详细信息,请参阅创建 ExpressRoute 线路

  9. 配置基于 ExpressRoute 线路的 Azure 专用对等互连。 有关配置基于 ExpressRoute 线路的 Azure 专用对等互连的详细信息,请参阅配置对等互连

  10. 创建 ExpressRoute 网关。 有关 ExpressRoute 网关配置的详细信息,请参阅 ExpressRoute 网关配置。 GatewaySKU 必须是 StandardHighPerformanceUltraPerformance

    $gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet
    $gwIP = New-AzPublicIpAddress -Name "ERGatewayIP" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -AllocationMethod Dynamic
    $gwConfig = New-AzVirtualNetworkGatewayIpConfig -Name "ERGatewayIpConfig" -SubnetId $gwSubnet.Id -PublicIpAddressId $gwIP.Id
    $gw = New-AzVirtualNetworkGateway -Name "ERGateway" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -IpConfigurations $gwConfig -GatewayType "ExpressRoute" -GatewaySku Standard
    
  11. 将 ExpressRoute 网关连接到 ExpressRoute 线路。 完成此步骤后,则已通过 ExpressRoute 建立本地网络与 Azure 之间的连接。 有关链接操作的详细信息,请参阅 将 VNet 链接到 ExpressRoute

    $ckt = Get-AzExpressRouteCircuit -Name "YourCircuit" -ResourceGroupName "YourCircuitResourceGroup"
    New-AzVirtualNetworkGatewayConnection -Name "ERConnection" -ResourceGroupName $resgrp.ResourceGroupName -Location $location -VirtualNetworkGateway1 $gw -PeerId $ckt.Id -ConnectionType ExpressRoute
    

将点到站点配置添加到 VPN 网关

可以按照以下步骤将点到站点配置添加到共存设置中的 VPN 网关。 若要上传 VPN 根证书,必须以本地方式将 PowerShell 安装到计算机,或者使用 Azure 门户。

  1. 添加 VPN 客户端地址池。

    $azureVpn = Get-AzVirtualNetworkGateway -Name "VPNGateway" -ResourceGroupName $resgrp.ResourceGroupName
    Set-AzVirtualNetworkGateway -VirtualNetworkGateway $azureVpn -VpnClientAddressPool "10.251.251.0/24"
    
  2. 将 VPN 根证书上传到 Azure 用于 VPN 网关。 在此示例中,假定根证书存储在运行以下 PowerShell cmdlet 的本地计算机中,并且你在本地运行 PowerShell。 也可使用 Azure 门户来上传证书。

    $p2sCertFullName = "RootErVpnCoexP2S.cer"
    $p2sCertMatchName = "RootErVpnCoexP2S"
    $p2sCertToUpload=get-childitem Cert:\CurrentUser\My | Where-Object {$_.Subject -match $p2sCertMatchName}
    if ($p2sCertToUpload.count -eq 1){write-host "cert found"} else {write-host "cert not found" exit} 
    $p2sCertData = [System.Convert]::ToBase64String($p2sCertToUpload.RawData)
    Add-AzVpnClientRootCertificate -VpnClientRootCertificateName $p2sCertFullName -VirtualNetworkGatewayname $azureVpn.Name -ResourceGroupName $resgrp.ResourceGroupName -PublicCertData $p2sCertData
    

有关点到站点 VPN 的详细信息,请参阅配置点到站点连接

在 ExpressRoute 和 Azure VPN 之间启用传输路由

如果要在连接到 ExpressRoute 的某个本地网络与另一个连接到站点到站点 VPN 连接的本地网络之间启用连接,则需要设置 Azure 路由服务器

后续步骤

有关 ExpressRoute 的详细信息,请参阅 ExpressRoute 常见问题