<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?><!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->


<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
<!ENTITY zwsp   "&#8203;">
<!ENTITY nbhy   "&#8209;">
<!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be added to the DOCTYPE above.
     Use of an external entity file is not recommended. -->

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-ietf-v6ops-6mops-00" ipr="trust200902" obsoletes="" submissionType="IETF" xml:lang="en" version="3">
  <front>
    <title abbrev="6mops">IPv6-Mostly Networks: Deployment and Operations Considerations</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-6mops-00"/>
    <author fullname="Nick Buraglio" initials="N" surname="Buraglio">
      <organization>Energy Sciences Network</organization>
      <address>
        <postal>
          <!-- Reorder these if your country does things differently -->
          <street></street>
          <city></city>
          <region>IL</region>
          <code></code>
          <country>US</country>
        </postal>
        <email>buraglio@forwardingplane.net</email>
        <email>buraglio@es.net</email>
      </address>
    </author>
    <author fullname="Ondrej Caletka" initials="O" surname="Caletka">
      <organization>RIPE NCC</organization>
      <address>
        <postal>
          <street>Stationsplein 11</street>
          <city>Amsterdam</city>
          <country>Netherlands</country>
        </postal>
        <email>Ondrej.Caletka@ripe.net</email>
      </address>
    </author>
    <author fullname="Jen Linkova" initials="J" surname="Linkova">
      <organization>Google</organization>
      <address>
        <postal>
          <!-- Reorder these if your country does things differently -->
          <street>1 Darling Island Rd</street>
          <city>Pyrmont</city>
          <region>NSW</region>
          <code>2009</code>
          <country>AU</country>
        </postal>
        <email>furry13@gmail.com</email>
        <email>furry@google.com</email>
      </address>
    </author>
    <date year="2024"/>
    <area>Ops</area>
    <workgroup>IPv6 operations</workgroup>
    <keyword>ipv6</keyword>
    <keyword>slaac</keyword>
    <keyword>464xlat</keyword>
    <keyword>clat</keyword>
    <keyword>nat64</keyword>
    <keyword>pref64</keyword>
    <keyword>ipv6-only</keyword>
    <keyword>ipv6-mostly</keyword>


    <abstract>
      <t>
This document discusses a deployment scenario called "an IPv6-Mostly network", when IPv6-only and IPv4-enabled endpoints coexist on the same network (network segment, VLAN, SSID etc).
      </t>

    </abstract>

  </front>

  <middle>

    <section>
      <name>Introduction</name>
      <t>
While most network operators initially deploy IPv6 alongside their existing IPv4 infrastructure, pure IPv6-only networks remain uncommon outside of the mobile carrier space. This dual-stack approach is seen as a necessary transition phase, allowing operators to gain experience with IPv6 while minimizing disruption.
      </t>

      <t>
However, dual-stack networks do not address the core problem driving IPv6 adoption: IPv4 address exhaustion. They still require the same amount of IPv4 resources as IPv4-only networks.  Even worse, this dual-stack approach has been demonstrated to be a long-term crutch, frequently masking problems that would otherwise be exposed and remedied as normal operational workflows. Many applications still rely on IPv4, creating a chicken-and-egg problem: IPv6-only networks seem impractical with so many incompatible applications, yet applications continue to rely on IPv4 because IPv6-only networks are rare.
      </t>

      <t>
The less control a network operator has over devices and applications, the more difficult it is to break IPv4 dependencies and move to IPv6-only. This is particularly challenging in enterprise networks with legacy IPv4-dependent applications and public Wi-Fi networks where operators cannot guarantee device compatibility.
      </t>

      <t>
To enable a gradual transition, operators need to identify which devices can function in IPv6-only mode and which cannot. Creating separate network segments for each type introduces complexity and scalability issues – a major hurdle to IPv6-only adoption.
      </t>

      <t>
A more desirable approach is to deploy an "IPv6-mostly" network that provides IPv4 on demand. This allows IPv6-capable devices to remain IPv6-only while seamlessly supplying IPv4 to those that require it. An IPv6-mostly network allows Endpoints to operate at the highest level of their network stack evolution, on demand, while still allowing for legacy compatibility. 
      </t>

      <t>
This document explores the requirements, recommendations, and challenges associated with deploying IPv6-mostly networks in enterprise and public Wi-Fi environments. While the principles discussed may be applicable to other network types, this document's focus remains on these specific use cases.
      </t>
    </section>

    <section>
      <name>Requirements Language</name>
      <t>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 <xref target="RFC2119"/>
      <xref target="RFC8174"/>
 when, and only when, they appear in
          all capitals, as shown here.</t>
  </section>

  <section anchor="term">
    <name>
Terminology
    </name>
    <t>
This document reuses most of Terminology section from <xref target="RFC8925"/>
.
    </t>
    <t>
