Azure Site to Site VPNのActive/Active接続とおまけでOracle Cloudと繋げてみた(BGP有効)
はじめに
Azure Site to Site VPN接続において、Active/Active構成でクロスプレミス接続を行う際などには、BGPによる動的ルート交換が必須になっています。
ハイブリッド接続を行う中で、オンプレミスや他のクラウドのネットワーク構成が頻繁に変更されてもBGPを有効にしておくことで、ルーティングテーブルをいちいち手動で更新する必要もないため、ぜひ押さえておきたい機能ですね。
Azure VPN ゲートウェイで、アクティブ/アクティブ S2S VPN 接続を構成する
今回の構成
今回はオンプレミス側の機器を用意できなかったので、Azureの米国西部2リージョンと東日本リージョン間のVNETをActive/Active構成でSite to Site VPN接続を行い、更にOracle Cloudとも単線で繋げてみました。
なぜOracle CloudともActive/Activeでクロスプレミス接続しなかったんだよ?という疑問はあると思いますが、詳細は後述しますがOracle Cloudについてそれほど詳しく無かったのと(今回初めての無料トライアル登録)、IPSecの接続パラメータにAzureとOracle Cloudで差異があって、長時間の接続が維持できなかったからです。
将来はきっと安定してSite to Site VPN接続ができるようになると信じていますが、ExpressRoute接続も気軽にAzure⇔Oracle Cloud間で出来るようになったので、どうでしょうねぇ。
Azure VPN GWの準備
Site01(米国西部2)
VNETの構成は以下の通りです。
defaultサブネット内にVMを立ち上げます。
VPN GWはSKUとしてVpnGw1をActive/Active構成で作成します。VPN GWで必要なPublic IP Addressも2つになります。
BGPを有効にする際に指定するASNですが、64512~65514 および 65521~65534 が可能です。
BGPピアのIPアドレスですが、対向側の設定でAzure既定のピアIPアドレスがそのまま指定できる場合は特にカスタムのARIPA BGP IPアドレスは指定しなくて良いと思いますが、今回Oracle Cloudと接続する際には必要な設定でした。
VPN Gateway では、BGP ピア IP にどのようなアドレスが使用されますか。
実際に指定できるARIPA BGP IPアドレスは169.254.21.*と169.254.22.*の範囲が指定可能なようです。
Site02(東日本)
VNETの構成は以下の通りです。
defaultサブネット内にVMを立ち上げます。
VPN GWはSite01と同じ構成で作成します。ASNは別の値を設定します。
こちらは特にカスタムのAzure ARIPA BGP IPアドレスは未指定です。
Azure ローカルネットワークゲートウェイの準備
Site01(米国西部2)
対向としてSite02(東日本)に接続するためのローカルネットワークゲートウェイリソースを作成します。
クロスプレミス接続を行うのでローカルネットワークゲートウェイも2種類作成して、Site02のActive/Activeなそれぞれの設定を行います。
site02-lngw01
site02-lngw02
Site02(東日本)
対向としてSite01(米国西部2)に接続するためのローカルネットワークゲートウェイリソースを作成します。
Site01で作成したものと同様に、Site02のActive/Activeなそれぞれの設定を行います。
site01-lngw01
site01-lngw02
Azure⇔Azureのコネクション作成
色々と準備が出来たので、Site01(米国西部2)からは、Site02(東日本)に2本コネクションを張ります。
Site02からもSite01に対して2本コネクションを張ります。
暫く待つと、双方向が接続済みになります。
Site01にあるVM(site01vm01)のNICの「有効なルート」(何故かPlatné trasyと表示されていますが)を確認すると、ちゃんとSite02のルート(192.168.200.0/24)が登録されていますね。
Site01のsite01vm01にログイン後、Site02のsite02vm01にpingを飛ばしてみます。
バッチリですね。無論sshでの接続も行えます。
Oracle Cloudとの接続
いや、ここが一番苦労しましたw
なぜなら今回初めてOracle Cloud Free Tierに登録して使ってみたからです。
調べてみると、仮想マシン(コンピュートインスタンス)も低スペックのもの(1Core/1GB Memory)であれば永遠に無料で使えそうです。
1つ驚いたのが、Site to Site VPN接続もデータ転送料金はかかりますが、ゲートウェイ代は無料っぽいです。
仮想ネットワークの作成
とりあえず準備として、仮想ネットワーク(VCN)を作成しました。アドレス空間として192.168.128.0/24を作成後、サブネットとして192.168.128.0/26を作成しました。
仮想マシンの作成
先程作成したVCN内のdefaultサブネット上にインスタンス(ocivm01)を作成しました。VMイメージはUbuntu 20.04です。
今回はネットワークセキュリティ的な部分は無視しました。
顧客構内機器(CPE)の登録
えっと、Azureで言うと、ローカルネットワークゲートウェイみたいなものです。
対向側(Azure)のVPN GWのIPアドレスを登録しておきます。ベンダー指定にAzureは無かったので「Other」を指定しています。
動的ルーティングゲートウェイ(DRG)の作成
Azureでは、各サブネットに自動的にルータ的な機能が追加されて、良しなにルーティングしてくれるのですが、Oracle Cloudの場合、DRGを作成してそれをVCNにアタッチする必要があります。
VPN接続の作成
ネットワーキングメニューから「VPN接続」を選び、「IPSec接続の作成」から作成します。
名前は適当に、CPEには先程作成したAzure側情報を設定したものを選択、DRGも先程作成したものを選択します。
STATIC ROUTE CIDRにはAzure VPN GW側で指定したIPアドレスをベースとしたCIDR(169.254.21.102/31)を指定します。
設定画面中央の「拡張オプションの表示」を押して、トンネル1の設定を行います。
名前は適当に。IKEバージョンは「IKEv2」、BGP ASNはAzure VPN GW側で指定したものを(65531)指定します。
IPv4トンネル内インタフェース(CPE)には 169.254.21.102/31 を、IPv4トンネル内インタフェース(Oracle)には 169.254.21.103/31 を指定しました。
最後に「IPSec接続の作成」で接続(Oracle Cloud→Azure)が行われます。
Azure ローカルネットワークゲートウェイの準備
Oracle Cloud側のプロビジョニングが進んでいる間にAzure側にてOracle Cloudに繋げるためのローカルネットワークゲートウェイを作成しておきます。
oci-lngw
Azure→Oracle Cloudの接続
先程作ったOracle Cloud向けのローカルネットワークゲートウェイを指定して接続します。
暫くすると、Oracle Cloud側のtunnel01のステータスから、IPSecステータスとIPV4 BGPステータスが稼働中になりましたね。
暫くするとAzure側からも状態が接続済みになることが確認できます。
ルートテーブルの設定
Oracle Cloud側のVCN作成時に自動で作成されたルートテーブル内に宛先「0.0.0.0/0」で先に作成したDRGに向けたスタティックルートを追加しました。
これを行うと、VCN内にあるインスタンスから外部に向けた通信が全てDRG経由でAzure側に流れるんだと思います。VCNから直接インターネット向けの通信を行うためには、このルートテーブルにターゲットタイプ「インターネットゲートウェイ」を追加するんだと思うのですが、VPN接続した先のCIDR情報を細かく指定するとBGPの恩恵が受けられなくなりそうで、実際ちゃんと設定する方法がわかりませんでした、ごめんなさい。
接続確認
どうせなら、Oracle Cloud(東京)のインスタンスからAzureのSite01(米国西部2)のVPN GWを経由してSite02(東日本)に接続します。
SIte02にある仮想マシン(site02vm01)上のNICの有効なルートを確認すると、ちゃんとSite01を経由してOracle Cloudのルート情報が広報されてきていますね。
pingもバッチリSite01, Site02両方のVMに届いています。
無論sshもOKです。
残念なお知らせ
Azure⇔Oracle CloudのVPN接続が1時間くらいしたら切れていました。
MSの岡本さんが個人的な記事としてQiitaに書いていただけているのですが、どうやらIPSecパラメータの対応状況に不一致があって、接続が維持できないようです。
詳しいことはわからないのですが、指定できるPFSがAzureとOracle Cloudで異なっているようです。
Oracle CloudはPFSは「グループ5」のみとなっているようですが、これがAzure側で指定不可のようです。
(Azureのほうがこちらに指定可能な値は多いのですが、グループ5(1536-bit, DH)の指定ができない)
Azure側の接続設定で、IPsecおよびIKEポリシーを細かく後からも変更可能なのですが、PFSグループを「None」にしたり、Oracle CloudのGovermentリージョンでは有効となっているPFS2048をダメ元で指定しましたが、結果NGでした。。。
おわりに
Azure⇔Oracle Cloud間はExpressRouteとFastConnectを使って閉域接続するのが良さそうです(個人検証ではちょっと長期間は無理っぽいですが)
ただし、AzureのVPN GWをExpressRoute GW間ではトランジットルーティングが行えないため、悩ましいです。Azure Virtual WANを使えばトランジットルーティング問題も解決するのですが、またコストが跳ね上がってしまいますね。
今回はAzure間でVPNクロスプレミス接続を試しましたが、Azureとオンプレミスとの対向接続においても、結局はBGPを極めればなんとかなるのかなという勝手な想像です(安易)。