Re: WGLC: draft-ietf-hip-native-nat-traversal-15

Miika Komu <[email protected]> Thu, 9 Mar 2017 18:01:45 +0200
Newsgroups gmane.ietf.hipsec,gmane.ietf.hip
Organization Ericsson AB
Message-ID <[email protected]>
Hi Jeff,

On 03/09/2017 05:39 PM, Jeff Ahrenholz wrote:
>> 3) In section 4.10 (NAT keepalives), it states:
>>
>>        Both a registered client and relay server SHOULD
>>        send a HIP NOTIFY packets to each other every 15 seconds (the so-
>>        called Tr value in ICE) unless they have exchange some other traffic
>>        over the used UDP ports.
>>
>>    However, I couldn't find an explanation anywhere (also in RFC 5770) about
>> how to code this NOTIFY.  Would it make sense to define also a "NAT_KEEPALIVE"
>> NOTIFY message type for this purpose?
>
> Tom has a good point here, about how to code the NOTIFY keepalive.

yes, I agree. The document lists also another option:

4.10.  NAT Keepalives

Likewise, if a host has
    not sent any data to another host it has established a host
    association in the ICE-HIP_UDP mode within 15 seconds, it MUST send
    either a HIP NOTIFY packet or, alternatively, an ICMPv6 echo request
    inside the related ESP tunnel.

Actually ICMPv6 would be my personal choice as a implementer instead of 
NOTIFY. You can also detect connectivity problems at the data plane this 
way and trigger a LOCATOR UPDATE.

(ICMPv6 is not a control plane keepalive, but since the control and data 
plane share the same port, this does not matter.)

> I have a more general question about NAT keepalives based on some recent experiences with implementing/fielding this approach.
> (My comments below shouldn’t hold up the publishing of this draft...)
>
> Have we considered using UPDATE packets versus NOTIFY?
> What are the tradeoffs?

This is possible, but probably three options is too much?

> I was thinking about the following advantages of the UPDATE:
> - SEQ protects against packet replays
> - instead of each endpoint periodically tx NOTIFY, one side could send an UPDATE and request acknowledgement (a bi-directional check)
> - you could send an UPDATE or an UPDATE acknowledgement every 15 seconds (no need for both)
> - if you’re not sending data, but only receiving, you can still do a bi-directional check to ensure liveness (and vice versa)
> - you can include ESP_INFO with SPI number (old SPI == new SPI), which will help HIP middleboxes, and will help endpoints know which SA is being kept alive
> - NOTIFY should not be used to change state (RFC 7401)

Only one side sending the UPDATE is possible because the CONTROLLED role 
remains throughout the session.

> What happens if you don’t receive keepalives?
> - if your UPDATE goes unacknowledged, do something -- retransmit, or start an address check, rekey, or teardown procedure

Good point.

> Potential drawbacks:
> - is UPDATE considered too heavyweight?
> - UPDATE doesn’t have a purpose code, is the swiss army knife of HIP packets (rekey, readdress, address check, etc.)
> - UPDATE requires established state; NOTIFY does not

UPDATE is certainly more heavy-weight especially since it occurs every 
15 seconds. We have three choices of which we could select just one or 
two (probably three is too much):

1. ICMPv6
2. NOTIFY
3. UPDATE

What do you think?

_______________________________________________
Hipsec mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/hipsec