Module 19 of 45 · Applied

IPv6-mostly: how networks retire IPv4

30 min 5 outcomes 2 diagrams + knowledge check

Networks retire IPv4 one host at a time, not on a chosen date. A capable host is told it may give up its IPv4 lease, the segment keeps a translator so that host can still reach services that exist only on IPv4, and a second translator on the host itself covers the applications that only know how to speak IPv4. The rest of this module is how those three pieces fit together, which one rescues which broken case, and what evidence tells you the change worked.

By the end of this module you will be able to:

  • Explain what an IPv6-mostly segment is and what it is for
  • Describe how DHCPv4 option 108 lets a capable host drop IPv4
  • Trace a packet through NAT64 and DNS64, and through 464XLAT
  • Say which operating systems ship a CLAT and why that decides rollout order
  • Replace dual-stack-forever with a transition plan that has evidence behind it

India past 70 percent IPv6 capability: the transition already happened somewhere

APNIC Labs measures how much of a country's user population can actually use , by serving measurement tasks to real browsers and recording which address family they succeed on. On that measure India exceeds 70 percent capability, and France does too. That is the largest national demonstration available that transition at population scale is a thing networks finish rather than a thing they discuss.

The number matters less than what it rules out. An estate that has not started usually explains itself with a claim about the world: that IPv6 is not ready, that applications break, that users notice. A country where more than seven users in ten already reach the internet over IPv6 has answered that claim in the only way that counts, at a scale no laboratory trial reaches. Whatever is stopping a particular organisation is local, and local problems have owners.

Note the shape of the evidence, because this course keeps asking for it. The claim has a source (APNIC Labs), a method (measurements served to real user populations) and a subject (capability, meaning users who can use IPv6, not traffic that did). Google's own public measurement, a different population and a different method, recorded 50.10 percent of its worldwide users on IPv6 on 28 March 2026. Two sources, two methods, one direction of travel.

One segment, three kinds of host, no second network

Each host answers DHCPv4 option 108 for itself, so the segment sheds IPv4 leases one capable client at a time, and the IPv4-only host in the third lane is the single reason the address pool cannot yet be switched off.

An IPv6-mostly segment runs three kinds of host at once: DHCPv4 option 108 (RFC 8925) lets capable hosts drop IPv4 while NAT64 keeps the IPv4-only server reachable.

One segment, three kinds of host, no second network A three-lane swimlane on a single IPv6-mostly segment. Every lane crosses the same three columns: DHCPv4 exchange, addresses in use, and path to an IPv4 server. Lane A is an IPv6-only host: it is offered option 108, ends up with a global IPv6 address and no IPv4 lease, and reaches IPv4 servers through DNS64 and NAT64. Lane B is a dual-stack host: it ignores option 108, keeps both addresses, and reaches IPv4 servers with no translation. Lane C is an IPv4-only host: it has no IPv6 stack, holds an IPv4 lease, and is the reason the pool stays. A callout names RFC 8925, RFC 6146 and RFC 6147, and flags the IPv6-mostly guidance as an Internet-Draft. DHCPv4 exchange Addresses in use Path to an IPv4 server HOST A IPv6-only host that took option 108 DROPS IPv4 Option 108 offered The client asks for IPv4 and says it can live without it. IPv6 only A global IPv6 address and no IPv4 lease at all. Through NAT64 DNS64 returns a synthetic AAAA; NAT64 rewrites the packet. option 108 accepted, IPv4 dropped AAAA synthesised, then translated HOST B Dual-stack host that kept its IPv4 lease KEEPS BOTH Option 108 ignored The client never signalled support, so the server leases IPv4. IPv6 and IPv4 Two stacks, two addresses, twice the estate to run. Straight over IPv4 No translation is involved, so this host proves nothing. option 108 ignored, IPv4 leased native IPv4, no translation HOST C IPv4-only host that cannot be changed IPv4 ONLY No IPv6 to prefer There is no IPv6 stack here, so option 108 means nothing. IPv4 only It holds one of the leases the pool still has to carry. Straight over IPv4 This host is why the IPv4 pool cannot be switched off yet. no IPv6 stack, plain IPv4 lease the path that keeps the pool alive One segment, no second network to run Option 108 is RFC 8925, NAT64 is RFC 6146 and DNS64 is RFC 6147. Operational guidance for IPv6-mostly segments is draft-ietf-v6ops-6mops, an Internet-Draft, not an RFC.

