Skip to content

Transition Mechanisms for Dual-Stack Networks

Audience: network architects, cloud engineers, and isp6 members planning a network that runs IPv6 alongside (or in front of) an existing IPv4 estate. Covers the full spectrum from "IPv4 only with carrier-grade NAT" to "IPv6 only with stateless translation back to legacy v4 services" and the trade-offs between every step in between. Assumes familiarity with IPv6 addressing fundamentals; if scopes, /64s, and SLAAC are unfamiliar, start with Designing the Next Internet: An Introduction to IPv6.

Last updated: May 2026


1. Introduction

The Internet did not switch over from IPv4 to IPv6 on a flag day. It is transitioning gradually, and the operational reality of the next decade is a network that has to do both, sometimes in parallel, sometimes by translating between them, and sometimes by tunnelling one inside the other. The set of techniques that make this possible has grown into a small alphabet soup: dual-stack, NAT44, CGNAT, NAT64, DNS64, 464XLAT, DS-Lite, MAP-T, MAP-E, SIIT-DC, and most engineers come into a deployment unsure which of them applies to which problem.

This article maps the alphabet to the problem. Each mechanism solves a specific shape of "I have IPv4 here and IPv6 there and I need them to talk" problem, and choosing the wrong one can be expensive: a stateful translator where a stateless one would do, a tunnel where direct routing was already an option, or a CGNAT layer that breaks the next round of cloud services. The goal is to leave you with a clean mental model of which mechanism belongs in which architectural position.

The framing is from an isp6 member's perspective: you hold a portable IPv6 PA allocation that you announce from your own ASN, what should sit alongside it, in front of it, or behind it during the years that some of your traffic still needs to talk to IPv4-only systems?

Four eras of IPv6 transition mechanisms: the IPv4 stretch (NAT44, CGNAT/LSN); both protocols at once (dual-stack); IPv6-first with IPv4 fallback (NAT64 + DNS64, 464XLAT, DS-Lite/MAP-E/MAP-T); and IPv6-only with translation at the edge (SIIT-DC).
The rough path most networks travel, though many sit in two eras at once for years.

The arc above is roughly the path most networks travel, although not every network visits every box, and many sit in two of them at once for years.


2. Why Transition Mechanisms Exist

The fundamental constraint is that IPv4 and IPv6 are not directly interoperable. An IPv6-only host has no native way to send a packet to an IPv4-only server, because the source and destination address fields are different sizes, the headers are different, and even the wire format is different. The two protocols have to be bridged, translated, encapsulated, or tunnelled.

The need for a transition mechanism comes from one of three pressures:

Pressure Example Mechanisms it justifies
IPv4 exhaustion at the operator An ISP cannot give every subscriber a public IPv4 address CGNAT, DS-Lite, MAP-E, MAP-T
IPv6-first network with legacy v4 destinations A v6-only datacentre or mobile network whose users still need to reach example-legacy.com (v4-only) NAT64, DNS64, 464XLAT, SIIT-DC
IPv6 islands separated by IPv4-only transit An enterprise that wants v6 connectivity between sites but whose WAN provider is v4-only 6in4, GRE-over-IPv4, IPsec

Almost every architectural decision below traces back to which of those three pressures dominates the design.


3. The Dual-Stack Baseline

Dual-stack is the simplest possible "transition": the host, the router, the firewall, and the DNS resolver all run both protocols at once. An interface has an IPv4 address and an IPv6 address simultaneously; applications use the operating system's address-selection rules (RFC 6724) to choose between them on a per-destination basis.

A dual-stack host with IPv4 10.0.0.5 and IPv6 2001:db8::5 prefers the IPv6 path to destinations that resolve both AAAA and A, and falls back to IPv4 for v4-only destinations that resolve only an A record.
The host runs both protocols, preferring IPv6 wherever the destination supports it and using IPv4 only where it must.

3.1 What Dual-Stack Costs You

Dual-stack is the most operationally honest mechanism, because the network is what it appears to be, and there is no translation magic. The cost is everywhere:

  • Two routing tables, two firewall rule sets, two ACLs, two DNS records per service, two monitoring dashboards.
  • Two attack surfaces. Anything reachable on IPv4 is also reachable on IPv6 if the firewall posture is not symmetric, a frequent source of incidents during the early dual-stack rollout.
  • Two flavours of every operational issue. "It works on IPv4 but not on IPv6" is a daily helpdesk question for the first year.

