RTX1200とstrongSwanをIPsecトンネルモードでVPN接続する
概要
昨年11月、CentOS 6
がサポート終了となりました。
良い機会なので、長年使ってきたVPSの踏み台サーバをUbuntu 20.04
に入れ替えることに。正月で暇だし。
さらについでにVPN周りも一新させて、鍵交換プロトコルをIKEv2に変更したりしました。
AWSとオンプレのVPN接続とかを業務でやっているし余裕だろう、と思っていたらこれで丸一日潰れました。
全体像については、↑の画像をご参照ください。
自宅側
- WAN側: AAA.com
- LAN側のIP: 192.168.1.1
- CIDR: 192.168.1.0/24
VPS側
- WAN側: BBB.com
- LAN側のIP: 192.168.2.1
- CIDR: 192.168.2.0/24
RTX1200
tunnel select 1 ipsec tunnel 1 ipsec sa policy 1 1 esp aes256-cbc sha256-hmac ipsec ike version 1 2 ipsec ike always-on 1 on ipsec ike encryption 1 aes256-cbc ipsec ike group 1 modp2048 ipsec ike hash 1 sha256 ipsec ike keepalive log 1 off ipsec ike keepalive use 1 on rfc4306 ipsec ike local name 1 192.168.1.1 ipv4-addr ipsec ike nat-traversal 1 on ipsec ike pre-shared-key 1 text PRE_SHARED_KEY ipsec ike remote address 1 BBB.com ipsec ike remote name 1 192.168.2.1 ipv4-addr ipsec auto refresh 1 on
IKEv2ではipsec ike (local|remote) name
の設定が必須。
それ以外に関しては、基本はヤマハさんが良い感じにやってくれます。
例えば、キープアライブに関しても勝手に対応してくれるっぽい。
IKEv2 で対応していない方式 ( 書式 ) が設定されている場合は、代替方式として RFC4306 で動作する
http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_ike_keepalive_use.html
strongSwan
LinuxにてIPsecを実装するとなればOpenswanが有名ですが、2021年現在、strongSwanのほうが元気あるようです。
基本的な操作は、swanctlを使うことになります。
strongSwanのIKEデーモンcharonを制御するVICIと呼ばれる独自インターフェースの実装です。
$ sudo swanctl --version strongSwan swanctl 5.8.2
swanctlで操作する以上、これまで使っていたipsec.conf
は使えないもよう。
なので/etc/swanctl/conf.d/rtx1200.conf
というようなファイルを作成することにしました。
swanctl.conf
への移行はわかりにくい公式ドキュメントを参考に頑張る。
とりあえず必要最小限の設定を。
connections { gw-gw { version = 2 local_addrs = BBB.com remote_addrs = AAA.com proposals = aes256-sha256-modp2048,default local { auth = psk id = 192.168.2.1 } remote { id = 192.168.1.1 auth = psk } children { net-net { esp_proposals = aes256-sha256-modp2048,default local_ts = 192.168.2.0/24 remote_ts = 192.168.1.0/24 mode = tunnel start_action = start close_action = start } } } } secrets { ike-1 { secret = "PRE_SHARED_KEY" } }
接続の開始
# strongswanを起動 $ sudo systemctl start strongswan-starter.service # サービス自動起動 $ sudo systemctl enable strongswan-starter.service # IKE_SA・CHILD_SAを表示 $ sudo swanctl -l
start_action = start
にしているので、strongswan起動と同時にSAが作成されます。
その他
正直なところ、奥が深すぎて理解に苦しみました。特にIKE、つらい。
自分でVPN構築するのは本当に大変だなあと。いや、AWSのSite-to-Site VPNが楽すぎるだけか。
IKEv2についてはRFC 5996に全て書いてあるので、本気で困ったらいつか読もうと思う。
素晴らしすぎるスライドも。すごく勉強になりました、神に感謝。
www.slideshare.net