17.1 The problem dual-stack never solved

Running both protocols side by side does not retire either of them. It removes the pressure to. That is the whole difficulty with : it was designed as a bridge, it works extremely well, and because it works there is never a week when anything forces the older half to end.

Start with what two protocols cost when both are permanent. There are two addressing plans to design and document. There are two sets of firewall rules that are supposed to express the same policy, written in different syntax by different people at different times, and drifting apart quietly from the day they are deployed. There are two families of DNS record to keep truthful. There are two paths for every flow, so every capacity model, every monitoring view and every on-call runbook has a version for each. And every incident now opens with a question that did not exist before: which family failed, and for whom.

The IPv4 half also carries costs the IPv6 half does not. Addresses are scarce, so they are shared, which means and the from the previous module, with its capacity limits, its timers and its logging obligations. Every host that keeps a lease keeps a slice of a pool somebody has to manage. None of that spend buys a new capability. It buys the continued existence of the thing you were supposed to be leaving.

One worry deserves removing before it shapes the plan, because it usually does. Giving up IPv4 on a segment does not give up protection. The previous module settled the general case: NAT is address sharing, unsolicited traffic is dropped for want of a state-table entry rather than by any policy somebody wrote, and RFC 4787 specifies that behaviour without claiming it protects anything. What matters for this decision is the consequence. A host that gives up its IPv4 lease keeps a global IPv6 address behind a stateful firewall, so its default-deny behaviour becomes a rule that can be read, audited and changed rather than an accident of address arithmetic. The security question moves from the addressing plan to the firewall policy, which is where somebody can actually answer it.

Common misconception

Dual-stack is the end state. We will run both protocols for as long as it takes.

Dual-stack is a coexistence mechanism, not a retirement mechanism. Nothing in it ever removes a protocol from anything: each new device is given both, each new segment is planned for both, and the IPv4 pool never shrinks on its own. Every additional year of it funds a second estate, a second policy surface and a second failure mode, in exchange for no new capability. Retirement needs a ratchet, meaning a step that takes IPv4 away from a host and does not hand it back by accident, which is exactly what the mechanism in the next section provides.

A ratchet is what has been missing, and the reason it is hard is the segment. Most segments contain at least one device that will never speak anything but IPv4, so switching a whole segment off is not available. The mechanism that follows works at the granularity that is actually achievable: one host at a time, with its neighbour on the same wire untouched.

17.2 IPv6-mostly: one segment, three kinds of host

An segment is one where IPv6-only and IPv4-capable devices sit on the same wire at the same time. It is not an IPv6-only network, which would require every device on it to have been dealt with first. It is not dual-stack either, because on a dual-stack segment every device holds an IPv4 address whether it needs one or not. It is the middle arrangement that lets the IPv4 population shrink device by device.

The swimlane above shows the three populations that result, and the important detail is that they differ only in what happened at DHCP. Host A signalled that it can work without IPv4, was not given a lease, and now holds a global IPv6 address and nothing else. Host B either cannot make that signal or was not configured to, so it kept both addresses and runs as a dual-stack host. Host C has no IPv6 stack at all, holds an IPv4 lease, and is the reason the IPv4 pool on that segment stays switched on. All three work. Only one of them has reduced anything.

The signal is , specified in RFC 8925, and the useful way to read it is as a polite question rather than a command. The client asks for an IPv4 address in the ordinary way and attaches a statement about itself: I am able to operate without one. The server decides. If the segment is ready, meaning translation is available and IPv6 is properly configured, it withholds the IPv4 lease for a stated period and the client runs IPv6-only until that period ends, at which point the exchange happens again.

