Alibaba Cloud VPN GWとCisco仮想ルータ間でIPSec VPN

# 背景
IKEv2を推してくる若者がいる。だからおっさんも勉強開始。我らがAlibaba CloudもVPN-GWはIKEv2サポート。対抗は物理ルータが手元にないし、まあ趣味の領域なのでAWSのmarketplaceのCSR(CISCO Cloud Services Router)のFree trial版でやってみよう。NAT配下の物理C社ルータも同じような設定で動くんじゃなかろうか、、、というわけで、よくありそうな

- IKEv2
- NATありの環境
- C社ルータとの接続

を試してみる。

# 環境
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/097c808d-d4bb-3537-8bbe-90d100d9804e.png)
CSRはVPC配下なのでEIPでNATされる。綺麗に動けば自動的にNAT traversalで動くはず。

# AWS側準備
AWSでCiscoのCSR trialイメージを使ったEC2を立ち上げる。（省略）
そして以下のパラメータは控えておく。
1. **EIP**:　Alibaba Cloud側から見たCustomer gatewayのアドレスとなる
2. **Private IP**:　Alibaba Cloud側から見たRemote ID
3. **Subnet**:　IPSecでの保護対象のCIDRとなる 

# Alibaba Cloud側準備
## VPN Gatewayの作成 
Alibaba Cloud側の接続ポイントを定義。「VPN gatewayの作成」ボタンを押す。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/e6d87b3c-bcc0-0c4c-7658-3453be3e85f9.png)

とりあえず日本リージョンを選ぶ。VPCが複数あるなら適切なVPCを選択。１時間10円ぐらいだし、とりあえず購入。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/edbc275c-36e4-9a1c-4e52-0ad0f7814687.png)

適切に操作すればVPN Gatewayが作成され、 **Global IP** がアサインされる。これがAlibaba Cloud側のID件接続先IPになるので、メモしておく
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/3e2be3f6-b8b0-951e-8291-ad6b57f6a937.png)

## Customer Gatewayの作成 
次に「カスタマーゲートウェイ」作成へ進む。Allibaba Cloudから見た接続先を定義。必要な情報接続先のグローバルIP(ここではAWSのEIP)と名称ぐらい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/5da2e988-13d9-f10d-3e1e-eea8303bc2fb.png)

## IPSec Connectionの作成
接続の両端とパラメータを指定して接続。
1. 名前：なんでも。
2. VPN Gateway:先ほど定義したVPN Gatewayが出てくるので選択する。
3. カスタマーゲートウェイ：先ほど定義したCustomer Gatewayが出てくるので選択する
4. ローカルネットワーク：IPSecで使うAlibaba側のCIDR。vSwitch　のアドレス。ここでは172.24.0.0/16 
5. リモートネットワーク：IPSecで使う、AlibabaCloudから見て接続先にあるCIDR。ここではAWSのサブネット　のアドレス。ここでは10.128.0.0/16
6. ここではIKEv2を設定するため、「高度な構成」をon
7. 事前共有鍵：PSK(pershared key)を記載する。ここではalitest
8. バージョン：ike2
8. Localid：Alibaba CloudのVPN GWのグローバルIPアドレスを記載。
9. Remoteid:CSRの**Private IP**を記載する。 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/b755bb2a-7833-b401-ee79-7f80a7459b28.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/d718b690-fca8-389d-0887-65cc66028307.png)

## Routing の設定
VPCのRouting TableへAWSのCIDR（ここではA）のNexthopとして、先ほど作成したVPC-GWを指定する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/4e6f92e8-d11d-cb2e-b992-e542e5e20796.png)

# 再びAWS側準備へ
Alibaba Cloud側のVPN GWのアドレスへのIKE/IPSecパケットがAWSのセキュリティポリシー上ドロップされている可能性がそこそこ高いので、適切にACLを設定

# CSR(CISCO仮想ルータの設定)


```
! SNIP
crypto ikev2 proposal Proposal2Ali 
 encryption aes-cbc-128
 integrity sha1
 group 2
!
crypto ikev2 policy Policy2Ali 
 match address local 10.128.0.57
 proposal Proposal2Ali
!
crypto ikev2 keyring keys
 peer Alibaba
  address 47.91.xx.xx
  pre-shared-key local alitest
  pre-shared-key remote alitest
 !
!
!
crypto ikev2 profile Profile2Ali
 match identity remote address 47.91.xx.xx 255.255.255.255 
 authentication remote pre-share
 authentication local pre-share
 keyring local keys
!
!
!
!
! 
!
!
!
!
!
!
!
crypto ipsec transform-set TS esp-aes esp-sha-hmac 
 mode tunnel
!
!
!
!
crypto map cmap 10 ipsec-isakmp 
 set peer 47.91.xx.xx
 set transform-set TS 
 set ikev2-profile Profile2Ali
 match address cryptoacl
!
ip access-list extended cryptoacl
 permit ip 10.128.0.0 0.0.0.63 172.24.0.0 0.0.255.255

! SNIP
```
# とりあえず接続完了
## Cisco側
```
ip-10-128-0-57#show crypto ipsec sa        

interface: GigabitEthernet1
    Crypto map tag: cmap, local addr 10.128.0.57

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (10.128.0.0/255.255.0.0/0/0)
   remote ident (addr/mask/prot/port): (172.24.0.0/255.255.0.0/0/0)
   current_peer 47.91.xx.xx port 4500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 18, #pkts encrypt: 18, #pkts digest: 18
    #pkts decaps: 18, #pkts decrypt: 18, #pkts verify: 18
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 10.128.0.57, remote crypto endpt.: 47.91.xx.xx
     plaintext mtu 1422, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet1
     current outbound spi: 0x●●●●●●●●(●●●●●●●●)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0x●●●●●●●●(●●●●●●●●)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel UDP-Encaps, }
        conn id: 3475, flow_id: CSR:1475, sibling_flags FFFFFFFF80000048, crypto map: cmap
        sa timing: remaining key lifetime (k/sec): (4608000/2726)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: spi: 0x●●●●●●●●(●●●●●●●●)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel UDP-Encaps, }
        conn id: 3476, flow_id: CSR:1476, sibling_flags FFFFFFFF80000048, crypto map: cmap
        sa timing: remaining key lifetime (k/sec): (4608000/2726)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:
ip-10-128-0-57#ping 172.24.189.251
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.24.189.251, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/5 ms
ip-10-128-0-57#
```
## Alibaba Cloud 側
AlibabaCloudのIPSec connectionで「フェーズ２成功」と出ればOK
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/ef963f8f-3875-f232-99b1-2d1706ce734c.png)