Re: [lisp] LISP NAT Traversal [Was: Virtual meeting]

Dino Farinacci <farinacci@gmail.com> Mon, 30 March 2020 23:27 UTC

Return-Path: <farinacci@gmail.com>
X-Original-To: lisp@ietfa.amsl.com
Delivered-To: lisp@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7D3AD3A1599 for <lisp@ietfa.amsl.com>; Mon, 30 Mar 2020 16:27:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.198
X-Spam-Level:
X-Spam-Status: No, score=-0.198 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kRX3_GWlBQZR for <lisp@ietfa.amsl.com>; Mon, 30 Mar 2020 16:27:48 -0700 (PDT)
Received: from mail-pg1-x530.google.com (mail-pg1-x530.google.com [IPv6:2607:f8b0:4864:20::530]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A433A3A1598 for <lisp@ietf.org>; Mon, 30 Mar 2020 16:27:48 -0700 (PDT)
Received: by mail-pg1-x530.google.com with SMTP id h8so9435899pgs.9 for <lisp@ietf.org>; Mon, 30 Mar 2020 16:27:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=SBEM3xMao0BgIwIbTV3P1UxeJfDSZ/yAHlEGSqZdCic=; b=tqbXdVyQHArRfXUyeJTmWG80KP1YWgH0eRtxo4zwHdyTK7+fw2oWbqE/wttl0fYj44 b8qFwt6bPy1ZmUdA4xOjD//VLdZuTEwfMV43QCLPSk51B7kbNg1fGmEwEZiip41S2bnd lzkAev/xkUeCgTTABe8YLLGtC3HtQDHdG91yEzt4xqB73Pz0P3ebmiY+uF/Q7QbPitQF qrEI3MWwpTnIyOwcIh/nt/eMGyZNL1TDisG7JiKJlPpZgNcq+utfTuIhIwUM+Ectxjay t5MqOON96iJgBGyEmJ7US+Kf7vY8Z9FArjMXBcoJoh1ePsDEnH3Kz06L8iQ7uVQgf/Wt hHMA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=SBEM3xMao0BgIwIbTV3P1UxeJfDSZ/yAHlEGSqZdCic=; b=hQFADALCMN5KkSIgZ9mptp7jcN4OPzWjQpbWTwvzmXsjImctZe9T2geyVz9eEt0DUf i5RyOP6bTZb5tAe1/P2sXr4cUyquHtb3RoknSMrvz9U+la1lsPt4zbbmsgYYl/Va/RMR j4YTy3Ic8DMIEsmF5osGEvxjIUYGIRD25cMfEeM9ef4xKYU7ZgtqrCtUUzihReq82EIW 2dHcdE2PuHb7edJHyJv4DCKRynAqfOPuRlWNLoorqzBDyGv/TKqrhFHjHwsHFPRMFj33 tQv5cgqJ1b1Ahjq4cHuYWdCFJu975WDglBBPYq3RPCWgH4NgQlfScNYJ6TUU15dpg8a3 5njw==
X-Gm-Message-State: AGi0PuZCZWfbH5gyh5UMqf/AcK3CKoPMwpwPl5B/N5k1nWvjDh7tXetr 6mLpJSddlAC/DA3GVA80i/w=
X-Google-Smtp-Source: APiQypJv5mUW56NfWPOxx8ZvHk1pTIhsH91cQk5I8xgeQv88lxV0TK70XB4YNPL/y6WN71rWWpAg3A==
X-Received: by 2002:a63:2a8d:: with SMTP id q135mr7245333pgq.385.1585610867697; Mon, 30 Mar 2020 16:27:47 -0700 (PDT)
Received: from ?IPv6:2601:646:9600:af10:35e8:b3a0:cdb6:7b78? ([2601:646:9600:af10:35e8:b3a0:cdb6:7b78]) by smtp.gmail.com with ESMTPSA id b16sm10982393pfb.71.2020.03.30.16.27.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 30 Mar 2020 16:27:47 -0700 (PDT)
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\))
From: Dino Farinacci <farinacci@gmail.com>
In-Reply-To: <55b348e3-66c3-0e5c-8028-446a3afa4249@ac.upc.edu>
Date: Mon, 30 Mar 2020 16:27:46 -0700
Cc: lisp@ietf.org, "Jordi Paillisse Vilanova -T (jpaillis - AAP3 INC at Cisco)" <jpaillis@cisco.com>
Content-Transfer-Encoding: quoted-printable
Message-Id: <8C01E061-9B4A-4C99-8BE6-1151B1BCB155@gmail.com>
References: <55b348e3-66c3-0e5c-8028-446a3afa4249@ac.upc.edu>
To: Albert Lopez <alopez@ac.upc.edu>
X-Mailer: Apple Mail (2.3608.60.0.2.5)
Archived-At: <https://mailarchive.ietf.org/arch/msg/lisp/e0gEL5fNj6U__LuuScptbya15kU>
Subject: Re: [lisp] LISP NAT Traversal [Was: Virtual meeting]
X-BeenThere: lisp@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: List for the discussion of the Locator/ID Separation Protocol <lisp.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/lisp>, <mailto:lisp-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/lisp/>
List-Post: <mailto:lisp@ietf.org>
List-Help: <mailto:lisp-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/lisp>, <mailto:lisp-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 30 Mar 2020 23:27:51 -0000

> I would also like to add the NAT Traversal draft discussion into the agenda.

I agree it should on the agenda and an over-due work item we need to get working.