Three properties of that exchange are what make a rollout survivable. The claim comes from the host, so a device that cannot cope never makes it and is never affected. The decision belongs to the network, so the change is made in one place per segment rather than on thousands of endpoints. And the withholding is timed, so the arrangement expires and renegotiates instead of becoming a permanent state that nobody remembers configuring. Reversing the whole thing is one DHCP setting and one lease cycle, which is a materially different risk conversation from a migration that has to be unwound host by host.

Status matters here and the course is deliberate about it. The operational guidance for running these segments is draft-ietf-v6ops-6mops, an , and it must be cited as a draft. The mechanisms it describes are not drafts: option 108 is RFC 8925, NAT64 is RFC 6146, DNS64 is RFC 6147 and 464XLAT is RFC 6877. Guidance that is still being written is a normal condition for a practice that is still spreading. It says something about how settled the operational advice is, and nothing about whether the mechanisms are finished.

Common misconception

IPv6-mostly is still only a draft, so it is too early to deploy it.

The document that is a draft is the operational guidance, draft-ietf-v6ops-6mops, which collects how organisations should run these segments. Every mechanism it relies on is a published standard: RFC 8925 for option 108, RFC 6146 for NAT64, RFC 6147 for DNS64 and RFC 6877 for 464XLAT. Those mechanisms already ship in mobile and desktop operating systems and are what mobile networks have been running for years. Reading the draft status of advice as immaturity of the protocols gets the risk backwards: the risk in an IPv6-mostly rollout is your own device inventory, not the standards.

Host A's route to a server that exists only on IPv4 was drawn in the swimlane as a single arrow labelled through NAT64. That arrow is doing a lot of work. Two separate mechanisms sit behind it, they fail in different ways, and between them they leave one gap that the rest of the module exists to close.

17.3 NAT64 and DNS64: the bridge and its gap

, specified in RFC 6146, is the translator that lets an IPv6-only client reach an IPv4-only server. , specified in RFC 6147, is what makes the client aim at it without the client knowing anything unusual is happening. Neither is much use alone, which is why they are almost always deployed together.

Follow one connection. The host has an IPv6 address and no IPv4 address. It asks its for a name in the ordinary way. The name has only an IPv4 address published for it, so an honest answer would be no usable address at all. The resolver, running DNS64, instead synthesises an IPv6 answer by embedding that IPv4 address inside a known IPv6 prefix, and that prefix is routed to the translator. The client receives what looks like a perfectly normal IPv6 address and opens a perfectly normal IPv6 connection to it.

The translator does the other half. Packets addressed inside its prefix arrive at the network edge, and it recognises the embedded IPv4 destination, rewrites the packet into IPv4, and sends it on using an address and port from its own pool. It records the mapping so the reply can be turned back into IPv6 and delivered to the host that started the exchange. If that description feels familiar, it should: this is the state-keeping translator from the previous module, with an address family change added to the address rewrite. It inherits the same properties. State means capacity limits. Mappings expire on timers. Return traffic depends on an entry that was created by outbound traffic, so nothing unsolicited arrives from the IPv4 side. The operational questions are the ones you already know how to ask.

Now the gap, and it follows directly from how the pair works. DNS64 only helps when there is a lookup. An application that connects to a literal IPv4 address never asks the resolver anything, so nothing is synthesised, the packet it builds has an IPv4 destination, and the host has no IPv4 stack to send it with. Literals are everywhere in real estates: an address hard-coded in a configuration file, a management tool pointed at an appliance by number, a licence server written down during an installation years ago, a device that hands out its own address inside a payload. The second version of the same gap is the application that insists on an IPv4 socket even where a name exists, which is common in older software and in anything that bundles its own network layer.

There is one mercy in this, and it is worth noticing because it inverts the problem Section 17.1 described. A dual-stack host hides a broken address family behind a short delay, so the fault is invisible for months. A host that has given up its IPv4 lease has no second family to fall back on, so a dependency on a literal address fails immediately, completely, and in one named application on one named host. That is a fault somebody reports on the first afternoon with the evidence attached, which is a far better position to plan around than a fault nobody can see.

