PRE-TEST

moon# iptables-restore < /etc/iptables.drop

carol# iptables-restore < /etc/iptables.drop

dave# iptables-restore < /etc/iptables.drop

moon# ip6tables-restore < /etc/ip6tables.rules

carol# ip6tables-restore < /etc/ip6tables.rules

dave# ip6tables-restore < /etc/ip6tables.rules

alice# ip route add fec0::/16 via fec1::1

carol# ip route add fec1::/16 via fec0::1

dave# ip route add fec1::/16 via fec0::1

moon# cd /etc/swanctl; rm rsa/* x509/* x509ca/*

carol# cd /etc/swanctl; rm rsa/* x509/* x509ca/*

dave# cd /etc/swanctl; rm rsa/* x509/* x509ca/*

moon# systemctl start strongswan

carol# systemctl start strongswan

dave# systemctl start strongswan

moon# expect-connection rw

carol# expect-connection home

dave# expect-connection home

carol# swanctl --initiate --child home
[IKE] initiating IKE_SA home[1] to fec0::1
[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
[NET] sending packet: from fec0::10[500] to fec0::1[500] (240 bytes)
[NET] received packet: from fec0::1[500] to fec0::10[500] (248 bytes)
[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(CHDLESS_SUP) N(MULT_AUTH) ]
[CFG] selected proposal: IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/CURVE_25519
[IKE] authentication of 'fec0::10' (myself) with pre-shared key
[IKE] establishing CHILD_SA home{1}
[ENC] generating IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]
[NET] sending packet: from fec0::10[4500] to fec0::1[4500] (352 bytes)
[NET] received packet: from fec0::1[4500] to fec0::10[4500] (336 bytes)
[ENC] parsed IKE_AUTH response 1 [ IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_6_ADDR) ]
[IKE] authentication of 'fec0::1' with pre-shared key successful
[IKE] peer supports MOBIKE
[IKE] IKE_SA home[1] established between fec0::10[fec0::10]...fec0::1[fec0::1]
[IKE] scheduling rekeying in 13381s
[IKE] maximum IKE_SA lifetime 14821s
[CFG] selected proposal: ESP:AES_CBC_128/HMAC_SHA2_256_128/NO_EXT_SEQ
[IKE] CHILD_SA home{1} established with SPIs c59829b0_i c0dfddaf_o and TS fec0::10/128 === fec1::/16
initiate completed successfully

dave# swanctl --initiate --child home
[IKE] initiating IKE_SA home[1] to fec0::1
[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
[NET] sending packet: from fec0::20[500] to fec0::1[500] (240 bytes)
[NET] received packet: from fec0::1[500] to fec0::20[500] (248 bytes)
[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(CHDLESS_SUP) N(MULT_AUTH) ]
[CFG] selected proposal: IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/CURVE_25519
[IKE] authentication of 'fec0::20' (myself) with pre-shared key
[IKE] establishing CHILD_SA home{1}
[ENC] generating IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]
[NET] sending packet: from fec0::20[4500] to fec0::1[4500] (352 bytes)
[NET] received packet: from fec0::1[4500] to fec0::20[4500] (336 bytes)
[ENC] parsed IKE_AUTH response 1 [ IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_6_ADDR) ]
[IKE] authentication of 'fec0::1' with pre-shared key successful
[IKE] peer supports MOBIKE
[IKE] IKE_SA home[1] established between fec0::20[fec0::20]...fec0::1[fec0::1]
[IKE] scheduling rekeying in 13798s
[IKE] maximum IKE_SA lifetime 15238s
[CFG] selected proposal: ESP:AES_CBC_128/HMAC_SHA2_256_128/NO_EXT_SEQ
[IKE] CHILD_SA home{1} established with SPIs c7716949_i cfe612e5_o and TS fec0::20/128 === fec1::/16
initiate completed successfully


TEST

carol# ping6 -c 1 ip6-alice.strongswan.org | grep '64 bytes from ip6-alice.strongswan.org.*: icmp_seq=1' [YES]
64 bytes from ip6-alice.strongswan.org (fec1::10): icmp_seq=1 ttl=63 time=1.40 ms

dave# ping6 -c 1 ip6-alice.strongswan.org | grep '64 bytes from ip6-alice.strongswan.org.*: icmp_seq=1' [YES]
64 bytes from ip6-alice.strongswan.org (fec1::10): icmp_seq=1 ttl=63 time=0.960 ms

carol# swanctl --list-sas --raw 2> /dev/null | grep 'home.*version=2 state=ESTABLISHED local-host=fec0:\:10 local-port=4500 local-id=fec0:\:10 remote-host=fec0:\:1 remote-port=4500 remote-id=fec0:\:1 initiator=yes.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*home.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128.*local-ts=\[fec0:\:10/128] remote-ts=\[fec1:\:/16]' [YES]
list-sa event {home {uniqueid=1 version=2 state=ESTABLISHED local-host=fec0::10 local-port=4500 local-id=fec0::10 remote-host=fec0::1 remote-port=4500 remote-id=fec0::1 initiator=yes initiator-spi=c0ab407d7d641858 responder-spi=6a70ce90e6c0b5d0 encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519 established=1 rekey-time=13380 child-sas {home-1 {name=home uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=c59829b0 spi-out=c0dfddaf encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 bytes-in=104 packets-in=1 use-in=0 bytes-out=104 packets-out=1 use-out=0 rekey-time=3273 life-time=3959 install-time=1 local-ts=[fec0::10/128] remote-ts=[fec1::/16]}}}}

