[strongSwan] NAT Traversal - Issues in understanding

Andreas Steffen andreas.steffen at strongswan.org
Thu Jul 21 15:09:27 CEST 2011


Hello Holger,

it is important to understand that NAT-Traversal is implemented
differently in the IKEv1 pluto and IKEv2 charon daemons, respectively.

IKEv1 pluto
-----------

Since the original IKEv1 standard originally didn't have NAT-T support
and was added later on by RFC 3947 "Negotiation of NAT-Traversal in
the IKE", NAT-T is disabled by default in the pluto daemon and must
explicitly be enabled using the parameter

nat_traversal=yes

With NAT-T enabled, pluto will float to UDP port 4500 starting with
the third IKEv1 Main Mode message exchange if a NAT situation was
detected using the NAT-D payloads during the second message exchange.

IKEv2 charon
------------

The nat_traversal parameter is ignored by the IKEv2 daemon since
NAT detection and ensuing NAT traversal is always active and cannot
be deactivated. What's probably confusing you is the

  mobike=yes

parameter which activates the IKEv2 Mobility and Multihoming Protocol
(RFC 4555 MOBIKE) by default. During the initial negotiation the
IKE_SA_INIT request/response pair is always sent on UDP port 500
but with MOBIKE enabled the port always floats to UDP port 4500
starting with the IKE_AUTH request/response pair even if *no*
NAT situation is detected. If you want IKEv2 to behave in the same
way as IKEv1 then please deactivate MOBIKE with

  mobike=no

Please be aware that a serious NAT-T bug was fixed in strongSwan
4.5.1 and later versions which in the case of a responder sitting
behind a NAT router, caused the host to answer requests sent on
port 4500 on port 500 instead.

Hope this helps!

Kind regards

Andreas

On 07/21/2011 02:38 PM, Holger Metschulat wrote:
> Hi all,
> 
> I have a problem understanding how NAT Traversal is implemented in
> StrongSwan.
> 
> I thought that an IPSEC endpoint which is enabled for NAT Traversal will
> listen on Port 500 and Port 4500. Any IKE negotiation starts on port 500
> first, when a NAT device is detected, the negotiation continues on port
> 4500.
> 
> Playing around with StrongSwan, nat_traversal=no has StrongSwan
> listening only on port 500 (and using port 500 for connections);
> nat_traversal=yes moves the listening port and destination port to 4500.
> This is contrary to what my belief was how NAT Traversal works.
> 
> Can you comment please?
> 
> Regards,
> Holger
> 

======================================================================
Andreas Steffen                         andreas.steffen at strongswan.org
strongSwan - the Linux VPN Solution!                www.strongswan.org
Institute for Internet Technologies and Applications
University of Applied Sciences Rapperswil
CH-8640 Rapperswil (Switzerland)
===========================================================[ITA-HSR]==




More information about the Users mailing list