[Openswan dev] "auth failed on incoming packet" when using NAT-T
Markus Hanauska
hanauska at equinux.net
Tue Dec 7 15:15:11 CET 2004
On 07. Dez 2004, at 14:58 Uhr, Ken Bantoft wrote:
>
> Try disabling compression on the racoon side, and 'compress=no' on the
> Openswan side for your conn.
It is disabled on the Racoon side by default, I disabled it on the
OpenSWAN side but no effect. Same error as before.
The config ist like described in the readme, with %any as right and a
chosen address of 10.1.2.3/32 as right net (right is remote in my
case). Left is bound to the address of one NIC of the Linux machine and
the net is the net behind the other NIC with the private IP. Routes are
created correctly.
If I ping from Racoon to OpenSWAN side, packages are discarded with the
error message of before. If I ping from behind the OpenSWAN Gateway,
pings are going through the OpenSWAN gateway, become ESP and are
encapsulates in UDP packages port 4500, they arrive at my Racoon side,
where my wrapper decapsulates them (no error here), the ESP layer
decrypts them (no error either), the ping is answered (echo request),
the answer is again encrypted to ESP (no error), encapsulated by my
wrapper within UDP port 4500 and send out. Finally it arrives at the
OpenSWAN gateway and is thrown away, saying it can't be authenticated.
I checked the OpenSWAN code and from what I can see, this error appears
if the calculated hash does not match the hash within the package. But
how can NAT-T have an influence on the hash or how it is calculated?
Neither the hash, nor the hashed data is touched during en- and
de-capsulation. Both sides use HMAC-MD5 for hashing and they both use
the same HASH key methinks. At least on the Racoon side, that is easy
to find out:
sudo setkey -D
aa.aa.aa.aa bb.bb.bb.bb
esp mode=tunnel spi=3249018409(0xc1a81629) reqid=0(0x00000000)
E: 3des-cbc 878f3495 43dae82f b9b57a5c 3b3342c3 eaa9f326
00b491ab
A: hmac-md5 ca24a073 d2477e05 010b6209 f03fa81f
replay=4 flags=0x00000000 state=mature seq=1 pid=8414
created: Dec 7 15:02:33 2004 current: Dec 7 15:11:02 2004
diff: 509(s) hard: 28800(s) soft: 23040(s)
last: Dec 7 15:11:02 2004 hard: 0(s) soft: 0(s)
current: 68544(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 504 hard: 0 soft: 0
refcnt=2
bb.bb.bb.bb aa.aa.aa.aa
esp mode=tunnel spi=127935886(0x07a0258e) reqid=0(0x00000000)
E: 3des-cbc 34f3247c e954aff4 5e32144a be9a1798 c510dfba
136b7634
A: hmac-md5 4ded7705 2a4dac1e 6af2e490 6fadf12e
replay=4 flags=0x00000000 state=mature seq=0 pid=8414
created: Dec 7 15:02:33 2004 current: Dec 7 15:11:02 2004
diff: 509(s) hard: 28800(s) soft: 23040(s)
last: hard: 0(s) soft: 0(s)
current: 0(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 0 hard: 0 soft: 0
refcnt=1
bb.bb.bb.bb is the OpenSWAN side. Don't worry, this is just from a test
run, so no data of above is confidential, still I prefer to keep the IP
addresses secret.
Any idea how to verify that OpenSWAN uses the same 3DES and HMAC keys
on its side? I can find the HMAC keys somewhere in the pluto log, but
any idea how to get this info for an already established tunnel?
>
> On Mon, 2004-12-06 at 12:13 +0100, Markus Hanauska wrote:
>> No reply on user list, maybe someone on dev list can help.
>>
>>
>> Hi there!
>>
>> I have a little Problem with NAT-T, using OpensSWAN 2.2.0, KLIPS on
>> Linux Kernel 2.4.28 (with NAT-T patch, that I had to partly patch in
>> by
>> hand; but I read here that the bug is already known and fixed), the
>> distribution is Fedora Core 1. OpenSWAN plays the server here, on the
>> other side a patched version of Racoon (Kame project) with NAT-T
>> support plays the client. It's a host to network connection.
>>
>> Without NAT-T I can make a tunnel and ping the private interface of my
>> Linux gateway. Everthing works like expected. Packages arive and leave
>> the interface as ESP. The NAT device in my test setup uses IPSec Pass
>> Through, but that only works for one connection from behind that NAT
>> device.
>>
>> For a second connection NAT-T is necessary. But the second I enable
>> NAT-T, nothing works anymore.
>>
>> Pluto makes the connection as before, detecting NAT-T draft-2,
>> switching to port 4500 during phase 1 (so does Racoon) and they both
>> do
>> phase 1 and phase 2 like a charm. The tunnel is established, both
>> sides
>> are sure about having a working tunnel. But all traffic is thrown away
>> by KLIPS with the message:
>>
>> "auth failed on incoming packet"
>>
>> The client side sends out the ESP packages, wrapped in UDP packages,
>> on
>> port 4500. I know pretty well how the client side works, after all
>> I've written the wrapper all by myself.
>>
>> Okay, you may say that the problem is home-made, my wrapper might be
>> wrong. Could be, but then why does it work with SonicWALL, Netscreen
>> and Zyxel devices? And it works with old NAT-T (the one on port 500)
>> and with new NAT-T (the one on port 4500) - e.g. the small SonicWALLs
>> use the old one (RFC draft 0/1), the big ones use the new one (RFC
>> draft 2); whereby the real new NAT-T starts with draft 3 (where the
>> payload numbers have been altered).
>>
>> I've read all the RFCs and I do exactly what is written there. Add an
>> UDP header in-between, correct the IP header (length, checksum, next
>> protocol) and add a non-ESP marker (draft 2 and above) or a non-IKE
>> marker (draft 0-1) where necessary. If this code were wrong, it
>> wouldn't work with hardware solutions of other vendors.
>>
>> The next thing you may guess is, maybe the ESP implementation is
>> broken. If this was the case, why does it work perfectly the second I
>> disable NAT-T on the OpenSWAN side? After all the ESP implementation
>> doesn't know that I wrap the packages (the packages are caught and
>> altered between protocol and network layer, transparent for both
>> layers), for the ESP layer, everything is like without NAT-T.
>>
>> What else can I tell you? Both sides show that they use 3des and MD5
>> on
>> the tunnel and authentication during IKE was pre-shared key.
>>
>> On the client side, I have setkey and can thus easy access to the SPI
>> or the key used to encrypt the packages, and so on. I don't know how
>> to
>> get such output on the server (OpenSWAN) side.
>>
>> Maybe you can help me with that, give me some hints on how to get more
>> info useful for debugging the problem. Or maybe you have an idea what
>> might cause the problem. Any advice will be greatly appreciated!
>>
>> Thanks in advance.
>>
>
>
>
--
Best Regards,
Markus Hanauska
More information about the Dev
mailing list