AWS Site to Site VPN with NAT-T and IKEv2

#ルータ配下のRTX830でIKEv2トンネルのVPN接続
##この記事について
NATトラバーサル環境のCustomer Gateways(CGW)からIKEv2で接続する構成を構築した際、思いのほか情報が少なかったので作業の内容をまとめました。

##今回の構成図
![IKEv2-S2S-VPN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71534/3620bfc8-9d68-e4a9-8db1-d22c71dab3a6.png)


* CGWはNAPTルータ配下へ設置し、ローカルIPアドレスを採番
* オンプレ側拠点のインターネット接続ルータはLAN側からWAN側へステートフル通信が可能
* Tunnel1 はIKEv2、Tunnel2 はIKEv1で接続
* AWS Virtual Gateway(VGW)とCGWの経路交換はBGPで行い、CGWから広報された経路はVPCのルーティングテーブルへプロパゲート

##使用機器
* RTX830

##RTX830設定
###Tunnel1 IKEv2
```config:Tunnel1-IKEv2
tunnel select 1
 ipsec tunnel 201
  ipsec sa policy 201 1 esp aes256-cbc sha256-hmac
  ipsec ike version 1 2
  ipsec ike duration ipsec-sa 1 3600
  ipsec ike duration isakmp-sa 1 28800
  ipsec ike encryption 1 aes256-cbc
  ipsec ike group 1 modp1536
  ipsec ike hash 1 sha256
　ipsec ike keepalive log 1 on
  ipsec ike keepalive use 1 on rfc4306 10 3
  ipsec ike local name 1 "CGW_Local_Ip-Address" ipv4-addr
  ipsec ike nat-traversal 1 on type=2
  ipsec ike pfs 1 on
  ipsec ike message-id-control 1 on
  ipsec ike pre-shared-key 1 text "Tunnel1_Pre-Shared_Key"
  ipsec ike remote name 1 "Tunnel1_VGW-IP-Address" ipv4-addr
  ipsec ike negotiation receive 1 off
  ipsec auto refresh 1 on
 ipsec tunnel outer df-bit clear
 ip tunnel address 169.254.216.206/30
 ip tunnel remote address 169.254.216.205
 ip tunnel tcp mss limit auto
 tunnel enable 1
```
###Tunnel2 IKEv1
```config:Tunnel2-IKEv1
tunnel select 2
 ipsec tunnel 202
  ipsec sa policy 202 2 esp aes-cbc sha-hmac
  ipsec ike duration ipsec-sa 2 3600
  ipsec ike encryption 2 aes-cbc
  ipsec ike group 2 modp1024
  ipsec ike hash 2 sha
  ipsec ike keepalive use 2 on dpd 10 3
  ipsec ike local address 2 10.1.0.32
  ipsec ike local id 2 10.1.0.32
  ipsec ike nat-traversal 2 on type=2
  ipsec ike pfs 2 on
  ipsec ike pre-shared-key 2 text "Tunnel2_Pre-Shared_Key"
  ipsec ike remote address 2 "Tunnel2_VGW-IP-Address"
 ipsec tunnel outer df-bit clear
 ip tunnel address 169.254.168.154/30
 ip tunnel remote address 169.254.168.153
 ip tunnel tcp mss limit 1379
 tunnel enable 2
```
###NATトラバーサル設定（IKEv2、IKEv1 共通）
* ipsec ike nat-traversal "tunnel ID" on type=2
    * RTXをナットトラバーサルでVGWへVPN接続する際の設定
 
###IKEv2設定
* ipsec ike version 1 2
    * IKEのバージョンをTunnel1で「2」に指定
* ipsec ike local name 1 "CGW_Local_Ip-Address" ipv4-addr
    * v1は「ike local address」で指定するがv2は「ike local name」で設定
* ipsec ike negotiation receive 1 off
    * 鍵交換の始動パケット受信をoffに設定、VGWからの鍵交換始動パケットを受け取らない
    * VGWをレスポンダ、RTXをイニシエータとして設定
* ipsec ike keepalive use 1 on rfc4306 10 3
    * AMCからダウンロードできる設定例に記載されるDead Peer Detection(DPD)でのトンネルの通信断検知はIKEv2では自動再接続しないため「rfc4306」を指定
* ipsec ike keepalive log 1 on
    * IKEキープアライブのログ出力をONに設定
* ipsec ike message-id-control 1 on
    * RTXからIKEv2 のリクエストメッセージを送信するときのメッセージ ID 管理方法を設定

##AWS Management Console（AMC）からの接続確認
![Tunnel1-2_Status-Up.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71534/a4d2625a-a174-41f6-f6f8-eaa758d76aef.png)
![Tunnel1-2_Option.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71534/97caf5ff-f7b9-8b8c-25fd-1fb606cc6cbf.png)

##まとめ
IKEv2とIKEv1の接続で設定方法の異なる箇所がありますが、NATトラバーサル環境でISAKMP、IPSec 両方のSAが確立され、正常なBGP経路交換、およびAWSとオンプレ間のデータ通信が確認できました。

##参考URL
IKE キープアライブ機能の設定
http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_ike_keepalive_use.html
IPsec DPD
http://www.rtpro.yamaha.co.jp/RT/docs/ipsec/dpd.html
鍵交換の始動パケットを受信するか否かの設定
http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_ike_negotiation_receive.html
Microsoft AzureとのIPsec接続(IKEv2) 設定例
http://www.rtpro.yamaha.co.jp/RT/docs/windows_azure/index_ikev2.html
IKEv2 VPN トンネルネゴシエーションが AWS VPN で失敗する理由を教えてください
https://aws.amazon.com/jp/premiumsupport/knowledge-center/vpc-enable-ikev2-vpn-tunnel-negotiation/
18.44 IKE のメッセージ ID 管理の設定
http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_ike_message-id-control.html