Azure ⇔ AWS間のサイト間VPNを試してみる
はじめに
コンサルティング部の川原です。
業務で Azure ⇔ AWS間のVPN接続の検証をする必要が出てきました。 今回は下記のような サイト間 VPN接続環境(BGP無し) を構築して、実際にVPN通信ができることを確認しました。
構築の流れは下記のとおりです。
- 手順1: Azure VPN Gateway 作成まで
- 手順2: AWS VPN Gateway 作成まで
- 手順3: VPN接続設定
- 手順4: 確認
なお、本環境を構築するにあたって下記ブログを大いに参考にさせていただきましたm(_ _)m
手順1:Azure VPN Gateway 作成まで
無料試用版
サブスクリプションの testResourceGroup
リソースグループ配下にリソースを配置していきます。
※サブスクリプション?リソースグループ?という方向けに 入門記事 も書いております。
- 仮想ネットワーク、サブネット作成
- ゲートウェイサブネット作成
- 仮想ネットワークゲートウェイ作成
仮想ネットワーク、サブネット作成
仮想ネットワークのアドレス範囲を 10.0.0.0/16、 サブネットのアドレス範囲を 10.0.0.0/24 としました。
ゲートウェイサブネット作成
仮想ネットワーク ゲートウェイを構成するには、 VNet のゲートウェイ サブネットを作成する必要があります。
とのことなので、
作成した仮想ネットワークのサブネット一覧から +ゲートウェイサブネット
を選択します。
ゲートウェイサブネットのアドレス範囲は 10.0.254.0/24 としました。
仮想ネットワークゲートウェイ作成
仮想ネットワークゲートウェイが Azure側のVPNルータに当たります。
リソースの作成
から「仮想ネットワーク」などと検索して、
仮想ネットワーク ゲートウェイ
を選択します。
下記設定で作成します。 ※デプロイに少し時間がかかります。(私は 20分かかりました)
最後に 作成した仮想ネットワーク ゲートウェイへ関連付けされている グローバルIPの値をメモしておきます。 (AWS VPN Gateway 作成で使用します)
手順2:AWS VPN Gateway 作成まで
次はAWS側の作業です。
- VPC、サブネット作成
- カスタマーゲートウェイ作成
- 仮想プライベートゲートウェイ作成
VPC、サブネット作成
下記 アドレス範囲で作成します。
- VPC CIDR: 10.1.0.0/16
- サブネット CIDR: 10.1.0.0/24
カスタマーゲートウェイ作成
カスタマーゲートウェイは対向側のゲートウェイです。 今回は さきほど作成した Azure VPN Gateway に当たります。
IPアドレス
には、 さきほどメモした Azure側 仮想ネットワークゲートウェイのグローバルIPを入れます。
仮想プライベートゲートウェイ作成
AWS側のVPNルータに当たります。
作成後、 VPCにアタッチ
します。
また、サブネットのルーティング設定を下記のように変更します。
- 送信先:Azure側ローカル (10.0.0.0/24) → ターゲット:作成した仮想プライベートゲートウェイ
- (インターネットゲートウェイへのデフォルトルート追加は任意)
手順3:VPN接続設定
それぞれ VPN Gatewayを作成しました。 次は VPN接続設定を行います。
- AWS側作業:VPN接続設定
- Azure側作業:VPN接続設定
AWS側作業:VPN接続設定
VPN > サイト間のVPN接続
から VPN接続の作成
を選択します。
- 仮想プライベートゲートウェイ: 手順2で作成したものを選択
- カスタマーゲートウェイ: 手順2で作成したものを選択
- 静的IPプレフィックス: 対向(Azure) 側のアドレス範囲 (10.0.0.0/24) を指定
AWSのサイト間 VPN接続はデフォルトで冗長化されており、 2つのトンネル (2つのVPNルータ) が作成されます。
それぞれの VPNルータの設定を取得し、後述のAzure側作業で使用します。
設定のダウンロード
から適当なConfigファイルをダウンロードします。
Configファイルの下記項目をメモしておきます。
IPsec Tunnel #1 のPreShared Key
IPsec Tunnel #1 のAWS側グローバルIP
IPsec Tunnel #2 のPreShared Key
IPsec Tunnel #2 のAWS側グローバルIP
▼以下 「ベンダー: Generic」 の例
IPSec Tunnel #1 ================================================================================ #1: Internet Key Exchange Configuration . . - Pre-Shared Key : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX <--- . . Outside IP Addresses: - Customer Gateway : x.x.x.x - Virtual Private Gateway : A.B.C.D <--- . . IPSec Tunnel #2 ================================================================================ #1: Internet Key Exchange Configuration . . - Pre-Shared Key : XXXXXXXXXXXXXXXXXXXXXXXXXXXXX <--- . . Outside IP Addresses: - Customer Gateway : x.x.x.x - Virtual Private Gateway : A.B.C.D <---
Azure側作業:VPN接続設定
まず AWS側で作成した IPsec Tunnel #1
の接続を確立させるための設定をしてきます。
ローカルネットワークゲートウェイ リソースを作成します。
ローカルネットワークゲートウェイは対向側のゲートウェイです (AWSでいうカスタマーゲートウェイ)。
- IPアドレス:
IPsec Tunnel #1 のAWS側グローバルIP
を記入 - アドレス範囲: 対向 (AWS)側ローカル (10.1.0.0/24) を記入
次に 手順1で作成した仮想ネットワークゲートウェイから 接続 > +追加
を選択します。
- 接続の種類: サイト対サイト (IPsec) を選択
- 共有キー(PSK):
IPsec Tunnel #1 のPreShared Key
を記入
以上で IPsec Tunnel#1
の設定は完了です。
同じ手順で IPsec Tunnel#2
版 ローカルネットワークゲートウェイ・接続も作成します。
手順4:確認
VPN接続が確立しているか確認します。
各コンソールから確認
Azure で 2つ作成した 接続
リソースをそれぞれ見てみます。
それぞれ状態が 接続済み となっていれば OK です。
AWS で作成した サイト間のVPN接続
のトンネル詳細を見てみます。
ステータスが アップ となっていれば OKです。
仮想マシンから確認
各ローカルに仮想マシンをたてて疎通確認をしてみます。 Azure側に Windows Server 2016, AWS側に Amazon Linux 2 をたてます (OSチョイス … 特に理由はありません)。
▼Azure –> AWS:疎通確認
▼AWS –> Azure:疎通確認
- Azureの仮想マシンから AWSの仮想マシンに Ping が飛ぶことを確認しました
- AWSの仮想マシンから Azureの仮想マシンに RDPポート接続ができることを確認しました
※Azure では ICMP通信のみを許可する、といった設定ができないため、 curlコマンドを使った疎通確認を行いました。 (参考: microsoft: セキュリティグループ、 DevelopersIO: TCP通信チェックコマンド)
さいごに
以上、Azure⇔AWS間のサイト間VPN 環境構築でした。
オンプレで同じようなサイト間VPNを実装しようとすると VPNルータのConfigが段々と煩雑になってきて、管理が大変になることが多いです。 そういった面で、マネージドサービスだけでVPN接続ができるのはとても便利に感じました。
補足:Azureのルーティングについて
Azure側の構築をしていて、
ルーティングの設定してないけど、要望通りのルーティングになってるな・・・
と思ったので調べました。
microsoft: 仮想ネットワーク トラフィックのルーティング に情報がありました。 3行でまとめると下記の通りです。
- システムルート が自動的に作成され。各サブネットの既定のルーティングになる
- 仮想ネットワークゲートウェイの追加時などに、 ルートを追加してくれる
- カスタムルート を作成することで システムルートをオーバーライドできる
とのことで、よしなにルーティングを設定してくれる便利な機能のおかげでした。