[Openswan Users]

Brian Candler B.Candler at pobox.com
Thu Apr 6 17:45:23 CEST 2006


On Thu, Apr 06, 2006 at 05:12:58PM +0200, Paul Wouters wrote:
> > Earlier today I started debugging a problem with 2.4.4 and L2TP over IPSEC
> > transport mode (the connection came up OK but after a while the SA stopped
> > working).
> 
> Later on you mention the machine is on private IP behind NAT. Did you apply
> a patch to make openswan behind NAT work?

I don't think so. OpenWRT applies a few minor patches to openswan, but they
seem to be tweaks to startup scripts: you can see them at

[userland]
https://dev.openwrt.org/browser/branches/whiterussian/openwrt/package/openswan/patches
[kernel]
https://dev.openwrt.org/browser/branches/whiterussian/openwrt/target/linux/package/openswan/patches

> > But then I thought I'd upgrade openswan to 2.4.5rc7 just to be up to the
> > current version; and now I'm hitting an inability to deliver packets at all
> > once the SA is established. The far end rejects each one with
> > "IPSEC(epa_des_crypt): decrypted packet failed SA identity check"
> 
> Odd. Are you sure nothing else changed? Such as the mtu ?

I'm pretty sure not. However I can't see how the MTU would affect things
here.

If I tcpdump the ipsec0 interface I can see the L2TP setup requests. If I
tcpdump the actual packets coming out of the interface I see them UDP-4500
encapsulated. The Cisco rejects them.

> Hmm, we did not do extensive testing with transport mode + PSK + NAT-T,
> because that setup is strongly discouraged. You should use X.509
> certificates instead of PSK, especially when using NAT-T.
> Other then that, the conn looks fine.

OK, although I would imagine that authentication is not the issue here.

> That looks okay too.
> 
> > * However, whenever the L2TP packets are sent, encapsulated in UDP 4500,
> > they are discarded by the Cisco. The Cisco logs the following message:
> >
> >     Apr  6 14:40:53 devlns1-1 48752: Apr  6 13:40:52.122: IPSEC(epa_des_crypt): decrypted packet failed SA identity check
> 
> My first bet would still be packet fragmentation. With transport mode, there may
> never be fragmenting.

The tcpdump shows no fragmentation. The L2TP setup packets are small.

> >          local crypto endpt.: Y.Y.Y.Y, remote crypto endpt.: X.X.X.X
> >          path mtu 1600, ip mtu 1600
> 
> 1600?
> 
> >     root at OpenWrt:~# cat /proc/net/ipsec_eroute
> >     40         10.71.32.1/32:1701 -> Y.Y.Y.Y/32:1701 => esp0x1a6ea42b at Y.Y.Y.Y:17
> 
> Can you try setting overridemtu=1400?

OK, I've stuck this under "config setup". No change though.

> > * Not sure if this is related, but when I first did "S60ipsec start" after
> > upgrading to 2.4.5rc7 I got:
> >
> >     Jan  1 00:01:05 (none) daemon.err ipsec__plutorun: ipsec_auto: fatal error in "L2TP": (/etc/ipsec.conf, line 12) unknown parameter name "leftprotoport"
> 
> First, please correct the time on the unit.

Yep I did that too after that error was logged. The OpenWRT box has no RTC
so I have to remember to rdate it after rebooting.

> I'm not sure I understand what is going wrong here :(

No... although looking at the archives I see a couple of other people
reporting problems with L2TP/IPSEC and NAT-T in 2.4.5rc7.

I've started looking at the code. One thing which confuses me is:

[programs/pluto/nat_traversal.h]
#define NAT_TRAVERSAL_IETF_00_01     1
#define NAT_TRAVERSAL_IETF_02_03     2
#define NAT_TRAVERSAL_RFC            3
#define NAT_TRAVERSAL_OSX            4

#define NAT_TRAVERSAL_NAT_BHND_ME    30
#define NAT_TRAVERSAL_NAT_BHND_PEER  31

But the first four don't match up with this:

[lib/libopenswan/constants.c]
const char *const natt_type_bitnames[] = {
  "draft-ietf-ipsec-nat-t-ike-00/01",    /* 0 */
  "draft-ietf-ipsec-nat-t-ike-02/03",
  "RFC 3947 (NAT-Traversal)",
  "3",                                   /* 3 */
  "4",   "5",   "6",   "7",
  "8",   "9",   "10",  "11",
  "12",  "13",  "14",  "15",
  "16",  "17",  "18",  "19",
  "20",  "21",  "22",  "23",
  "24",  "25",  "26",  "27",
  "28",  "29",
  "nat is behind me",
  "nat is behind peer"
};

This means the debug messages are confusing. With plutodebug="natt" I see:

Apr  6 16:33:24 OpenWrt kern.warn pluto[5786]: "L2TP" #1: received Vendor ID payload [draft-ietf-ipsec-nat-t-ike-03] method set to=108
Apr  6 16:33:24 OpenWrt kern.warn pluto[5786]: "L2TP" #1: enabling possible NAT-traversal with method RFC 3947 (NAT-Traversal)

Method 108 is VID_NATT_IETF_03 (from pluto/vendor.h), but the second message
is claiming that it's actually RFC 3947. However I think this will only
affect the display messages and nothing else.

After negotiation, though, I still see

Apr  6 16:33:24 OpenWrt kern.warn pluto[5786]: "L2TP" #1: NAT-Traversal: Result using draft-ietf-ipsec-nat-t-ike-02/03: i am NATed

I notice that nat_traversal_show_result has its own mapping from bitmap to
names, instead of using natt_type_bitnames.

Regards,

Brian.


More information about the Users mailing list