Docs TXT PDF Draft-Ietf-V6op... Tracker Diff1 Diff2 IPR Errata
Docs TXT PDF Draft-Ietf-V6op... Tracker Diff1 Diff2 IPR Errata
Docs TXT PDF Draft-Ietf-V6op... Tracker Diff1 Diff2 IPR Errata
[Errata]
PROPOSED STANDARD
Errata Exist
Copyright Notice
Abstract
Table of Contents
1. Introduction ....................................................2
1.1. Terminology ................................................3
2. Dual IP Layer Operation .........................................4
2.1. Address Configuration ......................................5
2.2. DNS ........................................................5
3. Configured Tunneling Mechanisms .................................6
3.1. Encapsulation ..............................................7
3.2. Tunnel MTU and Fragmentation ...............................8
3.2.1. Static Tunnel MTU ...................................9
3.2.2. Dynamic Tunnel MTU ..................................9
3.3. Hop Limit .................................................11
3.4. Handling ICMPv4 Errors ....................................11
3.5. IPv4 Header Construction ..................................13
3.6. Decapsulation .............................................14
3.7. Link-Local Addresses ......................................17
3.8. Neighbor Discovery over Tunnels ...........................18
4. Threat Related to Source Address Spoofing ......................18
5. Security Considerations ........................................19
6. Acknowledgements ...............................................21
7. References .....................................................21
7.1. Normative References ......................................21
7.2. Informative References ....................................21
8. Changes from RFC 2893 ..........................................23
1. Introduction
1.1. Terminology
Types of Nodes
IPv4-only node:
IPv6/IPv4 node:
IPv6-only node:
IPv6 node:
IPv4 node:
IPv6-over-IPv4 tunneling:
Configured tunneling:
The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,
SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, when they appear in this
document, are to be interpreted as described in [RFC2119].
The most straightforward way for IPv6 nodes to remain compatible with
IPv4-only nodes is by providing a complete IPv4 implementation. IPv6
nodes that provide complete IPv4 and IPv6 implementations are called
"IPv6/IPv4 nodes". IPv6/IPv4 nodes have the ability to send and
receive both IPv4 and IPv6 packets. They can directly interoperate
with IPv4 nodes using IPv4 packets, and also directly interoperate
with IPv6 nodes using IPv6 packets.
- With their IPv4 stack enabled and their IPv6 stack disabled.
- With their IPv6 stack enabled and their IPv4 stack disabled.
IPv6/IPv4 nodes with their IPv6 stack disabled will operate like
IPv4-only nodes. Similarly, IPv6/IPv4 nodes with their IPv4 stacks
2.2. DNS
The Domain Naming System (DNS) is used in both IPv4 and IPv6 to map
between hostnames and IP addresses. A new resource record type named
"AAAA" has been defined for IPv6 addresses [RFC3596]. Since
IPv6/IPv4 nodes must be able to interoperate directly with both IPv4
and IPv6 nodes, they must provide resolver libraries capable of
dealing with IPv4 "A" records as well as IPv6 "AAAA" records. Note
that the lookup of A versus AAAA records is independent of whether
the DNS packets are carried in IPv4 or IPv6 packets and that there is
no assumption that the DNS servers know the IPv4/IPv6 capabilities of
the requesting node.
The issues and operational guidelines for using IPv6 with DNS are
described at more length in other documents, e.g., [DNSOPV6].
IPv6/IPv4 hosts and routers can tunnel IPv6 datagrams over regions of
IPv4 routing topology by encapsulating them within IPv4 packets.
Tunneling can be used in a variety of ways:
3.1. Encapsulation
+-------------+
| IPv4 |
| Header |
+-------------+ +-------------+
| IPv6 | | IPv6 |
| Header | | Header |
+-------------+ +-------------+
| Transport | | Transport |
| Layer | ===> | Layer |
| Header | | Header |
+-------------+ +-------------+
| | | |
~ Data ~ ~ Data ~
| | | |
+-------------+ +-------------+
- How to reflect ICMPv4 errors from routers along the tunnel path
back to the source as ICMPv6 errors.
A node using static tunnel MTU treats the tunnel interface as having
a fixed-interface MTU. By default, the MTU MUST be between 1280 and
1480 bytes (inclusive), but it SHOULD be 1280 bytes. If the default
is not 1280 bytes, the implementation MUST have a configuration knob
that can be used to change the MTU value.
When using the static tunnel MTU, the Don't Fragment bit MUST NOT be
set in the encapsulating IPv4 header. As a result, the encapsulator
should not receive any ICMPv4 "packet too big" messages as a result
of the packets it has encapsulated.
the resulting path MTU. The IPv6 layer in the encapsulator can then
view a tunnel as a link layer with an MTU equal to the IPv4 path MTU,
minus the size of the encapsulating IPv4 header.
Note that this does not eliminate IPv4 fragmentation in the case when
the IPv4 path MTU would result in an IPv6 MTU less than 1280 bytes.
(Any link layer used by IPv6 has to have an MTU of at least 1280
bytes [RFC2460].) In this case, the IPv6 layer has to "see" a link
layer with an MTU of 1280 bytes and the encapsulator has to use IPv4
fragmentation in order to forward the 1280 byte IPv6 packets.
Note that using dynamic tunnel MTU is subject to IPv4 path MTU
blackholes should the ICMPv4 "packet too big" messages be dropped by
firewalls or not generated by the routers [RFC1435, RFC2923].
The ICMPv4 "packet too big" error messages are handled according to
IPv4 Path MTU Discovery [RFC1191] and the resulting path MTU is
recorded in the IPv4 layer. The recorded path MTU is used by IPv6 to
determine if an ICMPv6 "packet too big" error has to be generated as
described in Section 3.2.2.
Many older IPv4 routers return only 8 bytes of data beyond the IPv4
header of the packet in error, which is not enough to include the
address fields of the IPv6 header. More modern IPv4 routers are
likely to return enough data beyond the IPv4 header to include the
entire IPv6 header and possibly even the data beyond that. See
[RFC1812].
If sufficient data bytes from the offending packet are available, the
encapsulator MAY extract the encapsulated IPv6 packet and use it to
generate an ICMPv6 message directed back to the originating IPv6
node, as shown below:
+--------------+
| IPv4 Header |
| dst = encaps |
| node |
+--------------+
| ICMPv4 |
| Header |
- - +--------------+
| IPv4 Header |
| src = encaps |
IPv4 | node |
+--------------+ - -
Packet | IPv6 |
| Header | Original IPv6
in +--------------+ Packet -
| Transport | Can be used to
Error | Header | generate an
+--------------+ ICMPv6
| | error message
~ Data ~ back to the source.
| |
- - +--------------+ - -
When receiving ICMPv4 errors as above and the errors are not "packet
too big", it would be useful to log the error as an error related to
the tunnel. Also, if sufficient headers are available, then the
originating node MAY send an ICMPv6 error of type "unreachable" with
code "address unreachable" to the IPv6 source. (The "address
unreachable" code is appropriate since, from the perspective of IPv6,
the tunnel is a link and that code is used for link-specific errors
[RFC2463]).
Note that when the IPv4 path MTU is exceeded, and sufficient bytes of
payload associated with the ICMPv4 errors are not available, or
ICMPv4 errors do not cause the generation of ICMPv6 errors in case
there is enough payload, there will be at least two packet drops
instead of at least one (the case of a single layer of MTU
discovery). Consider a case where an IPv6 host is connected to an
IPv4/IPv6 router, which is connected to a network where an ICMPv4
error about too big packet size is generated. First, the router
needs to learn the tunnel (IPv4) MTU that causes at least one packet
loss, and then the host needs to learn the (IPv6) MTU from the router
that causes at least one packet loss. Still, in all cases there can
be more than one packet loss if there are multiple large packets in
flight at the same time.
Version:
Type of Service:
Total Length:
Payload length from IPv6 header plus length of IPv6 and IPv4
headers (i.e., IPv6 payload length plus a constant 60 bytes).
Identification:
Flags:
Fragment Offset:
Time to Live:
Protocol:
Header Checksum:
Source Address:
Destination Address:
When encapsulating the packets, the node must ensure that it will use
the correct source address so that the packets are acceptable to the
decapsulator as described in Section 3.6. Configuring the source
address is appropriate particularly in cases in which automatic
selection of source address may produce different results in a
certain period of time. This is often the case with multiple
addresses, and multiple interfaces, or when routes may change
frequently. Therefore, it SHOULD be possible to administratively
specify the source address of a tunnel.
3.6. Decapsulation
+-------------+
| IPv4 |
| Header |
+-------------+ +-------------+
| IPv6 | | IPv6 |
| Header | | Header |
+-------------+ +-------------+
| Transport | | Transport |
| Layer | ===> | Layer |
| Header | | Header |
+-------------+ +-------------+
| | | |
~ Data ~ ~ Data ~
| | | |
+-------------+ +-------------+
After the decapsulation, the node MUST silently discard a packet with
an invalid IPv6 source address. The list of invalid source addresses
SHOULD include at least:
The configured tunnels are IPv6 interfaces (over the IPv4 "link
layer") and thus MUST have link-local addresses. The link-local
addresses are used by, e.g., routing protocols operating over the
tunnels.
When the host has more than one IPv4 address in use on the physical
interface concerned, a choice of one of these IPv4 addresses is made
+-------+-------+-------+-------+-------+-------+------+------+
| FE 80 00 00 00 00 00 00 |
+-------+-------+-------+-------+-------+-------+------+------+
| 00 00 00 00 | IPv4 Address |
+-------+-------+-------+-------+-------+-------+------+------+
Even if all IPv4 routers between the attacker and the decapsulator
implement IPv4 ingress filtering, and all IPv6 routers between the
decapsulator and Bob implement IPv6 ingress filtering, the above
spoofed packets will not be filtered out. As a result, Bob will
receive a packet that looks like it was sent from Alice even though
the sender was some unrelated node.
5. Security Considerations
When dropping packets due to failing to match the allowed IPv4 source
addresses for a tunnel the node should not "acknowledge" the
existence of a tunnel, otherwise this could be used to probe the
acceptable tunnel endpoint addresses. For that reason, the
specification says that such packets MUST be discarded, and an ICMP
6. Acknowledgements
We would like to thank the members of the IPv6 working group, the
Next Generation Transition (ngtrans) working group, and the v6ops
working group for their many contributions and extensive review of
this document. Special thanks are due to (in alphabetical order) Jim
Bound, Ross Callon, Tim Chown, Alex Conta, Bob Hinden, Bill Manning,
John Moy, Mohan Parthasarathy, Chirayu Patel, Pekka Savola, and Fred
Templin for many helpful suggestions. Pekka Savola helped in editing
the final revisions of the specification.
7. References
[RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery
for IP version 6", RFC 1981, August 1996.
[RFC1435] Knowles, S., "IESG Advice from Experience with Path MTU
Discovery", RFC 1435, March 1993.
[RFC2923] Lahey, K., "TCP Problems with Path MTU Discovery", RFC
2923, September 2000.
[RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W.
Stevens, "Basic Socket Interface Extensions for IPv6", RFC
3493, February 2003.
[RFC4087] Thaler, D., "IP Tunnel MIB", RFC 4087, June 2005.
The motivation for the bulk of these changes are to simplify the
document to only contain the mechanisms of wide-spread use.
- Added stronger wording for source address checks: both IPv4 and
IPv6 source addresses MUST be checked, and RPF-like ingress
filtering is optional.
Authors' Addresses
Erik Nordmark
Sun Microsystems
17 Network Circle
Menlo Park, CA 94025
USA
Robert E. Gilligan
Intransa, Inc.
2870 Zanker Rd., Suite 100
San Jose, CA 95134 USA
Intellectual Property
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-
[email protected].
Acknowledgement