Azure Site to Site VPNのActive/Active接続とおまけでOracle Cloudと繋げてみた(BGP有効)

2020年12月18日

はじめに

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を立ち上げます。

アドレス空間192.168.100.0/24
サブネット(default)192.168.100.0/26
サブネット(GatewaySubnet)192.168.100.192/28

VPN GWはSKUとしてVpnGw1をActive/Active構成で作成します。VPN GWで必要なPublic IP Addressも2つになります。

BGPを有効にする際に指定するASNですが、64512~65514 および 65521~65534 が可能です。

どのプライベート AS 番号を使用できますか。

BGPピアのIPアドレスですが、対向側の設定でAzure既定のピアIPアドレスがそのまま指定できる場合は特にカスタムのARIPA BGP IPアドレスは指定しなくて良いと思いますが、今回Oracle Cloudと接続する際には必要な設定でした。

VPN Gateway では、BGP ピア IP にどのようなアドレスが使用されますか。

実際に指定できるARIPA BGP IPアドレスは169.254.21.*と169.254.22.*の範囲が指定可能なようです。

SKUVpnGw1
アクティブ/アクティブモード有効
BGPの構成有効
ASN65531
カスタムのAzure ARIPA BGP IPアドレス169.254.21.102
2番目のカスタムのAzure ARIPA BGP IPアドレス169.254.21.104

Site02(東日本)

VNETの構成は以下の通りです。
defaultサブネット内にVMを立ち上げます。

アドレス空間192.168.200.0/24
サブネット(default)192.168.200.0/26
サブネット(GatewaySubnet)192.168.200.192/28

VPN GWはSite01と同じ構成で作成します。ASNは別の値を設定します。
こちらは特にカスタムのAzure ARIPA BGP IPアドレスは未指定です。

SKUVpnGw1
アクティブ/アクティブモード有効
BGPの構成有効
ASN65532

Azure ローカルネットワークゲートウェイの準備

Site01(米国西部2)

対向としてSite02(東日本)に接続するためのローカルネットワークゲートウェイリソースを作成します。
クロスプレミス接続を行うのでローカルネットワークゲートウェイも2種類作成して、Site02のActive/Activeなそれぞれの設定を行います。

IPアドレスSite02の1番目のPublic IP Address (例: 20.194.174.100)
アドレス空間Site02の1番目のBGPピアリングIPアドレス空間 (例: 192.168.200.196/32)
BGP設定の構成有効
ASNSite02で指定したASN (例: 65532)
BGPピアのIPアドレスSite02の1番目のBGPピアリングIPアドレス (例: 192.168.200.196)
site02-lngw01
IPアドレスSite02の2番目のPublic IP Address (例: 20.194.174.113)
アドレス空間Site02の2番目のBGPピアリングIPアドレス空間 (例: 192.168.200.197/32)
BGP設定の構成有効
ASNSite02で指定したASN (例: 65532)
BGPピアのIPアドレスSite02の1番目のBGPピアリングIPアドレス (例: 192.168.200.197)
site02-lngw02

Site02(東日本)

対向としてSite01(米国西部2)に接続するためのローカルネットワークゲートウェイリソースを作成します。
Site01で作成したものと同様に、Site02のActive/Activeなそれぞれの設定を行います。

IPアドレスSite01の1番目のPublic IP Address (例: 52.183.1.248)
アドレス空間Site01の1番目のBGPピアリングIPアドレス空間 (例: 192.168.100.196/32)
BGP設定の構成有効
ASNSite01で指定したASN (例: 65531)
BGPピアのIPアドレスSite01の1番目のBGPピアリングIPアドレス (例: 192.168.100.196)
site01-lngw01
IPアドレスSite01の2番目のPublic IP Address (例: 52.183.28.10)
アドレス空間Site01の2番目のBGPピアリングIPアドレス空間 (例: 192.168.100.197/32)
BGP設定の構成有効
ASNSite01で指定したASN (例: 65531)
BGPピアのIPアドレスSite01の1番目のBGPピアリングIPアドレス (例: 192.168.100.197)
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接続もデータ転送料金はかかりますが、ゲートウェイ代は無料っぽいです。

Oracle Networking Cloudの価格

仮想ネットワークの作成

とりあえず準備として、仮想ネットワーク(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に繋げるためのローカルネットワークゲートウェイを作成しておきます。

IPアドレスOracle Cloud側のVPN GW Public IP Address (例: 140.204.10.62)
アドレス空間Oracle Cloud側のBGPピアリングIPアドレス空間 (例: 169.254.21.102/31)
BGP設定の構成有効
ASNOracle Cloud側で割り当てられたASN (例: 31898)
BGPピアのIPアドレスOracle Cloud側のBGPピアリングIPアドレス (例: 169.254.21.103)
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パラメータの対応状況に不一致があって、接続が維持できないようです。

AzureとOCIでサイト間(S2S)VPNをやってみた

詳しいことはわからないのですが、指定できる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を極めればなんとかなるのかなという勝手な想像です(安易)。