dave# swanctl --list-sas --raw 2> /dev/null | grep 'home.*version=2 state=ESTABLISHED local-host=fec0:\:20 local-port=4500 local-id=fec0:\:20 remote-host=fec0:\:1 remote-port=4500 remote-id=fec0:\:1 initiator=yes.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*home.*state=INSTALLED mode=TUNNEL.*ESP..*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128.*local-ts=\[fec0:\:20/128] remote-ts=\[fec1:\:/16]' [YES]
list-sa event {home {uniqueid=1 version=2 state=ESTABLISHED local-host=fec0::20 local-port=4500 local-id=fec0::20 remote-host=fec0::1 remote-port=4500 remote-id=fec0::1 initiator=yes initiator-spi=3870012cb0c692d7 responder-spi=eeba383c6f67925e encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519 established=0 rekey-time=13798 child-sas {home-1 {name=home uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=c7716949 spi-out=cfe612e5 encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 bytes-in=104 packets-in=1 use-in=0 bytes-out=104 packets-out=1 use-out=0 rekey-time=3406 life-time=3960 install-time=0 local-ts=[fec0::20/128] remote-ts=[fec1::/16]}}}}

moon# swanctl --list-sas --ike-id 1 --raw 2> /dev/null | grep 'rw.*version=2 state=ESTABLISHED local-host=fec0:\:1 local-port=4500 local-id=fec0:\:1 remote-host=fec0:\:10 remote-port=4500 remote-id=fec0:\:10.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*net.*reqid=1 state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128.*local-ts=\[fec1:\:/16] remote-ts=\[fec0:\:10/128]' [YES]
list-sa event {rw {uniqueid=1 version=2 state=ESTABLISHED local-host=fec0::1 local-port=4500 local-id=fec0::1 remote-host=fec0::10 remote-port=4500 remote-id=fec0::10 initiator-spi=c0ab407d7d641858 responder-spi=6a70ce90e6c0b5d0 encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519 established=1 rekey-time=14251 child-sas {net-1 {name=net uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=c0dfddaf spi-out=c59829b0 encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 bytes-in=104 packets-in=1 use-in=1 bytes-out=104 packets-out=1 use-out=1 rekey-time=3252 life-time=3959 install-time=1 local-ts=[fec1::/16] remote-ts=[fec0::10/128]}}}}

moon# swanctl --list-sas --ike-id 2 --raw 2> /dev/null | grep 'rw.*version=2 state=ESTABLISHED local-host=fec0:\:1 local-port=4500 local-id=fec0:\:1 remote-host=fec0:\:20 remote-port=4500 remote-id=fec0:\:20.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*net.*reqid=2 state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128.*local-ts=\[fec1:\:/16] remote-ts=\[fec0:\:20/128]' [YES]
list-sa event {rw {uniqueid=2 version=2 state=ESTABLISHED local-host=fec0::1 local-port=4500 local-id=fec0::1 remote-host=fec0::20 remote-port=4500 remote-id=fec0::20 initiator-spi=3870012cb0c692d7 responder-spi=eeba383c6f67925e encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519 established=1 rekey-time=14250 child-sas {net-2 {name=net uniqueid=2 reqid=2 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=cfe612e5 spi-out=c7716949 encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 bytes-in=104 packets-in=1 use-in=1 bytes-out=104 packets-out=1 use-out=1 rekey-time=3250 life-time=3959 install-time=1 local-ts=[fec1::/16] remote-ts=[fec0::20/128]}}}}

moon# killall tcpdump

moon# cat /tmp/tcpdump.log | grep 'IP6 ip6-carol.strongswan.org > ip6-moon.strongswan.org: ESP' [YES]
19:44:31.951201 IP6 ip6-carol.strongswan.org > ip6-moon.strongswan.org: ESP(spi=0xc0dfddaf,seq=0x1), length 152

moon# cat /tmp/tcpdump.log | grep 'IP6 ip6-moon.strongswan.org > ip6-carol.strongswan.org: ESP' [YES]
19:44:31.951895 IP6 ip6-moon.strongswan.org > ip6-carol.strongswan.org: ESP(spi=0xc59829b0,seq=0x1), length 152

moon# cat /tmp/tcpdump.log | grep 'IP6 ip6-dave.strongswan.org > ip6-moon.strongswan.org: ESP' [YES]
19:44:31.985041 IP6 ip6-dave.strongswan.org > ip6-moon.strongswan.org: ESP(spi=0xcfe612e5,seq=0x1), length 152

moon# cat /tmp/tcpdump.log | grep 'IP6 ip6-moon.strongswan.org > ip6-dave.strongswan.org: ESP' [YES]
19:44:31.985589 IP6 ip6-moon.strongswan.org > ip6-dave.strongswan.org: ESP(spi=0xc7716949,seq=0x1), length 152


POST-TEST

moon# systemctl stop strongswan

carol# systemctl stop strongswan

dave# systemctl stop strongswan

moon# iptables-restore < /etc/iptables.flush

carol# iptables-restore < /etc/iptables.flush

dave# iptables-restore < /etc/iptables.flush

moon# ip6tables-restore < /etc/ip6tables.flush

carol# ip6tables-restore < /etc/ip6tables.flush

dave# ip6tables-restore < /etc/ip6tables.flush

alice# ip route del fec0::/16 via fec1::1

carol# ip route del fec1::/16 via fec0::1

dave# ip route del fec1::/16 via fec0::1