Endpoint: A device connected to a network and considered a host From the operator's perspective. However, some endpoint can also extend the network to other physical or logical systems, thereby assuming routing functions. Examples include:
    </t>

    <ul>
      <li>
        <t>
Corporate laptop: While primarily a host, it might run virtual systems and route traffic to them, extending the network and acting as a router.
        </t>
      </li>
      <li>
        <t>
Mobile phone with tethering enabled: Acts as a host on the Wi-Fi network, but also as a router for tethered devices, potentially without the operator's knowledge or consent.
        </t>
      </li>
    </ul>
    <t>
Network segment: a link (VLAN, a broadcast domain etc) where hosts share the same IP subnet.
    </t>
<t>
PREF64: (or NAT64 prefix): An IPv6 prefix used for IPv6 address synthesis and for network addresses and protocols translation from IPv6 clients to IPv4 servers, <xref target="RFC6146"/>.

</t>

  </section>

  <section anchor="overview">
    <name>Solution Overview</name>
    <t>
In a nutshell, an IPv6-mostly network is very much similar to a dual-stack one with two additional key elements:
    </t>
    <ul>
      <li>
        <t>
The network provides NAT64 (<xref target="RFC6146"/>
)  functionality ([RFC6146]), enabling IPv6-only clients to communicate with IPv4-only destinations.
        </t>
      </li>
      <li>
        <t>
The DHCPv4 server infrastructure offers DHCPv4 Option 108 as per <xref target="RFC8925"/>.
        </t>
      </li>
    </ul>
    <t>
Upon connecting to an IPv6-mostly network segment, an endpoint configures its IP stack based on its capabilities:
    </t>
    <ul>
      <li>
        <t>
IPv4-Only Endpoint: Acquires an IPv4 address through DHCPv4.
        </t>
      </li>
      <li>
        <t>
Dual-Stack Endpoint (Not IPv6-Only Capable): Configures IPv6 addresses using any supported protocol. Additionally, it obtains an IPv4 address via DHCPv4.
        </t>
      </li>
      <li>
        <t>
IPv6-only capable endpoint configures its IPv6 addresses and, while performing DHCPv4, includes option 108 (<xref target="RFC8925"/>
) into the Parameter Request List. The DHCP server returns the option and, as per <xref target="RFC8925"/>
, the endpoint forgoes requesting an IPv4 address, remaining in IPv6-only mode.
      </t>
    </li>
  </ul>

  <t>
An IPv6-mostly network segment can support a mix of IPv4-only, dual-stack, and IPv6-only devices.  IPv6-only endpoints utilize the network-provided NAT64 to reach IPv4-only destinations.
  </t>
  <t>
The following sections discussed the various solution elements in more details.
  </t>

  <section anchor="capable">
    <name>IPv6-Only Capable Endpoints</name>
    <t>
      The term "IPv6-only capable endpoint" lacks a strict technical definition. It broadly describes a device that can function without native IPv4 connectivity/IPv4 addresses, providing the same user experience.
      This might be achieved by several methods:
    </t>
    <ul>
      <li>An endpoint capable of communicating only with a limited set of endpoints, all of which are available over IPv6.</li>
      <li>An endpoint capable of utilizing only IPv6 sockets, utilizing NAT64 for accessing IPv4 resources.</li>
      <li>An endpoint implementing a customer-side translator (CLAT) as specified in 464XLAT (<xref target="RFC6877"/>) to provide native IPv4 connectivity for the legacy applications.</li>
    </ul>
  </section>

  <section>
    <name>IPv6-Only and IPv4-enabled Endpoints Coexistence</name>
    <t>
One effective way to restrict IPv4 addresses solely to devices that require them is to enable support for the IPv6-Only Preferred DHCPv4 option (Option 108, <xref target="RFC8925"/>
) on the network's DHCP infrastructure. 
Most IPv6-only capable systems also support Option 108.  By recognizing this option, the network can configure those devices as IPv6-only.
    </t>
    <t>
Certain devices, such as resource-constrained embedded systems, may operate in IPv6-only mode without specific adjustments if their communication is limited to IPv6-enabled destinations. Since these systems often lack Option 108 support, administrators may need alternative methods to prevent IPv4 address assignment.

One approach is to block IPv4 traffic at the switchport level. This could involve:
    </t>

    <ul>
      <li>
        <t>
Static ACL: Applying a static filter with a "deny ip any any" rule.
        </t>
      </li>
      <li>
        <t>
Dynamic ACL via RADIUS: If 802.1x authentication is in use, RADIUS can provide an ACL blocking all IPv4 traffic.
        </t>
      </li>
    <li>
      <t>
Filtering the IPv4 ethertype (0x0800): Some hardware platforms may allow for low level filtering of ethertype 0x0800 preventing IPv4 from passing into or out of a given switchport. 
      </t>
    </li>
  </ul>

    <t>
