你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何为 VPN 网关配置 BGP:PowerShell
本文介绍如何使用 Azure PowerShell 在跨界站点到站点 (S2S) VPN 连接和 VNet 到 VNet 连接上启用 BGP。 如果不熟悉这种类型的配置,可能会发现使用本文的 Azure 门户版本会更容易。
BGP 是通常在 Internet 上使用的,用于在两个或更多网络之间交换路由和可访问性信息的标准路由协议。 BGP 允许 VPN 网关和本地 VPN 设备(称为 BGP 对等节点或邻居)交换“路由”,这些路由将通知这两个网关这些前缀的可用性和可访问性,以便这些前缀可通过涉及的网关或路由器。 BGP 还可以通过将 BGP 网关从一个 BGP 对等节点获知的路由传播到所有其他 BGP 对等节点来允许在多个网络之间传输路由。
若要详细了解 BGP 优点,以及了解使用 BGP 的技术要求和注意事项,请参阅关于 BGP 和 Azure VPN 网关。
入门
本文帮助你在网络连接中启用 BGP,其中的每一部分都是一个基本构建基块。 如果已完成所有三个部分(在网关上配置 BGP、S2S 连接和 VNet 到 VNet 连接),请如图 1 所示生成拓扑。 可将这些部分组合在一起,生成更复杂的多跃点传输网络来满足需求。
图示 1
为 VPN 网关启用 BGP
需要先完成此部分,才可执行另外两个配置部分中的任何步骤。 以下配置步骤设置 VPN 网关的 BGP 参数,如图 2 中所示。
图示 2
准备阶段
可以在浏览器中使用 Azure Cloud Shell 运行本练习的步骤。 如果你要直接从计算机使用 PowerShell,请安装 Azure 资源管理器 PowerShell cmdlet。 有关安装 PowerShell cmdlet 的详细信息,请参阅如何安装和配置 Azure PowerShell。
创建并配置 VNet1
1.声明变量
对于本练习,我们首先要声明变量。 以下示例使用此练习中的值来声明变量。 如果你要运行每个步骤以熟悉此类配置,可以使用示例变量(订阅名称除外)。 修改任何变量,然后将其复制并粘贴到 PowerShell 控制台中。 请务必在配置生产环境时,使用自己的值来替换该值。
$Sub1 = "Replace_With_Your_Subscription_Name"
$RG1 = "TestRG1"
$Location1 = "East US"
$VNetName1 = "TestVNet1"
$FESubName1 = "FrontEnd"
$BESubName1 = "Backend"
$GWSubName1 = "GatewaySubnet"
$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"
$VNet1ASN = 65010
$DNS1 = "8.8.8.8"
$GWName1 = "VNet1GW"
$GWIPName1 = "VNet1GWIP"
$GWIPconfName1 = "gwipconf1"
$Connection12 = "VNet1toVNet2"
$Connection15 = "VNet1toSite5"
2.连接到订阅并创建新资源组
若要使用资源管理器 cmdlet,请确保切换到 PowerShell 模式。 有关详细信息,请参阅将 Windows PowerShell 与资源管理器配合使用。
如果使用 Azure Cloud Shell,则会自动连接到你的帐户。 如果从计算机使用 PowerShell,请打开 PowerShell 控制台并连接到你的帐户。 使用下面的示例来帮助连接:
Connect-AzAccount
Select-AzSubscription -SubscriptionName $Sub1
New-AzResourceGroup -Name $RG1 -Location $Location1
接下来创建新的资源组。
New-AzResourceGroup -Name $RG1 -Location $Location1
3.创建 TestVNet1
以下示例创建一个名为 TestVNet1 的虚拟网络和三个子网,这三个子网分别名为 GatewaySubnet、FrontEnd 和 Backend。 替换值时,请务必始终将网关子网特意命名为 GatewaySubnet。 如果命名为其他名称,网关创建会失败。
$fesub1 = New-AzVirtualNetworkSubnetConfig -Name $FESubName1 -AddressPrefix $FESubPrefix1
$besub1 = New-AzVirtualNetworkSubnetConfig -Name $BESubName1 -AddressPrefix $BESubPrefix1
$gwsub1 = New-AzVirtualNetworkSubnetConfig -Name $GWSubName1 -AddressPrefix $GWSubPrefix1
New-AzVirtualNetwork -Name $VNetName1 -ResourceGroupName $RG1 -Location $Location1 -AddressPrefix $VNetPrefix11,$VNetPrefix12 -Subnet $fesub1,$besub1,$gwsub1
创建启用了 BGP 的 VPN 网关
1.创建 IP 和子网配置
请求一个公共 IP 地址,以分配给要为 VNet 创建的网关。 还将定义所需的子网和 IP 配置。
$gwpip1 = New-AzPublicIpAddress -Name $GWIPName1 -ResourceGroupName $RG1 -Location $Location1 -AllocationMethod Dynamic
$vnet1 = Get-AzVirtualNetwork -Name $VNetName1 -ResourceGroupName $RG1
$subnet1 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet1
$gwipconf1 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfName1 -Subnet $subnet1 -PublicIpAddress $gwpip1
2.使用 AS 编号创建 VPN 网关
为 TestVNet1 创建虚拟网络网关。 BGP 需要基于路由的 VPN 网关,还需要添加参数 -Asn 来为 TestVNet1 设置 ASN(AS 编号)。 请确保指定 -Asn 参数。 如果未设置 -Asn 参数,则默认分配 ASN 65515(不适用于此配置)。 创建网关可能需要花费一段时间(45 分钟或更久才能完成)。
New-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1 -Location $Location1 -IpConfigurations $gwipconf1 -GatewayType Vpn -VpnType RouteBased -GatewaySku VpnGw1 -Asn $VNet1ASN
创建网关后,可以使用此网关通过 BGP 建立跨界连接或 VNet 到 VNet 连接。
3. 获取 Azure BGP 对等 IP 地址
创建网关后,需要在 VPN 网关上获取 BGP 对等 IP 地址。 需要此地址才能将 VPN 网关配置为本地 VPN 设备的 BGP 对等节点。
使用 CloudShell 时,如果在创建网关时会话超时,你可能需要重新建立变量。
根据需要重新建立变量:
$RG1 = "TestRG1"
$GWName1 = "VNet1GW"
运行以下命令,并记下输出中的“BgpPeeringAddress”值。
$vnet1gw = Get-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1
$vnet1gw.BgpSettingsText
示例输出:
$vnet1gw.BgpSettingsText
{
"Asn": 65010,
"BgpPeeringAddress": "10.12.255.30",
"PeerWeight": 0
}
如果未看到作为 IP 地址显示的 BgpPeeringAddress,则表示网关仍在配置。 请在网关配置完成后重试。
使用 BGP 建立跨界连接
若要建立跨界连接,需要创建本地网络网关来表示本地 VPN 设备,并创建一个连接以将 VPN 网关与本地网关连接在一起,如创建站点到站点连接所述。 以下部分包含指定 BGP 配置参数(如图 3 所示)所需的属性。
图示 3
在继续操作之前,请确保已在上一部分中为 VPN 网关启用了 BGP。
步骤 1:创建和配置本地网关
1.声明变量
此练习将继续生成图中所示的配置。 请务必将值替换为要用于配置的值。 例如,需要获取 VPN 设备的 IP 地址。 对于本练习,如果你暂时不打算连接到 VPN 设备,则可以替换为某个有效的 IP 地址。 稍后可以替换 IP 地址。
$RG5 = "TestRG5"
$Location5 = "West US"
$LNGName5 = "Site5"
$LNGPrefix50 = "10.51.255.254/32"
$LNGIP5 = "4.3.2.1"
$LNGASN5 = 65050
$BGPPeerIP5 = "10.51.255.254"
关于本地网关参数,有几个事项需要注意:
- 本地网关可以与 VPN 网关在相同或不同的位置和资源组中。 此示例演示它们在不同位置的不同资源组中。
- 需要为本地网关声明的前缀是 VPN 设备上的 BGP 对等节点 IP 地址中的主机地址。 在此示例中,它是“10.51.255.254/32”中的 /32 前缀。
- 如果使用 BGP 连接到此网络,则也可以将前缀留空。 Azure VPN 网关会在内部将 BGP 对等节点 IP 地址的路由添加到相应的 IPsec 隧道。
- 提醒一下,在本地网络与 Azure VNet 之间必须使用不同的 BGP ASN。 如果它们是相同的,则需要更改 VNet ASN(如果本地 VPN 设备已使用该 ASN 与其他 BGP 邻居对等互连)。
2.为 Site5 创建本地网关
在创建本地网络网关之前创建资源组。
New-AzResourceGroup -Name $RG5 -Location $Location5
创建本地网关。 请注意本地网关的两个附加参数:Asn 和 BgpPeerAddress。
New-AzLocalNetworkGateway -Name $LNGName5 -ResourceGroupName $RG5 -Location $Location5 -GatewayIpAddress $LNGIP5 -AddressPrefix $LNGPrefix50 -Asn $LNGASN5 -BgpPeeringAddress $BGPPeerIP5
步骤 2:连接 VNet 网关和本地网关
1.获取这两个网关
$vnet1gw = Get-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1
$lng5gw = Get-AzLocalNetworkGateway -Name $LNGName5 -ResourceGroupName $RG5
2.创建 TestVNet1 到 Site5 的连接
在此步骤中,创建从 TestVNet1 到 Site5 的连接。 必须指定“-EnableBGP $True”,以便为此连接启用 BGP。 如前所述,同一 VPN 网关可以同时具有 BGP 连接和非 BGP 连接。 除非在连接属性中启用了 BGP,否则 Azure 不会为此连接启用 BGP,即使已在这两个网关上配置了 BGP 参数。
根据需要重新声明变量:
$Connection15 = "VNet1toSite5"
$Location1 = "East US"
然后,运行以下命令:
New-AzVirtualNetworkGatewayConnection -Name $Connection15 -ResourceGroupName $RG1 -VirtualNetworkGateway1 $vnet1gw -LocalNetworkGateway2 $lng5gw -Location $Location1 -ConnectionType IPsec -SharedKey 'AzureA1b2C3' -EnableBGP $True
本地设备配置
下面的示例列出了可在本地 VPN 设备上的 BGP 配置节中为此练习输入的参数:
- Site5 ASN : 65050
- Site5 BGP IP : 10.51.255.254
- Prefixes to announce : (for example) 10.51.0.0/16
- Azure VNet ASN : 65010
- Azure VNet BGP IP : 10.12.255.30
- Static route : Add a route for 10.12.255.30/32, with nexthop being the VPN tunnel interface on your device
- eBGP Multihop : Ensure the "multihop" option for eBGP is enabled on your device if needed
连接在几分钟后建立,且 BGP 对等会话在建立 IPsec 连接后启动。
使用 BGP 建立 VNet 到 VNet 连接
此部分将添加使用 BGP 的 VNet 到 VNet 连接,如图 4 中所示。
图示 4
以下说明延续前面的步骤。 必须首先完成为 VPN 网关启用 BGP 部分中的步骤,才能使用 BGP 创建和配置 TestVNet1 和 VPN 网关。
步骤 1:创建 TestVNet2 和 VPN 网关
必须确保新虚拟网络的 IP 地址空间 TestVNet2 不与任何 VNet 范围重叠。
在本示例中,虚拟网络属于同一订阅。 可在不同订阅之间设置 VNet 到 VNet 连接。 有关详细信息,请参阅配置 VNet 到 VNet 连接。 请确保在创建连接时添加“-EnableBgp $True”,以启用 BGP。
1.声明变量
请务必将值替换为要用于配置的值。
$RG2 = "TestRG2"
$Location2 = "East US"
$VNetName2 = "TestVNet2"
$FESubName2 = "FrontEnd"
$BESubName2 = "Backend"
$GWSubName2 = "GatewaySubnet"
$VNetPrefix21 = "10.21.0.0/16"
$VNetPrefix22 = "10.22.0.0/16"
$FESubPrefix2 = "10.21.0.0/24"
$BESubPrefix2 = "10.22.0.0/24"
$GWSubPrefix2 = "10.22.255.0/27"
$VNet2ASN = 65020
$DNS2 = "8.8.8.8"
$GWName2 = "VNet2GW"
$GWIPName2 = "VNet2GWIP"
$GWIPconfName2 = "gwipconf2"
$Connection21 = "VNet2toVNet1"
$Connection12 = "VNet1toVNet2"
2.在新资源组中创建 TestVNet2
New-AzResourceGroup -Name $RG2 -Location $Location2
$fesub2 = New-AzVirtualNetworkSubnetConfig -Name $FESubName2 -AddressPrefix $FESubPrefix2
$besub2 = New-AzVirtualNetworkSubnetConfig -Name $BESubName2 -AddressPrefix $BESubPrefix2
$gwsub2 = New-AzVirtualNetworkSubnetConfig -Name $GWSubName2 -AddressPrefix $GWSubPrefix2
New-AzVirtualNetwork -Name $VNetName2 -ResourceGroupName $RG2 -Location $Location2 -AddressPrefix $VNetPrefix21,$VNetPrefix22 -Subnet $fesub2,$besub2,$gwsub2
3.使用 BGP 参数为 TestVNet2 创建 VPN 网关
请求一个公共 IP 地址,以分配给要为 VNet 创建的网关,并定义所需的子网和 IP 配置。
声明变量。
$gwpip2 = New-AzPublicIpAddress -Name $GWIPName2 -ResourceGroupName $RG2 -Location $Location2 -AllocationMethod Dynamic
$vnet2 = Get-AzVirtualNetwork -Name $VNetName2 -ResourceGroupName $RG2
$subnet2 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet2
$gwipconf2 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfName2 -Subnet $subnet2 -PublicIpAddress $gwpip2
使用 AS 编号创建 VPN 网关。 必须替代 VPN 网关上的默认 ASN。 连接的 VNet 的 ASN 必须不同,才能启用 BGP 和传输路由。
New-AzVirtualNetworkGateway -Name $GWName2 -ResourceGroupName $RG2 -Location $Location2 -IpConfigurations $gwipconf2 -GatewayType Vpn -VpnType RouteBased -GatewaySku VpnGw1 -Asn $VNet2ASN
步骤 2:连接 TestVNet1 和 TestVNet2 网关
在此示例中,这两个网关位于同一订阅中。 可以在同一 PowerShell 会话中完成此步骤。
1.获取这两个网关
根据需要重新建立变量:
$GWName1 = "VNet1GW"
$GWName2 = "VNet2GW"
$RG1 = "TestRG1"
$RG2 = "TestRG2"
$Connection12 = "VNet1toVNet2"
$Connection21 = "VNet2toVNet1"
$Location1 = "East US"
$Location2 = "East US"
获取这两个网关。
$vnet1gw = Get-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1
$vnet2gw = Get-AzVirtualNetworkGateway -Name $GWName2 -ResourceGroupName $RG2
2.创建两个连接
在此步骤中,将创建从 TestVNet1 到 TestVNet2 的连接,以及从 TestVNet2 到 TestVNet1 的连接。
TestVNet1 到 TestVNet2 的连接。
New-AzVirtualNetworkGatewayConnection -Name $Connection12 -ResourceGroupName $RG1 -VirtualNetworkGateway1 $vnet1gw -VirtualNetworkGateway2 $vnet2gw -Location $Location1 -ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3' -EnableBgp $True
TestVNet2 到 TestVNet1 的连接。
New-AzVirtualNetworkGatewayConnection -Name $Connection21 -ResourceGroupName $RG2 -VirtualNetworkGateway1 $vnet2gw -VirtualNetworkGateway2 $vnet1gw -Location $Location2 -ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3' -EnableBgp $True
重要
请确保为这两个连接启用 BGP。
完成这些步骤后,将在几分钟后建立连接。 完成 VNet 到 VNet 连接后,BGP 对等互连会话将运行。
如果已完成此练习的所有三个部分,则已建立以下网络拓扑:
图示 4
有关上下文,请参考图 4。如果在 TestVNet2 和 TestVNet1 之间禁用了 BGP,则 TestVNet2 不会获知本地网络 Site5 的路由,因此无法与 Site5 进行通信。 启用 BGP 后,如图 4 所示,所有三个网络都将能够通过 S2S IPsec 和 VNet 到 VNet 连接进行通信。
后续步骤
有关 BGP 的详细信息,请参阅关于 BGP 和 VPN 网关。