3.2 What Dual-Stack Buys You

The simplicity is genuine: there is no translator in the data path, so there is no NAT64 prefix to debug, no DNS64 record to reason about, no MAP-T mapping rule to chase down. For an enterprise with a stable IPv4 estate that is adding IPv6, exactly the use case for an isp6 PA allocation, dual-stack is the right starting position.

The intent is that dual-stack is temporary. Eventually IPv4 retires, the v4 stack is disabled, and the network becomes v6-only. The remaining mechanisms in this article are all about what happens between "everything runs both" and "everything runs only v6".


4. Stretching IPv4: NAT44 and CGNAT

These two mechanisms exist because IPv4 ran out of public addresses, not because IPv6 needs anything from them. They are IPv4 survival tools, and their relevance to an IPv6-aware design is mostly the negative space they create: places where end-to-end connectivity is broken and where IPv6 deployment is the cleaner answer.

4.1 NAT44 (Basic Network Address Translation)

The familiar home-router pattern: an internal RFC 1918 network (10.0.0.0/8, 172.16.0.0/12, or 192.168.0.0/16) shares a single public IPv4 address. The router rewrites source addresses on outbound packets and maintains a translation table to send replies to the right inside host.

Property NAT44
Translation Private IPv4 ↔ Public IPv4
State Stateful (per flow)
End-to-end connectivity Broken outbound-initiated only works
Inbound to internal hosts Requires explicit port forwarding

NAT44 is rarely positioned as a "security feature" any more, see Misconception 3: NAT Is a Security Feature. It is a workaround for address scarcity, full stop.

4.2 CGNAT / LSN / NAT444

Carrier-Grade NAT, also called Large-Scale NAT or NAT444, is what an ISP deploys when it cannot give every subscriber a public IPv4 address. The subscriber's router NATs to a non-routable address space (typically 100.64.0.0/10 per RFC 6598), and the carrier NATs that to a public address shared across thousands of subscribers. RFC 6888 captures the requirements.

Carrier-grade NAT as a double-translation chain: a subscriber on an RFC 1918 LAN is translated by the CPE NAT into the shared 100.64.0.0/10 space, then translated again by the carrier NAT into a public IPv4 address before reaching the IPv4 internet.
CGNAT stacks a second NAT behind the home router, sharing one public IPv4 address across many subscribers.
Property CGNAT / NAT444
Translation RFC 1918 → RFC 6598 → public IPv4
State Stateful at both NAT layers
End-to-end connectivity Severely broken; many protocols fail without ALGs
Logging requirements Per-subscriber port mappings must be logged for law-enforcement traceability
Cost driver Per-flow state in the carrier NAT, and silicon cost scales with subscribers × concurrent flows

The relevance of CGNAT to an isp6 deployment is usually a single observation: if your egress traffic is going through a CGNAT, your application's source address is shared with thousands of strangers, and you cannot accept inbound connections. The native IPv6 path bypasses CGNAT entirely, and that is one of the reasons IPv6 enables architectures (peer-to-peer, mesh VPNs, direct cloud endpoints) that CGNATed IPv4 does not.


5. Reaching Back: NAT64 and DNS64

This is the first mechanism that solves an IPv6-side problem rather than an IPv4-side one. The setting: a host on a v6-only network needs to reach a service that has only an IPv4 address. The native protocols cannot bridge that gap; NAT64 and DNS64 do it together.

5.1 NAT64 (RFC 6146)

NAT64 is a stateful translator that sits at the boundary of a v6-only network. It allocates a /96 IPv6 prefix, typically the well-known 64:ff9b::/96 from RFC 6052, and embeds the destination IPv4 address in the last 32 bits of an IPv6 address inside that /96.

A v6-only client sending traffic to 64:ff9b::192.0.2.1 is sending IPv6, but the NAT64 translator extracts the embedded IPv4, opens an IPv4 session on its outside interface, and bridges the flows.

A NAT64 exchange between a v6-only host, a NAT64 gateway and a v4-only server: the host sends IPv6 to 64:ff9b::192.0.2.1; the gateway translates it to IPv4 to 192.0.2.1 with its public v4 source; the server replies in IPv4; the gateway translates the reply back to IPv6 with source 64:ff9b::192.0.2.1.
The gateway bridges the two protocols, embedding the IPv4 destination in the well-known 64:ff9b::/96 prefix.
Property NAT64
Translation IPv6 ↔ IPv4 (at the network layer)
State Stateful at the gateway
Direction Designed for v6 → v4 outbound; v4 → v6 inbound is awkward and rarely used
Address embedding IPv4 destination embedded into the last 32 bits of an IPv6 /96
Common prefix 64:ff9b::/96 (RFC 6052 well-known) or a network-specific /96 from your own allocation

