AWSとオンプレ環境をインターネットVPNのSite to Site(IKEv1)で接続する手順

#背景と雑談
- クラウドVPNの第二弾として、~~自分のメモも兼ねて~~ステップバイステップでAWSとのVPN接続手順を紹介します。
- AWSではVPNを作る度に、pre-shared-keyやAWS側のグローバルIPが変更されます。コスト削減で接続と切断を繰り返す場合はAzureに比べて非常に煩雑なのでご注意ください。
- 余談ですがVPNの接続スピードの上限ですが、AWSは1.25Gbps、Azureは選択式、GCPは3Gbps(上り下りの合計)とのことです。(後述)
- Azure VPN接続手順は以下からご覧ください。  
https://qiita.com/kan_itani/items/0cda4479b61d543c8dde
- GCP版も近日中に作成予定です。


#目次
1. 構成イメージ
2. 事前確認・注意事項
3. AWSのVPC内のネットワーク作成
4. 仮想プライベートゲートウェイ(VGW)の作成
5. VPCに仮想プライベートゲートウェイ(VGW)をアタッチ
6. カスタマーゲートウェイの作成
7. VPNコネクションの作成
8. オンプレ側ルータ設定
9. VPCのルートテーブル設定変更
10. VPCのFirewall設定変更
11. VPNのトンネル状態確認とルーティングテーブル確認
12. 関連情報

#1. 構成イメージ
以下はAzure VPN編で使った構成図ですが、サブネットが違うだけであとは似たような感じなので(←適当すぎる)、そのまま絵を流用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/fb7aaaa2-084c-2b7b-3d9a-74dc2672c090.png)

- 192.168.70.0/24　→　今回は192.168.65.0/24
- 172.16.0.0/16　→　今回は172.31.0.0/16がAWS側のネットワーク
    - 実際にAWS側に存在するサブネットは以下の3つです。  
172.31.0.0/20  
172.31.16.0/20  
172.31.32.0/20

サブネット一覧は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/9f91f26e-3d43-514c-5045-1973979845b2.png)


#2. 事前確認・注意事項
- ネットワーク設計
    - (当たり前ですが)オンプレとAWSでそれぞれサブネットがかぶらないようにネットワークを割り当てます。
    - この手順ではVPC内のネットワーク作成手順は省略します。(デフォルトで3つ作られていたため。)
- ~~VPN接続用の共通パスワードの準備~~
    - 今回の手順ではpre-shared-keyは意識することなく設定できます。(自動生成＆ダウンロードするルーターconfigに含まれているため)
- グローバルIPの確認
    - 事前にオンプレミス側のVPN接続用ルータのグローバルIPを確認します。
    - AWS側は特に意識しなくてもこの手順実施後にダウンロードできるルータコンフィグにグローバルIPが含まれます。
- 接続する回線速度の検討
    - Azureの場合は設定画面でSKUを選ぶことができましたが、AWSは以下のFAQに記載があるように、1.25Gbpsが最大とのことです。  
        https://aws.amazon.com/jp/vpn/faqs/
        - Q: サイト間 VPN 接続の最大スループットはどれくらいですか?
        - A: 各 AWS サイト間 VPN 接続には 2 つのトンネルがあり、各トンネルは最大 1.25 Gbps のスループットをサポートします。VPN 接続が仮想プライベートゲートウェイに接続されている場合、集約されたスループット制限が適用されます。
    - GCPの場合は3Gbps(上りと下りの合計)が性能上限とのことです。  
    Cloud VPN - 割り当てと上限  
    https://cloud.google.com/network-connectivity/docs/vpn/quotas?hl=ja#limits


#3. AWSのVPC内のネットワーク作成
「Subnets」を見るとデフォルトで3つのセグメントが作られていたので、ここでは特に設定しません＆手順は省略します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/915053fe-af2c-52bf-2a01-0c4073350a65.png)

#4. 仮想プライベートゲートウェイ(VGW)の作成
(1) 「Virtual Private Gateways」を選び、「Create Virtual Private Gateway」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/c4c6ffef-5576-d6e9-c552-61692e0ff1cd.png)

(2) VGWのパラメーターを入力
「Name tag」に任意の文字列を入力します。
「ASN」はCustom ASNを選択し、値は既存の他のVPNやDirect Connectで使っていない値を入力します。

 - 16ビットASNは64512～65534のレンジで指定。
 - 32ビットASNは4200000000～4294967294のレンジで指定。   
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/bf796ebe-3c65-cdc0-54e3-0d0181b93b0e.png)

(3) 作成結果を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/edd36818-6d64-af56-28e5-5c4d11bd05d1.png)

#5. VPCに仮想プライベートゲートウェイ(VGW)をアタッチ
(1) アタッチ前のデタッチ
この環境は直前までAWSのDirect Connectを使ってVPCのサブネットとオンプレミスで通信を行っていました。以下の絵にあるように、すでに1つVGWがアタッチされているため、別のVGWはアタッチできません。使わないものを先にデタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/c07f5cf6-c4b4-ff6f-b98c-0a1610ab8771.png)

