[strongSwan] Failure to install IPsec SAs in kernel for IPv6 peer

Sandesh Sawant sandesh.sawant at gmail.com
Fri Aug 11 07:07:37 CEST 2017

I am using Strongswan-5.5.2 with 4.4 Linux Kernel on two Debian systems.
ESP tunnel establishment works as expected between two IPv4 endpoints. But
ESP tunnel establishment between two IPv6 endpoints and observed following
errors in strongswan logs during Quick Mode:


charon:  [authpriv.info] 14[NET]
<2020::10_4.4.4.0/24-2020::20_3.3.3.0/24|1> received packet: from
2020::20[500] to 2020::10[500] (444 bytes)

charon:  [authpriv.info] 14[ENC]
<2020::10_4.4.4.0/24-2020::20_3.3.3.0/24|1> parsed QUICK_MODE response
1674824392 [ HASH SA No KE ID ID ]

charon:  [authpriv.info] 14[KNL]
<2020::10_4.4.4.0/24-2020::20_3.3.3.0/24|1> received netlink error:
Protocol not supported (93)

charon:  [authpriv.info] 14[KNL]
<2020::10_4.4.4.0/24-2020::20_3.3.3.0/24|1> unable to add SAD entry with
SPI cb0cdfda

charon:  [authpriv.info] 14[KNL]
<2020::10_4.4.4.0/24-2020::20_3.3.3.0/24|1> received netlink error:
Protocol not supported (93)

charon:  [authpriv.info] 14[KNL]
<2020::10_4.4.4.0/24-2020::20_3.3.3.0/24|1> unable to add SAD entry with
SPI c1205b7d

charon:  [authpriv.info] 14[IKE]
<2020::10_4.4.4.0/24-2020::20_3.3.3.0/24|1> unable to install inbound and
outbound IPsec SA (SAD) in kernel

here is the output of ipsec statusall:

Status of IKE charon daemon (strongSwan 5.5.2, Linux 4.4.57, x86_64):

  uptime: 20 minutes, since Aug 10 12:01:39 2017

  malloc: sbrk 1480032, mmap 0, used 345280, free 1134752

  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0,
scheduled: 3

  loaded plugins: charon aes des rc2 sha2 sha1 md5 random nonce x509
revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey
pem openssl fips-prf xcbc cmac hmac attr kernel-netlink resolve
socket-default stroke vici updown xauth-generic

Listening IP addresses:



2020::10_4.4.4.0/24-2020::20_3.3.3.0/24:  2020::10...2020::20  IKEv1,

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24:   local:  [2020::10] uses
pre-shared key authentication

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24:   remote: [2020::20] uses
pre-shared key authentication

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24:   child: ===
TUNNEL, dpdaction=restart

Routed Connections:

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24{1}:  ROUTED, TUNNEL, reqid 1

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24{1}: ===

Security Associations (1 up, 0 connecting):

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24[1]: ESTABLISHED 20 minutes ago,

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24[1]: IKEv1 SPIs: 23b31ae851f9bddb_i*
bd1fcbc1681eb3ca_r, pre-shared key reauthentication in 7 hours

2020::10_4.4.4.0/24-2020::20_3.3.3.0/24[1]: IKE proposal:

ipsec.conf contents (peer contents are matching):

conn %default
        ikelifetime = 28800s
        type = tunnel
        lifetime = 3600s
        dpddelay = 30
        dpdaction = restart

conn 2020::10_4.4.4.0/24-2020::20_3.3.3.0/24
        keyexchange = ikev1
        auto = start
        fragmentation = yes


>From the logs it looks like the required XFRM modules related to IPv6
support are not pre-loaded by strongSwan.
Therefore I manually loaded the missing kernel modules related to XFRM6
viz. ah6, esp6, ipcomp6, xfrm6_tunnel, xfrm6_mode_tunnel,
xfrm6_mode_transport, ip6_tunnel. However it didn't result in success of
IPv6 SA download.

Finally I built all the features recommended at
https://wiki.strongswan.org/projects/strongswan/wiki/KernelModules as
statically-linked in kernel instead of as modules, and then the IPv6 SA
download was successful with the new kernel.

This makes me think auto-loading of Ipv6 related xfrm modules is missing in
strongSwan. I found the following lines in it's source
file src/starter/netkey.c

    /* make sure that all required IPsec modules are loaded */
    if (stat(PROC_MODULES, &stb) == 0)
        ignore_result(system("modprobe -qv ah4"));
        ignore_result(system("modprobe -qv esp4"));
        ignore_result(system("modprobe -qv ipcomp"));
        ignore_result(system("modprobe -qv xfrm4_tunnel"));
        ignore_result(system("modprobe -qv xfrm_user"));
Shouldn't it be doing modprobe for ipv6 related xfrm modules?

Can someone point out the exact modules required to be loaded so that IPv6
SA download by charon succeeds.

Thanks & regards,
Sandesh Sawant
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.strongswan.org/pipermail/users/attachments/20170811/b8bfcdba/attachment-0001.html>

More information about the Users mailing list