The ACL-based approach has some scalability implications and increases operational complexity, therefore it could only be recommended as a stopgap solution.
    </t>


  </section>

  <section>

    <name>Access to IPv4-only Destinations</name>
    <t>
    </t>

    <section>

      <name>NAT64</name>
      <t>
IPv6-only endpoints require NAT64 to access IPv4-only destinations.
Quite often operators choose to combine NAT44 and NAT64 functions, deploying NAT64 at the Internet edge.
However, if not all internal services are IPv6-enabled, then NAT64 might need to allow accessing internal destinations as well as external ones. 
In that case it might be beneficial to deploy NAT64 closer to the users, instead of the network Internet edge, in order to simplify routing/firewall rules and reduce latency.      
      </t>
<t>
If IPv4-only internal destinations are using <xref target="RFC1918"/> address space, then the operator MUST NOT use the well-known prefix 64:ff9b::/96 for NAT64 (see section 3.1 of <xref target="RFC6052"/>
).
    </t>

  </section>

  <section anchor="v4only">
    <name>464XLAT</name>
    <t>
      Unless the usage of IPv4-only network sockets is prohibited or mitigated in the operating system, enabling CLAT (Customer-side translator) on endpoints is essential for seamless operation of IPv4-only applications in IPv6-only environments.
      CLAT provides an IPv4 address and IPv4 default route, ensuring functionality even without a native IPv4 address from the network. Without CLAT or similar compatibility layer inside the operating system, IPv4-only applications would fail, negatively impacting user experience and increasing support overhead.
    </t>
    <t>
Recommendations for Network Administrators controlling the endpoints:
    </t>
    <ul>
      <li>
        <t>
CLAT + DHCPv4 Option 108: If the network administrator can control endpoint configuration, CLAT SHOULD be enabled on endpoints sending DHCPv4 Option 108. This streamlines the transition.
        </t>
      </li>
      <li>
        <t>
Option 108 Without CLAT MAY be enabled if the administrator is willing to identify and fix IPv4-only systems/applications, or if all applications are confirmed to work in IPv6-only mode.
        </t>
      </li>
    </ul>
    <t>
    </t>
  </section>

  <section anchor="pref64">
    <name>Signalling NAT64 Prefix to Hosts</name>
    <t>
Hosts running 464XLAT need to discover the PREF64 (the IPv6 prefix used by NAT64).
The network administrator SHOULD configure the first-hop routers to include PREF64 information in Router Advertisements as per (<xref target="RFC8781"/>
) even if the network provides DNS64 (so hosts can use DNS64-based prefix discovery, <xref target="RFC7050"/>
).
This is required as hosts or individual applications might have custom DNS configuration (or even run a local DNS server) and ignore DNS64 information provided by the network, so they can not use <xref target="RFC7050"/>
 method to detect PREF64.
In the absense of PREF64 information in Router Advertisements such systems would not be able to run CLAT, which would cause connectivity issues for all IPv4-only applications running on the affected device. 
As such device wouldn't be able to use the network-provided DNS64, access to IPv4-only destination would be impacted as well.
At the time of writing all major OSes supporting DHCPv4 option 108 and enabling CLAT automatically also support <xref target="RFC8781"/>.
Therefore providing PREF64 information in RAs can reliably mitigate the impact of custom DNS configuration on those systems.
</t>
<t>
Receiving PREF64 information in RAs also speeds up the CLAT start up time, so an IPv4 address and default route become available for applications much faster.
</t>

</section>

<section anchor="dns64">
<name>DNS vs DNS64</name>
<t>
Traditionally, DNS64 (with NAT64) is used to enable IPv6-only endpoints to access IPv4-only destinations.
However, using DNS64 has a number of drawbacks, such as:
</t>
<ul>
<li>
  <t>
DNSSEC Incompatibility: DNS64 responses fail DNSSEC validation.
  </t>
</li>
<li>
<t>
Custom Resolvers: Endpoints or applications configured with custom resolvers or running recursive resolvers locally can not benefit from the DNS64 provided by the network.
Such systems would need to rely on CLAT or local synthesis instead (<xref target="customDNS"/> discusses this scenario in more details).
</t>
</li>
<li>
  <t>
Additional requirements for application: to benefit from DNS64, applications need to be IPv6-enabled, use DNS (do not use IPv4 literals). Many applications do not satisfy those requirements and therefore fail if the endpoint does not have an IPv4 address/native IPv4 connectivity.
Existence of such applications is the main reason why transition to IPv6-only must be incremental (via IPv6-mostly phase) and requires the vast majority of endpoints to support CLAT.
  </t>
