[Swan] IKEv2 connection from Android drops after a few minutes

Beat Zahnd beat.zahnd at gmail.com
Wed Mar 4 21:42:25 UTC 2020


Hello,

I'm a bit lost here...

The client is the strongswan app. Initiating a connection works well and no problem is observed as long as the mobile phone is not put to sleep. After a few minutes on sleep no traffic goes trough anymore and the connection needs to be restarted first. 

But I still see UDP-encap ESP traffic on my server network interface...


I configured my VPN server on Debian as per the wiki on https://libreswan.org/wiki/VPN_server_for_remote_clients_using_IKEv2

config setup # from Debian default ipsec.conf
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10,%v4:!10.76.1.0/24
    interfaces="%defaultroute"

conn ikev2-cp
    left=%defaultroute
    leftcert="test VPN"
    leftid=@vpn.hidden.ch
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    leftrsasigkey=%cert
    right=%any
    rightaddresspool=192.168.1.100-192.168.1.200
    rightca=%same
    rightrsasigkey=%cert
    modecfgdns=10.76.1.1
    narrowing=yes
    dpddelay=12h
    dpdtimeout=13h
    dpdaction=clear
    auto=add
    ikev2=insist
    rekey=no
    fragmentation=yes

As per some strongswan tickets I put a long dpddelay. But without success.

In the log on the server nothing appears after the connection is started:

