PRE-TEST

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

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

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

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

carol# swanctl --initiate --child home 2> /dev/null
[IKE] initiating IKE_SA home[1] to 192.168.0.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 192.168.0.100[500] to 192.168.0.1[500] (240 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[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 '192.168.0.100' (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_6_ADDR) N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]
[NET] sending packet: from 192.168.0.100[4500] to 192.168.0.1[4500] (288 bytes)
[NET] received packet: from 192.168.0.1[4500] to 192.168.0.100[4500] (272 bytes)
[ENC] parsed IKE_AUTH response 1 [ IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_6_ADDR) N(ADD_6_ADDR) ]
[IKE] authentication of '192.168.0.1' with pre-shared key successful
[IKE] peer supports MOBIKE
[IKE] IKE_SA home[1] established between 192.168.0.100[192.168.0.100]...192.168.0.1[192.168.0.1]
[IKE] scheduling rekeying in 13179s
[IKE] maximum IKE_SA lifetime 14619s
[CFG] selected proposal: ESP:AES_GCM_16_128/NO_EXT_SEQ
[IKE] CHILD_SA home{1} established with SPIs ca825c37_i cef51878_o and TS 192.168.0.100/32 === 10.1.0.0/16
initiate completed successfully

dave# expect-connection home

dave# swanctl --initiate --child home 2> /dev/null
[IKE] initiating IKE_SA home[1] to 192.168.0.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 192.168.0.200[500] to 192.168.0.1[500] (240 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[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 '192.168.0.200' (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_6_ADDR) N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]
[NET] sending packet: from 192.168.0.200[4500] to 192.168.0.1[4500] (288 bytes)
[NET] received packet: from 192.168.0.1[4500] to 192.168.0.200[4500] (272 bytes)
[ENC] parsed IKE_AUTH response 1 [ IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_6_ADDR) N(ADD_6_ADDR) ]
[IKE] authentication of '192.168.0.1' with pre-shared key successful
[IKE] peer supports MOBIKE
[IKE] IKE_SA home[1] established between 192.168.0.200[192.168.0.200]...192.168.0.1[192.168.0.1]
[IKE] scheduling rekeying in 13624s
[IKE] maximum IKE_SA lifetime 15064s
[CFG] selected proposal: ESP:AES_GCM_16_128/NO_EXT_SEQ
[IKE] CHILD_SA home{1} established with SPIs c0765531_i c369f7cc_o and TS 192.168.0.200/32 === 10.1.0.0/16
initiate completed successfully


TEST

carol# swanctl --list-sas --raw 2> /dev/null | grep 'home.*version=2 state=ESTABLISHED local-host=192.168.0.100 local-port=4500 local-id=192.168.0.100 remote-host=192.168.0.1 remote-port=4500 remote-id=192.168.0.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_GCM_16 encr-keysize=128.*local-ts=\[192.168.0.100/32] remote-ts=\[10.1.0.0/16]' [YES]
list-sa event {home {uniqueid=1 version=2 state=ESTABLISHED local-host=192.168.0.100 local-port=4500 local-id=192.168.0.100 remote-host=192.168.0.1 remote-port=4500 remote-id=192.168.0.1 initiator=yes initiator-spi=a60499545438e3da responder-spi=6f542f0b019175d4 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=13179 child-sas {home-1 {name=home uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=ca825c37 spi-out=cef51878 encr-alg=AES_GCM_16 encr-keysize=128 bytes-in=0 packets-in=0 bytes-out=0 packets-out=0 rekey-time=3316 life-time=3960 install-time=0 local-ts=[192.168.0.100/32] remote-ts=[10.1.0.0/16]}}}}

dave# swanctl --list-sas --raw 2> /dev/null | grep 'home.*version=2 state=ESTABLISHED local-host=192.168.0.200 local-port=4500 local-id=192.168.0.200 remote-host=192.168.0.1 remote-port=4500 remote-id=192.168.0.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_GCM_16 encr-keysize=128.*local-ts=\[192.168.0.200/32] remote-ts=\[10.1.0.0/16]' [YES]
list-sa event {home {uniqueid=1 version=2 state=ESTABLISHED local-host=192.168.0.200 local-port=4500 local-id=192.168.0.200 remote-host=192.168.0.1 remote-port=4500 remote-id=192.168.0.1 initiator=yes initiator-spi=e76f3a61d97586ca responder-spi=644404d79a10b08b 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=13624 child-sas {home-1 {name=home uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=c0765531 spi-out=c369f7cc encr-alg=AES_GCM_16 encr-keysize=128 bytes-in=0 packets-in=0 bytes-out=0 packets-out=0 rekey-time=3342 life-time=3960 install-time=0 local-ts=[192.168.0.200/32] remote-ts=[10.1.0.0/16]}}}}

