Transit Gatewayを使ってAWS Site-to-Site VPNを構築

オンプレミス（オンプレミスと見立てたVPC）とAWSを拠点間VPNで接続する環境を構築する。
オンプレミスのVPNサーバーはWindows Serverで構築する。
参考資料では、仮想プライベートゲートウェイを使って拠点間VPNを構築していたが、代わりにTransit Gatewayを使って作成してみた。

# 参考
* カスタマーゲートウェイデバイスとしての Windows Server - https://docs.aws.amazon.com/ja_jp/vpn/latest/s2svpn/customer-gateway-device-windows.html

# 環境
以下のような環境を構築する。

![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/0862c76e-02b3-f2ba-fba7-1437cb0823f4.png)

* オンプレミス
 * ネットワーク - 172.31.0.0/16
 * ルートテーブルの設定 - 0.0.0.0/0 Internet Gateway, 172.31.0.0/16 VPNサーバー, 172.31.0.0/16 local
 * セキュリティグループ - ICMP、RDPを許可する。
 * VPNサーバー - Windows Server 2019
* AWS
 * ネットワーク - 10.0.0.0/16
 * ルートテーブルの設定 - 172.31.0.0/16 Transit Gateway, 10.0.0.0/16 local
 * セキュリティグループ - 172.31.0.0/16からのICMP、SSHを許可する。

# 手順

## 準備

* VPNサーバーをWindows Serverで構築する。
* Windows ServerにElastic IPを割り当てる。
* AWSマネージメントコンソールでEC2のインスタンス画面を開く。一覧よりWindows Serverのインスタンスを選択し、[アクション] > [ネットワーク] > [ソース/宛先チェック]を開き、設定を無効に変更する。
![sdcheck.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/c0f1763b-040c-e913-6f81-b34a28926145.png)
* Windows Serverにリモートデスクトップ接続し、[コントロールパネル] > [デバイスマネージャー]を開いて、ネットワークアダプターのChecksum OffloadをDisabledに設定する。
![ChecksumOffload.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/29335257-885c-f400-b6d1-737fbd553727.png)
IPv4 Checksum Offload = Disabled<br>
TCP Checksum Offload (IPv4) = Disabled<br>
UDP Checksum Offload (IPv4) = Disabled<br>

## AWS側の設定

* Customer Gatewayを作成する。Windows ServerのパブリックIPアドレスをセットする。
![CustomerGateway.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/7488c44a-072c-1d86-f882-16348298f62e.png)
* Transit Gatewayを作成する。
![TransitGateway.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/eff1fc6b-b6a4-cc7b-a34e-c7f78b7b4d85.png)
* AWSとオンプレミスそれぞれに対して、Transit Gateway attachmentsを作成する。
![TGWattachments.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/a834b7f3-8509-0f9e-a7a5-3b00fcdf0f30.png)
* Transit GatewayルートテーブルにAWSとオンプレミスのルートを登録する。
![TGWRouteTables.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/ae8e8d69-84c5-a76d-7da6-ea62c59bf6ca.png)
* VPCのルートテーブルにも互いのネットワークへのルートを登録する。
オンプレミス
![RouteTable1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/a7958b36-d07c-27d7-3e3d-78b6ca7c0669.png)
AWS
![RouteTable2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/fce8a15e-1661-f0c2-c033-6f3a1c54dc54.png)
* サイト間のVPN接続を作成する。
![VPN.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/7837a888-6b24-cba4-14d1-db3d1f220aac.png)
* Windows Server 2012R2用の設定ファイルをダウンロードする。

## オンプレミス側の設定
* Windows Serverを設定する。
* ダウンロードした設定ファイルにnetshスクリプトが含まれているので、必要なプレースホルダー（[]で囲まれた文字列）を置換し、Windows Serverで実行する。
![script.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/ba9ec8ac-47d8-780b-9c38-108218b0bc20.png)
[Windows_Server_Private_IP_address] = 172.31.0.104<br>
[Your_Static_Route_IP_Prefix] = "172.31.0.0/16"<br>
[Your_VPC_CIDR_Block] = "10.0.0.0/16"

# テスト

* テスト用インスタンスをAwSネットワークに作成する。
* Windows Serverからテスト用インスタンスにpingを送信し、返事が返ってくることを確認する。
![ping.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/8ee5714c-86b6-4b22-7db1-e7eab8f354b3.png)
何度か実行すると返事が返ってくるようになる。
* Windows Serverからテスト用インスタンスにSSH接続できることを確認する。
![ssh.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703970/c6f13459-781c-2eef-c804-05848d365eec.png)