こんにちは、クラウドインテグレーション部 技術1課 宮形 です。
AWS の VPC と、Microsoft Azure の VNET をインターネットVPNで接続する検証を行いましたので本BLOGにて紹介します。
構成図としては下記のようになります。今回は BGP などの冗長構成は無しで、1対1のシンプルな接続を検証しました。 リージョンは AWS:東京、Azure:東日本 です。
IPSec での接続となります。下記のパラメーターを双方で情報交換することで VPN 接続することができました。
- AWS と Azure 双方VPNルーターのグローバルIPアドレス
- AWS と Azure 双方で同じ値とする プリシェアードキー
- AWS と Azure 双方プライベートネットワークのCIDR
オンプレミスの場合、異種メーカー同士のVPNルーターで IPSec をする場合は、IKEのバージョン、暗号化アルゴリズム、DHグループなどなどと色々なパラメーターのすり合わせが必要でした。AWS と Azure 間のVPNの場合はこれらは全てデフォルトでOK、拍子抜けする位シンプルでびっくりします。
ただ、実際にやってみると AWS と Azure では VPNルーターを作るときのクセや仕様差異がありました。 一度経験しておくと安心かと思います。ではやってみます。
すでに AWS 側は VPC、サブネット、EC2 が作成されている状態です。Azure 側も同様に、VNET、サブネット、VM が作成されている状態とします。 下記の順番で進めるとやりやすいと思われます。
- Azure ゲートウェイサブネットの作成
- Azure 仮想ネットワークゲートウェイの作成
- Azure 側のグローバルIPアドレス確認
- AWS カスタマーゲートウェイの作成
- AWS 仮想プライベートゲートウェイの作成
- AWS 仮想プライベートゲートウェイのVPCアタッチ
- AWS ルートテーブルの修正
- AWS VPN接続の作成
- AWS 側のグローバルIPアドレスとプリシェアードキーの確認
- Azure ローカルネットワークゲートウェイの作成
- Azure 接続の作成
- AWS VPC と Azure VNET 双方の疎通確認
検証手順
1. Azure ゲートウェイサブネットの作成
最初は Azure 側から作業します。Azureポータルで操作します。 Azure ではVPNルーター相当のVPNゲートウェイを配置するための専用サブネット「ゲートウェイサブネット」を事前に作成する必要があります。 対象 VNET のサブネットの管理画面より作成します。
名前は固定です。サブネットアドレス範囲は、大きいCIDRブロックは不要ですが 27ビットより広くしておくと 後々とエラーや警告が出ません。検証では27ビットとしました。
2. Azure 仮想ネットワークゲートウェイの作成
仮想ネットワークゲートウェイを作成します。 「ゲートウェイの種類:VPN」とします。「VPNの種類:ルートベース」とします。 「ポリシーベース」を選ぶと SKU(スペック)がBASICのみとなってしまうので、通常は選択しないと思います。 SKU(スペック)は安価な「VpnGw1」としました。パブリックIPアドレスをこの画面で新規作成できます。 「アクティブ/アクティブモード」「BGP」は今回は無効とします。
3. Azure 側のグローバルIPアドレス確認
仮想ネットワークゲートウェイが作成されるまで、約40分ほど要しました。 「概要」のページから、グローバルIPアドレスを確認して控えておきます。 まだ Azure 側での作業は残っていますが、ここでいったんAzureポータルとはお別れします。
4. AWS カスタマーゲートウェイの作成
ここからは AWSマネージメントコンソール側の操作となります。 「カスタマーゲートウェイの作成」を始めます。
カスタマーゲートウェイの作成画面では「ルーティング:静的」とし、「IPアドレス」では、先ほど 手順.3 で控えた Azure 側のグローバルIPアドレスを設定します。
5. AWS 仮想プライベートゲートウェイの作成
次に「仮想プライベートゲートウェイの作成」を始めます。
「名前タグ」は任意の値とします。「ASN」は「Amazon のデフォルトASN」としました。 冗長構成とする場合、ASNは注意を払う必要があります。当社先輩の過去ブログをご参照ください。
Transit GatewayやDirect ConnectのAS番号について - サーバーワークスエンジニアブログ
6. AWS 仮想プライベートゲートウェイのVPCアタッチ
作成された仮想プライベートゲートウェイをVPNにアタッチします。Azure で存在した ゲートウェイサブネットという概念はありません。
7. AWS ルートテーブルの修正
アタッチした VPC およびサブネットのルーティングに、Azure VNET 向けのネクストホップを登録します。 ルートテーブルの編集画面で追加します。「ターゲット」を先ほど作成した仮想プライベートゲートウェイとします。
8. AWS VPN接続の作成
次に「VPN接続の作成」を始めます。
この画面では 手順.4 で作成したカスタマーゲートウェイと 手順.5 で作成した仮想プライベートゲートウェイを 紐づけるような操作を行います。設定箇所がたくさんありますが、今回検証では必要最低限の設定としました。 「ルーティングオプション:静的」「静的IPプレフィックス:192.168.0.0/16 (Azure VNET のCIDRブロック)」 「トンネル内部IPバージョン:IPv4」とします。
9. AWS 側のグローバルIPアドレスとプリシェアードキーの確認
作成されたVPN接続の画面より「トンネル詳細」タブをクリックします。「トンネルの状態」の画面に 2つのVPNトンネルが作成され、グローバルIPアドレスも2つ割り当てされていることが確認できます。 今回は冗長構成ではないので、Tunnel1の「外部 IPアドレス」を控えておきます。
VPNに必要となるプリシェアードキーを確認します。「設定のダウンロード」をクリックします。 「設定のダウンロード」というウインドウより、通信機器ベンダー毎の Config サンプルが入手できます。 (これはAWS親切!と思いました) 今回は「ベンダー:Generic」「プラットフォーム:Generic」他デフォルトのまま「ダウンロード」としました。
ダウンロードした Config ファイルを開くと、Tunnel1の「プリシェアードキー」を確認することができます。値を控えておきます。 Tunnel1 と Tunnel2 で値が違いますので注意します。
AWS 側の作業はここでおしまいです。Azure ポータルに移ります。 (補足:プリシェアードキーは自分で設定することも可能です)
10. Azure ローカルネットワークゲートウェイの作成
Azureポータルの操作に戻ります。「ローカルネットワークゲートウェイの作成」を行います。 「IPアドレス」に、手順.9 で確認した AWS 側のグローバルIPアドレスを設定します。 「アドレス空間」には「172.17.0.0/16 (AWS VPC のCIDRブロック)」」を設定します。
「BGP設定の構成」は「いいえ」とします。
11. Azure 接続の作成
次に「接続」を設定します。AWS と似ていて、手順.2で作成した仮想ネットワークゲートウェイと 手順 10. で作成したローカルネットワークゲートウェイを紐づけるような操作となります。
「接続の種類:サイト対サイト」とします。「共有キー(PSK)」では 手順.9 で確認したプリシェアードキーの値を設定します。他の設定は今回はデフォルトのままとします。
Azure 側の設定もここでおしまいです。では VPN の疎通確認を行います。
12. AWS VPC と Azure VNET 双方の疎通確認
AWSマネージメントコンソールの「VPN接続」の画面より、VPN のステータスが確認できます。 「ステータス:アップ」となればOKです。Azureポータルでは「接続」の画面より「状態:接続済み」となればOKです。 設定したあと画面が反映されるまで時間がかかる場合があるので、エラーになっていても焦らず待ちます。 この検証の時は10分ほど待ちました。
AWS側の接続状態
Azure側の接続状態
今回検証では AWS と Azure 両方に仮想マシンを用意しておいたので、双方から ping が飛ぶことを確認します。 検証時は10ms以下で応答が返ってきました。本検証では触れませんが、セキュリティグループや Windowsパーソナルファイアウォールを適切に設定しておきます。 (ここでトラブって30分ほど茫然としたのはヒミツです。。。)
ネットワークの転送速度を図ってみました。サイズの大きいファイルをWindowsファイル共有(SMB)で エクスプローラーからコピーしたところ、650Mbps~700Mbps で転送できました。想像以上に速くて驚きです。
Azure の 仮想ネットワークゲートウェイのSKU VpnGw1 帯域幅 が 650Mbs となっているので、だいたい同じ数値です。 スペックを上げると、もっと速くなるかもしれません。
VPN Gateway の価格 | Microsoft Azure
まとめ
今回、AWS と Azure をVPN接続する検証を行ってみて、感じた点を列記します。
- 先に Azure 側から設定を進めてグローバルIPアドレスが確定した時点から AWS 側を設定した方がよさそうです。 AWS ではグローバルIPアドレスが確定するのが設定作業の終盤です。 AWS カスタマーゲートウェイのIPアドレスは後で変更することが出来ないので、無理にAWS側から進めてしまうと手戻りになります。 (あらかじめAzure側でパブリックIPアドレスを作成して確定しておけば回避できます)
- Azure 側はルートテーブルを意識する必要がなく自動的に VPN 対向先へルーティングされます。 AWS とは考え方が違うことを理解しておくと、Azure メンテナンス担当者との会話がスムーズかと思います。
- AWS 側の VPNトンネル 2つ作成される仕様に合わせる場合、Azure側の仮想ネットワークゲートウェイで アクティブ/アクティブモード を有効化する必要があります。ただし、 Azure の仮想ネットワークゲートウェイはデフォルトでもアクティブ/スタンバイで冗長化はされているので、 万一障害でも長時間ダウンする可能性は低いとは予想されます。下記サイトには切り替わり復旧には 1~3分と記載されています。 https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-highlyavailable どのレベルまでのダウンタイムを許容するかによって、適切に設計を行いたいところです。
- 想像以上に速い応答速度、転送スピードが出たので、十分業務では使えると思いました。
1対1接続でもある程度は冗長化がされており、実測した速度も高速でしたので、 例えばデータベースのレプリケーションや、バックアップ災害対策などにも十分使えると思いました。 皆様のクラウド導入計画の参考になれば幸いです。
最後までご覧いただきありがとうございました。