LoginSignup
1
4

More than 5 years have passed since last update.

[AWS] 積年の夢の続き:リージョン間VPN接続 (powered by Windows Server 2012 R2)

Last updated at Posted at 2017-05-05

はじめに

積年の夢の実現:リージョン間VPN接続 (Powered by SoftEther)
というポストで『SoftEtherによるAWSリージョン間VPN接続』に触れましたが、その同音異義版である、
Windowsサーバ仮想プライベートゲートウェイによるAWSリージョン間VPN接続』について、御本家AWS謹製の記事『Windows Server 2012 R2 のカスタマーゲートウェイとしての設定』を見かけ、飛びついて試してみました☆
(過去にこのアプローチをトライした当時はハマって断念...今正解を見るに、とても自力では辿り着けない世界... (・・;))
この記事に則して、AWS上の2つのリージョンを使って実装してみたところ、アッサリと疎通成功!!

以下、疎通に至ったまでの設定手順を備忘メモ φ(..)
(詳細記述は引用記事に任せることにして、全体の流れと画面コピーを中心に)

環境構成概要

@OVERVIEW.jpg
■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(シンガポール)側、にしますよ。

構築手順

  1. [SG] Windows EC2インスタンスの作成・設定
  2. [US] カスタマーゲートウェイ(CGW)の作成
  3. [US] 仮想プライベートゲートウェイ(VGW)作成・RouteTableの設定
  4. [US] VPNコネクション(VPNC)の作成
  5. [SG] Windowsサーバの設定
  6. [SG] ルーティングおよびリモートアクセスサーバの設定・有効化(Windows)
  7. [SG] VPNトンネルの設定(Windows)
  8. [SG/US] 疎通確認

1. [SG] Windows EC2インスタンスの作成・設定

  • EC2にEIPを付与
  • EC2のSrc./Dest. Checkの無効化
  • Windowsアダプタの設定の更新 ①デバイスマネージャ.jpg

※Windowsサーバ側からVPN通信を開始するみたい。Windows EC2側のSecurityGroupのInBoundは調整不要。

2. [US] カスタマーゲートウェイ(CGW)の作成

※CGW/VGW/VPNCの作成手順の詳細は、AWSサイトを参照
- SG側のWindows EC2のEIPを指定
②CGW.jpg

3. [US] 仮想プライベートゲートウェイ(VGW)作成・RouteTableの設定

  • VGWに紐づける、USからSGへのルーティング設定
    ③VGW-1.jpg

  • VGWのルート伝達を有効化
    ④VGW-2.jpg

4. [US] VPNコネクション(VPNC)の作成

  • 作成済みのCGWとVGWを紐づけるVPNCを作成
    ⑤VPNC.jpg

  • VPNC作成後に設定ファイルをDL
    ⇒IPSecの事前共有キー(Pre-Shared-Key)と、VGWのグローバルIPアドレス(2つ)をゲット。

5. [SG] Windowsサーバの設定

  • 役割(Roles)の追加:「ネットワーク ポリシーとアクセス サービス」&「リモートアクセス」
    ⑥役割.jpg

  • 役割サービスの設定:NPS
    ⑦NPS.jpg

  • 役割サービスの設定:RAS
    ⑧RAS.jpg

  • 役割サービスの設定:IIS (デフォルトのママでOK)
    ⑨IIS.jpg

6. [SG] リモートアクセスサーバの設定・有効化(Windows)

  • リモートアクセス設定①
    ⑩リモートアクセス設定①.jpg

  • リモートアクセス設定②
    ⑪リモートアクセス設定②.jpg

  • リモートアクセス設定③
    ⑫リモートアクセス設定③.jpg

  • リモートアクセス設定④
    ⑬リモートアクセス設定④.jpg

  • リモートアクセス設定⑤
    ⑭リモートアクセス設定⑤.jpg

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で、下記画面のレジストリが追加されていることを確認:
⑮regedit.jpg

8. [SG/US] 疎通確認

SG側
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
US側
$ 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本張られるが、切り替え(フェールオーバ)はどうやって検証できるのだろうか...

  • 次は、VyOS/でやってみたひ。

1
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4