NAT64 alone is not enough. The v6-only host still needs to find the embedded IPv6 address, and that is what DNS64 provides.

5.2 DNS64 (RFC 6147)

DNS64 is a recursive resolver that synthesises AAAA records when the authoritative DNS only returns A records. The flow:

  1. v6-only host queries legacy.example.com for AAAA.
  2. Authoritative DNS has no AAAA, only A returning 192.0.2.1.
  3. DNS64 resolver intercepts the empty AAAA response, takes the A record, and synthesises a fake AAAA: 64:ff9b::192.0.2.1.
  4. The host receives the synthesised AAAA, sends IPv6 traffic to it, and the NAT64 gateway translates.

The synthesised address has no real existence in DNS. It is a runtime construction that exists only because the DNS64 resolver knows the NAT64 gateway is configured for 64:ff9b::/96.

Property DNS64
Function AAAA-synthesis from A records
Pairs with NAT64, and meaningless without it
DNSSEC compatibility Awkward; synthesised records cannot be signed
Where it sits The recursive resolver used by v6-only clients

5.3 Where NAT64 + DNS64 Belongs

Cloud providers offer this pairing as a managed service: AWS calls it DNS64 and routes traffic via the NAT Gateway; Azure does it similarly via Virtual Network NAT; GCP exposes the same pattern via Cloud NAT. The reason is the same in all three: a customer wants to run an IPv6-only VPC for cleanliness but still has a long tail of v4-only third-party APIs to call. NAT64 + DNS64 makes that workable until the tail dries up.

If you are bringing your isp6 PA allocation to a cloud provider, see AWS, Azure, or Google Cloud, NAT64 + DNS64 is the mechanism most likely to appear in your reference architecture.


6. Surviving Legacy Apps on v6-Only Access: 464XLAT

NAT64 + DNS64 covers most v6-only-to-v4-only traffic, but it has a known failure mode: applications that hard-code IPv4 addresses or use IPv4 socket APIs. These apps never query DNS for AAAA records and never see the synthesised address; they just open a socket to an IPv4 literal and fail on a v6-only network.

464XLAT (RFC 6877) solves this by adding a second translator at the customer edge:

464XLAT carrying IPv4-only traffic across an IPv6-only access network: an IPv4-only app sends an IPv4 packet to the CLAT (customer-side stateless NAT46), which produces an IPv6 packet; it crosses the IPv6-only access network to the PLAT (provider-side stateful NAT64), which produces an IPv4 packet for the IPv4 internet.
IPv4 in, IPv6 across the middle, IPv4 out: the access network only ever carries IPv6.

The application sees IPv4 sockets, the access network is v6-only, and the PLAT (NAT64) at the edge of the carrier sees the same flow it would have seen had NAT64 been the only mechanism. The CLAT does stateless NAT46, which means it scales linearly without per-flow tables.

Property 464XLAT
CLAT Stateless NAT46 at customer edge, IPv4 → IPv6
PLAT Stateful NAT64 at provider edge, IPv6 → IPv4
End-application sees IPv4 sockets
Access network is IPv6-only
Heavy use in Mobile networks (T-Mobile USA pioneered this at scale)

464XLAT is the answer to "we want a v6-only access network but [insert legacy app] still expects v4". For an isp6 enterprise member this usually applies inside a corporate campus network rather than at the WAN edge, but the pattern is the same.


7. Operator-Scale Mechanisms: DS-Lite, MAP-E, MAP-T

These three are designed for carriers. They assume the operator runs an IPv6-native backbone and has to ration scarce IPv4 across many subscribers. For an isp6 enterprise member they are usually background context rather than something you deploy directly, but understanding them helps when an ISP's WAN behaviour seems mysterious.

7.1 DS-Lite (RFC 6333)

The subscriber CPE gives the home network an RFC 1918 IPv4 address. v4 traffic is encapsulated in IPv6 (IPv4-in-IPv6, protocol 4) and tunnelled across the carrier's v6-only backbone to a centralised translator called the AFTR (Address Family Transition Router), which performs stateful NAT44 to a public v4 address. The subscriber never has a public v4 address; they share one with hundreds of others at the AFTR.