</li>
</ul>
<t>
Those concerns make DNS64 is suboptimal and undesirtable solution long-term.
To eliminate the needs for DNS64, the network shall signal PREF64 to endpoints (see <xref target="pref64"/>), and the endpoints need to use the obtained PREF64 for performing local synthesis and for CLAT.
It should be noted that not every application can benefit from local synthesis performed by the operating system, as it would require the application to use DNS (not IP literals).
Therefore DNS64 is only required to support the following cases:
</t>
<ul>
<li>
<t>
Systems and applications which perform local synthesis but do not support <xref target="RFC8781"/> for prefix discovery, and can only discover the NAT64 prefix using <xref target="RFC7050"/>.
</t>
</li>
<li>
<t>
IPv6-only devices without CLAT (unless those endpoints are guaranteed never to need IPv4-only destinations, e.g. in case of a specialized network segment communicating solely with IPv6-capable destinations).
</t>
</li>
</ul>

<t>
  Using DNS64 however bypasses CLAT for IPv6-capable applications communicating with IPv4-only destinations, making the communication slightly more efficient. For that reason it might be beneficial to run DNS64 even if it is not strictly necessary, provided the the above mentioned drawbacks are adressed.
</t>
</section>

</section>

</section>

<section anchor="benefits">
<name>Solution Analysis</name>

<section anchor="vsds">
<name>IPv6-Only Compared to Dual-Stack</name>
<t>
IPv6-Mostly networks offer significant advantages over traditional dual-stack models where endpoints have both IPv4 and IPv6 addresses:
</t>
<ul>
<li>
<t>
Drastically Reduced IPv4 Consumption: Dual-stack deployments don't solve the core problem of IPv4 address exhaustion. IPv6-Mostly allows to significantly reduce IPv4 consumption, as well as to reclaim IPv4 space. This reduction depends on endpoint capabilities (DHCPv4 Option 108 and CLAT support). In real-world scenarios, like conference Wi-Fi, 60-70% of endpoints may support IPv6-only operation, potentially allowing 2-4 times smaller IPv4 subnets.
</t>
</li>
<li>
<t>
Controlled and incremental phase-out of IPv4: IPv6-Mostly allows for the controlled phase out IPv4 from many endpoints, streamlining operations and improving overall network reliability at a measured and operator-controlled pace.
</t>
</li>
<li>
<t>
Reduced Dependency on DHCPv4: As more devices operate seamlessly in IPv6-only mode, the criticality of DHCPv4 service diminishes significantly. This allows operators to scale down DHCPv4 infrastructure or operate it with less stringent service level objectives (SLOs), optimizing costs and resource allocation.
</t>
</li>
<li>
<t>
Simplified troubleshooting due reduced impact of Happy Eyeballs: when both the client and the server are dual-stack, communication can happen either over IPv6 or over IPv4 and the protocol choice can change over time.
This may obscure network issues or make them intermittent, complicating the troubleshooting.
In IPv6-Mostly network IPv6-only hosts are much less affected by such an issue.
Although modern versions of Happy Eyeballs algorithm support falling back to IPv4 even in case of IPv6-only network, the delay before switching to IPv4 is so long that the fallback does not happen during regular operations.
It should be noted, however, that when an IPv6-only client communicates with an IPv4-only destination, the traffic may traverse CLAT or be sent as IPv6 towards the NAT64, depending on how the specific application is written.
</t>
</li>
</ul>

<t>
The introduction of NAT64 within the IPv6-Mostly model may appear as a drawback, as it inherits many of the limitations associated with NAT44, such as translating flows from different hosts to thesame public IPv4 address, or scalability challenges caused by stateful opeation.
However, it's important to recognize that most IPv4-only or dual-stack networks already rely on NAT44 due to IPv4 address scarcity.
For these networks, transitioning to an IPv6-Mostly architecture would simply require enabling NAT64 functionality on existing NAT44 devices.
</t>
<t>
In a dual-stack network, flows originating from IPv6-only capable endpoints to IPv4-only destinations are, in most cases,  translated by NAT44.
Within an IPv6-Mostly environment, this role is fulfilled by NAT64.
Consequently, the overall load on the NAT infrastructure remains effectively unchanged, with NAT64 essentially replacing NAT44 for a subset of traffic flows.
</t>
<t>
It is also worth emphasizing that NAT64 is employed solely for facilitating access to IPv4 resources.
As the availability of IPv6-enabled resources continues to increase, the volume of traffic traversing NAT64 is expected to diminish proportionally.
</t>

<t>
As discussed in <xref target="p2p"/> coexistence of IPv6-only and IPv4-only hosts on the same link might present challenges for onlink service discovery and onlink peer2peer communications. It might be consider a disadvantge of IPv6-Moslty model for networks where onlink communication between IPv4-only and IPv6-only devices is desirable. 
</t>
</section>