moon# swanctl --list-sas --ike-id 1 --raw 2> /dev/null | grep 'rw.*version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=192.168.0.1 remote-host=192.168.0.100 remote-port=4500 remote-id=192.168.0.100.*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_GCM_16 encr-keysize=128.*local-ts=\[10.1.0.0/16] remote-ts=\[192.168.0.100/32]' [YES]
list-sa event {rw {uniqueid=1 version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=192.168.0.1 remote-host=192.168.0.100 remote-port=4500 remote-id=192.168.0.100 initiator-spi=a60499545438e3da responder-spi=6f542f0b019175d4 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=13743 child-sas {net-1 {name=net uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=cef51878 spi-out=ca825c37 encr-alg=AES_GCM_16 encr-keysize=128 bytes-in=0 packets-in=0 bytes-out=0 packets-out=0 rekey-time=3332 life-time=3959 install-time=1 local-ts=[10.1.0.0/16] remote-ts=[192.168.0.100/32]}}}}

moon# swanctl --list-sas --ike-id 2 --raw 2> /dev/null | grep 'rw.*version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=192.168.0.1 remote-host=192.168.0.200 remote-port=4500 remote-id=192.168.0.200.*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_GCM_16 encr-keysize=128.*local-ts=\[10.1.0.0/16] remote-ts=\[192.168.0.200/32]' [YES]
list-sa event {rw {uniqueid=2 version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=192.168.0.1 remote-host=192.168.0.200 remote-port=4500 remote-id=192.168.0.200 initiator-spi=e76f3a61d97586ca responder-spi=644404d79a10b08b 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=14072 child-sas {net-2 {name=net uniqueid=2 reqid=2 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=c369f7cc spi-out=c0765531 encr-alg=AES_GCM_16 encr-keysize=128 bytes-in=0 packets-in=0 bytes-out=0 packets-out=0 rekey-time=3259 life-time=3960 install-time=0 local-ts=[10.1.0.0/16] remote-ts=[192.168.0.200/32]}}}}

alice# ping -c 1 192.168.0.100 | grep '64 bytes from 192.168.0.100: icmp_.eq=1' [YES]
64 bytes from 192.168.0.100: icmp_seq=1 ttl=63 time=0.953 ms

alice# ping -c 1 192.168.0.200 | grep '64 bytes from 192.168.0.200: icmp_.eq=1' [YES]
64 bytes from 192.168.0.200: icmp_seq=1 ttl=63 time=1.14 ms

moon# killall tcpdump

moon# cat /tmp/tcpdump.log | grep 'IP moon.strongswan.org > carol.strongswan.org: ESP' [YES]
19:28:55.030525 IP moon.strongswan.org > carol.strongswan.org: ESP(spi=0xca825c37,seq=0x1), length 120

moon# cat /tmp/tcpdump.log | grep 'IP carol.strongswan.org > moon.strongswan.org: ESP' [YES]
19:28:55.031011 IP carol.strongswan.org > moon.strongswan.org: ESP(spi=0xcef51878,seq=0x1), length 120

moon# cat /tmp/tcpdump.log | grep 'IP moon.strongswan.org > dave.strongswan.org: ESP' [YES]
19:28:55.059430 IP moon.strongswan.org > dave.strongswan.org: ESP(spi=0xc0765531,seq=0x1), length 120

moon# cat /tmp/tcpdump.log | grep 'IP dave.strongswan.org > moon.strongswan.org: ESP' [YES]
19:28:55.059966 IP dave.strongswan.org > moon.strongswan.org: ESP(spi=0xc369f7cc,seq=0x1), length 120


POST-TEST

carol# swanctl --terminate --ike home
[IKE] deleting IKE_SA home[1] between 192.168.0.100[192.168.0.100]...192.168.0.1[192.168.0.1]
[IKE] sending DELETE for IKE_SA home[1]
[ENC] generating INFORMATIONAL request 2 [ D ]
[NET] sending packet: from 192.168.0.100[4500] to 192.168.0.1[4500] (80 bytes)
[NET] received packet: from 192.168.0.1[4500] to 192.168.0.100[4500] (80 bytes)
[ENC] parsed INFORMATIONAL response 2 [ ]
[IKE] IKE_SA deleted
terminate completed successfully

dave# swanctl --terminate --ike home
[IKE] deleting IKE_SA home[1] between 192.168.0.200[192.168.0.200]...192.168.0.1[192.168.0.1]
[IKE] sending DELETE for IKE_SA home[1]
[ENC] generating INFORMATIONAL request 2 [ D ]
[NET] sending packet: from 192.168.0.200[4500] to 192.168.0.1[4500] (80 bytes)
[NET] received packet: from 192.168.0.1[4500] to 192.168.0.200[4500] (80 bytes)
[ENC] parsed INFORMATIONAL response 2 [ ]
[IKE] IKE_SA deleted
terminate completed successfully

carol# systemctl stop strongswan

dave# systemctl stop strongswan

moon# systemctl stop strongswan

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

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

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