Hi Valery,

There's something I'm missing here. Let's say we go for a solution where we fragment IKE packets into pieces of 576 bytes, at the application level.

Now, how do we determine the length of the ESP-over-UDP packets? Are you suggesting we fix them at 576 too, or do we need to have a (proprietary) path MTU discovery for this to *really* work?

Thanks,
        Yaron

On 06/09/2012 08:40 AM, Valery Smyslov wrote:
Hi,

Hash-and-URL do require customer to deploy www-server. I admit that
for some enterprices that might be burden to deploy, but quite a lot
of other enterprices do already have working deployed www-server they
can use...

The url can be static, the certificate stored on that url can be
static, new certificates needs to be pushed to www-server only and
only when the new certiticate is enrolled. The url can be something
like http://certs.example.com/<ca-short-name>/<hash-of-cert>.

Hash-and-URL should make the packets small enough that fragmentation
is not needed (especially if network supports 1280 byte packets).



* Build a fragmentation layer within IKE, so IKE messages are
broken into several packets that get reassembled at the
destination. This is the path taken by one of our competitors [1].
This means that IKE has segmentation in addition to other TCP-like
features such as retransmission.

I like this approach, but as far as I know this is done for IKEv1
only.

This also requires finding pmtu and so on which means this whole
protocol gets quite complicated.

Not necessary. For the sake of simplicity you may always fragment to
the smallest packets guaranteed to pass through (576 bytes for IP4).
IKE is not bulk transfer protocol, so performance is not an issue here.

If mechanisms already defined in the IKEv2 (Hash-and-URL etc) are not
enough, then I think IKE over TCP is the way to go. Most likely it
would be better to do it similarly we do NAT-T, i.e. instead of
switching to UDP port 4500 we would switch to TCP port 4500 for the
IKE_AUTH packets. Nothing prevents starting the creation of the TCP
connection while sending the first IKE_SA_INIT packet over UDP.

As with NAT-T we can either start over TCP port 4500 immediately from
the beginning, if we like (i.e. we know from previous experience or
from configuration that we should do that). As with NAT-T we can use
either UDP or TCP port 4500 at will, regardless whether NAT was
detected or not.

Also either end can send requests either over UDP or TCP and reply
would come back over same channel. In some cases we might want to
send packet first with UDP, and if we do not get any replies back for
our requests, we might want to fall back to TCP. In the other hand
there is no point of sending retransmissions to TCP connection, i.e.
we always only send one copy there (unless the TCP connection is
reset, and we recreate it). Anyways it is possible for both initiator
and responder to see same packet coming both over TCP and UDP, so
normal windowing and duplicate packet detection needs to be done (and
resending of replies if needed etc)

Using TCP port 4500 instead of TCP port 500 has the benefit that it
might bypass those filters someone was complaining about.

If we want to support ESP over that TCP channel too, then we need to
add some kind of framing which will tell the simulated UDP packet
length, i.e. similar what DNS does (prefix the packet with two byte
length field). On other hand we might want to add also non-IKE marker
somewhere too.

Don't you think it looks too complicated? Two different transport
each with two ports, special framing etc...

Adding one notification to the IKE_SA_INIT to indicate the support of
this feature would be need.

Note, that if we run IKE_SA_INIT over UDP, then we can still support
stateless cookies,

Successful COOKIE exchange make you sure that peer is real entity,
but in case of TCP this information can't help TCP/IP stack to
distinguith between bad and good boys. Or you have to constantly update
firewall rules enabling and disabling incoming TCP connections
from different addresses depending on success/failure of
COOKIE exchange.

and for packets requiring fragmentation there is no
stateless processing anyways (whether the state is in the system
reassembly system, new IKEv2 reassembly system, or in the TCP does not
really matter).

Any IKE exchange after COOKIE request is already statefull,
so I don't see any problem here.

One open issue is how this fits with MOBIKE. I.e. if we get address
updates over UDP, do we immediately also create matching TCP
connection, and what do we do if that TCP connection creation fails,
even when the UDP worked etc.

Yes, It will become more and more complex.

The ESP over TCP do cause some problems, as some implementations do
capture those packets already in the kernel without ever giving them
to the userland, and doing that from the TCP stream is bit harder and
requires bit more code.

Oh... ESP over TCP is very problematic... And if the transports are different
for IKE and ESP, we will catch all kinds of problems when IKE goes
smoothly, but following ESP doesn't work at all.

Regards,
Smyslov Valery.

_______________________________________________
IPsec mailing list
IPsec@ietf.org
https://www.ietf.org/mailman/listinfo/ipsec
_______________________________________________
IPsec mailing list
IPsec@ietf.org
https://www.ietf.org/mailman/listinfo/ipsec

Reply via email to