<section anchor="vsv6only">
<name>IPv6-Mostly Compared to a Dedicated IPv6-Only Network</name>
<t>
Traditional IPv6-only adoption involves separate networks alongside dual-stack ones.
IPv6-Mostly approach offers significant improvements, such as:
</t>

<ul>
<li>
<t>
Enhanced Scalability:  Separate IPv6-only networks double the number of SSIDs in wireless environments, causing channel congestion and degrading performance. IPv6-Mostly doesn't require additional SSIDs. Similarly, it allows IPv4 and IPv6-only devices to coexist on the same wired VLANs, eliminating the need of additional layer2 segments, VLAN IDs, and their respective layer3 configurations.
</t>
</li>
<li>
<t>
Operational Simplicity: Managing one network segment for all clients (regardless of IPv4 needs) simplifies operations, improves user experience (no more confusing SSID choices), and reduces support tickets related to mismatched connections. Dynamic VLAN assignment becomes easier without device-specific IPv6 capability tracking.
</t>
</li>
<li>
<t>
Optimized IPv4 Consumption: User-selected dual-stack networks often lead to unnecessary IPv4 use, as users often connect IPv6-only capable devices to a dual-stack network. IPv6-Mostly network allocates IPv4 addresses 
only when devices don't advertise IPv6-only capability (DHCPv4 Option 108).
</t>
</li>
<li>
<t>
Improved Problem Visibility: User-selected fallback to dual-stack networks can mask issues with IPv6-only operation, hindering problem reporting and resolution. IPv6-Mostly forces users to work through any issues, improving identification and enabling fixes for smoother long-term transition.
</t>
</li>
<li>
<t>
Flexible, Incremental Transition: IPv6-Mostly allows for gradual migration on a per-segment or even on per-device basis. Devices become IPv6-only only when deemed fully compatible with that mode.
</t>
</li>
</ul>
</section>


</section>

<section anchor="rollout">
<name>Incremental Rollout Considerations</name>
<t>
  Migrating endpoints to IPv6-only fundamentally changes network dynamics by removing the IPv4 safety net. This includes the masking effect of traditional Happy Eyeballs algorithm <xref target="RFC6555" />. IPv6 connectivity issues become far more prominent, including those previously hidden within dual-stack environments. Operators should be prepared to discover and troubleshoot issues in both endpoints and network infrastructure, even if the dual-stack network appeared problem-free.
</t>
<t>
Some rollout considerations are discussed in the following sections.
</t>

<section anchor="incr">
<name>Per-Device and Per-Subnet Incremental Rollout</name>
<t>
  Limited control over endpoint configuration necessitates a per-subnet rollout, incrementally enabling
  first PREF64 signalling and then option 108 processing in DHCP. Unless special circumstances like
  unicast router advertisements for each host, enabling PREF64 signalling will happen per-subnet
  without an option to opt out.

  If endpoint control exists, per-device rollout is possible for option 108 processing (at least for OSes with configurable Option 108). Note that some OSes unconditionally enable Option 108 support, becoming IPv6-only the moment it's activated on the server side. The following approach is RECOMMENDED:
</t>
<ul>
<li>
<t>
PREF64 signalling: Enable PREF64 option for the router advertisement and/or DNS64 (see above). Especially if DNS64 is used, this might affect behaviour of some devices as the path via NAT64 would get generally preferred over native IPv4 path. Rollback at this stage affects the entire subnet.
</t>
</li>
<li>
<t>
DHCP Server-Side Activation: Enable Option 108 processing. Some OSes automatically switch to IPv6-only. Rollback at this stage affects the entire subnet.
</t>
</li>
<li>
<t>
Controlled Endpoint Activation: Enable Option 108 on managed endpoints with per-device rollback possible.
</t>
</li>
</ul>
</section>

<section anchor="rollback">
<name>
Rollback Approach
</name>
<t>

For quick rollback, the administrator SHOULD start with a minimal Option 108 value (300 seconds, Section 3.4 of <xref target="RFC8925"/>) and possibly increase this value as the IPv6-mostly network proves reliable, reducing the likelihood of full-scale rollback.
  In most deployments, the load of DHCP infrastructure caused by each endpoint restarting the DHCP handshake every 300 seconds would be negligible.
</t>
</section>

<section anchor="optin">
<name>Opt-In and Opt-Out Modes</name>

<t>
Before user-facing deployment, the administrator SHOULD consider a dedicated IPv6-mostly proof-of-concept network for early adopters. While this temporarily sacrifices some IPv6-mostly benefits (<xref target="vsv6only"/>
), it provides valuable operational experience and early issue detection.
</t>
<ul>
<li>
<t>
Opt-In Phase: Invite tech-savvy early adopters to join an IPv6-mostly network and report issues. While response rates may be low, dedicated participants provide valuable troubleshooting data.
</t>
</li>
<li>
<t>
Opt-Out Phase: Incrementally enable PREF64 signalling as well as Option 108. Allow selective disabling for problematic endpoints, in extreme case even by providing a separate network or rolling back IPv6-mostly in that particular subnet. Opting out SHOULD NOT be possible without a problem reports to ensure issue tracking and resolution.
</t>
</li>
</ul>