Both failures have the same shape. An application produced an IPv4 packet, and on an IPv6-only host there was nowhere for it to go. That framing points straight at the fix, because the packet does not need the network to be different. It needs somewhere to be translated before it ever reaches the wire.

17.4 464XLAT: the fix in your pocket

, specified in RFC 6877, puts a second translator on the host itself. The presents a local IPv4 address to applications, so software that wants IPv4 finds IPv4 and asks no questions. On the way out it rewrites each packet into IPv6 without keeping per-flow state, because the translation is a fixed one-to-one mapping rather than a pool being shared. The network's NAT64 then does the stateful half at the edge, exactly as in the previous section. Two translations, IPv4 to IPv6 to IPv4, which is where the name comes from.

The chain below is worth reading left to right once with a literal address in mind. The application builds an IPv4 packet aimed at an address it read from a configuration file. The CLAT turns it into IPv6 inside the host. It crosses the access network as ordinary IPv6 traffic, which is the only thing that network carries. The NAT64 at the edge turns it back into IPv4. The server sees an ordinary IPv4 client and answers one. Nothing in the application changed, and nothing in the server changed.

464XLAT carries IPv4 habits across an IPv6 world

The IPv4-only application and the IPv4-only server are both left untouched while the CLAT on the host and the NAT64 at the edge absorb the change, so an application holding a hard-coded IPv4 literal still works where DNS64 alone would not save it.

464XLAT (RFC 6877) puts a translator on the host so an IPv4-only application keeps working while the network carries only IPv6 and NAT64 (RFC 6146) restores IPv4 at the edge.

464XLAT carries IPv4 habits across an IPv6 world A horizontal chain of four boxes with a second row beneath it. The chain reads: an IPv4-only application, the CLAT on the host which statelessly rewrites the IPv4 header into IPv6 under RFC 6877, the NAT64 at the edge which statefully turns IPv6 back into IPv4 under RFC 6146, and the IPv4-only server which sees an ordinary IPv4 client. The three connectors are labelled IPv4 packet from the app, IPv6 packet on the wire, and IPv4 packet restored. The second row names the address family on the wire at each stage: IPv4 inside the host, IPv6 across the access network, IPv4 out to the server. A callout explains that DNS64 only helps a name lookup, so an IPv4 literal needs the CLAT. IPv4-only app A socket that only speaks IPv4. Nothing here can be changed. CLAT on the host Stateless. It rewrites the IPv4 header into IPv6 (RFC 6877). NAT64 at the edge Stateful. It turns IPv6 back into IPv4 and holds the flow (RFC 6146). IPv4-only server It sees an ordinary IPv4 client and never learns IPv6 was there. IPv4 packet from the app IPv6 packet on the wire IPv4 packet, restored the same journey, read by address family On the wire, stage by stage Inside the host The IPv4 packet the application wrote, before the CLAT sees it. Across the access network IPv6 only. There is no IPv4 here to carry, which is the whole point. Out to the server IPv4 again, sourced from the pool the NAT64 owns. Why the CLAT exists at all DNS64 (RFC 6147) only helps when the application asks for a name. An IPv4 literal never reaches DNS, so 464XLAT translates on the host instead and the application never has to know.

Which operating systems ship a CLAT is not trivia. It is the fact that decides which segments you can move and in what order. Android, macOS and iOS have shipped CLAT for a long time, which is why a mobile network can run IPv6-only without its customers noticing and why a segment full of phones and Macs is the easiest place to start. Windows announced expansion beyond cellular connections, so a Windows laptop estate is the one where you check what versions you actually run before you promise anything. Fedora and NetworkManager gained an -based CLAT in July 2026, which brings mainstream Linux desktops into the same position and is recent enough that a fleet built last year may not have it.

That reframes the question people usually ask. Will this break my users is not answerable in general. What does this segment run, and does that software ship a CLAT, is an inventory question with a real answer, and answering it is most of the work of planning a rollout.