Property DS-Lite
Subscriber gets Native v6 + private v4 (RFC 1918)
v4 transport Encapsulated in v6 to the AFTR
State Stateful at the AFTR
Trade-off Centralised state, and the AFTR is a scaling and failure choke point

7.2 MAP-E (RFC 7597)

Mapping of Address and Port, Encapsulation. Solves DS-Lite's centralised-state problem by pre-allocating each subscriber a slice of an IPv4 address shared with N siblings, typically a fixed range of source ports, derived algorithmically from the subscriber's IPv6 prefix. The carrier no longer needs to keep per-flow state because the mapping rule deterministically tells every router which subscriber owns which port. v4 traffic is encapsulated in v6 the same way DS-Lite does it.

7.3 MAP-T (RFC 7599)

Mapping of Address and Port, Translation. Identical addressing model to MAP-E but translates v4 ↔ v6 instead of encapsulating. Stateless, algorithmic, and easier to debug than MAP-E because the wire packets at every hop look like the protocol they appear to be.

Mechanism Encap or translate State at carrier Subscriber addresses
DS-Lite Encapsulate Stateful at AFTR RFC 1918 + native v6
MAP-E Encapsulate Stateless (algorithmic) Public v4 slice + native v6
MAP-T Translate Stateless (algorithmic) Public v4 slice + native v6

MAP-T is generally considered the most architecturally clean of the three, being stateless, free of encapsulation overhead and deterministic, and is increasingly the operator default for v4-as-a-Service over a v6-native backbone.


8. Stateless Translation in the Datacentre: SIIT-DC

RFC 7755 defines SIIT-DC: Stateless IP/ICMP Translation for Datacentre use. The setting: an IPv6-only datacentre that needs to serve a public-facing service to the IPv4 internet without polluting its internal addressing with v4 anywhere.

A SIIT-DC border router holds a public IPv4 address per externally-visible service. Inbound v4 traffic is statelessly translated to IPv6 by embedding the source v4 address into a known /96 inside the operator's IPv6 space; the v6 backend sees a clean v6 packet with an unambiguous source. Outbound v6 replies are translated back to v4 by the same stateless algorithm.

Property SIIT-DC
Translation direction Bidirectional, stateless
Internal network IPv6-only
External v4 footprint One public v4 per service, terminated at the SIIT-DC border
Compared to NAT64 + DNS64 Designed for inbound v4 → v6, where NAT64 is biased to v6 → v4 outbound

SIIT-DC is the cleanest endgame for an IPv6-only datacentre: the internal network is unburdened by IPv4, and the v4 surface is a thin, stateless edge. It is more relevant for service operators with an isp6 PA allocation behind a public-facing platform than it is for typical enterprise members.


9. The Tunnels Era: 6to4, Teredo, 6in4

Before native dual-stack was widely available, IPv6 islands were connected through tunnels over the IPv4 Internet. These mechanisms are mostly historical now, since most have been deprecated or are heavily filtered, but they still appear occasionally in legacy networks and exam questions.

Mechanism Status What it did
6to4 (RFC 3056) Deprecated for general use (RFC 7526) Encoded a host's public IPv4 address into a 2002::/16 IPv6 prefix and tunnelled v6 over v4 to public 6to4 relays. Asymmetric path problems made it unreliable.
Teredo (RFC 4380) Deprecated in practice; turned off by default in Windows Tunnelled IPv6 in UDP-over-IPv4 to traverse NAT44 boxes. Mostly a Windows-era curiosity.
6in4 / Protocol 41 (RFC 4213) Still used Manual configured tunnel: IPv6 packets carried directly in IPv4 protocol 41. Used by tunnel brokers (Hurricane Electric and others) to deliver IPv6 to networks whose ISP is v4-only.
GRE / IPsec / WireGuard Common Carry v6 traffic between sites over a v4-only WAN. Fully usable today and the right answer when the WAN provider has not yet enabled native v6.

For an isp6 member whose ISP is still v4-only, a 6in4 tunnel, or a modern WireGuard tunnel between sites, is the practical bridge until the upstream turns on native IPv6. It does not depend on isp6 in any way; the isp6 allocation is announced from whichever endpoint terminates the tunnel.


10. Choosing a Strategy

