draft-ietf-tsvwg-behave-requirements-update-08.txt | rfc7857.txt | |||
---|---|---|---|---|
TSVWG R. Penno | Internet Engineering Task Force (IETF) R. Penno | |||
Internet-Draft Cisco | Request for Comments: 7857 Cisco | |||
Updates: 4787, 5382, 5508 (if approved) S. Perreault | BCP: 127 S. Perreault | |||
Intended status: Best Current Practice Jive Communications | Updates: 4787, 5382, 5508 Jive Communications | |||
Expires: September 3, 2016 M. Boucadair, Ed. | Category: Best Current Practice M. Boucadair, Ed. | |||
Orange | ISSN: 2070-1721 Orange | |||
S. Sivakumar | S. Sivakumar | |||
Cisco | Cisco | |||
K. Naito | K. Naito | |||
NTT | NTT | |||
March 2, 2016 | April 2016 | |||
Network Address Translation (NAT) Behavioral Requirements Updates | Updates to Network Address Translation (NAT) Behavioral Requirements | |||
draft-ietf-tsvwg-behave-requirements-update-08 | ||||
Abstract | Abstract | |||
This document clarifies and updates several requirements of RFC4787, | This document clarifies and updates several requirements of RFCs | |||
RFC5382, and RFC5508 based on operational and development experience. | 4787, 5382, and 5508 based on operational and development experience. | |||
The focus of this document is NAT44. | The focus of this document is Network Address Translation from IPv4 | |||
to IPv4 (NAT44). | ||||
This document updates RFCs 4787, 5382, and 5508. | This document updates RFCs 4787, 5382, and 5508. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This memo documents an Internet Best Current Practice. | |||
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 http://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
BCPs is available in Section 2 of RFC 5741. | ||||
This Internet-Draft will expire on September 3, 2016. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
http://www.rfc-editor.org/info/rfc7857. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 28 ¶ | skipping to change at page 3, line 9 ¶ | |||
the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
than English. | than English. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. TCP Session Tracking . . . . . . . . . . . . . . . . . . . . 3 | 2. TCP Session Tracking . . . . . . . . . . . . . . . . . . . . 4 | |||
2.1. TCP Transitory Connection Idle-Timeout . . . . . . . . . 5 | 2.1. TCP Transitory Connection Idle-Timeout . . . . . . . . . 6 | |||
2.2. TCP RST . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. TCP RST . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
3. Port Overlapping Behavior . . . . . . . . . . . . . . . . . . 5 | 3. Port Overlapping Behavior . . . . . . . . . . . . . . . . . . 6 | |||
4. Address Pooling Paired (APP) . . . . . . . . . . . . . . . . 6 | 4. Address Pooling Paired (APP) . . . . . . . . . . . . . . . . 7 | |||
5. Endpoint-Independent Mapping (EIM) Protocol Independence . . 7 | 5. Endpoint-Independent Mapping (EIM) Protocol Independence . . 8 | |||
6. Endpoint-Independent Filtering (EIF) Protocol Independence . 7 | 6. Endpoint-Independent Filtering (EIF) Protocol Independence . 8 | |||
7. Endpoint-Independent Filtering (EIF) Mapping Refresh . . . . 7 | 7. Endpoint-Independent Filtering (EIF) Mapping Refresh . . . . 8 | |||
7.1. Outbound Mapping Refresh and Error Packets . . . . . . . 8 | 7.1. Outbound Mapping Refresh and Error Packets . . . . . . . 9 | |||
8. Port Parity . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 8. Port Parity . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
9. Port Randomization . . . . . . . . . . . . . . . . . . . . . 8 | 9. Port Randomization . . . . . . . . . . . . . . . . . . . . . 9 | |||
10. IP Identification (IP ID) . . . . . . . . . . . . . . . . . . 9 | 10. IP Identification (IP ID) . . . . . . . . . . . . . . . . . . 10 | |||
11. ICMP Query Mappings Timeout . . . . . . . . . . . . . . . . . 9 | 11. ICMP Query Mappings Timeout . . . . . . . . . . . . . . . . . 10 | |||
12. Hairpinning Support for ICMP Packets . . . . . . . . . . . . 9 | 12. Hairpinning Support for ICMP Packets . . . . . . . . . . . . 10 | |||
13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 13. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
14. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
15.1. Normative References . . . . . . . . . . . . . . . . . . 11 | 14.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
15.2. Informative References . . . . . . . . . . . . . . . . . 11 | Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 12 | Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
1. Introduction | 1. Introduction | |||
[RFC4787], [RFC5382], and [RFC5508] contributed to enhance Network | [RFC4787], [RFC5382], and [RFC5508] contributed to enhance Network | |||
Address Translation (NAT) interoperability and conformance. | Address Translation (NAT) interoperability and conformance. | |||
Operational experience gained through widespread deployment and | Operational experience gained through widespread deployment and | |||
evolution of NAT indicates that some areas of the original documents | evolution of NAT indicates that some areas of the original documents | |||
need further clarification or updates. This document provides such | need further clarification or updates. This document provides such | |||
clarifications and updates. | clarifications and updates. | |||
1.1. Scope | 1.1. Scope | |||
The goal of this document is to clarify and update the set of | The goal of this document is to clarify and update the set of | |||
requirements listed in [RFC4787], [RFC5382], and [RFC5508]. The | requirements listed in [RFC4787], [RFC5382], and [RFC5508]. The | |||
document focuses exclusively on NAT44. | document focuses exclusively on NAT44. | |||
The scope of this document has been set so that it does not create | The scope of this document has been set so that it does not create | |||
new requirements beyond those specified in the documents cited above. | new requirements beyond those specified in the documents cited above. | |||
Carrier-Grade NAT (CGN) related requirements are defined in | Requirements related to Carrier-Grade NAT (CGN) are defined in | |||
[RFC6888]. | [RFC6888]. | |||
1.2. Terminology | 1.2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
The reader is assumed to be familiar with the terminology defined in: | The reader is assumed to be familiar with the terminology defined in | |||
[RFC2663],[RFC4787],[RFC5382], and [RFC5508]. | [RFC2663], [RFC4787], [RFC5382], and [RFC5508]. | |||
In this document, the term "NAT" refers to both "Basic NAT" and | In this document, the term "NAT" refers to both "Basic NAT" and | |||
"Network Address/Port Translator (NAPT)" (see Section 3 of | "Network Address/Port Translator (NAPT)" (see Section 3 of | |||
[RFC4787]). As a reminder, Basic NAT and NAPT are two variations of | [RFC4787]). As a reminder, Basic NAT and NAPT are two variations of | |||
traditional NAT, in that translation in Basic NAT is limited to IP | traditional NAT in that translation in Basic NAT is limited to IP | |||
addresses alone, whereas translation in NAPT is extended to include | addresses alone, whereas translation in NAPT is extended to include | |||
IP address and Transport identifier (such as TCP/UDP port or ICMP | IP addresses and transport identifiers (such as a TCP/UDP port or | |||
query ID) (refer to Section 2 of [RFC3022]). | ICMP query ID); refer to Section 2 of [RFC3022]. | |||
2. TCP Session Tracking | 2. TCP Session Tracking | |||
[RFC5382] specifies TCP timers associated with various connection | [RFC5382] specifies TCP timers associated with various connection | |||
states but does not specify the TCP state machine a NAT44 should | states but does not specify the TCP state machine a NAT44 should | |||
follow as a basis to apply such timers. | follow as a basis to apply such timers. | |||
Update: The TCP state machine depicted in Figure 1, adapted from | Update: The TCP state machine depicted in Figure 1, adapted from | |||
[RFC6146], SHOULD be implemented by a NAT for TCP session tracking | [RFC6146], SHOULD be implemented by a NAT for TCP session tracking | |||
purposes. | purposes. | |||
skipping to change at page 4, line 45 ¶ | skipping to change at page 5, line 45 ¶ | |||
| | T.O. | | | T.O. | |||
V V | | V V | | |||
+----------------------+ | | +----------------------+ | | |||
| C FIN + S FIN RCV |-----------------+ | | C FIN + S FIN RCV |-----------------+ | |||
+----------------------+ | +----------------------+ | |||
Legend: | Legend: | |||
* Messages sent or received from the server are | * Messages sent or received from the server are | |||
prefixed with "Server". | prefixed with "Server". | |||
* Messages sent or received from the client are | * Messages sent or received from the client are | |||
prefixed with "Client". | prefixed with "Client". | |||
* "C" means "Client-side" | * "C" means "Client-side". | |||
* "S" means "Server-side". | * "S" means "Server-side". | |||
* TCP_EST T.O: refers to the established connection | * TCP_EST T.O. refers to the established connection | |||
idle timeout as defined in [RFC5382]. | idle-timeout as defined in [RFC5382]. | |||
* TCP_TRANS T.O: refers to the transitory connection | * TCP_TRANS T.O. refers to the transitory connection | |||
idle timeout as defined in [RFC5382]. | idle-timeout as defined in [RFC5382]. | |||
Figure 1: Simplified version of the TCP State Machine | Figure 1: Simplified Version of the TCP State Machine | |||
2.1. TCP Transitory Connection Idle-Timeout | 2.1. TCP Transitory Connection Idle-Timeout | |||
The transitory connection idle-timeout is defined as the minimum time | The transitory connection idle-timeout is defined as the minimum time | |||
a TCP connection in the partially open or closing phases must remain | a TCP connection in the partially open or closing phases must remain | |||
idle before the NAT considers the associated session a candidate for | idle before the NAT considers the associated session a candidate for | |||
removal (REQ-5 of [RFC5382]). But [RFC5382] does not clearly state | removal (REQ-5 of [RFC5382]). However, [RFC5382] does not clearly | |||
whether these can be configured separately. | state whether these can be configured separately. | |||
Clarification: This document clarifies that a NAT SHOULD provide | Clarification: This document clarifies that a NAT SHOULD provide | |||
different configurable parameters for configuring the open and | different configurable parameters for configuring the open and | |||
closing idle timeouts. | closing idle timeouts. | |||
To accommodate deployments that consider a partially open timeout | To accommodate deployments that consider a partially open timeout | |||
of 4 minutes as being excessive from a security standpoint, a NAT | of 4 minutes as being excessive from a security standpoint, a NAT | |||
MAY allow the configured timeout to be less than 4 minutes. | MAY allow the configured timeout to be less than 4 minutes. | |||
However, a minimum default transitory connection idle-timeout of 4 | However, a minimum default transitory connection idle-timeout of 4 | |||
minutes is RECOMMENDED. | minutes is RECOMMENDED. | |||
2.2. TCP RST | 2.2. TCP RST | |||
[RFC5382] leaves the handling of TCP RST packets unspecified. | [RFC5382] leaves the handling of TCP RST packets unspecified. | |||
Update: This document adopts a similar default behavior as in | Update: This document adopts a similar default behavior as in | |||
[RFC6146]. Concretely, when the NAT receives a TCP RST matching | [RFC6146]. Concretely, when the NAT receives a TCP RST matching | |||
an existing mapping, it MUST translate the packet according to the | an existing mapping, it MUST translate the packet according to the | |||
NAT mapping entry. Moreover, the NAT SHOULD wait for 4 minutes | NAT mapping entry. Moreover, the NAT SHOULD wait for 4 minutes | |||
before deleting the session and removing any state associated with | before deleting the session and removing any state associated with | |||
it if no packets are received during that 4 minutes timeout. | it if no packets are received during that 4-minute timeout. | |||
Notes: | Notes: | |||
* Admittedly, the NAT has to verify whether received TCP RST | * Admittedly, the NAT has to verify whether received TCP RST | |||
packets belong to a connection. This verification check is | packets belong to a connection. This verification check is | |||
required to avoid off-path attacks. | required to avoid off-path attacks. | |||
* If the NAT removes immediately the NAT mapping upon receipt of | * If the NAT immediately removes the NAT mapping upon receipt of | |||
a TCP RST message, stale connections may be maintained by | a TCP RST message, stale connections may be maintained by | |||
endpoints if the first RST message is lost between the NAT and | endpoints if the first RST message is lost between the NAT and | |||
the recipient. | the recipient. | |||
3. Port Overlapping Behavior | 3. Port Overlapping Behavior | |||
REQ-1 from [RFC4787] and REQ-1 from [RFC5382] specify a specific port | REQ-1 from [RFC4787] and REQ-1 from [RFC5382] specify a specific port | |||
overlapping behavior; that is the external IP address and port can be | overlapping behavior; that is, the external IP address and port can | |||
reused for connections originating from the same internal source IP | be reused for connections originating from the same internal source | |||
address and port irrespective of the destination. This is known as | IP address and port irrespective of the destination. This is known | |||
endpoint-independent mapping (EIM). | as Endpoint-Independent Mapping (EIM). | |||
Update: This document clarifies that this port overlapping behavior | Update: This document clarifies that this port overlapping behavior | |||
may be extended to connections originating from different internal | may be extended to connections originating from different internal | |||
source IP addresses and ports as long as their destinations are | source IP addresses and ports as long as their destinations are | |||
different. | different. | |||
The following mechanism MAY be implemented by a NAT: | The following mechanism MAY be implemented by a NAT: | |||
If destination addresses and ports are different for outgoing | If destination addresses and ports are different for outgoing | |||
connections started by local clients, a NAT MAY assign the same | connections started by local clients, a NAT MAY assign the same | |||
external port as the source ports for the connections. The | external port as the source ports for the connections. The | |||
port overlapping mechanism manages mappings between external | port overlapping mechanism manages mappings between external | |||
packets and internal packets by looking at and storing their | packets and internal packets by looking at and storing their | |||
5-tuple (protocol, source address, source port, destination | 5-tuple (protocol, source address, source port, destination | |||
address, destination port). | address, and destination port). | |||
This enables concurrent use of a single NAT external port for | This enables concurrent use of a single NAT external port for | |||
multiple transport sessions, which allows a NAT to successfully | multiple transport sessions, which allows a NAT to successfully | |||
process packets in an IP address resource limited network (e.g., | process packets in a network that has a limited number of IP | |||
deployment with high address space multiplicative factor (refer to | addresses (e.g., deployment with a high address space | |||
Appendix B. of [RFC6269])). | multiplicative factor (refer to Appendix B of [RFC6269])). | |||
4. Address Pooling Paired (APP) | 4. Address Pooling Paired (APP) | |||
The "IP address pooling" behavior of "Paired" (APP) was recommended | The "IP address pooling" behavior of "Paired" (APP) was recommended | |||
in REQ-2 from [RFC4787], but the behavior when an external IPv4 runs | in REQ-2 from [RFC4787], but the behavior when an external IPv4 runs | |||
out of ports was left undefined. | out of ports was left undefined. | |||
Clarification: This document clarifies that if APP is enabled, new | Clarification: This document clarifies that if APP is enabled, new | |||
sessions from a host that already has a mapping associated with an | sessions from a host that already has a mapping associated with an | |||
external IP that ran out of ports SHOULD be dropped. A | external IP that ran out of ports SHOULD be dropped. A | |||
configuration parameter MAY be provided to allow a NAT to starting | configuration parameter MAY be provided to allow a NAT to start | |||
using ports from another external IP address when the one that | using ports from another external IP address when the one that | |||
anchored the APP mapping ran out of ports. Tweaking this | anchored the APP mapping ran out of ports. Tweaking this | |||
configuration parameter is a trade-off between service continuity | configuration parameter is a trade-off between service continuity | |||
and APP strict enforcement. Note, this behavior is sometimes | and APP strict enforcement. Note, this behavior is sometimes | |||
referred as 'soft-APP'. | referred to as "soft-APP". | |||
As a reminder, the recommendation for the particular case of a CGN | As a reminder, the recommendation for the particular case of a CGN | |||
is that an implementation must use the same external IP address | is that an implementation must use the same external IP address | |||
mapping for all sessions associated with the same internal IP | mapping for all sessions associated with the same internal IP | |||
address, be they TCP, UDP, ICMP, something else, or a mix of | address, be they TCP, UDP, ICMP, something else, or a mix of | |||
different protocols [RFC6888]. | different protocols [RFC6888]. | |||
Update: This behavior SHOULD apply also for TCP. | Update: This behavior SHOULD apply also for TCP. | |||
5. Endpoint-Independent Mapping (EIM) Protocol Independence | 5. Endpoint-Independent Mapping (EIM) Protocol Independence | |||
REQ-1 from [RFC4787] and REQ-1 from [RFC5382] do not specify whether | REQ-1 from [RFC4787] and REQ-1 from [RFC5382] do not specify whether | |||
EIM are protocol-dependent or protocol-independent. For example, if | EIM are protocol dependent or protocol independent. For example, if | |||
an outbound TCP SYN creates a mapping, it is left undefined whether | an outbound TCP SYN creates a mapping, it is left undefined whether | |||
outbound UDP packets can reuse such mapping. | outbound UDP packets can reuse such mapping. | |||
Update: EIM mappings SHOULD be protocol-dependent. A configuration | Update: EIM mappings SHOULD be protocol dependent. A configuration | |||
parameter MAY be provided to allow protocols that multiplex TCP | parameter MAY be provided to allow protocols that multiplex TCP | |||
and UDP over the same source IP address and port number to use a | and UDP over the same source IP address and port number to use a | |||
single mapping. The default value of this configuration parameter | single mapping. The default value of this configuration parameter | |||
MUST be protocol-dependent EIM. | MUST be protocol-dependent EIM. | |||
This update is consistent with the stateful NAT64 [RFC6146] that | This update is consistent with the stateful Network Address and | |||
clearly specifies three binding information bases (TCP, UDP, | Protocol Translation from IPv6 Clients to IPv4 Servers (NAT64) | |||
ICMP). | [RFC6146] that clearly specifies three binding information bases | |||
(TCP, UDP, and ICMP). | ||||
6. Endpoint-Independent Filtering (EIF) Protocol Independence | 6. Endpoint-Independent Filtering (EIF) Protocol Independence | |||
REQ-8 from [RFC4787] and REQ-3 from [RFC5382] do not specify whether | REQ-8 from [RFC4787] and REQ-3 from [RFC5382] do not specify whether | |||
mappings with endpoint-independent filtering (EIF) are protocol- | mappings with Endpoint-Independent Filtering (EIF) are protocol | |||
independent or protocol-dependent. For example, if an outbound TCP | independent or protocol dependent. For example, if an outbound TCP | |||
SYN creates a mapping, it is left undefined whether inbound UDP | SYN creates a mapping, it is left undefined whether inbound UDP | |||
packets matching that mapping should be accepted or rejected. | packets matching that mapping should be accepted or rejected. | |||
Update: EIF filtering SHOULD be protocol-dependent. A configuration | Update: EIF filtering SHOULD be protocol dependent. A configuration | |||
parameter MAY be provided to make it protocol-independent. The | parameter MAY be provided to make it protocol independent. The | |||
default value of this configuration parameter MUST be protocol- | default value of this configuration parameter MUST be protocol- | |||
dependent EIF. | dependent EIF. | |||
This behavior is aligned with the update in Section 5. | This behavior is aligned with the update in Section 5. | |||
Applications that can be transported over a variety of transport | Applications that can be transported over a variety of transport | |||
protocols and/or support transport fall back schemes won't | protocols and/or support transport fallback schemes won't | |||
experience connectivity failures if the NAT is configured with | experience connectivity failures if the NAT is configured with | |||
protocol-independent EIM and protocol-independent EIF. | protocol-independent EIM and protocol-independent EIF. | |||
7. Endpoint-Independent Filtering (EIF) Mapping Refresh | 7. Endpoint-Independent Filtering (EIF) Mapping Refresh | |||
The NAT mapping Refresh direction may have a "NAT Inbound refresh | The NAT mapping Refresh direction may have a "NAT Inbound refresh | |||
behavior" of "True" according to REQ-6 from [RFC4787], but [RFC4787] | behavior" of "True" according to REQ-6 from [RFC4787], but [RFC4787] | |||
does not clarify how this behavior applies to EIF mappings. The | does not clarify how this behavior applies to EIF mappings. The | |||
issue in question is whether inbound packets that match an EIF | issue in question is whether inbound packets that match an EIF | |||
mapping but do not create a new session due to a security policy | mapping but do not create a new session due to a security policy | |||
should refresh the mapping timer. | should refresh the mapping timer. | |||
Clarification: This document clarifies that even when a NAT has an | Clarification: This document clarifies that even when a NAT has an | |||
inbound refresh behavior set to 'TRUE', such packets SHOULD NOT | inbound refresh behavior set to "TRUE", such packets SHOULD NOT | |||
refresh the mapping. Otherwise a simple attack of a packet every | refresh the mapping. Otherwise, a simple attack of a packet every | |||
2 minutes can keep the mapping indefinitely. | two minutes can keep the mapping indefinitely. | |||
Update: This behavior SHOULD apply also for TCP. | Update: This behavior SHOULD apply also for TCP. | |||
7.1. Outbound Mapping Refresh and Error Packets | 7.1. Outbound Mapping Refresh and Error Packets | |||
Update: In the case of NAT outbound refresh behavior, ICMP Errors or | Update: In the case of NAT outbound refresh behavior, ICMP Errors or | |||
TCP RST outbound packets, sent as response to inbound packets, | TCP RST outbound packets sent as a response to inbound packets | |||
SHOULD NOT refresh the mapping. Other packets which indicate the | SHOULD NOT refresh the mapping. Other packets that indicate the | |||
host is not interested in receiving packets MAY be configurable to | host is not interested in receiving packets MAY be configurable to | |||
also not refresh state, such as STUN error response [RFC5389] or | also not refresh state, such as a Session Traversal Utilities for | |||
IKE INVALID_SYNTAX [RFC7296]. | NAT (STUN) error response [RFC5389] or IKE INVALID_SYNTAX | |||
[RFC7296]. | ||||
8. Port Parity | 8. Port Parity | |||
Update: A NAT MAY disable port parity preservation for all dynamic | Update: A NAT MAY disable port parity preservation for all dynamic | |||
mappings. Nevertheless, A NAT SHOULD support means to explicitly | mappings. Nevertheless, A NAT SHOULD support means to explicitly | |||
request to preserve port parity (e.g., [RFC7753]). | request to preserve port parity (e.g., [RFC7753]). | |||
Note: According to [RFC6887], dynamic mappings are said to be | Note: According to [RFC6887], dynamic mappings are said to be | |||
dynamic in the sense that they are created on demand, either | dynamic in the sense that they are created on demand, either | |||
implicitly or explicitly: | implicitly or explicitly: | |||
skipping to change at page 8, line 45 ¶ | skipping to change at page 9, line 49 ¶ | |||
as a result, for example, of explicit Port Control Protocol | as a result, for example, of explicit Port Control Protocol | |||
(PCP) MAP and PEER requests. Explicit dynamic mappings have a | (PCP) MAP and PEER requests. Explicit dynamic mappings have a | |||
finite lifetime, and this lifetime is communicated to the | finite lifetime, and this lifetime is communicated to the | |||
client. | client. | |||
9. Port Randomization | 9. Port Randomization | |||
Update: A NAT SHOULD follow the recommendations specified in | Update: A NAT SHOULD follow the recommendations specified in | |||
Section 4 of [RFC6056], especially: | Section 4 of [RFC6056], especially: | |||
"A NAPT that does not implement port preservation [RFC4787] | A NAPT that does not implement port preservation [RFC4787] | |||
[RFC5382] SHOULD obfuscate selection of the ephemeral port of a | [RFC5382] SHOULD obfuscate selection of the ephemeral port of a | |||
packet when it is changed during translation of that packet. A | packet when it is changed during translation of that packet. | |||
NAPT that does implement port preservation SHOULD obfuscate the | ||||
ephemeral port of a packet only if the port must be changed as | A NAPT that does implement port preservation SHOULD obfuscate | |||
a result of the port being already in use for some other | the ephemeral port of a packet only if the port must be changed | |||
session. A NAPT that performs parity preservation and that | as a result of the port being already in use for some other | |||
must change the ephemeral port during translation of a packet | session. | |||
SHOULD obfuscate the ephemeral ports. The algorithms described | ||||
in this document could be easily adapted such that the parity | A NAPT that performs parity preservation and that must change | |||
is preserved (i.e., force the lowest order bit of the resulting | the ephemeral port during translation of a packet SHOULD | |||
obfuscate the ephemeral ports. The algorithms described in | ||||
this document could be easily adapted such that the parity is | ||||
preserved (i.e., force the lowest order bit of the resulting | ||||
port number to 0 or 1 according to whether even or odd parity | port number to 0 or 1 according to whether even or odd parity | |||
is desired)." | is desired). | |||
10. IP Identification (IP ID) | 10. IP Identification (IP ID) | |||
Update: A NAT SHOULD handle the Identification field of translated | Update: A NAT SHOULD handle the Identification field of translated | |||
IPv4 packets as specified in Section 5.3.1 of [RFC6864]. | IPv4 packets as specified in Section 5.3.1 of [RFC6864]. | |||
11. ICMP Query Mappings Timeout | 11. ICMP Query Mappings Timeout | |||
Section 3.1 of [RFC5508] specifies that ICMP Query Mappings are to be | Section 3.1 of [RFC5508] specifies that ICMP Query mappings are to be | |||
maintained by a NAT. However, the specification doesn't discuss | maintained by a NAT. However, the specification doesn't discuss | |||
Query Mapping timeout values. Section 3.2 of [RFC5508] only | Query mapping timeout values. Section 3.2 of [RFC5508] only | |||
discusses ICMP Query Session Timeouts. | discusses ICMP Query session timeouts. | |||
Update: ICMP Query Mappings MAY be deleted once the last session | Update: ICMP Query mappings MAY be deleted once the last session | |||
using the mapping is deleted. | using the mapping is deleted. | |||
12. Hairpinning Support for ICMP Packets | 12. Hairpinning Support for ICMP Packets | |||
REQ-7 from [RFC5508] specifies that a NAT enforcing 'Basic NAT' must | REQ-7 from [RFC5508] specifies that a NAT enforcing Basic NAT must | |||
support traversal of hairpinned ICMP Query sessions. | support traversal of hairpinned ICMP Query sessions. | |||
Clarification: This implicitly means that address mappings from | Clarification: This implicitly means that address mappings from | |||
external address to internal address (similar to Endpoint | external address to internal address (similar to Endpoint- | |||
Independent Filters) must be maintained to allow inbound ICMP | Independent Filters) must be maintained to allow inbound ICMP | |||
Query sessions. If an ICMP Query is received on an external | Query sessions. If an ICMP Query is received on an external | |||
address, a NAT can then translate to an internal IP. | address, a NAT can then translate to an internal IP. | |||
REQ-7 from [RFC5508] specifies that all NATs must support the | REQ-7 from [RFC5508] specifies that all NATs must support the | |||
traversal of hairpinned ICMP Error messages. | traversal of hairpinned ICMP Error messages. | |||
Clarification: This behavior requires a NAT to maintain address | Clarification: This behavior requires a NAT to maintain address | |||
mappings from external IP address to internal IP address in | mappings from external IP address to internal IP address in | |||
addition to the ICMP Query Mappings described in Section 3.1 of | addition to the ICMP Query mappings described in Section 3.1 of | |||
[RFC5508]. | [RFC5508]. | |||
13. IANA Considerations | 13. Security Considerations | |||
This document does not require any IANA action. | ||||
14. Security Considerations | ||||
NAT behavioral considerations are discussed in [RFC4787], [RFC5382], | NAT behavioral considerations are discussed in [RFC4787], [RFC5382], | |||
and [RFC5508]. | and [RFC5508]. | |||
Because some of the clarifications and updates (e.g., Section 2) are | Because some of the clarifications and updates (e.g., Section 2) are | |||
inspired from NAT64, the security considerations discussed in | inspired from NAT64, the security considerations discussed in | |||
Section 5 of [RFC6146] apply also for this specification. | Section 5 of [RFC6146] apply also for this specification. | |||
The update in Section 3 allows for an optimized NAT resource usage. | The update in Section 3 allows for an optimized NAT resource usage. | |||
In order to avoid service disruption, the NAT must not invoke this | In order to avoid service disruption, the NAT must not invoke this | |||
functionality unless the packets are to be sent to distinct | functionality unless the packets are to be sent to distinct | |||
destination addresses. | destination addresses. | |||
Some of the updates (e.g., Section 7, Section 9, and Section 11) | Some of the updates (e.g., Sections 7, 9, and 11) allow for increased | |||
allow for an increased security compared to [RFC4787], [RFC5382], and | security compared to [RFC4787], [RFC5382], and [RFC5508]. | |||
[RFC5508]. Particularly: | Particularly, | |||
o The updates in Section 7 and Section 11 prevent an illegitimate | o the updates in Sections 7 and 11 prevent an illegitimate node to | |||
node to maintain mappings activated in the NAT while these | maintain mappings activated in the NAT while these mappings should | |||
mappings should be cleared. | be cleared, and | |||
o Port randomization (Section 9) complicates tracking hosts located | o port randomization (Section 9) complicates tracking hosts located | |||
behind a NAT. | behind a NAT. | |||
Section 4 and Section 12 propose updates that increase the | Sections 4 and 12 propose updates that increase the serviceability of | |||
serviceability of a host located behind a NAT. These updates do not | a host located behind a NAT. These updates do not introduce any | |||
introduce any additional security concerns to [RFC4787], [RFC5382], | additional security concerns to [RFC4787], [RFC5382], and [RFC5508]. | |||
and [RFC5508]. | ||||
The updates in Section 5 and Section 6 allow for a better NAT | The updates in Sections 5 and 6 allow for a better NAT transparency | |||
transparency from an application standpoint. Hosts that require a | from an application standpoint. Hosts that require a restricted | |||
restricted filtering behavior should enable specific policies (e.g., | filtering behavior should enable specific policies (e.g., Access | |||
access control list (ACL)) either locally or by soliciting a | Control List (ACL)) either locally or by soliciting a dedicated | |||
dedicated security device (e.g., firewall). How a host updates its | security device (e.g., firewall). How a host updates its filtering | |||
filtering policies is out of scope of this document. | policies is out of scope of this document. | |||
The update in Section 8 induces security concerns that are specific | The update in Section 8 induces security concerns that are specific | |||
to the protocol used to interact with the NAT. For example, if PCP | to the protocol used to interact with the NAT. For example, if PCP | |||
is used to explicitly request parity preservation for a given | is used to explicitly request parity preservation for a given | |||
mapping, the security considerations discussed in [RFC6887] should be | mapping, the security considerations discussed in [RFC6887] should be | |||
taken into account. | taken into account. | |||
The update in Section 10 may have undesired effects on the | The update in Section 10 may have undesired effects on the | |||
performance of the NAT in environments in which fragmentation is | performance of the NAT in environments in which fragmentation is | |||
massively experienced. Such issue may be used as an attack vector | massively experienced. Such an issue may be used as an attack vector | |||
against NATs. | against NATs. | |||
15. References | 14. References | |||
15.1. Normative References | 14.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
[RFC4787] Audet, F., Ed. and C. Jennings, "Network Address | [RFC4787] Audet, F., Ed. and C. Jennings, "Network Address | |||
Translation (NAT) Behavioral Requirements for Unicast | Translation (NAT) Behavioral Requirements for Unicast | |||
UDP", BCP 127, RFC 4787, DOI 10.17487/RFC4787, January | UDP", BCP 127, RFC 4787, DOI 10.17487/RFC4787, January | |||
2007, <http://www.rfc-editor.org/info/rfc4787>. | 2007, <http://www.rfc-editor.org/info/rfc4787>. | |||
skipping to change at page 11, line 43 ¶ | skipping to change at page 12, line 43 ¶ | |||
[RFC6146] Bagnulo, M., Matthews, P., and I. van Beijnum, "Stateful | [RFC6146] Bagnulo, M., Matthews, P., and I. van Beijnum, "Stateful | |||
NAT64: Network Address and Protocol Translation from IPv6 | NAT64: Network Address and Protocol Translation from IPv6 | |||
Clients to IPv4 Servers", RFC 6146, DOI 10.17487/RFC6146, | Clients to IPv4 Servers", RFC 6146, DOI 10.17487/RFC6146, | |||
April 2011, <http://www.rfc-editor.org/info/rfc6146>. | April 2011, <http://www.rfc-editor.org/info/rfc6146>. | |||
[RFC6864] Touch, J., "Updated Specification of the IPv4 ID Field", | [RFC6864] Touch, J., "Updated Specification of the IPv4 ID Field", | |||
RFC 6864, DOI 10.17487/RFC6864, February 2013, | RFC 6864, DOI 10.17487/RFC6864, February 2013, | |||
<http://www.rfc-editor.org/info/rfc6864>. | <http://www.rfc-editor.org/info/rfc6864>. | |||
15.2. Informative References | 14.2. Informative References | |||
[RFC2663] Srisuresh, P. and M. Holdrege, "IP Network Address | [RFC2663] Srisuresh, P. and M. Holdrege, "IP Network Address | |||
Translator (NAT) Terminology and Considerations", | Translator (NAT) Terminology and Considerations", | |||
RFC 2663, DOI 10.17487/RFC2663, August 1999, | RFC 2663, DOI 10.17487/RFC2663, August 1999, | |||
<http://www.rfc-editor.org/info/rfc2663>. | <http://www.rfc-editor.org/info/rfc2663>. | |||
[RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | [RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | |||
Address Translator (Traditional NAT)", RFC 3022, | Address Translator (Traditional NAT)", RFC 3022, | |||
DOI 10.17487/RFC3022, January 2001, | DOI 10.17487/RFC3022, January 2001, | |||
<http://www.rfc-editor.org/info/rfc3022>. | <http://www.rfc-editor.org/info/rfc3022>. | |||
skipping to change at page 12, line 46 ¶ | skipping to change at page 13, line 46 ¶ | |||
and S. Perreault, "Port Control Protocol (PCP) Extension | and S. Perreault, "Port Control Protocol (PCP) Extension | |||
for Port-Set Allocation", RFC 7753, DOI 10.17487/RFC7753, | for Port-Set Allocation", RFC 7753, DOI 10.17487/RFC7753, | |||
February 2016, <http://www.rfc-editor.org/info/rfc7753>. | February 2016, <http://www.rfc-editor.org/info/rfc7753>. | |||
Acknowledgements | Acknowledgements | |||
Thanks to Dan Wing, Suresh Kumar, Mayuresh Bakshi, Rajesh Mohan, Lars | Thanks to Dan Wing, Suresh Kumar, Mayuresh Bakshi, Rajesh Mohan, Lars | |||
Eggert, Gorry Fairhurst, Brandon Williams, and David Black for their | Eggert, Gorry Fairhurst, Brandon Williams, and David Black for their | |||
review and discussion. | review and discussion. | |||
Many thanks to Ben Laurie for the secdir review, and Dan Romascanu | Many thanks to Ben Laurie for the SecDir review and Dan Romascanu for | |||
for the Gen-ART review. | the Gen-ART review. | |||
Dan Wing proposed some text for the configurable errors in | Dan Wing proposed some text for the configurable errors in | |||
Section 7.1. | Section 7.1. | |||
Contributors | Contributors | |||
The following individual contributed text to the document: | The following individual contributed text to the document: | |||
Sarat Kamiset, Insieme Networks, United States | Sarat Kamiset | |||
Insieme Networks | ||||
United States | ||||
Authors' Addresses | Authors' Addresses | |||
Reinaldo Penno | Reinaldo Penno | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
170 West Tasman Drive | 170 West Tasman Drive | |||
San Jose, California 95134 | San Jose, California 95134 | |||
USA | United States | |||
Email: repenno@cisco.com | Email: repenno@cisco.com | |||
Simon Perreault | Simon Perreault | |||
Jive Communications | Jive Communications | |||
Canada | Canada | |||
Email: sperreault@jive.com | Email: sperreault@jive.com | |||
Mohamed Boucadair (editor) | Mohamed Boucadair (editor) | |||
End of changes. 54 change blocks. | ||||
138 lines changed or deleted | 136 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |