PRE-TEST

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

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

moon# systemctl start strongswan

sun# systemctl start strongswan

moon# expect-connection gw-gw

sun# expect-connection gw-gw

moon# swanctl --initiate --child net-net 2> /dev/null
[IKE] initiating Main Mode IKE_SA gw-gw[1] to 192.168.0.2
[ENC] generating ID_PROT request 0 [ SA V V V V V ]
[NET] sending packet: from 192.168.0.1[500] to 192.168.0.2[500] (180 bytes)
[NET] received packet: from 192.168.0.2[500] to 192.168.0.1[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.1[500] to 192.168.0.2[500] (172 bytes)
[NET] received packet: from 192.168.0.2[500] to 192.168.0.1[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 'moon.strongswan.org' (myself) successful
[IKE] sending end entity cert "C=CH, O=strongSwan Project, CN=moon.strongswan.org"
[ENC] generating ID_PROT request 0 [ ID CERT SIG CERTREQ N(INITIAL_CONTACT) ]
[ENC] splitting IKE message (1724 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.1[500] to 192.168.0.2[500] (1252 bytes)
[NET] sending packet: from 192.168.0.1[500] to 192.168.0.2[500] (544 bytes)
[NET] received packet: from 192.168.0.2[500] to 192.168.0.1[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.2[500] to 192.168.0.1[500] (432 bytes)
[ENC] parsed ID_PROT response 0 [ FRAG(2/2) ]
[ENC] received fragment #2, reassembled fragmented IKE message (1612 bytes)
[NET] received packet: from 192.168.0.2[500] to 192.168.0.1[500] (1612 bytes)
[ENC] parsed ID_PROT response 0 [ ID CERT SIG ]
[IKE] received end entity cert "C=CH, O=strongSwan Project, CN=sun.strongswan.org"
[CFG]   using certificate "C=CH, O=strongSwan Project, CN=sun.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=sun.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 'sun.strongswan.org' with RSA_EMSA_PKCS1_NULL successful
[IKE] IKE_SA gw-gw[1] established between 192.168.0.1[moon.strongswan.org]...192.168.0.2[sun.strongswan.org]
[IKE] scheduling reauthentication in 9965s
[IKE] maximum IKE_SA lifetime 11045s
[ENC] generating QUICK_MODE request 3549935923 [ HASH SA No KE ID ID ]
[NET] sending packet: from 192.168.0.1[500] to 192.168.0.2[500] (236 bytes)
[NET] received packet: from 192.168.0.2[500] to 192.168.0.1[500] (236 bytes)
[ENC] parsed QUICK_MODE response 3549935923 [ HASH SA No KE ID ID ]
[CFG] selected proposal: ESP:AES_GCM_16_128/CURVE_25519/NO_EXT_SEQ
[IKE] CHILD_SA net-net{1} established with SPIs ce38c912_i cb66a4cc_o and TS 10.1.0.0/16 === 10.2.0.0/16
initiate completed successfully


TEST

moon# swanctl --list-sas --raw 2> /dev/null | grep 'gw-gw.*version=1 state=ESTABLISHED local-host=192.168.0.1 local-port=500 local-id=moon.strongswan.org remote-host=192.168.0.2 remote-port=500 remote-id=sun.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.*child-sas.*net-net.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.1.0.0/16] remote-ts=\[10.2.0.0/16]' [YES]
list-sa event {gw-gw {uniqueid=1 version=1 state=ESTABLISHED local-host=192.168.0.1 local-port=500 local-id=moon.strongswan.org remote-host=192.168.0.2 remote-port=500 remote-id=sun.strongswan.org initiator=yes initiator-spi=586717c471e93d53 responder-spi=40f39ec1348ba581 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 reauth-time=9965 child-sas {net-net-1 {name=net-net uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=ce38c912 spi-out=cb66a4cc 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=4982 life-time=5940 install-time=0 local-ts=[10.1.0.0/16] remote-ts=[10.2.0.0/16]}}}}

sun# swanctl --list-sas --raw 2> /dev/null | grep 'gw-gw.*version=1 state=ESTABLISHED local-host=192.168.0.2 local-port=500 local-id=sun.strongswan.org remote-host=192.168.0.1 remote-port=500 remote-id=moon.strongswan.org.*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-net.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.2.0.0/16] remote-ts=\[10.1.0.0/16]' [YES]
list-sa event {gw-gw {uniqueid=1 version=1 state=ESTABLISHED local-host=192.168.0.2 local-port=500 local-id=sun.strongswan.org remote-host=192.168.0.1 remote-port=500 remote-id=moon.strongswan.org initiator-spi=586717c471e93d53 responder-spi=40f39ec1348ba581 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 reauth-time=9997 child-sas {net-net-1 {name=net-net uniqueid=1 reqid=1 state=INSTALLED mode=TUNNEL protocol=ESP spi-in=cb66a4cc spi-out=ce38c912 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=4867 life-time=5940 install-time=0 local-ts=[10.2.0.0/16] remote-ts=[10.1.0.0/16]}}}}

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

sun# killall tcpdump

sun# cat /tmp/tcpdump.log | grep 'IP moon.strongswan.org > sun.strongswan.org: ESP' [YES]
18:57:11.512515 IP moon.strongswan.org > sun.strongswan.org: ESP(spi=0xcb66a4cc,seq=0x1), length 120

sun# cat /tmp/tcpdump.log | grep 'IP sun.strongswan.org > moon.strongswan.org: ESP' [YES]
18:57:11.513074 IP sun.strongswan.org > moon.strongswan.org: ESP(spi=0xce38c912,seq=0x1), length 120


POST-TEST

moon# swanctl --terminate --ike gw-gw 2> /dev/null
[IKE] closing CHILD_SA net-net{1} with SPIs ce38c912_i (84 bytes) cb66a4cc_o (84 bytes) and TS 10.1.0.0/16 === 10.2.0.0/16
[IKE] sending DELETE for ESP CHILD_SA with SPI ce38c912
[ENC] generating INFORMATIONAL_V1 request 112954555 [ HASH D ]
[NET] sending packet: from 192.168.0.1[500] to 192.168.0.2[500] (92 bytes)
[IKE] deleting IKE_SA gw-gw[1] between 192.168.0.1[moon.strongswan.org]...192.168.0.2[sun.strongswan.org]
[IKE] sending DELETE for IKE_SA gw-gw[1]
[ENC] generating INFORMATIONAL_V1 request 291759409 [ HASH D ]
[NET] sending packet: from 192.168.0.1[500] to 192.168.0.2[500] (108 bytes)
terminate completed successfully

moon# systemctl stop strongswan

sun# systemctl stop strongswan

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

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