> We have experience implementing the NAT traversal functionality in our LISP open source implementation (OOR) which have support for Android and IOS devices. We believe that NAT traversal is a critical point for LISP-MN and we would like to share our experience on that. .
> 
> Our implementation is based on the draft-ermagan-lisp-nat-traversal and during its study some questions have emerged that could be interesting to discus:

I have an implementation of NAT-traversal in the lispers.net implementation which is a subset and simpler version of the draft-ermagan-lisp-nat-traversal. I think that NAT-traversal is so important as a core functionality for LISP because many people use it today just to traverse NATs.

I would suggest we make this a working group document. It is in the charter and is long over-due to move from individual submission.

> 	• What happens when a device handovers between NAT and not NAT interfaces? The xTR has to notify the remote ITRs, however an xTR behind NAT usually only has a default map cache entry with the RTR as a default gateway. Therefore, the xTR cannot notify directly ITRs of the change of the mapping.

If the remote ITR subscribes for 0.0.0.0/0 then any more specific mappings which are registered and Map-Notified by the Map-Server to the subscribers. That is one way the problem can be solved. 

Another way is now that the xTR is not behind a NAT, it can SMR currently RLOCs it is talking to. Which also may be an RTR that the remote ITRs can be using (when they are behind NATs). That causes the non-NAT ITR and the remote RTR to do mapping lookup to get the global/non-translated RLOC of this xTR.

> 	• What happens in the previous case if the not NAT interface is IPv6? IPv6 is a ­special case. We want to maintain the connectivity with established connections (keep using the same RTR, which has the map-cache). For that to work, the RTR needs to have an IPv6 to receive an SMR from the xTR after the handover (from the new xTR’s IPv6 RLOC). Therefore RTRs announced by the Map Server should have both IPv4 and IPv6. As we don't know which RTR IPv6 addresses map to which IPv4 addresses, all RTRs should be notified.

It can be a local decision if an ITR uses an RTR for IPv6 traffic or just encapsulate directly to the ETRs that register the EID. Most customers are going to want the shortest path so I have seen the latter be deployed.

I would suggest you only use RTRs for IPv6 when you are either doing (1) signal-free IPv6 multicast or (2) have a traffic-engineering requirement. Both in general, specify that IPv4 and IPv6 can and should run ships-in-the-night.

> 	• Which should be the procedure of an RTR in front of receiving an SMR from the xTR that just handover from NAT to not NAT? Probably the answer is that the xTR sends an SMR to the RTR which then has two options 1) the 

> RTR can do an SMR to the appropriates ITRs based on the map-cache entries (but then how to know which of the map-cache entries were used by the xTR) or 2) it can act as a PxTR for the xTR that performed the handover. In that case, until when? Until the expiration of the TTL? Furthermore, what happens when an xTR roams again before the previous TTL expires.

This is no different than any other type of RLOC change. And we have many mechanisms documented for this. They are:
TTL-expiry, SMRs, pubsub Map-Notify from mappingn system.

> 	• Which is the mechanism to change the RTR used by and xTR?

Note the xTR gets periodic Info-Replies back from the map-server. The list of RTRs can change. So when the list of RTRs is changed, it is configured in the map-server and the next Info-Request that the NAT-assisted xTR sends is returned with the new list. The lispers.net implementation updates RTRs when the list changes and RLOC-probes each one to make sure they have reachability before using.

> 	• Is there any procedure from MS point of view to notify associated xTRs to change the RTR they are using?

Yes, in the Info-Reply messages the map-sever send, that is in draft-ermagan-lisp-nat-traversal.

> 	• If a NATed device wants to manage their map request and map replies, which ITR RLOCS should use to fill the Map Request?

It needs to be reachable RLOCs. And in the lispers.net implementation, an xTR behind a NAT registers it’s translated RLOC and the RTR RLOCs. That is so the remote RTR can use the translated RLOC (and the translated port it learns from Info-Requests) and remote ITRs to use the RTR’s RLOC (since that RTR is the only node that can get packets through the NAT).

Another topic but related to NAT-traversal.

Note there is a problem I came across during deployment of an IoT use-case. This is a description of the problem with an example. Say I am xTR1 and learn from the Map-Server RTRs A, B, and C. and I want to encapsulate packets for an EID behind xTR2. The encapsulation algorithms indicate that xTR1 use a 5-tuple hash to load-split packets across A, B, and C. And xTR1 knows that A, B, and C are reachable via RLOC-probing. However, xTR1 has no idea if any of A, B, or C, can reach xTR2. So xTR1 can choose an RTR that would drop packets if it couldn’t reach xTR2.

I solved this in the lispers.net implementation to have the ETRs only register the RLOC addresses of RTRs if they are currently reachable via RLOC-probing. This is how it works using the example from above:

(1) xTR2 learns of RTRs A, B, and C from the map-server.
(2) It uses those RTRs as the RLOCs for the map-cache entry 0.0.0.0/0.
(3) It RLOC-probes A, B, and C.
(4) It registers its translated RLOC and RTRs A, B, and C in 4 RLOC-records of the Map-Register.
(5) That means any remote ITR (xTR1) would encap to either A, B, or C.
(6) If xTR2 lost reachability to A, then what is registered is only B and C (and the translated RLOC).
(7) Then xTR1 only has a choice of B and C to encapsulate to for the EID behind xTR2.

What limits the solution is asymmetry. Meaning if the path from xTR2 to RTR A is down but the path from RTR A to xTR2 is up, xTR1 would not use RTR A. So bidirectional connectivity is required (for the pair of RLOCs that are part of the RLOC-probe).

So as you can see, we have a lot to talk about.

Cheers,
Dino