Mar  4 21:59:04 core pluto[25972]: "ikev2-cp"[28] 178.197.x.x #29: deleting other state #29 (STATE_CHILDSA_DEL) and NOT sending notification
Mar  4 21:59:04 core pluto[25972]: "ikev2-cp"[28] 178.197.x.x #28: deleting state (STATE_IKESA_DEL) and NOT sending notification
Mar  4 21:59:04 core pluto[25972]: packet from 178.197.x.x:21081: deleting connection "ikev2-cp"[28] 178.197.x.x instance with peer 178.197.x.x {isakmp=#0/ipsec=#0}
Mar  4 21:59:04 core pluto[25972]: packet from 178.197.x.x:36649: constructed local IKE proposals for ikev2-cp (IKE SA responder matching remote proposals): 1:IKE:ENCR=AES_GCM_C_256;PRF=HMAC_SHA2_512,HMAC_SHA2_256,HMAC_SHA1;INTEG=NONE;DH=MODP2048,MODP3072,MODP4096,MODP8192,ECP_256 2:IKE:ENCR=AES_GCM_C_128;PRF=HMAC_SHA2_512,HMAC_SHA2_256,HMAC_SHA1;INTEG=NONE;DH=MODP2048,MODP3072,MODP4096,MODP8192,ECP_256 3:IKE:ENCR=AES_CBC_256;PRF=HMAC_SHA2_512,HMAC_SHA2_256,HMAC_SHA1;INTEG=HMAC_SHA2_512_256,HMAC_SHA2_256_128,HMAC_SHA1_96;DH=MODP2048,MODP3072,MODP4096,MODP8192,ECP_256 4:IKE:ENCR=AES_CBC_128;PRF=HMAC_SHA2_512,HMAC_SHA2_256,HMAC_SHA1;INTEG=HMAC_SHA2_512_256,HMAC_SHA2_256_128,HMAC_SHA1_96;DH=MODP2048,MODP3072,MODP4096,MODP8192,ECP_256 (default)
Mar  4 21:59:04 core pluto[25972]: packet from 178.197.x.x:36649: proposal 2:IKE:ENCR=AES_GCM_C_256;PRF=HMAC_SHA2_512;DH=MODP2048 chosen from remote proposals 1:IKE:ENCR=AES_CBC_128;ENCR=AES_CBC_192;ENCR=AES_CBC_256;ENCR=3DES;INTEG=HMAC_SHA2_256_128;INTEG=HMAC_SHA2_384_192;INTEG=HMAC_SHA2_512_256;INTEG=HMAC_SHA1_96;INTEG=AES_XCBC_96;PRF=HMAC_SHA2_256;PRF=HMAC_SHA2_384;PRF=HMAC_SHA2_512;PRF=AES128_XCBC;PRF=HMAC_SHA1;DH=ECP_256;DH=ECP_384;DH=ECP_521;DH=BRAINPOOL_P256R1;DH=BRAINPOOL_P384R1;DH=BRAINPOOL_P512R1;DH=CURVE25519;DH=MODP3072;DH=MODP4096;DH=MODP6144;DH=MODP8192;DH=MODP2048[first-match] 2:IKE:ENCR=AES_GCM_C_128;ENCR=AES_GCM_C_192;ENCR=AES_GCM_C_256;ENCR=CHACHA20_POLY1305;ENCR=AES_GCM_B_128;ENCR=AES_GCM_B_192;ENCR=AES_GCM_B_256;ENCR=AES_GCM_A_128;ENCR=AES_GCM_A_192;ENCR=AES_GCM_A_256;PRF=HMAC_SHA2_256;PRF=HMAC_SHA2_384;PRF=HMAC_SHA2_512;PRF=AES128_XCBC;PRF=HMAC_SHA1;DH=ECP_256;DH=ECP_384;DH=ECP_521;DH=BRAINPOOL_P256R1;DH=BRAINPOOL_P384R1;DH=BRAINPOOL_P512R1;DH=CURVE25519;DH=MODP3072;DH=MODP4096;DH=MODP6144;DH=MODP8192;DH=MODP2048[...
Mar  4 21:59:04 core pluto[25972]: packet from 178.197.x.x:36649: initiator guessed wrong keying material group (ECP_256); responding with INVALID_KE_PAYLOAD requesting MODP2048
Mar  4 21:59:04 core pluto[25972]: packet from 178.197.x.x:36649: responding to SA_INIT message (ID 0) from 178.197.x.x:36649 with unencrypted notification INVALID_KE_PAYLOAD
Mar  4 21:59:04 core pluto[25972]: packet from 178.197.x.x:36649: proposal 2:IKE:ENCR=AES_GCM_C_256;PRF=HMAC_SHA2_512;DH=MODP2048 chosen from remote proposals 1:IKE:ENCR=AES_CBC_128;ENCR=AES_CBC_192;ENCR=AES_CBC_256;ENCR=3DES;INTEG=HMAC_SHA2_256_128;INTEG=HMAC_SHA2_384_192;INTEG=HMAC_SHA2_512_256;INTEG=HMAC_SHA1_96;INTEG=AES_XCBC_96;PRF=HMAC_SHA2_256;PRF=HMAC_SHA2_384;PRF=HMAC_SHA2_512;PRF=AES128_XCBC;PRF=HMAC_SHA1;DH=MODP2048;DH=ECP_256;DH=ECP_384;DH=ECP_521;DH=BRAINPOOL_P256R1;DH=BRAINPOOL_P384R1;DH=BRAINPOOL_P512R1;DH=CURVE25519;DH=MODP3072;DH=MODP4096;DH=MODP6144;DH=MODP8192[first-match] 2:IKE:ENCR=AES_GCM_C_128;ENCR=AES_GCM_C_192;ENCR=AES_GCM_C_256;ENCR=CHACHA20_POLY1305;ENCR=AES_GCM_B_128;ENCR=AES_GCM_B_192;ENCR=AES_GCM_B_256;ENCR=AES_GCM_A_128;ENCR=AES_GCM_A_192;ENCR=AES_GCM_A_256;PRF=HMAC_SHA2_256;PRF=HMAC_SHA2_384;PRF=HMAC_SHA2_512;PRF=AES128_XCBC;PRF=HMAC_SHA1;DH=MODP2048;DH=ECP_256;DH=ECP_384;DH=ECP_521;DH=BRAINPOOL_P256R1;DH=BRAINPOOL_P384R1;DH=BRAINPOOL_P512R1;DH=CURVE25519;DH=MODP3072;DH=MODP4096;DH=MODP6144;DH=MODP8192[...
Mar  4 21:59:04 core pluto[25972]: "ikev2-cp"[29] 178.197.x.x #30: STATE_PARENT_R1: received v2I1, sent v2R1 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=MODP2048}
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[29] 178.197.x.x #30: certificate verified OK: CN=bz
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[29] 178.197.x.x #30: No matching subjectAltName found
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[29] 178.197.x.x #30: certificate does not contain ID_IP subjectAltName=178.197.x.x
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[29] 178.197.x.x #30: Peer public key SubjectAltName does not match peer ID for this connection
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[29] 178.197.x.x #30: switched from "ikev2-cp"[29] 178.197.x.x to "ikev2-cp"
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: deleting connection "ikev2-cp"[29] 178.197.x.x instance with peer 178.197.x.x {isakmp=#0/ipsec=#0}
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: certificate verified OK: CN=bz
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: IKEv2 mode peer ID is ID_DER_ASN1_DN: 'CN=bz'
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: Authenticated using RSA
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: constructed local ESP/AH proposals for ikev2-cp (IKE SA responder matching remote ESP/AH proposals): 1:ESP:ENCR=AES_GCM_C_256;INTEG=NONE;ESN=DISABLED 2:ESP:ENCR=AES_GCM_C_128;INTEG=NONE;ESN=DISABLED 3:ESP:ENCR=AES_CBC_256;INTEG=HMAC_SHA2_512_256,HMAC_SHA2_256_128;ESN=DISABLED 4:ESP:ENCR=AES_CBC_128;INTEG=HMAC_SHA2_512_256,HMAC_SHA2_256_128;ESN=DISABLED 5:ESP:ENCR=AES_CBC_128;INTEG=HMAC_SHA1_96;ESN=DISABLED (default)
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: proposal 1:ESP:SPI=7af3f1a1;ENCR=AES_GCM_C_256;ESN=DISABLED chosen from remote proposals 1:ESP:ENCR=AES_GCM_C_256;ENCR=AES_GCM_C_128;ENCR=CHACHA20_POLY1305;ESN=DISABLED[first-match] 2:ESP:ENCR=AES_CBC_256;ENCR=AES_CBC_192;ENCR=AES_CBC_128;INTEG=HMAC_SHA2_384_192;INTEG=HMAC_SHA2_256_128;INTEG=HMAC_SHA2_512_256;INTEG=HMAC_SHA1_96;ESN=DISABLED
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: received unsupported NOTIFY v2N_NO_ADDITIONAL_ADDRESSES 
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: received unsupported NOTIFY v2N_EAP_ONLY_AUTHENTICATION 
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #30: received unsupported NOTIFY v2N_IKEV2_MESSAGE_ID_SYNC_SUPPORTED 
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #31: negotiated connection [0.0.0.0-255.255.255.255:0-65535 0] -> [192.168.1.100-192.168.1.100:0-65535 0]
Mar  4 21:59:05 core pluto[25972]: "ikev2-cp"[30] 178.197.x.x #31: STATE_V2_IPSEC_R: IPsec SA established tunnel mode {ESP/NAT=>0x7af3f1a1 <0x7ae96631 xfrm=AES_GCM_16_256-NONE NATOA=none NATD=178.197.x.x:21764 DPD=active}


The client shows keep-alive attempts. Not sure if they are answered:

ar  4 21:59:03 00[DMN] +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Mar  4 21:59:03 00[DMN] Starting IKE service (strongSwan 5.8.2dr1, Android 8.0.0 - 34.4.A.2.118/2018-09-01, F5321 - Sony/F5321/Sony, Linux 3.10.84-perf-g51b663cc723-04742-g5bcfaca9e61, aarch64)
Mar  4 21:59:03 00[LIB] loaded plugins: androidbridge charon android-log openssl fips-prf random nonce pubkey chapoly curve25519 pkcs1 pkcs8 pem xcbc hmac socket-default revocation eap-identity eap-mschapv2 eap-md5 eap-gtc eap-tls x509
Mar  4 21:59:03 00[JOB] spawning 16 worker threads
Mar  4 21:59:03 07[CFG] loaded user certificate 'CN=bz' and private key
Mar  4 21:59:03 07[CFG] loaded CA certificate 'C=CH, ST=ZH, O=xxxx'
Mar  4 21:59:03 07[IKE] initiating IKE_SA android[2] to 84.75.x.x
Mar  4 21:59:03 07[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) ]
Mar  4 21:59:03 07[NET] sending packet: from 10.80.175.163[45162] to 84.75.x.x[500] (716 bytes)
Mar  4 21:59:03 10[NET] received packet: from 84.75.x.x[500] to 10.80.175.163[45162] (38 bytes)
Mar  4 21:59:03 10[ENC] parsed IKE_SA_INIT response 0 [ N(INVAL_KE) ]
Mar  4 21:59:03 10[IKE] peer didn't accept DH group ECP_256, it requested MODP_2048
Mar  4 21:59:03 10[IKE] initiating IKE_SA android[2] to 84.75.x.x
Mar  4 21:59:03 10[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) ]
Mar  4 21:59:03 10[NET] sending packet: from 10.80.175.163[45162] to 84.75.x.x[500] (908 bytes)
Mar  4 21:59:03 11[NET] received packet: from 84.75.x.x[500] to 10.80.175.163[45162] (457 bytes)
Mar  4 21:59:03 11[ENC] parsed IKE_SA_INIT response 0 [ SA KE No N(FRAG_SUP) N(NATD_S_IP) N(NATD_D_IP) CERTREQ ]
Mar  4 21:59:03 11[CFG] selected proposal: IKE:AES_GCM_16_256/PRF_HMAC_SHA2_512/MODP_2048
Mar  4 21:59:03 11[IKE] local host is behind NAT, sending keep alives
Mar  4 21:59:03 11[IKE] received cert request for "C=CH, ST=ZH, O=xxx"
Mar  4 21:59:03 11[IKE] sending cert request for "C=CH, ST=ZH, O=xxx"
Mar  4 21:59:04 11[IKE] authentication of 'CN=bz' (myself) with RSA signature successful
Mar  4 21:59:04 11[IKE] sending end entity cert "CN=bz"
Mar  4 21:59:04 11[IKE] establishing CHILD_SA android{2}
Mar  4 21:59:04 11[ENC] generating IKE_AUTH request 1 [ IDi CERT N(INIT_CONTACT) CERTREQ AUTH CPRQ(ADDR ADDR6 DNS DNS6) N(ESP_TFC_PAD_N) SA TSi TSr N(MOBIKE_SUP) N(NO_ADD_ADDR) N(EAP_ONLY) N(MSG_ID_SYN_SUP) ]
Mar  4 21:59:04 11[ENC] splitting IKE message (2022 bytes) into 2 fragments
Mar  4 21:59:04 11[ENC] generating IKE_AUTH request 1 [ EF(1/2) ]
Mar  4 21:59:04 11[ENC] generating IKE_AUTH request 1 [ EF(2/2) ]
Mar  4 21:59:04 11[NET] sending packet: from 10.80.175.163[43158] to 84.75.x.x[4500] (1368 bytes)
Mar  4 21:59:04 11[NET] sending packet: from 10.80.175.163[43158] to 84.75.x.x[4500] (719 bytes)
Mar  4 21:59:04 12[NET] received packet: from 84.75.x.x[4500] to 10.80.175.163[43158] (535 bytes)
Mar  4 21:59:04 12[ENC] parsed IKE_AUTH response 1 [ EF(1/4) ]
Mar  4 21:59:04 12[ENC] received fragment #1 of 4, waiting for complete IKE message
Mar  4 21:59:04 13[NET] received packet: from 84.75.x.x[4500] to 10.80.175.163[43158] (535 bytes)
Mar  4 21:59:04 13[ENC] parsed IKE_AUTH response 1 [ EF(2/4) ]
Mar  4 21:59:04 13[ENC] received fragment #2 of 4, waiting for complete IKE message
Mar  4 21:59:04 15[NET] received packet: from 84.75.x.x[4500] to 10.80.175.163[43158] (535 bytes)
Mar  4 21:59:04 15[ENC] parsed IKE_AUTH response 1 [ EF(3/4) ]
Mar  4 21:59:04 15[ENC] received fragment #3 of 4, waiting for complete IKE message
Mar  4 21:59:04 14[NET] received packet: from 84.75.x.x[4500] to 10.80.175.163[43158] (366 bytes)
Mar  4 21:59:04 14[ENC] parsed IKE_AUTH response 1 [ EF(4/4) ]
Mar  4 21:59:04 14[ENC] received fragment #4 of 4, reassembled fragmented IKE message (1784 bytes)
Mar  4 21:59:04 14[ENC] parsed IKE_AUTH response 1 [ IDr CERT AUTH CPRP(ADDR DNS) SA TSi TSr ]
Mar  4 21:59:04 14[IKE] received end entity cert "CN=vpn.hidden.ch"
Mar  4 21:59:04 14[CFG]   using trusted ca certificate "C=CH, ST=ZH, O=xxx"
Mar  4 21:59:04 14[CFG] checking certificate status of "CN=bz"
Mar  4 21:59:04 14[CFG] certificate status is not available
Mar  4 21:59:04 14[CFG]   reached self-signed root ca with a path length of 0
Mar  4 21:59:04 14[CFG]   using trusted certificate "CN=bz"
Mar  4 21:59:04 14[IKE] signature validation failed, looking for another key
Mar  4 21:59:04 14[CFG]   using certificate "CN=vpn.hidden.ch"
Mar  4 21:59:04 14[CFG]   using trusted ca certificate "C=CH, ST=ZH, O=xxx"
Mar  4 21:59:04 14[CFG] checking certificate status of "CN=vpn.hidden.ch"
Mar  4 21:59:04 14[CFG] certificate status is not available
Mar  4 21:59:04 14[CFG]   reached self-signed root ca with a path length of 0
Mar  4 21:59:04 14[IKE] authentication of 'vpn.hidden.ch' with RSA signature successful
Mar  4 21:59:04 14[IKE] IKE_SA android[2] established between 10.80.175.163[CN=bz]...84.75.x.x[vpn.hidden.ch]
Mar  4 21:59:04 14[IKE] scheduling rekeying in 35942s
Mar  4 21:59:04 14[IKE] maximum IKE_SA lifetime 36542s
Mar  4 21:59:04 14[IKE] installing DNS server 10.76.1.1
Mar  4 21:59:04 14[IKE] installing new virtual IP 192.168.1.100
Mar  4 21:59:04 14[IKE] CHILD_SA android{2} established with SPIs 7af3f1a1_i 7ae96631_o and TS 192.168.1.100/32 === 0.0.0.0/0
Mar  4 21:59:04 14[DMN] setting up TUN device for CHILD_SA android{2}
Mar  4 21:59:04 14[DMN] successfully created TUN device
Mar  4 22:00:29 11[IKE] sending keep alive to 84.75.x.x[4500]
Mar  4 22:11:10 15[IKE] sending keep alive to 84.75.x.x[4500]
Mar  4 22:11:55 14[IKE] sending keep alive to 84.75.x.x[4500]
Mar  4 22:13:07 09[IKE] sending keep alive to 84.75.x.x[4500]


The firewall is OK from my perspective:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 103M  142G ACCEPT     all  --  vlan5  *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 5981  386K ACCEPT     all  --  vlan5  *       192.168.1.0/24       0.0.0.0/0            policy match dir in pol ipsec
  469  247K ACCEPT     udp  --  vlan5  *       0.0.0.0/0            0.0.0.0/0            udp dpt:500
 7671 1465K ACCEPT     udp  --  vlan5  *       0.0.0.0/0            0.0.0.0/0            udp dpt:4500
  372 52561 ACCEPT     udp  --  vlan5  *       0.0.0.0/0            0.0.0.0/0            udp dpt:1701
 711K   42M DROP       all  --  vlan5  *       0.0.0.0/0            0.0.0.0/0     

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 184M  234G ACCEPT     all  --  vlan5  *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 4244  726K ACCEPT     all  --  vlan5  *       192.168.1.0/24       0.0.0.0/0            policy match dir in pol ipsec
  754 82552 DROP       all  --  vlan5  *       0.0.0.0/0            0.0.0.0/0   

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  *      vlan5   0.0.0.0/0            0.0.0.0/0            policy match dir out pol ipsec
3938K  460M MASQUERADE  all  --  *      vlan5   0.0.0.0/0            0.0.0.0/0           



Both server and client show active connections even when the connection has stalled...

# ipsec trafficstatus
006 #33: "ikev2-cp"[32] 178.197.x.x, type=ESP, add_time=1583356793, inBytes=136685, outBytes=207835, id='CN=bz', lease=192.168.1.100/32



Any ideas? Cheers


More information about the Swan mailing list