きっかけ
趣味の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と入れると…
- ami-5812e939
- 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は不要にできるのでは。
参考にした設定
- RTX1200側: RTproのIKEv2
- VyOS側: VyOS Wiki
など。
試行錯誤
いろいろ試したが、とにかくつながらなかった。
接続に必要と思われる条件で自分がはまったのは、
- RTX1200のNAMEのtypeを
ipv4-addr
にする (おそらくVyOS側のid
をIPアドレス表記にした場合) - VyOSの
ike-group
にdh-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 name
とremote name
の設定は必須の模様。
tuunel
のMTUはデフォルトで1280? (詳細未確認)
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-exchange
はVyOS 1.1.0のリリースノートではデフォルトがIKEv2とあるが、念のためikev2
を明示。
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への移行