VyOS を使った IPsec の検証
検証環境とやりたいことは以下の通り。Virtual BOX 上に VyOS を3台展開し、ホスト名をそれぞれ vyrtr1 / vyrtr2 / vyrtr3 とし、以下のように IP 設定をしました。
環境を構築するにあたっては各 VyOS は以下の記事のように設定しました。
【VyOS】の基本設定,初期設定, Oracle VM での検証環境設定
VyOS (読み方:ヴィワイオーエス)とは VMware や KVM 等の仮想基...
パケットキャプチャは vyrtr3 上で以下コマンドで取得しました。
vyos@vyrtr1~$ monitor traffic interface eth0 save ipsec.pcap
また、パケットキャプチャ開始直後に以下コマンドで IPsec の再起動を実行しています。
vyos@vyrtr1~$ restart vpn
また、デバッグはリアルタイムではできないようで、以下コマンドで確認します。
vyos@vyrtr1~$ sudo journalctl -b /usr/lib/ipsec/charon
IKEv2 の場合
(2022/11/11) 以下の通り、VyOS 1.4 rolling 2022/11/10 バージョンで動作確認しました。
vyos@vyrtr1:~$ show version Version: VyOS 1.4-rolling-202211100317
設定config (system 部分は省略)
[vyrtr1]
vyos@vyrtr1:~$ show configuration
interfaces {
ethernet eth0 {
address 10.1.1.1/24
description lan1
hw-id 08:00:27:d1:8f:15
}
ethernet eth1 {
address 198.51.100.1/24
description wan1
hw-id 08:00:27:6a:99:9e
}
ethernet eth2 {
address dhcp
description for-ssh
hw-id 08:00:27:d2:b4:59
}
loopback lo {
}
}
protocols {
static {
route 203.0.113.0/24 {
next-hop 198.51.100.3 {
}
}
}
}
service {
ssh {
}
}
vpn {
ipsec {
esp-group rtr1-esp {
lifetime 1800
mode tunnel
pfs enable
proposal 1 {
encryption aes256
hash sha512
}
}
ike-group rtr1-ike {
dead-peer-detection {
action restart
}
ikev2-reauth
key-exchange ikev2
lifetime 3600
proposal 1 {
dh-group 32
encryption aes256
hash sha512
}
}
interface eth1
site-to-site {
peer vyrtr2 {
authentication {
local-id vyrtr1
mode pre-shared-secret
pre-shared-secret ****************
remote-id vyrtr2
}
ike-group rtr1-ike
ikev2-reauth inherit
local-address 198.51.100.1
remote-address 203.0.113.2
tunnel 0 {
esp-group rtr1-esp
local {
prefix 10.1.1.0/24
}
remote {
prefix 10.2.2.0/24
}
}
}
}
}
}
vyos@vyrtr1:~$
[vyrtr2]
vyos@vyrtr2:~$ show configuration
interfaces {
ethernet eth0 {
address 10.2.2.2/24
description lan2
hw-id 08:00:27:ec:d6:2e
}
ethernet eth1 {
address 203.0.113.2/24
description wan2
hw-id 08:00:27:d6:aa:41
}
ethernet eth2 {
address dhcp
description for-ssh
hw-id 08:00:27:3e:b5:78
}
loopback lo {
}
}
protocols {
static {
route 198.51.100.0/24 {
next-hop 203.0.113.3 {
}
}
}
}
service {
ssh {
}
}
vpn {
ipsec {
esp-group rtr2-esp {
lifetime 1800
mode tunnel
pfs enable
proposal 1 {
encryption aes256
hash sha512
}
}
ike-group rtr2-ike {
dead-peer-detection {
action restart
}
ikev2-reauth
key-exchange ikev2
lifetime 3600
proposal 1 {
dh-group 32
encryption aes256
hash sha512
}
}
interface eth1
site-to-site {
peer vyrtr1 {
authentication {
local-id vyrtr2
mode pre-shared-secret
pre-shared-secret ****************
remote-id vyrtr1
}
ike-group rtr2-ike
ikev2-reauth inherit
local-address 203.0.113.2
remote-address 198.51.100.1
tunnel 0 {
esp-group rtr2-esp
local {
prefix 10.2.2.0/24
}
remote {
prefix 10.1.1.0/24
}
}
}
}
}
}
vyos@vyrtr2:~$
[vyrtr3]
vyos@vyrtr3:~$ show configuration
interfaces {
ethernet eth0 {
address 198.51.100.3/24
description wan1
hw-id 08:00:27:a8:b4:12
}
ethernet eth1 {
address 203.0.113.3/24
description wan2
hw-id 08:00:27:3c:a4:c3
}
ethernet eth2 {
address dhcp
description for-ssh
hw-id 08:00:27:98:6a:18
}
loopback lo {
}
}
protocols {
static {
route 10.1.1.0/24 {
next-hop 198.51.100.1 {
}
}
route 10.2.2.0/24 {
next-hop 203.0.113.2 {
}
}
}
}
service {
ssh {
}
}
vyos@vyrtr3:~$
IKEv2 のパケットキャプチャ
IKEv1 の場合
(2022/11/11) 以下の通り、VyOS 1.4 rolling 2022/11/10 バージョンで動作確認しました。
vyos@vyrtr1:~$ show version Version: VyOS 1.4-rolling-202211100317
IKEv2 (Single IPsec SA) の設定から以下の部分だけ変更しました。
[vyrtr1]
delete vpn ipsec ike-group rtr1-ike ikev2-reauth set vpn ipsec ike-group rtr1-ike key-exchange ikev1 set vpn ipsec site-to-site peer 203.0.113.2 ikev2-reauth no
[vyrtr2]
delete vpn ipsec ike-group rtr2-ike ikev2-reauth set vpn ipsec ike-group rtr2-ike key-exchange ikev1 set vpn ipsec site-to-site peer 198.51.100.1 ikev2-reauth no
[vyrtr3]
変更箇所なし
IKEv1 のパケットキャプチャ
show コマンド
ikev2 の場合
vyos@vyrtr1:~$ show vpn ike sa Peer ID / IP Local ID / IP ------------ ------------- 203.0.113.2 198.51.100.1 State IKEVer Encrypt Hash D-H Group NAT-T A-Time L-Time ----- ------ ------- ---- --------- ----- ------ ------ up IKEv2 n/a n/a n/a(n/a) no 660 3600 vyos@vyrtr1:~$ show vpn ipsec sa Connection State Uptime Bytes In/Out Packets In/Out Remote address Remote ID Proposal ------------------------- ------- -------- -------------- ---------------- ---------------- ----------- --------------------------------------- peer-203.0.113.2-tunnel-0 up 1m7s 504B/504B 6/6 203.0.113.2 N/A AES_GCM_16_256/<built-in function hash>
ikev1 の場合
vyos@vyrtr1:~$ show vpn ike sa Peer ID / IP Local ID / IP ------------ ------------- 203.0.113.2 198.51.100.1 State IKEVer Encrypt Hash D-H Group NAT-T A-Time L-Time ----- ------ ------- ---- --------- ----- ------ ------ up IKEv1 aes128 sha1_96 5(MODP_1536) no 1080 3600 vyos@vyrtr1:~$ show vpn ipsec sa Connection State Uptime Bytes In/Out Packets In/Out Remote address Remote ID Proposal ------------------------- ------- -------- -------------- ---------------- ---------------- ----------- ------------------------------------------------- peer-203.0.113.2-tunnel-0 up 2m40s 1008B/1008B 12/12 203.0.113.2 N/A AES_GCM_16_256/<built-in function hash>/MODP_1536
追加検証 : IKEv2 で IPsec SA を2つ以上構築する場合
IKEv2 では IKE_AUTH の中に 1つ目の IPsec SA 構築が含まれるため、CREATE_CHILD_SA のパケットが見えません。そのため、IPsec SA を2つ構築する構成にしてパケットキャプチャを取得してみました。
IKEv2 の設定をベースに、各々以下の設定を追加しました。
[vyrtr1]
set vpn ipsec site-to-site peer 203.0.113.2 tunnel 1 esp-group rtr1-esp set vpn ipsec site-to-site peer 203.0.113.2 tunnel 1 local prefix 10.11.11.0/24 set vpn ipsec site-to-site peer 203.0.113.2 tunnel 1 remote prefix 10.22.22.0/24
[vyrtr2]
set vpn ipsec site-to-site peer 198.51.100.1 tunnel 1 esp-group rtr2-esp set vpn ipsec site-to-site peer 198.51.100.1 tunnel 1 local prefix 10.22.22.0/24 set vpn ipsec site-to-site peer 198.51.100.1 tunnel 1 remote prefix 10.11.11.0/24
[vyrtr3]
変更箇所なし
コメント
vpn ipsec site-to-site peer 対向ip addressのところですが、ip addressを入力すると
Peer connection name must be alphanumeric and can contain hyphen and underscores
Value validation failed
Set failed
というメッセージが出てきて失敗してしまいます。
どうすればいいでしょうか。
369さん、ご返信遅くなり申し訳ありません。また、ご指摘ありがとうございます。
確認したところ、どうやら仕様が変わったようです。peer のあとは相手方のホスト名を入れてください。
また、peer の中に local-id と remote-id の設定も必要となるようです。
記事も修正しましたので、その内容をそのまま真似すれば疎通ができるはずです。