PRE-TEST

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

moon# systemctl start strongswan

carol# systemctl start strongswan

dave# systemctl start strongswan

moon# expect-connection carol

carol# expect-connection moon

carol# swanctl --initiate --child moon 2> /dev/null
[IKE] initiating Main Mode IKE_SA moon[1] to 192.168.0.1
[ENC] generating ID_PROT request 0 [ SA V V V V V ]
[NET] sending packet: from 192.168.0.100[500] to 192.168.0.1[500] (180 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[500] (160 bytes)
[ENC] parsed ID_PROT response 0 [ SA V V V V ]
[IKE] received XAuth vendor ID
[IKE] received DPD vendor ID
[IKE] received FRAGMENTATION vendor ID
[IKE] received NAT-T (RFC 3947) vendor ID
[CFG] selected proposal: IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/CURVE_25519
[ENC] generating ID_PROT request 0 [ KE No NAT-D NAT-D ]
[NET] sending packet: from 192.168.0.100[500] to 192.168.0.1[500] (172 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[500] (250 bytes)
[ENC] parsed ID_PROT response 0 [ KE No CERTREQ NAT-D NAT-D ]
[IKE] received cert request for 'C=CH, O=strongSwan Project, CN=strongSwan Root CA'
[IKE] sending cert request for "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[IKE] authentication of 'carol@strongswan.org' (myself) successful
[IKE] sending end entity cert "C=CH, O=strongSwan Project, OU=Research, CN=carol@strongswan.org"
[ENC] generating ID_PROT request 0 [ ID CERT SIG CERTREQ N(INITIAL_CONTACT) ]
[ENC] splitting IKE message (1756 bytes) into 2 fragments
[ENC] generating ID_PROT request 0 [ FRAG(1) ]
[ENC] generating ID_PROT request 0 [ FRAG(2/2) ]
[NET] sending packet: from 192.168.0.100[500] to 192.168.0.1[500] (1252 bytes)
[NET] sending packet: from 192.168.0.100[500] to 192.168.0.1[500] (576 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[500] (1252 bytes)
[ENC] parsed ID_PROT response 0 [ FRAG(1) ]
[ENC] received fragment #1, waiting for complete IKE message
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[500] (448 bytes)
[ENC] parsed ID_PROT response 0 [ FRAG(2/2) ]
[ENC] received fragment #2, reassembled fragmented IKE message (1628 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[500] (1628 bytes)
[ENC] parsed ID_PROT response 0 [ ID CERT SIG ]
[IKE] received end entity cert "C=CH, O=strongSwan Project, CN=moon.strongswan.org"
[CFG]   using certificate "C=CH, O=strongSwan Project, CN=moon.strongswan.org"
[CFG]   using trusted ca certificate "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[CFG]   reached self-signed root ca with a path length of 0
[CFG] checking certificate status of "C=CH, O=strongSwan Project, CN=moon.strongswan.org"
[CFG]   fetching crl from 'http://crl.strongswan.org/strongswan.crl' ...
[CFG]   using trusted certificate "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[CFG]   crl correctly signed by "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[CFG]   crl is valid: until Mar 25 18:47:43 2025
[CFG] certificate status is good
[IKE] authentication of 'moon.strongswan.org' with RSA_EMSA_PKCS1_NULL successful
[IKE] IKE_SA moon[1] established between 192.168.0.100[carol@strongswan.org]...192.168.0.1[moon.strongswan.org]
[IKE] scheduling rekeying in 13700s
[IKE] maximum IKE_SA lifetime 15140s
[ENC] generating TRANSACTION request 1801943096 [ HASH CPRQ(ADDR) ]
[NET] sending packet: from 192.168.0.100[500] to 192.168.0.1[500] (92 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[500] (92 bytes)
[ENC] parsed TRANSACTION response 1801943096 [ HASH CPRP(ADDR) ]
[IKE] installing new virtual IP 10.3.0.1
[ENC] generating QUICK_MODE request 2319206405 [ HASH SA No KE ID ID ]
[NET] sending packet: from 192.168.0.100[500] to 192.168.0.1[500] (220 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.100[500] (220 bytes)
[ENC] parsed QUICK_MODE response 2319206405 [ HASH SA No KE ID ID ]
[CFG] selected proposal: ESP:AES_GCM_16_128/CURVE_25519/NO_EXT_SEQ
[IKE] CHILD_SA moon{1} established with SPIs ccb87087_i c61067af_o and TS 10.3.0.1/32 === 10.1.0.0/16
[ENC] generating QUICK_MODE request 2319206405 [ HASH ]
initiate completed successfully

carol# iptables -D INPUT -i eth0 -p udp --dport 500 --sport 500 -j ACCEPT

carol# iptables -D OUTPUT -o eth0 -p udp --dport 500 --sport 500 -j ACCEPT

moon# sed -i 's/192.168.0.100/192.168.0.200/g' /etc/hosts

dave# expect-connection moon

dave# swanctl --initiate --child moon 2> /dev/null
[IKE] initiating Main Mode IKE_SA moon[1] to 192.168.0.1
[ENC] generating ID_PROT request 0 [ SA V V V V V ]
[NET] sending packet: from 192.168.0.200[500] to 192.168.0.1[500] (180 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[500] (160 bytes)
[ENC] parsed ID_PROT response 0 [ SA V V V V ]
[IKE] received XAuth vendor ID
[IKE] received DPD vendor ID
[IKE] received FRAGMENTATION vendor ID
[IKE] received NAT-T (RFC 3947) vendor ID
[CFG] selected proposal: IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/CURVE_25519
[ENC] generating ID_PROT request 0 [ KE No NAT-D NAT-D ]
[NET] sending packet: from 192.168.0.200[500] to 192.168.0.1[500] (172 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[500] (250 bytes)
[ENC] parsed ID_PROT response 0 [ KE No CERTREQ NAT-D NAT-D ]
[IKE] received cert request for 'C=CH, O=strongSwan Project, CN=strongSwan Root CA'
[IKE] sending cert request for "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[IKE] authentication of 'carol@strongswan.org' (myself) successful
[IKE] sending end entity cert "C=CH, O=strongSwan Project, OU=Research, CN=carol@strongswan.org"
[ENC] generating ID_PROT request 0 [ ID CERT SIG CERTREQ N(INITIAL_CONTACT) ]
[ENC] splitting IKE message (1756 bytes) into 2 fragments
[ENC] generating ID_PROT request 0 [ FRAG(1) ]
[ENC] generating ID_PROT request 0 [ FRAG(2/2) ]
[NET] sending packet: from 192.168.0.200[500] to 192.168.0.1[500] (1252 bytes)
[NET] sending packet: from 192.168.0.200[500] to 192.168.0.1[500] (576 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[500] (1252 bytes)
[ENC] parsed ID_PROT response 0 [ FRAG(1) ]
[ENC] received fragment #1, waiting for complete IKE message
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[500] (448 bytes)
[ENC] parsed ID_PROT response 0 [ FRAG(2/2) ]
[ENC] received fragment #2, reassembled fragmented IKE message (1628 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[500] (1628 bytes)
[ENC] parsed ID_PROT response 0 [ ID CERT SIG ]
[IKE] received end entity cert "C=CH, O=strongSwan Project, CN=moon.strongswan.org"
[CFG]   using certificate "C=CH, O=strongSwan Project, CN=moon.strongswan.org"
[CFG]   using trusted ca certificate "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[CFG]   reached self-signed root ca with a path length of 0
[CFG] checking certificate status of "C=CH, O=strongSwan Project, CN=moon.strongswan.org"
[CFG]   fetching crl from 'http://crl.strongswan.org/strongswan.crl' ...
[CFG]   using trusted certificate "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[CFG]   crl correctly signed by "C=CH, O=strongSwan Project, CN=strongSwan Root CA"
[CFG]   crl is valid: until Mar 25 18:47:43 2025
[CFG] certificate status is good
[IKE] authentication of 'moon.strongswan.org' with RSA_EMSA_PKCS1_NULL successful
[IKE] IKE_SA moon[1] established between 192.168.0.200[carol@strongswan.org]...192.168.0.1[moon.strongswan.org]
[IKE] scheduling rekeying in 13912s
[IKE] maximum IKE_SA lifetime 15352s
[ENC] generating TRANSACTION request 2733788600 [ HASH CPRQ(ADDR) ]
[NET] sending packet: from 192.168.0.200[500] to 192.168.0.1[500] (92 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[500] (92 bytes)
[ENC] parsed TRANSACTION response 2733788600 [ HASH CPRP(ADDR) ]
[IKE] installing new virtual IP 10.3.0.1
[ENC] generating QUICK_MODE request 2872300785 [ HASH SA No KE ID ID ]
[NET] sending packet: from 192.168.0.200[500] to 192.168.0.1[500] (220 bytes)
[NET] received packet: from 192.168.0.1[500] to 192.168.0.200[500] (220 bytes)
[ENC] parsed QUICK_MODE response 2872300785 [ HASH SA No KE ID ID ]
[CFG] selected proposal: ESP:AES_GCM_16_128/CURVE_25519/NO_EXT_SEQ
[IKE] CHILD_SA moon{1} established with SPIs c6e94f98_i cc07f47e_o and TS 10.3.0.1/32 === 10.1.0.0/16
initiate completed successfully


TEST

carol# swanctl --list-sas --raw 2> /dev/null | grep 'moon.*version=1 state=ESTABLISHED local-host=192.168.0.100 local-port=500 local-id=carol@strongswan.org remote-host=192.168.0.1 remote-port=500 remote-id=moon.strongswan.org 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.*local-vips=\[10.3.0.1] child-sas.*moon.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.3.0.1/32] remote-ts=\[10.1.0.0/16]' [YES]
list-sa event {moon {uniqueid=1 version=1 state=ESTABLISHED local-host=192.168.0.100 local-port=500 local-id=carol@strongswan.org remote-host=192.168.0.1 remote-port=500 remote-id=moon.strongswan.org initiator=yes initiator-spi=6f1bceb51af88980 responder-spi=fe439848ae1567a0 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=13699 local-vips=[10.3.0.1] child-sas {moon-1 {name=moon uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=ccb87087 spi-out=c61067af encr-alg=AES_GCM_16 encr-keysize=128 dh-group=CURVE_25519 bytes-in=0 packets-in=0 bytes-out=0 packets-out=0 rekey-time=3332 life-time=3959 install-time=1 local-ts=[10.3.0.1/32] remote-ts=[10.1.0.0/16]}}}}

dave# swanctl --list-sas --raw 2> /dev/null | grep 'moon.*version=1 state=ESTABLISHED local-host=192.168.0.200 local-port=500 local-id=carol@strongswan.org remote-host=192.168.0.1 remote-port=500 remote-id=moon.strongswan.org 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.*local-vips=\[10.3.0.1] child-sas.*moon.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.3.0.1/32] remote-ts=\[10.1.0.0/16]' [YES]
list-sa event {moon {uniqueid=1 version=1 state=ESTABLISHED local-host=192.168.0.200 local-port=500 local-id=carol@strongswan.org remote-host=192.168.0.1 remote-port=500 remote-id=moon.strongswan.org initiator=yes initiator-spi=bce1f330f13f0106 responder-spi=5bcfb253881f3eda 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=13911 local-vips=[10.3.0.1] child-sas {moon-1 {name=moon uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=c6e94f98 spi-out=cc07f47e encr-alg=AES_GCM_16 encr-keysize=128 dh-group=CURVE_25519 bytes-in=0 packets-in=0 bytes-out=0 packets-out=0 rekey-time=3317 life-time=3959 install-time=1 local-ts=[10.3.0.1/32] remote-ts=[10.1.0.0/16]}}}}

moon# cat /var/log/auth.log | grep 'IKE_SA carol\[1] established.*192.168.0.100' [YES]
Mar 10 18:55:24 moon charon-systemd: 15[IKE] IKE_SA carol[1] established between 192.168.0.1[moon.strongswan.org]...192.168.0.100[carol@strongswan.org]

moon# cat /var/log/daemon.log | grep 'deleting duplicate IKE_SA for.*carol@strongswan.org.*due to uniqueness policy' [YES]
Mar 10 18:55:25 moon charon-systemd: 04[IKE] deleting duplicate IKE_SA for peer 'carol@strongswan.org' due to uniqueness policy

moon# cat /var/log/auth.log | grep 'IKE_SA carol\[2] established.*192.168.0.200' [YES]
Mar 10 18:55:25 moon charon-systemd: 04[IKE] IKE_SA carol[2] established between 192.168.0.1[moon.strongswan.org]...192.168.0.200[carol@strongswan.org]

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

alice# killall tcpdump

alice# cat /tmp/tcpdump.log | grep 'IP carol1.strongswan.org > alice.strongswan.org: ICMP echo request' [YES]
18:55:26.331179 IP carol1.strongswan.org > alice.strongswan.org: ICMP echo request, id 5222, seq 1, length 64

alice# cat /tmp/tcpdump.log | grep 'IP alice.strongswan.org > carol1.strongswan.org: ICMP echo reply' [YES]
18:55:26.331227 IP alice.strongswan.org > carol1.strongswan.org: ICMP echo reply, id 5222, seq 1, length 64


POST-TEST

carol# systemctl stop strongswan

dave# systemctl stop strongswan

moon# systemctl stop strongswan

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

dave# cd /etc/swanctl; rm rsa/carolKey.pem x509/carolCert.pem