yamaha
ipsec
rtx1200
VyOS
IKEv2

AWSのVyOSとRTX1200をIPsecでつなぐ

More than 1 year has passed since last update.

きっかけ

趣味のAWSで、VPGと家をIPsecでつないだことがあるが、趣味としては結構高くつくと感じ、廃止していた。ハードだし仕方ないな。
しかし、本家マニュアル

VPN アプライアンスを実行する VPC の Amazon EC2 インスタンスを使用して、リモートネットワークへの VPN 接続を作成できます。

という記載を発見。なるほど、これは試す価値があるのでは…。

構成要素

VPNアプライアンス

言葉の意味はよくわからないが、EC2インスタンスなので、仮想ルータということだろう。
家で使っているSEIL/x86を使おうとも思ったが、AWSマーケットプレイスにあるVyOSならお手軽かも。
Vyatta時代に少し使っただけなので、進化も感じておきたい。

AWSマーケットプレイスのVyOS

VyOSで検索しても、出てこない。
ググると、ここへのリンクがあるが、よく見ると

This product is currently unavailable.

とのこと。さらにググると、コミュニティのAMIはある模様。
EC2->インスタンス->コミュニティAMI->検索でVyOS 1.1.7と入れると…

  1. ami-5812e939
  2. ami-69b26e08

の2つが出てくる。何が違うんだ…。勘で1.を選んでみる。

拠点ルータ

スマホとの間でL2TP/IPsecを使っている、RTX1200とつなぐことにする。
RTX1200のバージョンは、最新の10.01.71。

調査

ググると当然色々と情報があるが、2014年〜2015年ごろのものが多い。
また、AWS側をVyOSにする設定例が少ない気もする。
不安が残る。

IKE

RTX1200側のAgressive Modeの関係で、IPIP上にIPsecを張る必要ありという情報もある。
確かにRTproにも

一方のルーターしか固定のグローバルアドレスを持たないときにはアグレッシブモードを使用します。

とある。EC2インスタンスはDHCPでアドレスを取得し、Elastic IPが直接内部インターフェースに割り当たるわけではないので、NATになり、この条件に合いそう。
VyOSがメインモードのみだと、厳しそうだ。

しかし、VyOS 1.1.0のリリースノートを見ると、IKEv2に対応とある。
IKEv2ではアグレッシブモードは無くなったはずなので、上記情報はIKEv1の時の話か。
それでは、IKEv2にしてみたら、IPIPは不要にできるのでは。

参考にした設定

など。

試行錯誤

いろいろ試したが、とにかくつながらなかった。
接続に必要と思われる条件で自分がはまったのは、

  1. RTX1200のNAMEのtypeをipv4-addrにする (おそらくVyOS側のidをIPアドレス表記にした場合)
  2. VyOSのike-groupdh-groupを指定する

といった条件。正確に切り分けていないので、他の要素が問題だったかもしれないが…。

設定例

設定例は抜粋です。

サブネット

192.168.100.0/24がRTX1200側のサブネット、
192.168.200.0/24がVyOS側のサブネット。

IPアドレス

aaa.aaa.aaa.aaaはRTX1200側のグローバルIPアドレス、
bbb.bbb.bbb.bbbはVyOSインスタンスにマッピングされたAWSのElastic IPアドレス。
192.168.200.cccはDHCPで割り当てられるVyOSインスタンスのプライベートIPアドレス。

こちらの情報によると、サブネットの範囲の一部アドレスを予約することはできないのはVPCの仕様の模様。
tunnelはunnumberedにできた。

その他条件

VyOS側がイニシエータ。
EC2インスタンスのVyOSはグローバルIPを持たないので、NAT Traversal。
スタティックルート。

RTX1200側

RTproによると、IKEv2では、local nameremote nameの設定は必須の模様。

tuunelのMTUはデフォルトで1280? (詳細未確認)

RTX1200
ip route 192.168.200.0/24 gateway tunnel 1
:
tunnel select 1
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike version 1 2
  ipsec ike local name 1 aaa.aaa.aaa.aaa ipv4-addr
  ipsec ike nat-traversal 1 on
  ipsec ike pre-shared-key 1 SecretStrings
  ipsec ike remote address 1 any
  ipsec ike remote name 1 bbb.bbb.bbb.bbb ipv4-addr
 ip tunnel tcp mss limit auto
 tunnel enable 1

VyOS側

手動で設定していない項目がshow configで現れるようになった(何で?)が、それもそのまま記載。
pfsは気づいたらenableになっていた気がするので、手動でdisableに。
key-exchangeVyOS 1.1.0のリリースノートではデフォルトがIKEv2とあるが、念のためikev2を明示。

VyOS
set vpn ipsec esp-group ESP-AWS compression 'disable'
set vpn ipsec esp-group ESP-AWS lifetime '3600'
set vpn ipsec esp-group ESP-AWS mode 'tunnel'
set vpn ipsec esp-group ESP-AWS pfs 'disable'
set vpn ipsec esp-group ESP-AWS proposal 1 encryption 'aes128'
set vpn ipsec esp-group ESP-AWS proposal 1 hash 'sha1'
set vpn ipsec ike-group IKE-AWS ikev2-reauth 'no'
set vpn ipsec ike-group IKE-AWS key-exchange 'ikev2'
set vpn ipsec ike-group IKE-AWS lifetime '28800'
set vpn ipsec ike-group IKE-AWS proposal 1 dh-group '2'
set vpn ipsec ike-group IKE-AWS proposal 1 encryption 'aes128'
set vpn ipsec ike-group IKE-AWS proposal 1 hash 'sha1'
set vpn ipsec ipsec-interfaces interface 'eth0'
set vpn ipsec nat-networks allowed-network '192.168.0.0/16'
set vpn ipsec nat-traversal 'enable'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa authentication id 'bbb.bbb.bbb.bbb'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa authentication pre-shared-secret 'SecretStrings'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa authentication remote-id 'aaa.aaa.aaa.aaa'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa connection-type 'initiate'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa default-esp-group 'ESP-AWS'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa ike-group 'IKE-AWS'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa ikev2-reauth 'inherit'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa local-address '192.168.200.ccc'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa tunnel 1 allow-nat-networks 'disable'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa tunnel 1 allow-public-networks 'disable'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa tunnel 1 local prefix '192.168.200.0/24'
set vpn ipsec site-to-site peer aaa.aaa.aaa.aaa tunnel 1 remote prefix '192.168.100.0/24'

VPCの設定

IKEv2とNAT Traversalが通るように、インバウンドのルールにUDPの500番と4500番を通す必要があるが、どうせ固定IPとの間なので、UDPを全部通すようにしてしまった。

宿題

  • VyOS同士…最初これがうまくいかずRTX1200に移行…IKEバージョンが合ってなかった?
  • OSPFを通す
  • show vpn ipsec saなどでNAT-Tがnoになる謎の解明…ESP(50)通るようにしてたっけ?
  • vtiへの移行