One document matched: draft-ietf-behave-tcp-01.txt
Differences from draft-ietf-behave-tcp-00.txt
Network Working Group S. Guha, Ed.
Internet-Draft Cornell U.
Expires: December 20, 2006 K. Biswas
Cisco Systems
B. Ford
M.I.T.
P. Francis
Cornell U.
S. Sivakumar
Cisco Systems
P. Srisuresh
Consultant
June 18, 2006
NAT Behavioral Requirements for TCP
draft-ietf-behave-tcp-01.txt
Status of this Memo
By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
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."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on December 20, 2006.
Copyright Notice
Copyright (C) The Internet Society (2006).
Abstract
Guha, et al. Expires December 20, 2006 [Page 1]
Internet-Draft NAT TCP Requirements June 2006
This document defines a set of requirements for NATs that handle TCP
that would allow many applications, such as peer-to-peer applications
and on-line games, to work consistently. Developing NATs that meet
this set of requirements will greatly increase the likelihood that
these applications will function properly.
Table of Contents
1. Applicability Statement . . . . . . . . . . . . . . . . . . 3
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 4
4. TCP Connection Initiation . . . . . . . . . . . . . . . . . 4
4.1 Address and Port Mapping Behavior . . . . . . . . . . . . 4
4.2 Internally Initiated Connections . . . . . . . . . . . . . 5
4.3 Externally Initiated Connections . . . . . . . . . . . . . 6
5. NAT Session Refresh . . . . . . . . . . . . . . . . . . . . 9
6. Application Level Gateways . . . . . . . . . . . . . . . . . 11
7. UDP Specific Requirements Also Applicable to TCP . . . . . . 11
7.1 Port Assignment . . . . . . . . . . . . . . . . . . . . . 11
7.2 Hairpinning Behavior . . . . . . . . . . . . . . . . . . . 12
7.3 ICMP Responses to TCP Packets . . . . . . . . . . . . . . 12
8. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 13
9. Security considerations . . . . . . . . . . . . . . . . . . 14
10. IANA considerations . . . . . . . . . . . . . . . . . . . . 15
11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 15
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 15
12.1 Normative References . . . . . . . . . . . . . . . . . . 15
12.2 Informational References . . . . . . . . . . . . . . . . 16
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 17
Intellectual Property and Copyright Statements . . . . . . . 19
Guha, et al. Expires December 20, 2006 [Page 2]
Internet-Draft NAT TCP Requirements June 2006
1. Applicability Statement
This document is adjunct to [BEHAVE-UDP], which defines many terms
relating to NATs, lays out general requirements for all NATs, and
sets requirements for NATs that handle IP and unicast UDP traffic.
The purpose of this document is to set requirements for NATs that
handle TCP traffic.
The requirements of this specification apply to Traditional NATs as
described in [RFC2663].
This document only covers the TCP aspects of NAT traversal. Middle-
box behavior that is not necessary for network address translation of
TCP is out-of-scope. Firewalls, and packet inspection above the TCP
layer are out-of-scope except for Application Level Gateways (ALG)
behavior that may interfere with NAT traversal. Application and OS
aspects of TCP NAT traversal are out-of-scope. Signaling based
approaches to NAT traversal such as Midcom and UPnP that directly
control the NAT are out-of-scope.
2. Introduction
Network Address Translators (NATs) hinder connectivity in
applications where sessions may be initiated to internal hosts.
[BEHAVE-UDP] lays out the terminology and requirements for NATs in
the context of IP and UDP. This document supplements these by
setting requirements for NATs that handle TCP traffic. All
definitions and requirements in [BEHAVE-UDP] are inherited here.
[TCP-ROADMAP] chronicles the evolution of TCP from the original
definition [RFC0793] to present day implementations. While much has
changed in TCP with regards to congestion control and flow control,
security, and support for high-bandwidth networks, the process of
initiating a connection (i.e. the 3-way handshake or simultaneous-
open) has changed little. It is the process of connection initiation
that NATs affect the most. Experimental approaches such as T/TCP
[RFC1644] have proposed alternate connection initiation approaches,
but, have been found to be complex and susceptible to denial-of-
service attacks. Modern operating systems and NATs consequently
primarily support the 3-way handshake and simultaneous-open modes of
connection initiation as described in [RFC0793].
Recently, many techniques have been devised to make peer-to-peer TCP
applications work across NATs. [STUNT], [NATBLASTER], and [P2PNAT]
describe Unilateral Self-Address Translation (UNSAF) mechanisms that
allow peer-to-peer applications to establish TCP through NATs. These
approaches require only endpoint applications to be modified and work
with standards compliant OS stacks. The approaches, however, depend
Guha, et al. Expires December 20, 2006 [Page 3]
Internet-Draft NAT TCP Requirements June 2006
on specific NAT behavior that is usually, but not always, supported
by NATs (see [TCPTRAV] and [P2PNAT] for details). Consequently a
complete TCP NAT traversal solution is sometimes forced to rely on
public TCP relays to traverse NATs that do not cooperate. This
document defines requirements that ensure that TCP NAT traversal
approaches are not forced to use data relays, while preserving the
functionality and security provided by NATs.
3. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
This document uses the term "NAT session" as defined in [RFC2663].
"NAT" in this specification includes both "Basic NAT" and "Network
Address/Port Translator (NAPT)" [RFC2663].
This document uses the term "TCP connection" (or just "connection")
to refer to individual TCP flows identified by the 4-tuple (source
and destination IP address and TCP port) and the initial sequence
numbers (ISN).
This document uses the term "address and port mapping" (or just
"mapping") as defined in [BEHAVE-UDP] to refer to state at the NAT
necessary for network address and port translation of TCP
connections. This document also uses (and summarizes the definition
of) the terms "endpoint independent mapping", "address dependent
mapping", "address and port dependent mapping", "filtering behavior",
"endpoint independent filtering", "address dependent filtering",
"address and port dependent filtering", "port overloading", and
"hairpinning" as defined in [BEHAVE-UDP].
4. TCP Connection Initiation
This section describes various NAT behaviors applicable to TCP
connection initiation.
4.1 Address and Port Mapping Behavior
A NAT uses a mapping to translate packets for each TCP connection. A
mapping is dynamically allocated for connections initiated from the
internal side, and potentially reused for certain subsequent
connections. NAT behavior regarding when a mapping can be reused
differs for different NATs as described here.
Consider an internal IP address and TCP port (X:x) that initiates a
TCP connection to an external (Y1:y1) tuple. Let the mapping
Guha, et al. Expires December 20, 2006 [Page 4]
Internet-Draft NAT TCP Requirements June 2006
allocated by the NAT for this connection be (X1':x1'). Shortly
thereafter, the endpoint initiates a connection from (X:x) to an
external address (Y2:y2) and gets the mapping (X2':x2') on the NAT.
If (X1':x1') equals (X2':x2') for all values of (Y2:y2) then the NAT
is defined to have "Endpoint Independent Mapping" behavior. If
(X1':x1') equals (X2':x2') only when Y2 equals Y1 then the NAT is
defined to have "Address Dependent Mapping" behavior. If (X1':x1')
equals (X2':x2') only when (Y2:y2) equals (Y1:y1), that is for
consecutive connections to the same external address (the second
connection must be made shortly after the first is terminated), then
the NAT is defined to have "Address and Port Dependent Mapping"
behavior. If (X1':x1') never equals (X2':x2'), that is for each
connection a new mapping is allocated, then the NAT is defined to
have "Connection Dependent Mapping" behavior.
REQ-1: A NAT MUST have an "Endpoint Independent Mapping" behavior for
TCP.
Justification: REQ-1 is necessary for UNSAF methods to work.
Endpoint independent mapping behavior allows peer-to-peer
applications to learn and advertise the external IP address and
port allocated to an internal endpoint such that external peers
can contact it (subject to the NAT's security policy). The
security policy of a NAT is independent of its mapping behavior
and is discussed later in Section 4.3. Having endpoint
independent mapping behavior allows peer-to-peer applications to
work consistently without compromising the security benefits of
the NAT.
4.2 Internally Initiated Connections
An internal endpoint initiates a TCP connection through a NAT by
sending a SYN packet. The NAT allocates (or reuses) a mapping for
the connection, as described in the previous section. The mapping
defines the external IP address and port used for translation of all
packets for that connection. In particular, for client-server
applications where an internal client initiates the connection to an
external server, the mapping is used to translate the outbound SYN,
the resulting inbound SYNACK response, the subsequent outbound ACK,
and other packets for the connection. This method of connection
initiation corresponds to the 3-way handshake (defined in [RFC0793])
and is supported by all NATs.
Peer-to-peer applications use an alternate method of connection
initiation termed simultaneous-open (Fig. 8, [RFC0793]) to traverse
NATs. In the Simultaneous-Open mode of operation, both peers send
SYN packets for the same TCP connection. The SYN packets cross in
the network. Upon receiving the other end's SYN packet each end
Guha, et al. Expires December 20, 2006 [Page 5]
Internet-Draft NAT TCP Requirements June 2006
responds with a SYNACK packet, which also cross in the network. The
connection is considered established once the SYNACKs are received.
From the perspective of the NAT, the internal host's SYN packet is
met by an inbound SYN packet for the same connection (as opposed to a
SYNACK packet during a 3-way handshake). Subsequent to this
exchange, both an outbound and an inbound SYNACK are seen for the
connection. Some NATs erroneously block the inbound SYN for the
connection in progress. Some NATs block or incorrectly translate the
outbound SYNACK. Such behavior breaks TCP simultaneous-open and
prevents peer-to-peer applications from functioning correctly behind
a NAT.
In order to provide network address translation service for TCP, it
is necessary for a NAT to correctly receive, translate, and forward
all packets for a connection that conform to valid transitions of the
TCP State-Machine (Fig. 6, [RFC0793]).
REQ-2: For a TCP connection, a NAT MUST support all valid sequences
of TCP packets (defined in [RFC0793]). In particular:
a) A NAT MUST accept inbound SYN and subsequent outbound SYNACK
packets when a connection initiation is in progress.
Justification: The intent of this requirement is to allow standards
compliant TCP stacks to traverse NATs no matter what path the
stacks take through the TCP state-machine.
a) Simultaneous-Open requires the NAT to accept an inbound SYN and
an outbound SYNACK for an existing connection that has been
initiated by an internal endpoint.
4.3 Externally Initiated Connections
The NAT allocates a mapping for the first connection initiated by an
internal endpoint to an external endpoint. In some scenarios, the
NAT's policy may allow this mapping to be reused for connections
initiated from the external side to the internal endpoint. Consider
as before an internal IP address and port (X:x) that is assigned (or
reuses) a mapping (X1':x1') when it initiates a connection to an
external (Y1:y1). An external endpoint (Y2:y2) attempts to initiate
a connection with the internal endpoint by sending a SYN to
(X1':x1'). A NAT can choose to either allow the connection to be
established, or to disallow the connection. If the NAT chooses to
allow the connection, it translates the inbound SYN and routes it to
(X:x) as per the existing mapping. It also translates the SYNACK
generated by (X:x) in response and routes it to (Y2:y2) and so on.
Alternately, the NAT can disallow the connection by filtering the
inbound SYN.
A NAT may allow an existing mapping to be reused by an externally
Guha, et al. Expires December 20, 2006 [Page 6]
Internet-Draft NAT TCP Requirements June 2006
initiated connection if its security policy permits. Several
different policies are possible as described here. If a NAT allows
the connection initiation from all (Y2:y2) then it is defined to have
"Endpoint Independent Filtering" behavior. If the NAT allows
connection initiations only when Y2 equals Y1 then the NAT is defined
to have "Address Dependent Filtering" behavior. If the NAT allows
connection initiations only when (Y2:y2) equals (Y1:y1), then the NAT
is defined to have "Address and Port Dependent Filtering" behavior
(possible only after the first connection has been terminated but the
mapping is still active). If the NAT does not allow connection
initiations from the external side, then the NAT is defined to have
"Connection Dependent Filtering" behavior.
REQ-3: If application transparency is most important, it is
RECOMMENDED that a NAT have an "Endpoint independent filtering"
behavior for TCP. If a more stringent filtering behavior is most
important, it is RECOMMENDED that a NAT have an "Address dependent
filtering" behavior.
a) The filtering behavior MAY be an option configurable by the
administrator of the NAT.
b) The filtering behavior for TCP MAY be independent of the
filtering behavior for UDP.
Justification: The intent of this requirement is to allow peer-to-
peer applications that do not always initiate connections from the
internal side of the NAT to continue to work in the presence of
NATs. This behavior also allows applications behind a BEHAVE
compliant NAT to inter-operate with remote endpoints that are
behind non-BEHAVE complaint (legacy) NATs. If the remote
endpoint's NAT does not have endpoint independent mapping behavior
but has only one external IP address, then an application can
still traverse the combination of the two NATs if the local NAT
has address dependent filtering. Section 9 contains a detailed
discussion on the security implications of this requirement.
If the inbound SYN packet is filtered, either because a corresponding
mapping does not exist or because of the NAT's filtering behavior, a
NAT has two basic choices: to ignore the packet silently, or to
signal an error to the sender. Signaling an error through ICMP
messages allows the sender to quickly detect that the SYN did not
reach the intended destination. Silently dropping the packet, on the
other hand, allows applications to perform Simultaneous-Open more
reliably.
Silently dropping the SYN aids Simultaneous-Open as follows.
Consider that the application is attempting a Simultaneous-Open and
the outbound SYN from the internal endpoint has not yet crossed the
NAT (due to network congestion or clock skew between the two
Guha, et al. Expires December 20, 2006 [Page 7]
Internet-Draft NAT TCP Requirements June 2006
endpoints); this outbound SYN would otherwise have created the
necessary mapping at the NAT to allow translation of the inbound SYN.
Since the outbound SYN did not reach the NAT in time, the inbound SYN
cannot be processed. If a NAT responds to the premature inbound SYN
with an error message that forces the external endpoint to abandon
the connection attempt, it hinders applications performing a TCP
simultaneous-open. If instead the NAT silently ignores the inbound
SYN, the external endpoint retransmits the SYN after a TCP timeout.
In the meantime, the NAT creates the mapping in response to the
(delayed) outbound SYN such that the retransmitted inbound SYN can be
routed and simultaneous-open can succeed.
NAT support for simultaneous-open as well as quickly signaling errors
are both important for applications. Unfortunately, there is no way
for a NAT to signal an error without forcing the endpoint to abort a
potential simultaneous-open: TCP RST and ICMP Port Unreachable
packets require the endpoint to abort the attempt while ICMP Host and
Network Unreachable errors may adversely affect other connections to
the same host or network [RFC1122].
In addition, when an unsolicited SYN is received by the NAT, the NAT
may not know whether the application is attempting a simultaneous-
open (and that it should therefore silently drop the SYN) or whether
the SYN is in error (and that it should notify the sender).
REQ-4: It is RECOMMENDED that a NAT respond to unsolicited SYN
packets with an ICMP Port Unreachable error (Type 3, Code 3). If
a NAT does so, it MUST delay the ICMP error by at least 6 seconds.
Furthermore, it MUST cancel this delayed ICMP if in that time it
receives and translates an outbound SYN for the connection. If a
NAT does not have resources to delay the ICMP error or chooses not
to send it, the NAT MUST silently drop the unsolicited SYN.
Justification: The intent of this requirement is to allow
simultaneous-open to work reliably in the presence of NATs as well
as to quickly signal an error in case the unsolicited SYN is in
error. As of writing this memo, it is not possible to achieve
both; the requirement therefore represents a compromise. The NAT
should tolerate some delay in the outbound SYN for a TCP
simultaneous-open, which may be due to network congestion or loose
synchronization between the endpoints. If the unsolicited SYN is
not part of a simultaneous-open attempt and is in error, the NAT
should endeavor to signal the error in accordance with [RFC1122].
There may, however, be reasons for the NAT to rate-limit such
error notifications, for example in the case of an attack.
Section 9 mentions the security considerations for this
requirement.
Guha, et al. Expires December 20, 2006 [Page 8]
Internet-Draft NAT TCP Requirements June 2006
OPEN ISSUE: Alternate requirements for REQ-4
Option 1 - REQ-4: The NAT MUST silently drop inbound SYNs
Option 2 - REQ-4: A NAT MUST NOT force an end-host to abort a TCP
connection that could be a S-O. It SHOULD return an error if the
error doesn't force the end to abort the attempt. Otherwise, it
MUST silently drop the SYN
Option 3 - REQ-4: If enabling P2P TCP apps is most important, a NAT
MUST silently drop the SYN. If enabling quick diagnosis of
network errors is most important, a NAT SHOULD signal an ICMP port
unreachable. The behavior MAY be configurable by the
administrator.
Option 4 - REQ-4: It is RECOMMENDED that a NAT respond to
unsolicited SYN packets with an ICMP Port Unreachable error (Type
3, Code 3). If a NAT does so, it MUST delay the ICMP error by at
least 6 seconds unless REQ-4a) applies. Furthermore, it MUST
cancel this delayed ICMP if in that time it receives and
translates an outbound SYN for the connection. If a NAT does not
have resources to delay the ICMP error or chooses not to send it,
the NAT MUST silently drop the unsolicited SYN.
a) If there is no active mapping that matches the unsolicited SYN,
then the NAT SHOULD send the ICMP immediately.
5. NAT Session Refresh
A NAT maintains state associated with in-progress and established
connections. Because of this, a NAT is susceptible to a resource-
exhaustion attack whereby an attacker (or virus) on the internal side
attempts to cause the NAT to create more state than it has resources
for. To prevent such an attack, a NAT needs to abandon sessions in
order to free the state resources.
A common method that is applicable only to TCP is to preferentially
abandon sessions for crashed endpoints, followed by closed TCP
connections and partially-open connections. A NAT can check if an
endpoint for a session has crashed by sending a TCP keep-alive packet
and receiving a TCP RST packet in response. If the NAT cannot
determine whether the endpoint is active, it should not abandon the
session until the TCP connection has been idle for some time. Noting
that an established TCP connection can stay idle (but live)
indefinitely, there is no fixed value for an idle-timeout that
accommodates all applications. However, a large idle-timeout
motivated by recommendations in [RFC1122] can reduce the chances of
abandoning a live session.
Guha, et al. Expires December 20, 2006 [Page 9]
Internet-Draft NAT TCP Requirements June 2006
A TCP connection passes through three phases: partially-open,
established, and closing. During the partially-open phase, endpoints
synchronize initial sequence numbers. The phase is initiated by the
first SYN for the connection and extends until both endpoints have
sent a packet with the ACK flag set (TCP states: SYN_SENT and
SYN_RCVD). ACKs in both directions mark the beginning of the
established phase where application data can be exchanged
indefinitely (TCP states: ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, and
CLOSE_WAIT). The closing phase begins when both endpoint have
terminated their half of the connection by sending a FIN packet.
Once FIN packets are seen in both directions, application data can no
longer be exchanged but the stacks still need to ensure that the FIN
packets are received (TCP states: CLOSING and LAST_ACK).
TCP connections can stay in established phase indefinitely without
exchanging any packets. Some end-hosts can be configured to send
keep-alive packets on such idle connections; by default, such keep-
alive packets are sent every 2 hours if enabled [RFC1122].
Consequently, a NAT that waits for slightly over 2 hours can detect
idle connections with keep-alive packets being sent at the default
rate. TCP connections in the partially-open or closing phases, on
the other hand, can stay idle for at most 4 minutes while waiting for
in-flight packets to be delivered [RFC1122].
The "established connection idle-timeout" for a NAT is defined as the
minimum time a connection in the established phase must remain idle
before the NAT considers the associated session a candidate for
removal. The "transitory connection idle-timeout" for a NAT is
defined as the minimum time a connection in the partially-open or
closing phases must remain idle before the NAT considers the
associated session a candidate for removal.
REQ-5: If a NAT cannot determine whether the endpoints of a TCP
connection are active, it MAY abandon the session if it has been
idle for some time. In such cases, the value of the "established
connection idle-timeout" MUST NOT be less than 2 hours and 4
minutes (124 minutes). The value of the "transitory connection
idle-timeout" MUST NOT be less than 4 minutes.
a) The value of the NAT idle-timeouts MAY be configurable.
Justification: The intent of this requirement is to minimize the
cases where a NAT abandons session state for a live connection.
While some NATs may choose to abandon sessions reactively in
response to new connection initiations (allowing idle connections
to stay up indefinitely in the absence of new initiations), other
NATs may choose to proactively reap idle sessions. In cases where
the NAT cannot actively determine if the connection is alive, this
requirement ensures that applications can send keep-alive packets
Guha, et al. Expires December 20, 2006 [Page 10]
Internet-Draft NAT TCP Requirements June 2006
at a predefined rate (every 2 hours) such that the NAT can
passively determine that the connection is alive. The additional
4 minutes allows time for in-flight packets to cross the NAT.
NAT behavior for handling RST packets, or connections in TIME_WAIT
state is left unspecified.
The handling of non-SYN packets for connections for which there is no
active mapping is left unspecified. Such packets may be received if
the NAT silently abandons a live connection, or abandons a connection
in TIME_WAIT state before the 4 minute TIME_WAIT period expires
(Section 2.4, [RFC1644]). The decission to either silently drop such
packets or to respond with a TCP RST packet is left up to the
implementation.
6. Application Level Gateways
Application Level Gateways (ALGs) in certain NATs modify IP addresses
and TCP ports embedded inside application protocols. Such ALGs may
interfere with UNSAF methods or protocols that try to be NAT-aware
and must therefore be used with extreme caution.
REQ-6: If a NAT includes ALGs that affect TCP, it is RECOMMENDED that
all of those ALGs (except for FTP [RFC0959]) be disabled by
default.
Justification: The intent of this requirement is to prevents ALGs
from interfering with UNSAF methods. The default state of a FTP
ALG is left unspecified because of legacy concerns: as of writing
this memo, a large fraction of legacy FTP clients do not enable
PASV mode by default and require an ALG to traverse NATs.
7. UDP Specific Requirements Also Applicable to TCP
A list of general and UDP specific NAT behavioral requirements are
described in [BEHAVE-UDP]. The following requirements summarized
here are TCP analogues to the corresponding UDP requirements.
7.1 Port Assignment
NATs that allow different internal endpoints to simultaneously use
the same mapping are defined to have a "Port assignment" behavior of
"Port overloading". Such behavior prevents two internal endpoints
sharing the same mapping from establishing simultaneous connections
to a common external endpoint.
Some applications expect the source TCP port to be in the well-known
range (TCP ports from 0 to 1023). The "r" series of commands (rsh,
Guha, et al. Expires December 20, 2006 [Page 11]
Internet-Draft NAT TCP Requirements June 2006
rcp, rlogin, etc.) are an example. [FIXME: Need Citation]
REQ-7 A NAT MUST NOT have a "Port assignment" behavior of "Port
overloading" for TCP.
a) If the host's source port was in the range 1-1023, it is
RECOMMENDED the NAT's source port be in the same range. If the
host's source port was in the range 1024-65535, it is
RECOMMENDED that the NAT's source port be in that range.
Justification: This requirement allows two applications on the
internal side of the NAT to consistently communicate with the same
destination.
a) Certain applications expect the source TCP port to be in the
well-known range.
7.2 Hairpinning Behavior
NATs that forward packets originating from an internal address,
destined for an external address that matches the active mapping for
an internal address, back to that internal address are defined to
support "hairpinning". If the NAT presents the hairpinned packet
with an external source IP address and port (i.e. the mapped source
address and port of the originating internal endpoint), then it is
defined to have "External source IP address and port" for
hairpinning. Hairpinning is necessary to allow two internal
endpoints (known to each other only by their external mapped
addresses) to communicate with each other. "External source IP
address and port" behavior for hairpining avoids confusing
implementations that expect the external source address and port.
REQ-8: A NAT MUST support "Hairpinning" for TCP.
a) A NAT Hairpinning behavior MUST be "External source IP address
and port".
Justification: This requirement allows two applications behind the
same NAT that are trying to communicate with each other using
their external addresses.
a) Using the external source address and port for the hairpinned
packet is necessary for applications that do not expect to
receive a packet from a different address than the external
address they are trying to communicate with.
7.3 ICMP Responses to TCP Packets
ICMP responses are used by end-host TCP stacks for Path MTU Discovery
and for quick error detection. ICMP messages SHOULD be rewritten by
the NAT (specifically the IP headers and the ICMP payload) and
forwarded to the appropriate internal or external host. Further,
Guha, et al. Expires December 20, 2006 [Page 12]
Internet-Draft NAT TCP Requirements June 2006
blocking any ICMP message is discouraged.
REQ-9: Receipt of any sort of ICMP message MUST NOT terminate the NAT
mapping or TCP connection for which the ICMP was generated.
a) The NAT's default configuration SHOULD NOT filter ICMP messages
based on their source IP address.
Justification: This is necessary for reliably performing TCP
simultaneous-open where a remote NAT may temporarily signal an
ICMP error. It is also useful for MTU discovery.
8. Requirements
A NAT that supports all of the mandatory requirements of this
specification (i.e., the "MUST") and is compliant with [BEHAVE-UDP],
is "compliant with this specification." A NAT that supports all of
the requirements of this specification (i.e., included the
"RECOMMENDED") and is fully compliant with [BEHAVE-UDP] is "fully
compliant with all the mandatory and recommended requirements of this
specification."
REQ-1: A NAT MUST have an "Endpoint Independent Mapping" behavior for
TCP.
REQ-2: For a TCP connection, a NAT MUST support all valid sequences
of TCP packets (defined in [RFC0793]). In particular:
a) A NAT MUST accept inbound SYN and subsequent outbound SYNACK
packets when a connection initiation is in progress.
REQ-3: If application transparency is most important, it is
RECOMMENDED that a NAT have an "Endpoint independent filtering"
behavior for TCP. If a more stringent filtering behavior is most
important, it is RECOMMENDED that a NAT have an "Address dependent
filtering" behavior.
a) The filtering behavior MAY be an option configurable by the
administrator of the NAT.
b) The filtering behavior for TCP MAY be independent of the
filtering behavior for UDP.
REQ-4: It is RECOMMENDED that a NAT respond to unsolicited SYN
packets with an ICMP Port Unreachable error (Type 3, Code 3). If
a NAT does so, it MUST delay the ICMP error by at least 6 seconds.
Furthermore, it MUST cancel this delayed ICMP if in that time it
receives and translates an outbound SYN for the connection. If a
NAT does not have resources to delay the ICMP error or chooses not
to send it, the NAT MUST silently drop the unsolicited SYN.
REQ-5: If a NAT cannot determine whether the endpoints of a TCP
connection are active, it MAY abandon the session if it has been
idle for some time. In such cases, the value of the "established
connection idle-timeout" MUST NOT be less than 2 hours and 4
minutes (124 minutes). The value of the "transitory connection
Guha, et al. Expires December 20, 2006 [Page 13]
Internet-Draft NAT TCP Requirements June 2006
idle-timeout" MUST NOT be less than 4 minutes.
a) The value of the NAT idle-timeouts MAY be configurable.
REQ-6: If a NAT includes ALGs that affect TCP, it is RECOMMENDED that
all of those ALGs (except for FTP [RFC0959]) be disabled by
default.
REQ-7 A NAT MUST NOT have a "Port assignment" behavior of "Port
overloading" for TCP.
a) If the host's source port was in the range 1-1023, it is
RECOMMENDED the NAT's source port be in the same range. If the
host's source port was in the range 1024-65535, it is
RECOMMENDED that the NAT's source port be in that range.
REQ-8: A NAT MUST support "Hairpinning" for TCP.
a) A NAT Hairpinning behavior MUST be "External source IP address
and port".
REQ-9: Receipt of any sort of ICMP message MUST NOT terminate the NAT
mapping or TCP connection for which the ICMP was generated.
a) The NAT's default configuration SHOULD NOT filter ICMP messages
based on their source IP address.
9. Security considerations
Concerns specific to handling TCP packets are discussed in this
section.
Security considerations for REQ-1: This requirement does not
introduce any TCP-specific concerns.
Security considerations for REQ-2: This requirement does not
introduce any security concerns. Simultaneous-open and other
transitions in the TCP state machine are by-design and necessary
for TCP to work correctly in all scenarios. Further, this
requirement only affects connections already in progress as
authorized by the NAT in accordance with its policy.
Security considerations for REQ-3: The security provided by the NAT
is governed by its filtering behavior as addressed in [BEHAVE-
UDP]. Connection dependent filtering behavior is most secure from
a firewall perspective, but severely restricts connection
initiations through a NAT. Endpoint independent filtering
behavior, which is most transparent to applications, requires an
attacker to guess the IP address and port of an active mapping in
order to get his packet to an internal host. Address dependent
filtering, on the other hand, is less transparent than endpoint
independent filtering but more transparent than connection
dependent filtering; it is more secure than endpoint independent
filtering as it requires an attacker to additionally guess the
address of the external endpoint for a NAT session associated with
the mapping and be able to receive packets addressed to the same.
While this protects against most attackers on the Internet, it
does not necessarily protect against attacks that originate from
Guha, et al. Expires December 20, 2006 [Page 14]
Internet-Draft NAT TCP Requirements June 2006
behind a remote NAT with a single IP address that is also
translating a legitimate connection to the victim.
Security considerations for REQ-4: This document recommends a NAT to
respond to unsolicited inbound SYN packets with an ICMP error
delayed by a few seconds. Doing so may reveal the presence of a
NAT to an external attacker. Silently dropping the SYN makes it
harder to diagnose network problems and forces applications to
wait for the TCP stack to finish several retransmissions before
reporting an error. An implementer must therefore understand and
carefully weigh the effects of not sending an ICMP error or rate-
limiting such ICMP errors to a very small number.
Security considerations for REQ-5: This document recommends that a
NAT that passively monitors TCP state keep idle sessions alive for
at least 2 hours and 4 minutes or 4 minutes depending on the state
of the connection. If a NAT is under attack and cannot actively
determine the liveness of a TCP connection, the NAT administrator
may configure more conservative timeouts.
Security considerations for REQ-6: This requirement does not
introduce any TCP-specific concerns.
Security considerations for REQ-7: This requirement does not
introduce any TCP-specific concerns.
Security considerations for REQ-8: This requirement does not
introduce any TCP-specific concerns.
Security considerations for REQ-9: This requirement does not
introduce any TCP-specific concerns.
NAT implementations that change local state based on TCP flags in
packets must ensure that out-of-window TCP packets are properly
handled. [TCP-ANTISPOOF] summarizes and discusses a variety of
solutions designed to prevent attackers from affecting TCP
connections.
10. IANA considerations
This document does not change or create any IANA-registered values.
11. Acknowledgments
Thanks to Mark Allman, Francois Audet, Paul Hoffman, Dave Hudson,
Cullen Jennings, Philip Matthews, Tom Petch, Joe Touch, and Dan Wing
for their contributions.
12. References
12.1 Normative References
[BEHAVE-UDP]
Audet, F. and C. Jennings, "NAT Behavioral Requirements
Guha, et al. Expires December 20, 2006 [Page 15]
Internet-Draft NAT TCP Requirements June 2006
for Unicast UDP", draft-ietf-behave-nat-udp (work in
progress).
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7,
RFC 793, September 1981.
[RFC0959] Postel, J. and J. Reynolds, "File Transfer Protocol",
STD 9, RFC 959, October 1985.
[RFC1122] Braden, R., "Requirements for Internet Hosts -
Communication Layers", STD 3, RFC 1122, October 1989.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2663] Srisuresh, P. and M. Holdrege, "IP Network Address
Translator (NAT) Terminology and Considerations",
RFC 2663, August 1999.
12.2 Informational References
[NATBLASTER]
Biggadike, A., Ferullo, D., Wilson, G., and A. Perrig,
"NATBLASTER: Establishing TCP connections between hosts
behind NATs", Proceedings of the ACM SIGCOMM Asia
Workshop (Beijing, China), April 2005.
[P2PNAT] Ford, B., Srisuresh, P., and D. Kegel, "Peer-to-peer
communication across network address translators",
Proceedings of the USENIX Annual Technical
Conference (Anaheim, CA), April 2005.
[RFC1644] Braden, B., "T/TCP -- TCP Extensions for Transactions
Functional Specification", RFC 1644, July 1994.
[STUNT] Guha, S. and P. Francis, "NUTSS: A SIP based approach to
UDP and TCP connectivity", Proceedings of the ACM SIGCOMM
Workshop on Future Directions in Network
Architecture (Portland, OR), August 2004.
[TCP-ANTISPOOF]
Touch, J., "Defending TCP Against Spoofing Attacks",
draft-ietf-tcpm-tcp-antispoof (work in progress).
[TCP-ROADMAP]
Duke, M., Braden, R., Eddy, W., and E. Blanton, "A Roadmap
for TCP Specification Documents",
draft-ietf-tcpm-tcp-roadmap (work in progress).
Guha, et al. Expires December 20, 2006 [Page 16]
Internet-Draft NAT TCP Requirements June 2006
[TCPTRAV] Guha, S. and P. Francis, "Characterization and Measurement
of TCP Traversal through NATs and Firewalls", Proceedings
of the Internet Measurement Conference (Berkeley, CA),
October 2005.
Authors' Addresses
Saikat Guha (editor)
Cornell University
331 Upson Hall
Ithaca, NY 14853
US
Phone: +1 607 255 1008
Email: saikat@cs.cornell.edu
Kaushik Biswas
Cisco Systems, Inc.
170 West Tasman Dr.
San Jose, CA 95134
US
Phone: +1 408 525 5134
Email: kbiswas@cisco.com
Bryan Ford
M.I.T.
Laboratory for Computer Science
77 Massachusetts Ave.
Cambridge, MA 02139
US
Phone: +1 617 253 5261
Email: baford@mit.edu
Paul Francis
Cornell University
4108 Upson Hall
Ithaca, NY 14853
US
Phone: +1 607 255 9223
Email: francis@cs.cornell.edu
Guha, et al. Expires December 20, 2006 [Page 17]
Internet-Draft NAT TCP Requirements June 2006
Senthil Sivakumar
Cisco Systems, Inc.
7100-8 Kit Creek Road
PO Box 14987
Research Triangle Park, NC 27709-4987
US
Phone: +1 919 392 5158
Email: ssenthil@cisco.com
Pyda Srisuresh
Consultant
20072 Pacifica Dr.
Cupertino, CA 95014
US
Phone: +1 408 836 4773
Email: srisuresh@yahoo.com
Guha, et al. Expires December 20, 2006 [Page 18]
Internet-Draft NAT TCP Requirements June 2006
Intellectual Property Statement
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Disclaimer of Validity
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Copyright Statement
Copyright (C) The Internet Society (2006). This document is subject
to the rights, licenses and restrictions contained in BCP 78, and
except as set forth therein, the authors retain all their rights.
Acknowledgment
Funding for the RFC Editor function is currently provided by the
Internet Society.
Guha, et al. Expires December 20, 2006 [Page 19]
| PAFTECH AB 2003-2026 | 2026-04-23 00:22:25 |