<t>
In some scenarios (see <xref target="nov6"/>
) the administrator MAY keep a dual-stack network as a last resort fallback mechanism but SHOULD prevent usesrs from connecting to it accidentially (e.g. it should be a hidden protected SSID). For recurring temporary networks, for instance during a conference, it might be a good practice to change the network SSID of the last resort fallback network between each event.
</t>

</section>

</section>

<section anchor="ops">
<name>Operational Considerations</name>

<section anchor="slaac">
<name>Address Assignment Policy</name>
<t>
As outlined in Section 6.3 of <xref target="RFC6877"/>
, CLAT requires either a dedicated IPv6 prefix or, if unavailable, a dedicated IPv6 address. Currently (2024), all implementations use SLAAC for CLAT address acquisition. Therefore, to enable CLAT functionality within IPv6-mostly network segments, first-hop routers MUST be configured to advertise a Prefix Information Option (PIO, <xref target="RFC4861"/>) containing a globally routable SLAAC-suitable prefix with the 'Autonomous Address-Configuration' (A) flag set to one.
</t>
</section>

<section anchor="eh">
<name>Extension Headers</name>
<t>
Being an IPv6-specific concept, IPv6 extension headers are often neglected or even explictly prohibited by security policies in dual-stack networks. The issues caused by blockig extension headers might be masked by the presense of Happy Eyeballs but become highly visible when there is no IPv4 to fallback to.
</t>
<t>
The network SHOULD permit at least the following extension headers:
</t>
<ul>
<li>
<t>
Fragment Header (Section 4.5 of <xref target="RFC8200"/>
).<xref target="frag"/>
 discusses the fragmentation in more details.
</t>
</li>
<li>
<t>
ESP Header, which is used for IPSec traffic, such as VPN and Wi-Fi Calling.
</t>
</li>
</ul>
</section>

<section anchor="p2p">
<name>Onlink Communication and Service Discovery</name>
<t>
Shared link is often used for automatic discovery of neighboring devices and their services by means of different protocols like Multicast DNS <xref target="RFC6762" />. Many devices and/or services are built on an assumption that devices on the same link also share the same set of address families or at least they have one common address family shared between all of them.</t>
    <t>In IPv6-Mostly, this assumption is not valid as there might be both IPv4-only and IPv6-only devices on the same link. As per <xref target="RFC6762" section="20"/>, this means that the link has two unrelated ".local." zones, one for each address family. Discovery of devices across different addres families is impossible, unless some sort of relay is deployed on the link.</t>