There is no single right answer. The mechanism follows from the shape of your problem, not the other way around. The matrix below maps the most common architectural starting positions to the mechanisms that fit them.

You are… …and need to… The mechanism is
An enterprise with a stable IPv4 estate and a fresh isp6 allocation Add IPv6 in parallel without disrupting v4 Dual-stack
Running v6-only inside the network but talking to v4-only third-party APIs Reach v4 destinations from a v6 client NAT64 + DNS64
On a v6-only network but with a vendor app that hard-codes v4 sockets Keep that app working without giving up v6-only access 464XLAT
An ISP rationing scarce v4 across many subscribers on a v6-native backbone Share a public v4 across N customers without per-flow state MAP-T (preferred) or MAP-E
An ISP with an existing centralised NAT and a v6-native backbone Tunnel v4 across the v6 core to a central translator DS-Lite
A v6-only datacentre serving the public v4 internet Expose services to v4 clients without putting v4 inside the datacentre SIIT-DC
A site whose ISP has not yet enabled native v6 Get isp6 v6 connectivity over a v4-only WAN 6in4 or modern v6-over-WireGuard / IPsec

Wherever possible, prefer dual-stack first, native v6 second, translation last. Translators add operational surface area: a NAT64 gateway is a stateful piece of kit that must be sized, monitored, and made redundant; DNS64 synthesised records are awkward with DNSSEC; 464XLAT adds a second translator. None of this is a reason not to use them, and sometimes they are the only realistic path forward, but they are not free.


11. What isp6 Handles vs. What You Configure

Transition mechanisms operate at layers above the address allocation, so the isp6 boundary is straightforward. You bring your own architecture; isp6 provides the v6 address space the architecture sits inside.

Activity Owner
Allocating, registering, and signing the IPv6 PA prefix isp6
RIPE Database inet6num and route6 objects isp6
RPKI ROA management isp6 (via your subnet dashboard)
Reverse DNS delegation isp6
Choosing a transition mechanism (dual-stack, NAT64, 464XLAT, …) You
NAT64 gateway, DNS64 resolver, MAP-T mapping rule, SIIT-DC border You (or your cloud provider, where it is offered as a managed service)
Cloud-side BYOIP integration You, see the AWS, Azure, and Google Cloud guides

If you deploy NAT64 with a network-specific /96 instead of 64:ff9b::/96, the /96 must come from inside your isp6 allocation. A /48 contains 65,536 /64s and can therefore comfortably reserve a /96 for translation use without straining the rest of the addressing plan; see Planning Your isp6 Allocation for how to fit it in cleanly.


12. Further Reading


13. References

RFC Title Relevance
RFC 6052 IPv6 Addressing of IPv4/IPv6 Translators The 64:ff9b::/96 well-known prefix
RFC 6145 IP/ICMP Translation Algorithm Stateless v4 ↔ v6 translation; foundation for SIIT-DC
RFC 6146 Stateful NAT64 The translator behind NAT64
RFC 6147 DNS64 AAAA synthesis from A records
RFC 6333 Dual-Stack Lite DS-Lite
RFC 6598 IANA-Reserved IPv4 Prefix for Shared Address Space 100.64.0.0/10 for CGNAT
RFC 6724 Default Address Selection for IPv6 How dual-stack hosts choose between v4 and v6
RFC 6877 464XLAT CLAT + PLAT for v4 apps on v6-only access
RFC 6888 Common Requirements for Carrier-Grade NATs (CGNs) What an ISP must do at a CGNAT
RFC 7526 Deprecating the Anycast Prefix for 6to4 Relay Routers Why 6to4 is no longer recommended
RFC 7597 Mapping of Address and Port with Encapsulation (MAP-E) Stateless v4-as-a-Service, encapsulated
RFC 7599 Mapping of Address and Port using Translation (MAP-T) Stateless v4-as-a-Service, translated
RFC 7755 SIIT-DC: Stateless IP/ICMP Translation for IPv6 Data Centre Environments The clean v6-only datacentre pattern

Take control of your network identity

Order your IPv6 PA allocation from isp6 and announce it from any cloud, colo, or on-premises network. Self-service, registered in the RIPE Database within minutes, portable for the life of your membership.

Get your /48 →

This document is provided for informational purposes. Protocol specifications and cloud provider behaviour are subject to change. Consult the linked RFCs and vendor documentation for authoritative, up-to-date information before making architectural decisions.