Internet DRAFT - draft-dupont-6man-nat64tp
draft-dupont-6man-nat64tp
Network Working Group K. Dupont
Internet-Draft November 29, 2020
Intended status: Standards Track
Expires: June 2, 2021
NAT64 Tunnel Protocol
draft-dupont-6man-nat64tp-02
Abstract
This document describes a stateless NAT64 extension which allows for
creation of reliable tunnels between islands of IPv6 deployment.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on June 2, 2021.
Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Dupont Expires June 2, 2021 [Page 1]
Internet-Draft NAT64TP November 2020
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Communication model . . . . . . . . . . . . . . . . . . . . . 3
4. Protocol operation . . . . . . . . . . . . . . . . . . . . . 4
4.1. NAT64 outgoing operation . . . . . . . . . . . . . . . . 4
4.2. NAT64 incoming operation . . . . . . . . . . . . . . . . 5
4.3. NAT64TP endpoint operation . . . . . . . . . . . . . . . 5
4.4. Intermediate network node operation . . . . . . . . . . . 7
5. Deployability . . . . . . . . . . . . . . . . . . . . . . . . 8
5.1. Sunsetting IPv4 . . . . . . . . . . . . . . . . . . . . . 8
6. Security Considerations . . . . . . . . . . . . . . . . . . . 8
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 9
8.1. Normative References . . . . . . . . . . . . . . . . . . 9
8.2. Informative References . . . . . . . . . . . . . . . . . 9
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 10
1. Introduction
Prior protocols for connecting islands of IPv6 through tunnels over
IPv4 exist including [RFC3056]. However since the introduction of
those protocols NAT has gained widespread use and a majority of ISPs
still have not started deploying IPv6. For those reasons there is a
need for a new way of connecting islands of IPv6.
NAT64 as defined in [RFC6146] is a method for translating between
IPv6 and IPv4. This is intended to allow IPv6-only clients to reach
IPv4-only services. NAT64 also happens to be very useful for
connecting islands of IPv6 to an IPv4-only ISP. Moreover high
availability can easily be achieved by connecting an island of IPv6
through redundant NAT64 gateways to multiple ISPs.
Many prior tunnel protocols fail to work reliably when one endpoint
of the tunnel is behind NAT. And none of them work reliably when
both endpoints are behind NAT64.
[RFC6146] specifies support for use of UDP, TCP, and ICMP. Of those
only UDP is suitable for building a tunnel protocol. But when both
endpoints are connecting through NAT the use of hole punching will be
necessary. And in many NAT setups, especially those using multiple
layers of NAT, the use of hole punching is unreliable. Even when
these work they rely on state in each NAT device in order to maintain
a connection.
This document defines NAT64TP (the NAT64 Tunnel Protocol). NAT64TP
is a simple stateless NAT64 extension which allows tunnel protocols
Dupont Expires June 2, 2021 [Page 2]
Internet-Draft NAT64TP November 2020
to reliably establish connections between islands of IPv6. NAT64TP
achieves this by using UDP packets in which each packet carries
enough information in their UDP payload to route them to their
destination with no state being maintained.
NAT64TP only differs from [RFC6146] in very minor ways such that it
can easily be added to existing NAT64 implementations. This also
allows NAT64TP to achieve reliability when only a subset of the
involved NAT64 gateways implement NAT64TP.
2. Terminology
NAT64: A dual-stack node translating TCP and UDP according to
[RFC6146] and optionally implementing the NAT64TP protocol as
specified in this document.
NAT64TP: The NAT64 Tunnel Protocol is the extension for NAT64 defined
in this document.
Endpoint: An IPv6-only or dual-stack node which implements a higher
level protocol on top of the NAT64TP protocol as specified in this
document.
Outer IP header: The IP header in front of the UDP header which gets
translated from IPv6 to IPv4 and back during transmission.
Inner IPv6 header: The IP header at the start of the UDP payload.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
[RFC2119] [RFC8174] when, and only when, they appear in all capitals,
as shown here.
3. Communication model
NAT64TP packets are IPv6 packets encapsulated in UDP. The UDP
packets are translated by NAT64 gateways according to slightly
different rules than [RFC6146].
Dupont Expires June 2, 2021 [Page 3]
Internet-Draft NAT64TP November 2020
+---------------------------------------------------+
| IPv4 backbone |
+---------------------------------------------------+
| | | |
| | | |
+---------+ +---------+ +---------+ +---------+
| NAT64 | | NAT64 | | NAT64 | | NAT64 |
+---------+ +---------+ +---------+ +---------+
| | | |
| | | |
+----------------------+ +----------------------+
| Endpoint | | Endpoint |
+----------------------+ +----------------------+
Figure 1: The communication model
Each endpoint has access to one or more NAT64 gateways which allow
for communication through the IPv4 backbone. For redundancy the
NAT64 gateways can connect to different IPv4 providers. At least one
of the NAT64 gateways SHOULD support the NAT64TP protocol as
specified in this document.
4. Protocol operation
4.1. NAT64 outgoing operation
Upon receiving an UDPv6 packet with source port TBD the NAT64 MUST
validate that the packet is a valid NAT64TP packet.
The UDP payload length MUST be at least 40 octets.
The inner IP version field MUST contain the value 6.
The inner source IP MUST be identical to the outer source IP.
The NAT64 MAY additionally validate the following fields.
The UDP length field MUST have the same value as the payload
length field in the outer IPv6 header.
The UDP length field MUST be exactly 48 octets plus the payload
length specified in the inner IPv6 header.
The inner hop limit MUST be in the range 43 to 255.
A UDPv6 packet with source port TBD which fails any of the
validations performed MUST be either dropped or translated as regular
stateful NAT64. If the packet is dropped the NAT64 MAY generate an
ICMPv6 error message.
Dupont Expires June 2, 2021 [Page 4]
Internet-Draft NAT64TP November 2020
A packet which matches all of the validations performed MUST be
translated statelessly. The outer source IP and destionation IP are
translated as in [RFC6146]. The UDP source and destination port MUST
remain unchanged after translation. If the inner hop limit was
validated it SHOULD be reduced to 42.
If the UDP header has a checksum it MUST be adjusted to reflect all
of the changes made to the packet.
4.2. NAT64 incoming operation
Upon receiving an UDPv4 packet with destination port TBD the NAT64
MUST validate that the packet is a valid NAT64TP packet.
The UDP payload length MUST be at least 40 octets.
The inner IP version field MUST contain the value 6.
The inner hop limit MUST be in the range 22 to 255.
The NAT64 MAY additionally validate the following field.
The IPv4 total length field MUST be equal to the sum of the IPv4
header length and the UDP length.
The UDP length field MUST be exactly 48 octets plus the payload
length specified in the inner IPv6 header.
A UDPv4 packet with destination port TBD which fails any of the
validations performed MUST be dropped. The NAT64 MAY generate an
ICMP error message.
A packet which matches all of the validations performed MUST be
translated statelessly. The outer source IP is translated as in
[RFC6146]. The inner destination IP is copied to the outer
destination IP. The UDP source and destination port MUST remain
unchanged after translation. The inner hop limit MUST be reduced to
21.
If the UDP header has a checksum it must be adjusted to reflect all
of the changes made to the packet. If the UDP packet has no checksum
a checksum must be computed over the resulting packet.
4.3. NAT64TP endpoint operation
NAT64TP is a layer of the networking stack. Like IP and UDP this
layer is intended as basis on which to build higher layer protocols.
The higher layer protocols to be used over NAT64TP are generally
Dupont Expires June 2, 2021 [Page 5]
Internet-Draft NAT64TP November 2020
expected to be a VPN or something resembling it. The full
specification of the higher layer protocol is outside the scope of
this document.
The intermediate NAT64 gateways only need to implement the NAT64TP
layer as specified in this document and need no knowledge of the
higher layer. Inspection of the higher layer protocols won't even be
possible for the NAT64 gateways due to the encryption used by the VPN
layer.
NAT64TP endpoints MUST comply with both the sepcification in this
document and the specification of the higher layer protocol which
they implement.
When originating a NAT64TP packet the endpoint MUST construct a
header chain consisting of at least three headers: Outer IPv6 header,
UDP header, and inner IPv6 header. The headers MUST satisfy the
following requirements:
All three headers MUST have consistent length information which
agrees on which octet is the last of the packet.
Inner and outer IPv6 headers MUST have identical source address.
Outer IPv6 header MUST have next header 17 (UDP).
The UDP header MUST have source port TBD.
The UDP header MUST have a valid checksum.
Inner IPv6 header MUST have a hop limit in the range 63 to 255.
Packets originated from a NAT64TP endpoint SHOULD be at most 1280
octets including the outer IPv6 header. When larger payloads are
needed the NAT64TP endpoint SHOULD either use a fragment header
following the inner IPv6 header or implement fragmentation at a
higher protocol layer.
When receiving a NAT64TP paket the endpoint MUST accept packets with
any outer source IP and any UDP source port. The higher layer
protocol MUST validate the authenticity and integrity of the packet
based on the payload of the inner IPv6 packet.
When receiving a valid NAT64TP packet from an unknown outer source IP
and UDP source port combination the endpoint SHOULD learn this source
address as a possible network path for return traffic. If the outer
source IP is within a known NAT64 prefix, the endpoint SHOULD attempt
Dupont Expires June 2, 2021 [Page 6]
Internet-Draft NAT64TP November 2020
recombining the embedded IPv4 address with other known NAT64 prefixes
to learn alternative network paths.
When sending packets over a learned network path the higher layer
protocol MUST take steps to guard against hijacking of traffic.
These steps MAY include: preference for paths with lowest latency and
encryption and digital signatures applied to payload data.
When choosing between possible network paths for sending a packet an
endpoint SHOULD include the inner destination IP and port TBD as one
of the possible options for filling in outer destination IP and
destination UDP port.
The configuration of an endpoint SHOULD allow for at least the
following two ways of configuring available network paths to a peer:
A list of NAT64 prefixes available to the local endpoint and a
list of IPv4 addresses of NAT64TP gateways available to the remote
endpoint. All combinations of these combined with destination
port TBD should be considered possible network paths.
A list of full IPv6 address and port number combinations for
network paths which doesn't follow the above scheme or where the
length of the NAT64 prefix being used isn't known.
An endpoint implementation SHOULD have the ability to send periodic
probe packets across its prefered network paths. If probe packets
are lost the endpoint SHOULD try alternative paths known to the same
destination. These probes additionally serve the purpose of keeping
alive state in case either NAT64 is stateful and doesn't implement
NAT64TP.
4.4. Intermediate network node operation
Routers on the network path between the endpoints only need to
consider the outer IP header in their routing decisions. Routers MAY
include the following fields from the UDP header and inner IPv6
header in ECMP hashes:
Source and destination port
Flow label
Source and destination IP
Routers MUST NOT modify the UDP header or payload in transit.
Dupont Expires June 2, 2021 [Page 7]
Internet-Draft NAT64TP November 2020
NAT64 gateways MUST update inner hop limit as well as UDP Port
numbers and checksum as specified in this document. Other than that
no part of the UDP header or payload may be modified in transit.
The minimum hop limit of originated packets was chosen as 63 to allow
the default value of most currently deployed implementations to work
without changes. The values in the range 1 to 63 has been split
evenly between the three legs of communication separated by the NAT64
gateways. This is done to ensure that packets reach their
destination even if a small number of intermediate network nodes
erroneously decrement the inner hop limit when they shouldn't.
5. Deployability
NAT64TP endpoints will in some cases work even if neither NAT64
gateway supports NAT64TP. If and endpoint combines NAT64TP with
traditional hole punching techniques it can achieve similar
reliability even if none of the NAT64 gateways support NAT64TP.
Those properties make it worthwhile for endpoints to support NAT64TP
even when only a minority of NAT64 gateways support NAT64TP.
Due to the similarity between NAT64TP and [RFC6146] it only takes
minimal effort to extend existing NAT64 implementations to support
NAT64TP. Because NAT64TP needs no state there is an incentive to
deploy it in order to save on state tracking. NAT64TP needs just a
single port which cannot be used for stateful connections. Thus it
only takes two NAT64TP users before NAT64TP support uses fewer ports
than stateful NAT64. And since NAT64TP can achieve reliability when
supported by just one side of the communication, there is an
incentive to deploy it even if other NAT64 gateways haven't deployed
it yet.
5.1. Sunsetting IPv4
If a reliable native IPv6 path exists between a pair of endpoints the
traffic between those endpoints SHOULD prefer that network path over
those network paths involving NAT64 gateways translating the outer
header from IPv6 to IPv4 and back.
This allows for NAT64 gateways to be turned down when they are no
longer needed for reaching IPv4-only networks/services.
6. Security Considerations
This document specifies the NAT64TP layer. Endpoints MUST implement
a higher layer on top of NAT64TP. Any protocol which can run on IPv6
could be used but for security it MUST be one which takes proper
steps to protect confidentiality and integrity.
Dupont Expires June 2, 2021 [Page 8]
Internet-Draft NAT64TP November 2020
To protect against DoS attacks by looping packets through a pair of
NAT64 gateways it is important for gateways implementing NAT64TP to
handle hop limit on the incoming path exactly as defined in this
document.
This protocol is not intending to hide the origin of packets. The
source IP which a packet had before translation can always be deduced
by the contents of the packet after translation.
7. IANA Considerations
One UDP port number for the NAT64TP protocol needs to be allocated by
IANA.
Service Name: NAT64TP
Transport Protocol(s): UDP
Description: NAT64 Tunnel Protocol
Reference: This document.
Port Number: TBD -- To be assigned by IANA.
8. References
8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC6146] Bagnulo, M., Matthews, P., and I. van Beijnum, "Stateful
NAT64: Network Address and Protocol Translation from IPv6
Clients to IPv4 Servers", RFC 6146, DOI 10.17487/RFC6146,
April 2011, <https://www.rfc-editor.org/info/rfc6146>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
8.2. Informative References
[RFC3056] Carpenter, B. and K. Moore, "Connection of IPv6 Domains
via IPv4 Clouds", RFC 3056, DOI 10.17487/RFC3056, February
2001, <https://www.rfc-editor.org/info/rfc3056>.
Dupont Expires June 2, 2021 [Page 9]
Internet-Draft NAT64TP November 2020
Author's Address
Kasper Dupont
Ellemosevaenget 31
Tranbjerg J. 8310
Denmark
Email: kasperd@ntstm.30.mar.2019.kasperd.dk
Dupont Expires June 2, 2021 [Page 10]