OSS

【VyOS】の IPsec (IKEv1/v2) 設定例 on Virtualbox 検証環境

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 のパケットキャプチャ

pcap 形式のファイルはこちらから

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 のパケットキャプチャ

pcap 形式のファイルはこちらから

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]

変更箇所なし

IKEv2 (Dual IPsec SA) のパケットキャプチャ

pcap 形式のファイルはこちらから

コメント

  1. 369 より:

    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
    というメッセージが出てきて失敗してしまいます。
    どうすればいいでしょうか。

    • nesuke より:

      369さん、ご返信遅くなり申し訳ありません。また、ご指摘ありがとうございます。

      確認したところ、どうやら仕様が変わったようです。peer のあとは相手方のホスト名を入れてください。
      また、peer の中に local-id と remote-id の設定も必要となるようです。
      記事も修正しましたので、その内容をそのまま真似すれば疎通ができるはずです。

タイトルとURLをコピーしました