はじめに

cloudpackくどうです。2015年初投稿です。

クラウド間で接続して相互に接続し、データのやり取り、移行を行う機会が増えてくるでしょう。
そこで、AzureとAWSをセキュアに、そして簡単に相互接続する方法を紹介します。

VPNを利用するには

クラウド間を結ぶ場合、Vyatta、OpenVPNなど利用して接続する場合があります。
しかし、Azureは便利なもので、Azure仮想ネットーワークとWindowsServerの「ルーティングとリモートアクセスサービス(RRAS)」を利用して簡単に接続することができます。接続形式はIPSec(IKEv2)になります。では、接続方法を紹介していきます。

参考: 仮想ネットワーク | Windows Azure のテクニカル ドキュメント ライブラリ

今回の構成する環境はAzure側を 192.168.2.0/24 のセグメントとし、AWS側を 192.168.1.0/24 としています。
AzureとAWSを接続してみようと思うけどどうやるの?: 構成図

AWSの準備

Windows Serverのインスタンスを立ち上げる

Azure仮想ネットワークに接続を行うため、AWS側にWindowsServerを準備します。
仮想ネットワークで利用できるOSはWindows Server 2012/2012R2になります。
そのため用意するインスタンス立ち上げる際には、以下のAMIを利用します。

  • Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-201x.xx.xx
  • Windows_Server-2012_RTM-Japanese-64Bit-Base-201x.xx.xx

特に問題がなければWindow Server 2012R2を利用します。
セキュリティグループは、この時点ではRDPのみ設定します。
インスタンスを立ち上げ後は、ログインできることは確認しておきましょう。

また、構成図のようにEIPを割り当てます。今回の振り当てるEIP:54.64.124.53となっています。

Azureの準備

仮想ネットワークを設定する

仮想ネットワークの設定方法を順番に見ていきます。
新規仮想ネットワークカスタム作成
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(1)

名前 には適当に仮想ネットーワークに名前をつけます。
場所は 日本(東) を選択します。仮想ネットーワークが作成される場所であり、基本的にはどこでも問題ないです。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(2)
(fomってなんだよw)

DNSの設定を行いますが、自前で持っていないのでGoogleのパブリックDNSを利用します。
サイト間VPNの構成 にチェックを入れます。
ローカルエリアネットワーク新しいローカルネットワークを指定する にを選択します。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(3)

新しいローカルエリアを作成します。
今回は 名前 には AWS と名前を付けます。
AWS側の 192.168.1.0/24 を指定し、VPNデバイスのIPアドレス にはWindowsインスタンスのEIP: 54.64.124.53 を指定します。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(4)

Azure仮想ネットワーク側のIPアドレスを指定します。
今回は 192.168.2.0/24 を指定します。またsubnetには 192.168.2.0/26 とし、ゲートウェイを 192.168.2.64/29 としました。
以上で仮想ネットーワークの作成は完了です。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(5)

仮想ネットワーク作成完了後、ゲートウェイの作成を行う必要があります。AWSと接続が行うためです。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(6)

ゲートウェイの作成 をクリックし、動的ルーティング を選択します。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(7)

作成中は下記のように表示されます。
20分程度かかります。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(8)

ゲートウェイが作成が完了すると ゲートウェイIPアドレス が表示されます。
ゲートウェイIPアドレスは、後でAWS側のセキュリティグループを設定に利用します。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(9)

AWS側にWindows Serverで利用するデバイス構成スクリプトをダウンロードします。
ダッシュボードの概要から、 VPNデバイススクリプトのダウンロード をクリックします。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(10)

ダウンロードするスクリプトを選択します。
ベンダー で Microsoft Corporation を選択します。
プラットフォームRRAS を選択します。
オペレーティングシステムWindows Server 2012 R2 を選択します。
VpnDeviceScript.cfg がダウンロードされます。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureの準備(11)
これで、Azure側の準備は完了です。

AWS側でRRASを構築する

次にAWS側でRRASの構築を行います。
接続するためにセキュリティグループのポリシーを設定します。
Azure側へポートを解放します。
AzureとAWSを接続してみようと思うけどどうやるの?: AWS側でRRASを構築(1)
もっと参考:AWS Developer Forums: VPC with Windows RRAS

事前に立ち上げたWindowsインスタンスにログインします。
ログイン後、WindowsUpdateおよび、ファイヤーウォールを無効にしておきます。
ダウンロードした VpnDeviceScript.cfg を実行することでRRASが構築されVPN接続可能な構成になります。

VpnDeviceScript.cfg はPowershellスクリプトです。
コピーした後に、拡張子cfgをps1に変更します。

PowerShellを起動します。
最初に実行セキュリティポリシーを変更します。

PS C:\Users\Administrator> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y

