BGP対応のAzure VPN GatewayをPowerShellでデプロイするで作成したBGP対応のVPN GatewayをFortiGateと接続します。FortigateとAWSをIPSecで接続したことがあれば、同じイメージで対応できます。動作確認で利用したFortiGateはFortiGate 50B(v4.0 MR3 Patch 14)です。古いモデルで申し訳ない。
FortiGateを設定する上で注意点が3つあります。具体的には次のとおりです。
- IPsecのパラメータをそろえる
- VPN GatewayのプライベートIPアドレスに対するルーティングを追加する
- eBGP Multihopを有効にする
IPsecのパラメータをそろえる
IPsecは機器間のパラメータが異なるとつながりません。FortinetはFortiGateとAzureをIPsec接続するためのドキュメント(IPsec VPN to Microsoft Azure)を公開しています。このドキュメントに記載されているパラメータで設定します。
VPN GatewayのプライベートIPアドレスに対するルーティングを追加する
FortiGateは、VPN Gatewayに対するBGPパケットをAzureとのIPsecVPNに向けて送信しなければなりません。この条件を達成するためには、FortiGateにVPN GatewayがBGPで利用するIPアドレスのルーティングを追加する必要があります。ルーティングを追加しないと、FortiGateはBGPパケットを明後日の方向に飛ばします。
VPN GatewayがBGPで利用するIPアドレスはプライベートIPアドレスです。デフォルトだと、VPN GatewayのプライベートIPアドレスはGateway Subnetの最後から2つ目になります。実際のIPアドレスはGet-AzureRmVirtualNetworkGatewayやGet-AzureRmVirtualNetworkGatewayBGPPeerStatusで確認できます。
> Get-AzureRmVirtualNetworkGatewayBGPPeerStatus -VirtualNetworkGatewayName $VgwName -ResourceGroupName $RGName
Asn : 65001
ConnectedDuration : 00:41:22.6773460
LocalAddress : 10.1.2.254
MessagesReceived : 48
MessagesSent : 50
Neighbor : 192.168.1.1
RoutesReceived : 0
State : Connected
FortiGateにVPN Gateway用のルーティングを足す方法は次の2つです。
- /32でスタティックルートを書く
- IPsecインタフェースのremote-ipに指定する
edit "azure"
set vdom "root"
set ip 192.168.1.1 255.255.255.255
set type tunnel
set remote-ip 10.1.2.254
set interface "wan2"
next
eBGP Multihopを有効にする
eBGPは直接つながっているルータ間でのみ利用できます。eBGPではBGPパケットのTTLが1だからです。しかし、FortiGateとVPN GatewayはBGPで直接つながることができません。FortiGateとVPN Gatewayを直接つないでいるIPsecトンネルインタフェースにおいて、VPN Gateway側にIPアドレスが設定されていないためです。先ほど確認したVPN GatewayのプライベートIPアドレスはVNet側のIPアドレスです。トンネルインタフェース側ではありません。
直接つながっていないルータ間でeBGPをするために、eBGP Multihopを有効します。
config router bgp
set as 65001
config neighbor
edit "10.1.2.254"
set ebgp-enforce-multihop enable
set next-hop-self enable
set soft-reconfiguration enable
set remote-as 65147
set update-source "azure"
next
end
動作確認
FortiGateはVPN GatewayをBGP neighborとして認識しています。4経路を受信しています。
# get router info bgp summary
BGP router identifier 192.168.1.1, local AS number 65001
BGP table version is 2
2 BGP AS-PATH entries
0 BGP community entries
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.1.2.254 4 65147 234 252 1 0 0 02:39:11 4
Total number of neighbors 1
4経路の内訳は、Vnetに登録した3つのセグメントと、BGP接続したFortiGateIPアドレスでした。いい感じです。
# get router info bgp network
BGP table version is 2, local router ID is 192.168.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 10.1.0.0/16 10.1.2.254 0 0 65147 i
*> 172.16.0.0 10.1.2.254 0 0 65147 i
*> 172.17.0.0 10.1.2.254 0 0 65147 i
*> 192.168.1.1/32 10.1.2.254 0 0 65147 i
*> 192.168.111.0 0.0.0.0 100 32768 i
Total number of prefixes 5
まとめ
「AWSと同じだろ」とドキュメントを読まずにトライした結果、eBGP MultiHopにはまりました。AzureのドキュメントにはeBGP Multihopが必要なことがちゃんと書かれています(PowerShell を使用して Azure VPN Gateway で BGP を構成する方法)。ちゃんとドキュメントに目を通すの大事。