AWS Azure

AzureとAWSを接続してみようと思うけどどうやるの?

はじめに

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

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

VPNを利用するには

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

参考:http://msdn.microsoft.com/ja-jp/library/azure/jj156007.aspx

今回の構成する環境はAzure側を192.168.2.0/24のセグメントとし、AWS側を192.168.1.0/24としています。

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の準備

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

仮想ネットワークの設定方法を順番に見ていきます。
[新規]→[仮想ネットワーク]→[カスタム作成]

[名前]には適当に仮想ネットーワークに名前をつけます。
場所は[日本(東)]を選択します。仮想ネットーワークが作成される場所であり、基本的にはどこでも問題ないです。

(fomってなんだよw)

DNSの設定を行いますが、自前で持っていないのでGoogleのパブリックDNSを利用します。
[サイト間VPNの構成]にチェックを入れます。
[ローカルエリアネットワーク]は[新しいローカルネットワークを指定する]にを選択します。

新しいローカルエリアを作成します。
今回は[名前]にはAWSと名前を付けます。
AWS側の192.168.1.0/24を指定し、[VPNデバイスのIPアドレス]にはWindowsインスタンスのEIP:54.64.124.53を指定します。

Azure仮想ネットワーク側のIPアドレスを指定します。
今回は192.168.2.0/24を指定します。またsubnetには192.168.2.0/26とし、ゲートウェイを192.168.2.64/29としました。
以上で仮想ネットーワークの作成は完了です。

仮想ネットワーク作成完了後、ゲートウェイの作成を行う必要があります。AWSと接続が行うためです。

[ゲートウェイの作成]をクリックし、[動的ルーティング]を選択します。

作成中は下記のように表示されます。
20分程度かかります。

ゲートウェイが作成が完了すると[ゲートウェイIPアドレス]が表示されます。
ゲートウェイIPアドレスは、後でAWS側のセキュリティグループを設定に利用します。

AWS側にWindows Serverで利用するデバイス構成スクリプトをダウンロードします。
ダッシュボードの概要から、[VPNデバイススクリプトのダウンロード]をクリックします。

ダウンロードするスクリプトを選択します。
[ベンダー]で[Microsoft Corporation]を選択します。
[プラットフォーム]で[RRAS]を選択します。
[オペレーティングシステム]で[Windows Server 2012 R2]を選択します。
VpnDeviceScript.cfgがダウンロードされます。

これで、Azure側の準備は完了です。

AWS側でRRASを構築する

次にAWS側でRRASの構築を行います。
接続するためにセキュリティグループのポリシーを設定します。
Azure側へポートを解放します。

もっと参考:https://forums.aws.amazon.com/thread.jspa?messageID=487251

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

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

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

PS C:UsersAdministrator> 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:UsersAdministrator> C:UsersAdministratorDesktopVpnDeviceScript.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:UsersAdministratorDesktopVpnDeviceScript.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側のゲートウェイへPingを打ち疎通確認を行います。
ゲートウェイIPアドレスは192.168.2.64/29の範囲で設定されます。

また、Azure側でも接続も確認します。

以上でAzureとの接続設定は完了です。

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

AWS VPC内(192.168.1.0/24)からAzure(192.168.2.0/24)への通信を行えるようルーティングの設定を行います。

また、Source/Destination CheckをDisabledにします。

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

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

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

スループットを計測する

仮想ネットーワークのスループットは100Mbpsと制限があります。ご注意ください。
http://blogs.msdn.com/b/windowsazurej/archive/2014/06/18/blog-expressroute-or-virtual-network-vpn-whats-right-for-me.aspx

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

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

以上で安定したスループットを計測できました。

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

まとめ

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

-AWS, Azure
-, , ,