コピーした VpnDeviceScript.cfg を実行します。が最後にこけます。

PS C:\Users\Administrator> C:\Users\Administrator\Desktop\VpnDeviceScript.ps1

Success Restart Needed Exit Code  Feature Result


TrueNo Success{リモート アクセス} TrueNo Success{RAS 接続マネージャー管理キット (CMAK), Di... 警告: IPv6 が有効になっていません。IPv6 を有効にするには、Set-VpnIpAddressAssignment コマンドレットで IPv6Prefix パラメーターに有効なプレフィックスか FE80::/64 を指定してください。 警告: リモート アクセス サービスの再起動後に構成パラメーターが変更されます。 警告: サービス 'Routing and Remote Access (RemoteAccess)' の停止を待っています... 警告: サービス 'Routing and Remote Access (RemoteAccess)' の停止を待っています... 警告: サービス 'Routing and Remote Access (RemoteAccess)' の停止を待っています... Connect-VpnS2SInterface : ルーティングおよびリモート アクセス サーバーは構成されていないか、実行されていません。 発生場所 C:\Users\Administrator\Desktop\VpnDeviceScript.ps1:92 文字:1 + Connect-VpnS2SInterface -Name 104.41.184.35 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (PS_VpnS2SInterface:root/Microsoft/...VpnS2SInterface) [Connect-VpnS2SInterface], CimException + FullyQualifiedErrorId : HRESULT 800703bc,Connect-VpnS2SInterface

こけても、問題はありません。最後にVPN接続を行う時に失敗しエラーになります。
スクリプト内の最後の行に Connect-VpnS2SInterface が発行されますが、 Restart-Service RemoteAccess によるリスタートが終わらずこの問題が発生しています。 Restart-Service RemoteAccess の後に Start-Sleep -s 10 など10秒程度スリーブすると問題なく終了できます。

~~~~省略~~~~

Restart the RRAS service

Restart-Service RemoteAccess

Start Sleep 10s

Start-Sleep -s 10

Dial-in to Azure gateway

Connect-VpnS2SInterface -Name 104.41.184.35

スクリプト発行後にルーティングとリモートアクセスを立ち上げます。
設定を確認してみます。
Azure側のIPアドレス 104.41.184.35 の名前が付いたインターフェースがあり状態が 有効 、接続状態 接続 になっていることが確認できます。
AzureとAWSを接続してみようと思うけどどうやるの?: AWS側でRRASを構築(2)

静的ルーティングが設定されていることも確認します。
AzureとAWSを接続してみようと思うけどどうやるの?: AWS側でRRASを構築(3)

Azure側のゲートウェイへPingを打ち疎通確認を行います。
ゲートウェイIPアドレスは 192.168.2.64/29 の範囲で設定されます。

また、Azure側でも接続も確認します。
AzureとAWSを接続してみようと思うけどどうやるの?: AWS側でRRASを構築(4)
以上でAzureとの接続設定は完了です。

Azureへのルーティングを設定

AWS VPC内( 192.168.1.0/24 )からAzure( 192.168.2.0/24 )への通信を行えるようルーティングの設定を行います。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureへのルーティングを設定(1)

また、 Source/Destination CheckDisabled にします。
AzureとAWSを接続してみようと思うけどどうやるの?: Azureへのルーティングを設定(2)

AWS側でデモ用のインスタンスを立ち上げます。
セキュリティグループはRRASと通信できるようそれぞれをdefaultグループに所属させます。
AWS側デモ用インスタンスからゲートウェイIPアドレスへPingを打ち疎通できることを確認します。

Azure側でもデモ用仮想マシンを立ち上げ確認を行います。
それぞれのインスタンス同士が疎通できることを確認します。
Windowsファイヤーウォールは切っておきましょう。

以上で、ルーティングの設定は完了です。

スループットを計測する

仮想ネットーワークのスループットは100Mbpsと制限があります。ご注意ください。
ExpressRoute と Virtual Network VPN の使い分け – Microsoft Azure Japan Team Blog (ブログ) – Site Home – MSDN Blogs

そこで、AzureとAWS(RRAS)で最適なインスタンスサイズを検証した結果

  • Azure側→A2インスタンス以上
  • AWS(RRAS)側→t2.smallインスタンス以上

以上で安定したスループットを計測できました。
AzureとAWSを接続してみようと思うけどどうやるの?: スループットを計測

もし安定しない場合はAWS側のインスタンスサイズを上げましょう。

まとめ

今回はAzureとAWSを繋げ、スループットを確認しました。まぁまぁVPNでこれくらい出ればいいかな。
次は、さくらのクラウドなんかとマルチサイトで繋げてみよう・・・かな。

元記事はこちらです。
AzureとAWSを接続してみようと思うけどどうやるの?