Internet-Draft icmpext-xlat-source March 2024
Lamparter & Linkova Expires 22 September 2024 [Page]
Internet Area
Intended Status:
Standards Track
D. Lamparter
NetDEF, Inc.
J. Linkova

ICMP Extensions for IP/ICMP translators (XLATs)


This document suggests the creation of an ICMP Multi-part Extension to carry the original IPv6 source address of ICMPv6 messages translated to ICMP by stateless (RFC6145) or stateful (RFC 6146) protocol translators.

About This Document

This note is to be removed before publishing as an RFC.

Source, version control history, and issue tracker for this draft can be found at

(Note the draft was renamed (clat → xlat) prior to submission but changing the repository name on github breaks too many things to be worth the effort.)

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 22 September 2024.

Table of Contents

1. Introduction

To allow communication between IPv6-only and IPv4-only devices, IPv4/IPv6 translators translate IPv6 and IPv4 packet headers according to the IP/ICMP Translation Algorithm defined in [RFC6145]. For example, 464XLAT ([RFC6877]) defines an architecture for providing IPv4 connectivity across an IPv6-only network. The solution contains two key elements: provider-side translator (PLAT) and customer-side translator (CLAT). CLAT implementations translate private IPv4 addresses to global IPv6 addresses, and vice versa, as defined in [RFC6145].

To map IPv4 addresses to IPv6 ones the translators use the translation prefix (either a well-known or a network-specific one, see [RFC6052]). The resulting IPv6 addresses can be statelessly translated back to IPv4. However it's not the case for an arbitrary global IPv6 addresses. Those addresses can only be translated to IPv4 by a stateful translators.

One of scenarios when it might be required but not currently possible is translating ICMPv6 error messages send by intermediate nodes to the CLAT address in the 464XLAT envinronment. The most typical example is a diagnistic tool like traceroute sending packets to an IPv4 destination from an IPv6-only host. Received ICMPv6 Time Exceeded are translated to ICMP Time Exceeded. If those packets were originated from an IPv4 address and translated to ICMPv6 by the PLAT (NAT64) device, then the source address of such packet can be mapped back to IPv4 by removing the translation prefix. However ICMPv6 error messages sent by devices located between the IPv6-only host and the NAT64 device have "native" IPv6 source addresses, which can not be mapped back to IPv4. Those packets are usually dropped and tools like traceroute can not represent IPv6 intermediate hops in any meaningful way. Such behaviour complicates troubleshooting. It's also confusing for users and increases operational costs, as users report packet loss in the network based on traceroute output.

Some CLAT implementations are known to workaround this issue by representing IPv6 addresses in IPv4 traceroute by using a reserved IPv4 address space and using the hop limit as the last octet, so an IPv6 device 5 hops away is shown as etc.

It should be noted that the similar issue occurs in IPv6 Data Center Environments when an ICMPv6 error message needs to be sent to an IPv4-only client. As per Section 4.8 of [RFC7755], ICMPv6 error packets are usually dropped by the translator.

This document proposes an ICMP extension so original IPv6 address of an ICMPv6 error message can be included into IMCP message and therefore passed to an application.

2. Requirements Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

3. Improved Translation Behavior

Whenever a translator generates an IPv4 ICMP message from an ICMPv6 packet, and the IPv6 source address does not match the NAT64 prefix (and is therefore not mappable to an IPv4 address), the extension described in this document SHOULD be added to the ICMP packet.

The translator SHOULD NOT add the extension if the packet IPv6 source address is an IPv4 address mapped to an IPv6 address using the translation prefix known to the translator.

TBD: clarify IPv4 source address for consistency? (maybe not, would extend scope of this draft.)

4. IPv6 Original Source Extension

The suggested encoding to be appended[RFC4884] to ICMP messages is as follows:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|          Length = 20          |   Class TBD1  |  C-Type = 0   |
|                                                               |
+                                                               +
|                  original IPv6 source address                 |
+                          16 octets                            +
|                                                               |
+                                                               +
|                                                               |
Figure 1

The Length, Class and C-Type fields are as defined in [RFC4884] and filled in accordingly. This document describes only one encoding and uses C-Type 0 for it. C-Type MUST be set to 0 when appending this extension. On receipt, this extension MUST be ignored if C-Type is not 0 or if Length is not 20.

The original IPv6 source address field is always 16 octets in length and filled as described in this document. It may contain any source address possibly seen in an ICMPv6 packet. This notably includes link-local addresses, the IPv6 loopback address, and mapped IPv4 addresses. Receivers MUST NOT reject addresses solely due to the address not being a globally scoped IPv6 addresses.

5. Security Considerations

TBD. Should probably be local-only.

6. Privacy Considerations


7. IANA Considerations

This document requests that IANA allocates a "Class Value" from the "ICMP Extension Object Classes and Class Sub-types" registry created by [RFC4884] for use as described above. The following entry should be appended:

Table 1
Class Value Class Name Reference
TBD1 Original IPv6 Source Address [THIS DOCUMENT]

8. References

8.1. Normative References

Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <>.
Bonica, R., Gan, D., Tappan, D., and C. Pignataro, "Extended ICMP to Support Multi-Part Messages", RFC 4884, DOI 10.17487/RFC4884, , <>.
Bao, C., Huitema, C., Bagnulo, M., Boucadair, M., and X. Li, "IPv6 Addressing of IPv4/IPv6 Translators", RFC 6052, DOI 10.17487/RFC6052, , <>.
Li, X., Bao, C., and F. Baker, "IP/ICMP Translation Algorithm", RFC 6145, DOI 10.17487/RFC6145, , <>.
Mawatari, M., Kawashima, M., and C. Byrne, "464XLAT: Combination of Stateful and Stateless Translation", RFC 6877, DOI 10.17487/RFC6877, , <>.
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <>.

8.2. Informative References

Anderson, T., "SIIT-DC: Stateless IP/ICMP Translation for IPv6 Data Center Environments", RFC 7755, DOI 10.17487/RFC7755, , <>.


This document is the result of discussions with Thomas Jensen.

Authors' Addresses

David 'equinox' Lamparter
NetDEF, Inc.
San Jose,
United States of America
Jen Linkova
1 Darling Island Rd
Pyrmont NSW 2009