はじめに
積年の夢の実現:リージョン間VPN接続 (Powered by SoftEther)
というポストで『SoftEtherによるAWSリージョン間VPN接続』に触れましたが、その同音異義版である、
『Windowsサーバ&仮想プライベートゲートウェイによるAWSリージョン間VPN接続』について、御本家AWS謹製の記事『Windows Server 2012 R2 のカスタマーゲートウェイとしての設定』を見かけ、飛びついて試してみました☆
(過去にこのアプローチをトライした当時はハマって断念...今正解を見るに、とても自力では辿り着けない世界... (・・;))
この記事に則して、AWS上の2つのリージョンを使って実装してみたところ、アッサリと疎通成功!!
以下、疎通に至ったまでの設定手順を備忘メモ φ(..)
(詳細記述は引用記事に任せることにして、全体の流れと画面コピーを中心に)
環境構成概要
■SG側:VPC=172.16.0.0/16、プライベートIP=172.16.0.100、EIP=XXX.XXX.XXX.XXX
■US側:VPC=10.10.0.0/16、プライベートIP=10.10.12.200
を、IPSec-VPN接続。
※Virutal Private GWはUS側、WindowsサーバはSG(シンガポール)側、にしますよ。
構築手順
- [SG] Windows EC2インスタンスの作成・設定
- [US] カスタマーゲートウェイ(CGW)の作成
- [US] 仮想プライベートゲートウェイ(VGW)作成・RouteTableの設定
- [US] VPNコネクション(VPNC)の作成
- [SG] Windowsサーバの設定
- [SG] ルーティングおよびリモートアクセスサーバの設定・有効化(Windows)
- [SG] VPNトンネルの設定(Windows)
- [SG/US] 疎通確認
1. [SG] Windows EC2インスタンスの作成・設定
※Windowsサーバ側からVPN通信を開始するみたい。Windows EC2側のSecurityGroupのInBoundは調整不要。
2. [US] カスタマーゲートウェイ(CGW)の作成
※CGW/VGW/VPNCの作成手順の詳細は、AWSサイトを参照
3. [US] 仮想プライベートゲートウェイ(VGW)作成・RouteTableの設定
4. [US] VPNコネクション(VPNC)の作成
5. [SG] Windowsサーバの設定
6. [SG] リモートアクセスサーバの設定・有効化(Windows)
7. [SG] VPNトンネルの設定(Windows)
※DLした設定ファイル中のnetshスクリプトをWindowsサーバ上で実行!
-
設定ファイル内の設定項目の補足:
- Local Tunnel Endpoint:SG側のWindowsサーバのEIP ※「XXX.XXX.XXX.XXX」に該当
- Remote Tunnel Endpoint:US側のVGWが持つ(2つの)グローバルIPアドレス
※VPNC作成時に自動付与される - Endpoint 1:SG側のCIDR ※「172.16.0.0/16」に該当
- Endpoint 2:US側のCIDR ※「10.10.0.0/16」に該当
-
ファイアウォールルールの追加設定
※Admin権限で起動したコマンドプロンプトにてnetshコマンドを実行
netsh advfirewall consec add rule Name="VPN to AWS Tunnel 1" ^
Enable=Yes Profile=any Type=Static Mode=Tunnel ^
LocalTunnelEndpoint=172.16.0.100 ^
RemoteTunnelEndpoint=《VGWのグローバルIPアドレス①》 ^
Endpoint1=172.16.0.0/24 ^
Endpoint2=10.10.0.0/16 ^
Protocol=Any Action=RequireInClearOut ^
Auth1=ComputerPSK Auth1PSK=《事前共有キー①》 ^
QMSecMethods=ESP:SHA1-AES128+60min+100000kb ^
ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2
netsh advfirewall consec add rule Name="VPN to AWS Tunnel 2" ^
Enable=Yes Profile=any Type=Static Mode=Tunnel ^
LocalTunnelEndpoint=172.16.0.100 ^
RemoteTunnelEndpoint=《VGWのグローバルIPアドレス②》 ^
Endpoint1=172.16.0.0/24 ^
Endpoint2=10.10.0.0/16 ^
Protocol=Any Action=RequireInClearOut ^
Auth1=ComputerPSK Auth1PSK=《事前共有キー②》 ^
QMSecMethods=ESP:SHA1-AES128+60min+100000kb ^
ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2
- レジストリの追加設定
※Admin権限で起動したコマンドプロンプトにてコマンドを実行
reg add HKLM\System\CurrentControlSet\services\Tcpip\Parameters ^
/v EnableDeadGWDetect /t REG_DWORD /d 1
⇒Regeditで、下記画面のレジストリが追加されていることを確認:
8. [SG/US] 疎通確認
C:\>ping 10.10.12.200
10.10.12.200 に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
10.10.12.200 からの応答: バイト数 =32 時間 =176ms TTL=254
10.10.12.200 からの応答: バイト数 =32 時間 =176ms TTL=254
10.10.12.200 からの応答: バイト数 =32 時間 =176ms TTL=254
10.10.12.200 の ping 統計:
パケット数: 送信 = 4、受信 = 3、損失 = 1 (25% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 176ms、最大 = 176ms、平均 = 176ms
$ ping 172.16.0.100
PING 172.16.0.100 (172.16.0.100) 56(84) bytes of data.
64 bytes from 172.16.0.100: icmp_seq=1 ttl=128 time=176 ms
64 bytes from 172.16.0.100: icmp_seq=2 ttl=128 time=176 ms
64 bytes from 172.16.0.100: icmp_seq=3 ttl=128 time=176 ms
64 bytes from 172.16.0.100: icmp_seq=4 ttl=128 time=176 ms
^C
--- 172.16.0.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 176.363/176.461/176.549/0.076 ms
⇒反応があればOK!!
後記
-
いずれの方法がいいぜというよりは、リージョン間VPN接続スケーラビリティ管理をAWSに任せてラクしたいならVPN Connection、利用料を抑えるならSoftEther等で腹を括って自己責任、という使い分けでしょうか。
-
今回の接続方法だとWindowsサーバ側[SG側]からVPNセッションを張る必要がある模様(US側から最初にPingを打つと疎通しない。SG側から疎通した後なら、US側からのPingも通るようになる)
⇒SG側からUS側に定期的にPingを打ってVPNセッションを維持する、とかでしょうか...? -
VPNトンネルは、通信開始後Upになるのに少し時間がかかる。暫く通信していないとDownする。
-
VPNトンネルは可用性目的で2本張られるが、切り替え(フェールオーバ)はどうやって検証できるのだろうか...