1 How to connect VPP instances using IKEv2
2 ========================================
4 This section describes how to initiate IKEv2 session between two VPP instances
5 using Linux veth interfaces and namespaces.
8 Create veth interfaces and namespaces and configure it:
11 sudo ip link add ifresp type veth peer name ifinit
12 sudo ip link set dev ifresp up
13 sudo ip link set dev ifinit up
15 sudo ip netns add clientns
16 sudo ip netns add serverns
17 sudo ip link add veth_client type veth peer name client
18 sudo ip link add veth_server type veth peer name server
19 sudo ip link set dev veth_client up netns clientns
20 sudo ip link set dev veth_server up netns serverns
22 sudo ip netns exec clientns \
25 ip addr add 192.168.5.2/24 dev veth_client
26 ip addr add fec5::2/16 dev veth_client
27 ip route add 192.168.3.0/24 via 192.168.5.1
28 ip route add fec3::0/16 via fec5::1
31 sudo ip netns exec serverns \
34 ip addr add 192.168.3.2/24 dev veth_server
35 ip addr add fec3::2/16 dev veth_server
36 ip route add 192.168.5.0/24 via 192.168.3.1
37 ip route add fec5::0/16 via fec3::1
44 sudo /usr/bin/vpp unix { \
45 cli-listen /tmp/vpp_resp.sock \
47 api-segment { prefix vpp } \
48 plugins { plugin dpdk_plugin.so { disable } }
51 Configure the responder
55 create host-interface name ifresp
56 set interface ip addr host-ifresp 192.168.10.2/24
57 set interface state host-ifresp up
59 create host-interface name server
60 set interface ip addr host-server 192.168.3.1/24
61 set interface state host-server up
64 ikev2 profile set pr1 auth shared-key-mic string Vpp123
65 ikev2 profile set pr1 id local ipv4 192.168.10.2
66 ikev2 profile set pr1 id remote ipv4 192.168.10.1
68 ikev2 profile set pr1 traffic-selector local ip-range 192.168.3.0 - 192.168.3.255 port-range 0 - 65535 protocol 0
69 ikev2 profile set pr1 traffic-selector remote ip-range 192.168.5.0 - 192.168.5.255 port-range 0 - 65535 protocol 0
71 create ipip tunnel src 192.168.10.2 dst 192.168.10.1
72 ikev2 profile set pr1 tunnel ipip0
73 ip route add 192.168.5.0/24 via 192.168.10.1 ipip0
74 set interface unnumbered ipip0 use host-ifresp
80 sudo /usr/bin/vpp unix { \
81 cli-listen /tmp/vpp_init.sock \
83 api-segment { prefix vpp } \
84 plugins { plugin dpdk_plugin.so { disable } }
89 create host-interface name ifinit
90 set interface ip addr host-ifinit 192.168.10.1/24
91 set interface state host-ifinit up
93 create host-interface name client
94 set interface ip addr host-client 192.168.5.1/24
95 set interface state host-client up
98 ikev2 profile set pr1 auth shared-key-mic string Vpp123
99 ikev2 profile set pr1 id local ipv4 192.168.10.1
100 ikev2 profile set pr1 id remote ipv4 192.168.10.2
102 ikev2 profile set pr1 traffic-selector remote ip-range 192.168.3.0 - 192.168.3.255 port-range 0 - 65535 protocol 0
103 ikev2 profile set pr1 traffic-selector local ip-range 192.168.5.0 - 192.168.5.255 port-range 0 - 65535 protocol 0
105 ikev2 profile set pr1 responder host-ifinit 192.168.10.2
106 ikev2 profile set pr1 ike-crypto-alg aes-gcm-16 256 ike-dh modp-2048
107 ikev2 profile set pr1 esp-crypto-alg aes-gcm-16 256
109 create ipip tunnel src 192.168.10.1 dst 192.168.10.2
110 ikev2 profile set pr1 tunnel ipip0
111 ip route add 192.168.3.0/24 via 192.168.10.2 ipip0
112 set interface unnumbered ipip0 use host-ifinit
115 Initiate the IKEv2 connection:
118 vpp# ikev2 initiate sa-init pr1
121 Responder's and initiator's private networks are now connected with IPSEC tunnel:
124 $ sudo ip netns exec clientns ping 192.168.3.1
125 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
126 64 bytes from 192.168.3.1: icmp_seq=1 ttl=63 time=1.64 ms
127 64 bytes from 192.168.3.1: icmp_seq=2 ttl=63 time=7.24 ms