Two limits keep the picture honest. 464XLAT is designed for traffic where a client reaches a server, not for IPv4 peer-to-peer connections between two hosts that both expect to be reachable, so an application built on inbound IPv4 connections is a genuine exception rather than a configuration problem. And a device with no CLAT and no way to install one, which is most instruments, cameras and appliances, is not rescued by any of this. That device keeps IPv4, and the segment it lives on keeps IPv4 with it.

So the translation story ends in a sorting rule rather than a universal fix. Hosts that run a CLAT can be offered option 108; hosts that cannot run one decide what their segment has to keep. That makes the rollout an inventory problem rather than a design problem, and the last section turns it into a plan: an order to work through, and a measurement attached to each step in it.

17.5 Planning a transition, and knowing it worked

Order segments by what you know about the devices on them, not by which part of the estate you would most enjoy modernising. The mechanisms are settled; the risk lives entirely in your inventory.

The segments that go first share three properties. Their device population is modern, self-updating and reasonably well known, which in most organisations means staff laptop and mobile wireless, guest wireless, and in a university the student segments. Nothing on them is load-bearing for a process that cannot pause. And the change is reversible in one place, because option 108 is offered by the DHCP server and withdrawing the offer restores the previous behaviour at the next lease cycle. Start where a mistake costs a lease renewal.

The segments that stay dual-stack are the ones with a device nobody can change. A laboratory instrument with a vendor-signed image, a camera fleet, a badge reader, a building management controller: no CLAT can be installed on any of them, and no amount of network design makes an IPv4-only device speak IPv6. That is lane C in the swimlane, and it is a legitimate resting place rather than a failure. The mistake is letting one such device on one segment set the addressing policy for the whole organisation.

Before option 108 is offered anywhere, three things have to be true on that segment. IPv6 has to work properly on its own merits, meaning addressing, DNS, firewall policy and monitoring are all in place and tested, because a host that has given up IPv4 has nothing to fall back to. NAT64 and DNS64 have to be reachable and sized for the population, since every IPv6-only host now depends on that translator for a large share of the internet. And the IPv4 pool has to stay for the hosts that keep it, which means the rollout reduces demand on the pool rather than removing the pool.

Evidence that it worked is where most transition plans are weakest, so decide the measurements before the change. The primary number is leases you stopped issuing: how many hosts on that segment offered option 108 and were answered, against the size of the population. Track the active IPv4 lease count over time, because that is the pool pressure the whole exercise exists to reduce. Watch the translator: NAT64 session counts, error counters and anything resembling pool exhaustion tell you whether the bridge is carrying the load you moved onto it. Read the help desk queue for that segment specifically, and go looking for the failure this module predicts, which is an application pointed at a literal address on a host without a CLAT.

One piece of negative evidence deserves stating outright, because it is the most common self-deception in these rollouts. A dual-stack host on an IPv6-mostly segment proves nothing. It kept its IPv4 address, so it never exercised translation and never tested the path you are relying on. Testing on the host that did not change is a way of confirming that nothing changed.

Finally, keep national and global figures in their proper place. means attaching a source, a method and a date to every number, and then asking what population it describes. India above 70 percent IPv6 capability, measured by APNIC Labs, tells you that this transition is finishable at national scale. Google measuring 50.10 percent of its worldwide users on IPv6 on 28 March 2026 tells you the internet crossed halfway on one large provider's population. Neither tells you anything at all about the printer on your third floor. Public measurements settle the argument about whether to move. Your own segment measurements are the only thing that settles whether you have.

17.6 Check your understanding

A laptop on an IPv6-mostly segment took option 108 and now has no IPv4 address. Browsing works normally. A monitoring agent that connects to a hard-coded IPv4 address fails at once. Which mechanism rescues that case?

