strongSwanとRTX1210の拠点間VPN接続(IKEv2, IPv4 over IPv6)

AWSと自宅の拠点を結ぶため、strongSwanとYAMAHA RTX1210で拠点間VPN接続を行ったので、手順をメモします。IKEv2を利用し、各拠点はIPv6アドレスを持っている想定です。

# 環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/7e7beea1-b5e6-4e35-da6e-34165596c5fa.png)
AWSのSubnet Bに置かれているstrongSwanサーバーと、自宅のRTX1210間でIPSecトンネルを張り、ServerとPC間で相互接続できるようにします。

# strongSwanのインストール
strongSwanのインストールは、過去に記事でまとめたものを参照してください。
https://qiita.com/kerorinfather/items/37aec492f04706d55ade


# strongSwanとYAMAHA RTXの設定値について
### strongSwanの設定値

```
connections {
   net-net {
      local_addrs  = XXXX:XXXX::10 #strongSwanのIPv6アドレス
      remote_addrs = YYYY:YYYY::10 #YAMAHA RTX1210のIPv6アドレス

      local {
         auth = psk #PSK(事前共有鍵)で認証
         id = XXXX:XXXX::10 #strongSwanのIPv6アドレス
      }
      remote {
         auth = psk #PSK(事前共有鍵)で認証
         id = YYYY:YYYY::10 #YAMAHA RTX1210のIPv6アドレス
      }
      children {
         net-net {
            local_ts  = 172.31.0.0/16 #AWS側のCIDR
            remote_ts = 192.168.0.0/24 #自宅側のCIDR
            esp_proposals = aes128-sha256 #CHILD_SAフェーズで利用する認証・暗号化のアルゴリズム
         }
      }
      version = 2 #IKEv2を使用
      mobike = no #よくわからないけど公式サイト見る限りnoでよさそう
      proposals = aes128-sha256-modp2048 #IKE_SAフェーズで利用する認証・暗号化・鍵交換のアルゴリズム
   }
}

secrets {
 ike-1 {
  id = XXXX:XXXX::10 #strongSwanのIPv6アドレス
  secret = "pre-shared-key-password" #事前共有鍵
 }
}
```

`proposals`の値は、strongSwanのデフォルト値がaes128-sha256-modp3072なのですが、YAMAHAルータ側でmodp3072が対応できないため、上記の(modp2048)設定が必要です。
`esp_proposals`はデフォルト値がaes128-sha256であるため、記載しなくても接続できると思います。
`mobike`の設定はテンプレートからの流用ですが、[公式サイト][1]を見る限りnoでよさそう（むしろ明示的にnoと書いたほうがよさそう）であるためそのままにしています。

### YAMAHAルーターの設定値

```
ip route 172.31.0.0/16 gateway tunnel 2  #AWS側のCIDR
tunnel select 2
 ipsec tunnel 101
  ipsec sa policy 101 2 esp #暗号アルゴリズムを使用
  ipsec ike version 2 2 #IKEv2を利用する
  ipsec ike duration ipsec-sa 2 14400  #キー交換の間隔
  ipsec ike duration isakmp-sa 2 14400 #キー交換の間隔
  ipsec ike group 2 modp2048 #IKE_SAフェーズで利用する鍵交換のアルゴリズム
  ipsec ike keepalive use 2 on rfc4306 #keepalive これがないとこちらから接続始動しなかった
  ipsec ike local name 2 YYYY:YYYY::10 ipv6-addr #YAMAHA RTX1210のIPv6アドレス
  ipsec ike pre-shared-key 2 text pre-shared-key-password #事前共有鍵
  ipsec ike remote name 2 XXXX:XXXX::10 ipv6-addr #strongSwanのIPv6アドレス
  ipsec ike negotiation receive 2 off #受信しない
 tunnel enable 2

ipsec auto refresh on #こちらから鍵交換を始動
```

`ipsec ike group`のデフォルト値はmodp1024であるため、明示的にmodp2048を利用するように設定します。[（IKEv2の場合は記述しなくても動くみたいな記載はRTProにありましたが。。。）][4]
`ipsec ike keepalive use 2 on rfc4306`の記載がないと、YAMAHAルータ側から接続にいきませんでした。
`ipsec ike negotiation receive 2 off`の記載があると、strongSwan側からRTXに接続を試みようとすると弾くみたいです。（未検証）

# ルートテーブルの設定
### AWS側
VPCのルートテーブルに、自宅側のCIDR宛の通信をstrongSwanのサーバーに送る処理が必要になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/1fd849cc-95c9-bf7f-7ddd-48d195554df6.png)


### 自宅側
自宅側は、デフォルトゲートウェイがYAMAHAルーターになるため、特に設定は不要です。


# 参考にしたサイト

[IPv6 Configuration Examples - strongSwan][2]
[MOBIKE - strongSwan][1]
[IKEv2 (RTPro)][3]

[1]:https://wiki.strongswan.org/projects/strongswan/wiki/MobIke
[2]:https://wiki.strongswan.org/projects/strongswan/wiki/IPv6Examples
[3]:http://www.rtpro.yamaha.co.jp/RT/docs/ipsec/ike2.html
[4]:http://www.rtpro.yamaha.co.jp/RT/docs/ipsec/ike2.html#command_group