如何為 VPN 閘道設定 BGP: PowerShell

本文可協助您使用 Azure PowerShell 在跨單位站對站 (S2S) VPN 連線和 VNet 對 VNet 連線上啟用 BGP。 如果您不熟悉這種類型的設定,您可能會發現使用本文 Azure 入口網站 版本會比較容易。

BGP 是常用於網際網路的標準路由通訊協定,可交換兩個或多個網路之間的路由和可執行性資訊。 BGP 會啟用 VPN 閘道,以及內部部署 VPN 裝置 (稱為 BGP 對等或鄰近項目) 來交換「路由」,其會通知這兩個閘道對要通過閘道的首碼或所涉及之路由器的可用性和可執行性。 BGP 也可以傳播從一個 BGP 對等互連到所有其他 BGP 對等所識別的 BGP 閘道,來啟用多個網路之間的傳輸路由。

如需 BGP 權益的相關詳細資訊,以及了解使用 BGP 的技術需求和考量,請參閱 關於 BGP 和 Azure VPN 閘道

開始使用

本文的每個部分均構成基本建置組塊,可供在您的網路連線中啟用 BGP。 如果您完成這三個部分 (在閘道、S2S 連線和 VNet 對 VNet 連線上設定 BGP),則會建置拓撲,如圖表 1 所示。 您可以結合這些小節的內容,以建置出更加複雜且能符合您需求的多重躍點傳輸網路。

圖表 1

Diagram showing network architecture and settings.

啟用 VPN 閘道的 BGP

在您可以執行其他兩個設定小節中的任何步驟之前,必須先完成本節的內容。 下列設定步驟會設定 VPN 閘道的 BGP 參數,如圖表 2 所示。

圖表 2

Diagram showing settings for the virtual network gateway.

開始之前

您可以在瀏覽器中使用 Azure Cloud Shell 來執行此練習的步驟。 如果您想要直接從您的電腦使用 PowerShell,請安裝 Azure Resource Manager 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.連接至您的訂用帳戶並建立新的資源群組

請確定您切換為 PowerShell 模式,以使用 Resource Manager Cmdlet。 如需詳細資訊,請參閱 搭配使用 Windows PowerShell 與 Resource Manager

如果您使用 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

Diagram showing IPsec configuration.

請確認您已啟用前一個區段 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。
  • 提醒您,您必須在內部部署網路與 Azure VNet 之間使用不同的 BGP ASN。 在兩者相同的情況下,如果內部部署 VPN 裝置已經使用 ASN 來與其他 BGP 芳鄰建立對等連線,您就需要變更您的 VNet ASN。

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,否則即使已在兩個閘道上設定 BGP 參數,Azure 也不會為此連線啟用 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

幾分鐘後就會建立連線,而一旦建立 IPsec 連線後,BGP 對等工作階段就會啟動。

建立與 BGP 的 VNet 對 VNet 連線

本區段會新增與 BGP 的 VNet 對 VNet 連線,如圖表 4 所示。

圖表 4

Diagram showing full network configuration.

以下指示延續自從上面所列的先前步驟。 您必須先完成 [為您的 VPN 閘道啟用的 BGP] 一節,才能建立並設定 TestVNet1 和搭配 BGP 的 VPN 閘道。

步驟 1:建立 TestVNet2 和 VPN 閘道

請務必確定新虛擬網路 TestVNet2 的 IP 位址空間不會與任何 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

Diagram showing full network

針對內容,參考圖表 4,如果在 TestVNet2 和 TestVNet1 之間停用 BGP,TestVNet2 將不會學習內部部署網路 (Site5) 的路由,因此無法與 Site5 通訊。 一旦您啟用 BGP (如圖表 4 所示),所有三個網路都可以透過 S2S IPsec 和 VNet 對 VNet 連線進行通訊。

下一步

如需 BGP 的詳細資訊,請參閱 關於 BGP 和 VPN 閘道