Core distinctions

  • Dual-stack is coexistence, not retirement. It funds two addressing plans, two policy surfaces and two failure paths indefinitely, and nothing inside it ever removes IPv4 from anything.
  • An IPv6-mostly segment carries IPv6-only, dual-stack and IPv4-only hosts at the same time. Only the hosts that gave up their IPv4 lease have reduced anything.
  • DHCPv4 option 108 (RFC 8925) is the host saying it can work without IPv4. The network decides, withholds the lease for a stated period, and can restore the previous behaviour with one setting.
  • NAT64 (RFC 6146) translates, DNS64 (RFC 6147) makes the client aim at the translator, and the pair fails on IPv4 literals because a literal involves no lookup to synthesise.
  • 464XLAT (RFC 6877) puts a CLAT on the host so IPv4-only applications and literal addresses keep working. Android, macOS and iOS have long shipped it, Windows announced expansion beyond cellular, and Fedora with NetworkManager gained an eBPF-based CLAT in July 2026.
  • The operational guidance draft-ietf-v6ops-6mops is an Internet-Draft and must be cited as one. The mechanisms it relies on are published RFCs.
  • Measure the rollout on the segment: option 108 uptake, the shrinking IPv4 lease count, NAT64 session and error counters, and a deliberate hunt for literal-address failures. A dual-stack host on that segment proves nothing.

Standards and sources cited in this module

  1. RFC 8925, IPv6-Only Preferred Option for DHCPv4

    Section 1, Introduction; Section 3, IPv6-Only Preferred Option

    Defines DHCPv4 option 108, the signal a capable host uses to say it can operate without IPv4 and the basis of the per-host ratchet in Section 17.2.

  2. RFC 6146, Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers

    Section 1.2, Overview; Section 3, Stateful NAT64 normative specification (binding information bases and session tables)

    The translator specification behind Section 17.3, including the per-flow state and timer behaviour that NAT64 shares with the address translation taught in the previous module.

  3. RFC 6147, DNS64: DNS Extensions for Network Address Translation from IPv6 Clients to IPv4 Servers

    Section 2, Overview; Section 5.1.7, Performing the synthesis; Section 5.2, Generation of the IPv6 representations of IPv4 addresses

    Defines the resolver behaviour that synthesises an IPv6 answer from an IPv4 address, and by construction explains why a literal IPv4 address is the case DNS64 cannot help with.

  4. RFC 6877, 464XLAT: Combination of Stateful and Stateless Translation

    Section 3, Motivation and uniqueness of 464XLAT; Section 4, Network architecture

    Specifies the CLAT on the host paired with the stateful translator in the network, the mechanism traced in Section 17.4 and the reason IPv4-only applications keep working on an IPv6-only host.

  5. draft-ietf-v6ops-6mops, IPv6-mostly Networks: Deployment and Operations Considerations (IETF Internet-Draft)

    Work in progress at the IETF v6ops working group

    The operational guidance for running IPv6-mostly segments, cited throughout Section 17.2 as a draft rather than an RFC. Its status describes how settled the advice is, not the maturity of the mechanisms it uses.

  6. RFC 4787 (BCP 127), Network Address Translation (NAT) Behavioral Requirements for Unicast UDP

    Section 4.1, Address and port mapping; Section 5, Filtering behaviour

    The source for Section 17.1's point that translation is address sharing rather than protection, which is what makes giving up IPv4 on a segment a policy question rather than a security loss.

  7. APNIC Labs, IPv6 measurement

    Per-economy IPv6 capability

    The measurement behind this module's opening story: India and France above 70 percent IPv6 capability, measured against real user populations rather than traffic samples.

  8. Google, IPv6 adoption statistics

    Native IPv6 adoption among Google users

    The second measurement window used in Section 17.5: 50.10 percent of Google's worldwide users on IPv6 on 28 March 2026, a different population and method pointing the same way.

An IPv6-mostly segment changes the addresses on the wire and nothing whatever about what the packets carry: a flow that crossed a CLAT and a NAT64 is exactly as readable, or as unreadable, as one that crossed neither. Addressing is now settled well enough to ask the other question this stage has been circling. The next module takes up what protects the contents of a connection, where TLS sits relative to the transport underneath it, and what the padlock in an address bar does and does not promise.

Module 19 of 45 · Applied stage