<t>
This concern, however, is only applicable if onlink communications are desired and permitted by security policies. For networks where peer2peer onlink communications are explicitly denied (it's often a case for enterprise networks and public WiFi), this issue is not a concern.
If onlink peer2peer communication is required, the operator needs to ensure all participating devices are either dual-stack or IPv6-mostly.
</t>
</section>

<section anchor="issues">
<name>Typical Issues</name>
<t>
IPv6-mostly networks expose hidden issues by removing the IPv4 safety net. While implementation bugs vary greatly and are beyond the scope of this document, this section focus on common problems caused by configuration, topology, or design choices.
It's crucial to note that these issues likely pre-exist in dual-stack networks, but remain unnoticed due to IPv4 fallback.
</t>

<section anchor="nov6">
<name>Hosts with Disabled or Disfunctional IPv6</name>
<t>
Historically, tech support often advised disabling IPv6 as a quick workaround, leading to devices with disabled IPv6.
Similarly, corporate IT may have disabled or filtered IPv6 under the assumption that it's not widely used.
Such endpoints requesting Option 108 will fail to connect in an IPv6-mostly network, as they won't receive IPv4 addresses and IPv6 is disabled.
</t>

<t>
Administrators controlling endpoints SHOULD ensure those endpoints have IPv6 enabled and operational before transitioning the network to IPv6-mostly mode. This includes verifying protocol enablement as well as validation of any central or discreetly managed host based firewalls that could potentially interfere with proper IPv6 function that may be masked by the presence of IPv4, and therefor exp[osed with its removal. 
</t>

</section>

<section anchor="ext">
<name>Network Extension</name>
<t>
IPv4's NAT44 allows endpoints to extend connectivity to downstream systems without upstream network awareness or permission.
This creates challenges in IPv6-mostly deployments where endpoints lack IPv4 addresses:

</t>
<t>
Solutions and trade-offs:
</t>
<ul>
<li>
<t>
Using DHCPv6-PD to allocate prefixes to endpoints (<xref target="RFC9663"/>).
Provides downstream systems with IPv6 addresses and native connectivity.
</t>
</li>
<li>
<t>
Enabling the CLAT function on the endpoint. This scenario is similar to the Wireline Network Architecture described in Section 4.1 of <xref target="RFC6877"/>
. The downstream systems would receive IPv4 addresses and their IPv4 traffic would be translated to IPv6 by the endpoint. However this approach leads to the downstream systems using IPv4 only and not benefiting from end2end IPv6 connectivity. 
To enable IPv6 benefits, combine this with IPv6 Prefix Delegation as discussed above.
</t>
</li>
<li>
<t>
Bridging and ND Proxy: The endpoint bridges IPv6 traffic and masks downstream devices behind its MAC address.
This can lead to scalability issues ( <xref target="multip"/>
) due to the single MAC being mapped to many IPv6 addresses.
</t>
</li>
</ul>
</section>

<section anchor="multip">
<name>Multiple Addresses per Device</name>
<t>
Unlike IPv4, where endpoints typically have a single IPv4 address per interface, IPv6 endpoints inherently use multiple addresses:
</t>
<ul>
<li>
<t>
Link-local address.
</t>
</li>
<li>
<t>
Temporary address (common on mobile devices for privacy)
</t>
</li>
<li>
<t>
Stable address (for long-term identification)
</t>
</li>
<li>
<t>
CLAT address (in IPv6-mostly/IPv6-only networks)
</t>
</li>
</ul>

<t>
Endpoints with containers, namespaces, or ND proxy functions may have even more addresses. This poses challenges for network infrastructure devices (SAVI switches, wireless access points, etc.) that map MAC addresses to IPv6 addresses, often with limits to prevent resource exhaustion or DoS attacks.
When the number of IPs per MAC limit is exceeded, infastructure devices behavior varies across implementations, leading to inconsistent connectivity loss and other unexpected behavior: while some systems drop new addresses, others delete older entries, causing previously functional addresses to lose connectivity.
In all those cases Endpoints and applications don't receive explicit signalling about the address becoming unusable.
</t>

<t>
While allocating prefixes to endpoints via DHCP-PD (<xref target="RFC9663"/>
) alows to eliminate the issue and corresponding scalability concerns, that solution migth not be supported by all endpoints. 
The network administrator SHOULD ensure that the deployed network infastructure devices allow sufficient number of IPv6 addresses to be mapped to a client's MAC and SHOULD monitor for events, indicating that the limit has been reached (such as syslog messages, etc).
</t>

</section>

<section anchor="gulla">
<name>Host Mobility and Renumbering</name>
<t>
Networks employing dynamic VLAN assignment (e.g., based on 802.1x or MAC-based authentication) can cause endpoints to move between VLANs and IPv6 subnets.
As client operating systems do not always handle changes in link-layer state (e.g., VLAN changes) correctly, this mobility often leads to inconsistent IP stack behavior on operating systems, resulting in the persistence of old subnet addresses and potential connectivity issues due to incorrect source address selection. <xref target="I-D.link-v6ops-gulla"/>
 provides further analysis and potential solutions.
</t>
</section>

<section anchor="frag">
<name>Fragmentation</name>
<t>
As the basic IPv6 header is 20 bytes longer than the IPv4 header, transating from IPv4 to IPv6 can result in packets exceeding the path MTU on the IPv6 side.
In that case NAT64 creates IPv6 packets with the Fragment Header (see Section 4 of <xref target="RFC6145"/>
 for more details.
As per  <xref target="RFC6145"/>
, by default the translator fragments IPv4 packets so that they fit in 1280-byte IPv6 packets. It means that all IPv4 packets larger than 1260 bytes are fragmented (or dropped if the DF bit is set).
</t>
<t>
 Administrators SHOULD maximize the path MTU on the IPv6 side (from the translator to IPv6-only hosts) to minimize fragmentation. NAT64 devices SHOULD be configured to use the actual path MTU on the IPv6 side when fragmenting IPv4 packets.
</t>
<t>
Another common case of IPv6 fragmentation is the use of protocols like DNS and RADIUS, where the server response needs to be sent as a single UDP datagram. 
Network security policies MUST allow IPv6 fragments for permitted UDP traffic (e.g., DNS, RADIUS) where single-datagram responses are required. Allowing IPv6 fragments for permitted TCP traffic is RECOMMENDED unless the network infrastructure reliably performs TCP MSS clamping.
</t>
</section>

<section anchor="traceroute">
<name>Representing IPv6 Addresses by CLAT</name>
<t>
Certain CLAT implementations face challenges when translating incoming IPv6 packets with native (non-synthesized) source addresses (e.g. ICMPv6 packets sent by intermediate hops on the path). This lack of standardized translation mechanisms can lead to:
</t>
<ul>
<li>
<t>
Incomplete Traceroute: Omission of IPv6-only hops between the endpoint and NAT64 translator, hindering troubleshooting.
</t>
</li>
<li>
<t>
Path MTU Discovery Issues: Potential disruptions in the PMTU discovery process.
</t>
</li>
</ul>

<t>
<xref target="I-D.equinox-v6ops-icmpext-xlat-v6only-source"/> proposes a solution for signalling the actual non-synthesized IPv6 source address while translating ICMPv6 error messages.
</t>
</section>

<section anchor="L2">
<name>IPv4-Dependencies in Network Admission Control</name>
<t>
Certain layer 2 network devices (e.g., wireless access points, controllers) may enforce a policy where a host's network access is contingent upon successful DHCP IPv4 address assignment or tied to results of DHCP snooping.
Consequently, hosts supporting Option 108 may experience network access denial or disconnection, as they are not assigned IPv4 addresses.
</t>
</section>

<section anchor="customDNS">
<name>Custom DNS Configuration on Endpoints</name>
<t>
In IPv6-mostly networks without PREF64 in RAs, hosts rely on DNS64 (<xref target="RFC7050"/> to discover the NAT64 prefix for CLAT operation.
<xref target="RFC8880"/> requires that queries for AAAA resource records of "ipv4only.arpa." MUST be sent to the recursive resolvers provided by the network, not to the resolvers configured manually, local recursive resolvers etc.
However some implementations do not comply with <xref target="RFC8880"/> and, when configured with custom DNS resolvers (e.g., public or corporate DNS) may bypass the network-provided DNS64, preventing NAT64 prefix discovery and hindering CLAT functionality.
</t>
<t>
Where feasible, administrators SHOULD include PREF64 in RAs within IPv6-mostly networks to minimize reliance on DNS64.
Administrators need to  be aware of the potential for CLAT failures when endpoints use custom resolvers in environments lacking PREF64.
</t>
</section>

</section>
</section>

<section anchor="Security">
<!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
<name>Security Considerations</name>
<t>
The proposed deployment scenario inherits security considerations of IPv6 (see <xref target="RFC9099"/>).
As IPv6-only device can not fall back to IPv4 if IPv6 connectivity is not available or impacted by a malicious actor.
Therefore any attack affecting IPv6 connectivity would have much more drastic outcome, comparing to dual-stack networks.
</t>
<t>
By signalling a rogue NAT64 prefix to a host, a malicious actor can:
</t>
<ul>
<li>
<t>
cause a DoS attack, if the network does not provide NAT64 functions (for that prefix or at all);
</t>
</li>
<li>
<t>
implement MitM attack by intercepting traffic to the rogue prefix.
</t>
</li>
</ul>
<t>
To countermeasure this attack vector, the network administrators SHOULD configure  the first-hop routers to include PREF64 information in Router Advertisements as per <xref target="RFC8781"/> and ensure that layer 2 security measures such as RA-Guard (<xref target="RFC6105"/>) are in place.
Section 7 of <xref target="RFC8781"/> discusses this topic in more details.
Additionally, <xref target="I-D.ietf-v6ops-claton"/> discusses security implications of enabling CLAT if native IPv4 connectivity is available and recommends disabling CLAT in that case.
</t>
<t>
Security considerations of using DHCP Option 108 are documented in Section 6 of <xref target="RFC8925"/>.
</t>
<t>

</t>
</section>

<section anchor="privacy">
<name>Privacy Considerations</name>
<t>
This document does not introduce any new privacy considerations.
IPv6-mostly networks have the same privacy considerations as other Dual-stacked or IPv6-only networks.
</t>
</section>

<section anchor="IANA">
<!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
<name>IANA Considerations</name>
<t>This memo does not introduce any requests to IANA.</t>
</section>

<!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
</middle>

<back>
<references>
<name>References</name>
<references>
<name>Normative References</name>

<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6105.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6146.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6333.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6555.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6877.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7050.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7335.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8200.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8781.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8585.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8925.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9099.xml"/>
<!-- The recommended and simplest way to include a well known reference -->

</references>

<references>
<name>Informative References</name>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.1918.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4861.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4862.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6052.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6145.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6762.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7225.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8880.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9663.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-v6ops-claton.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.link-v6ops-gulla.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.equinox-v6ops-icmpext-xlat-v6only-source.xml"/>

</references>
</references>

<section anchor="Acknowledgements" numbered="false">
<name>Acknowledgements</name>
<t>
Thanks to Brian Carpenter, Stuart Cheshire, Lorenzo Colitti, David Farmer, Jordi Palet, Michael Richardson, Matsuzaki Yoshinobu for the discussions, the feedback, and all contribution.
</t>
</section>

</back>
</rfc>