(2) VPCにVGWをアタッチ
作成したVPN用のVGWを選択し、画面上部の「Actions」から「Attach to VPC」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/7fae484f-b3da-d9f8-8598-7d7e4842f19e.png)

VPCをプルダウンメニューから選択し。「Yes, Attach」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/f194a198-541e-e517-f792-e7a3b56a040e.png)

「attaching」というステータスが「attached」になるまで少しかかるので、次の作業に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/715f0946-58b3-0bd1-18e5-1d3c20e24b25.png)

#6. カスタマーゲートウェイの作成
(1) 「Customer Gateways」→「Create Customer Gateway」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/ceb112f6-34b2-2654-cbc5-73eedb8e50aa.png)

(2) カスタマーゲートウェイの名前を入力し、Routingを「Static」、「IP Address」にオンプレ環境のルータのグローバルIPを入力し、「Create Customer Gateway」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/d3c9a06d-cb10-cdaa-7caf-7b1fbc1c8f30.png)

(3) 作成が成功することを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/25c10433-8890-a752-f1ec-6bd0c2953df9.png)

#7. VPNコネクションの作成
(1) 事前チェック - VGWをVPCにアタッチした結果の確認
VPNコネクションを作成する前に、5．の手順でVGW(Virtual Private Gateway)をVPCにアタッチする作業を行いましたが、それが成功しているか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/6b455301-7f41-7388-9932-141852513e76.png)

(2) 「Site-toSite VPN Connections」→ 「Create VPN Connection」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/910e726b-993d-a5c4-b7de-cdfe364e0065.png)

(3) 各種設定を入力します。

|設定項目| 値 | 備考 |
| --: | :-- | :-- |
|Name tag|任意の文字列||
|Target Gateway Type|Virtual Private Gateway||
|Virtual Private Gateway|作成したものをプルダウンから選択。||
|Customer Gateway|Existing||
|Customer Gateway ID|作成したものをプルダウンから選択。||
|Routing Options|Dynamic (require BGP)||
|Tunnel Inside Ip Version|IPv4||
|Local IPv4 Network Cidr|192.168.65.0/24|オンプレ側のネットワーク|
|Remote IPv4 Network Cidr|172.31.0.0/16|AWS側のネットワーク|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/0e674dbe-66f4-2fb2-0cb1-409c1126de2c.png)


その他「Tunnel Options」はそのままで、「Create VPN Connection」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/a0b1d28c-3a02-8c96-f52d-75ff6091645a.png)


成功したことを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/bee65859-43c8-804c-eb4e-5ea3f90ecd6e.png)

#8. オンプレ側ルータ設定
(1) 直前の手順で「Close」を押下すると以下の画面になるので、「Download Configuration」を選択。
※以下の画面で「State」が「pending」になってますが、そのまま続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/aee7d62f-6e2c-1508-81ba-1fb6b1c95f75.png)


(2) ポップアップ画面でルータ機種を選択し、Configをダウンロード

**※Yamaha RTX1210のConfigをダウンロードする際は、ikev1を選択してください。(2021-10-01時点)** 
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/e8504859-12e2-5a5e-5ab3-a68c8a5e295d.png)

(3) ルータ側にConfigを投入します。
※ 詳細省略


#9. VPCのルートテーブル設定変更
ここまでの手順がうまくいっていると、VPNコネクションの「State」も「available」になりますが、オンプレとAWSはまだ通信ができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/a33d8bb3-79b4-c011-b9e4-753eb540d1de.png)

(1)「Your VPCs」→「Main route table」のルートテーブルをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/1e94f817-5b3a-c2ff-6f4e-9ddb028529f3.png)

(2) ルートテーブルが選択されているので、「Route Propagation」→ 「Edit route propagation」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/97189008-d14c-499b-c6d7-7db8fbfdab16.png)

(3) 「Propagate」をチェック → 「Save」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/4ea1d42e-1513-ba36-e3b2-5a220ecbe38b.png)


#10. VPCのFirewall設定変更
(1) 「Security Group」 → 「Edit inbound rules」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/8c5ab662-8e01-cc52-80a2-1d5983a9ab61.png)

(2) 「Add rule」でオンプレミス環境からの通信を許可する設定を入れて、「Save rules」で保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/5564f9fc-84de-3ab7-a2f8-40aeaae265cd.png)

ここまで終わると、オンプレからpingが通るようになります。

#11. VPNのトンネル状態確認とルーティングテーブル確認
(1) トンネル状態の確認
「Site-to-Site VPN Connection」 → VPNコネクションを選択 → 「Tunnel Details」タブを選択 → 「Status」がUPとなっていることを確認・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/7d8f9bc3-cd16-e5b7-9222-7b3caef0874f.png)

(2) ルーティングテーブル確認
「Route Tables」 → ルートテーブルを選択 → 「Routers」タブを選択 → 下段にオンプレ側のサブネットが表示され、仮想プライベートゲートウェイ(VGW)がTargetになっていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001215/7633b9ed-eb23-10ce-4861-2d8fe63fd9ed.png)


#12. 関連情報

(追記中)