Octet

Should we use ULA internally and NAT66 at the edge, the way we use RFC 1918 and NAT today?

Show the answer

Say this first

Usually no. The default IPv6 design is global addresses everywhere, with a stateful firewall at the edge for protection. ULA (fd00::/8 plus a random 40-bit global ID, RFC 4193) is useful for networks that never reach the internet, or alongside global addresses for stable internal names. NAT66 is not a standard; NPTv6 (RFC 6296) is a stateless prefix swap and only experimental. And there is a trap: hosts' default address selection prefers IPv4 over ULA, so a ULA-only network quietly keeps using IPv4.

Go deeper

Why people ask

They want what RFC 1918 gave them: addresses that do not change when they change ISP, and a feeling of being hidden.

Better answers to the real needs

NeedIPv6 answer
Stable addressing across ISPsget provider-independent space from your RIR and run BGP, or use PA space and plan for renumbering
Hide internal hostsstateful firewall, default deny inbound
Isolated networks (OT, labs)ULA alone is fine
Stable internal service addressesULA alongside GUA, with care

The address selection trap

RFC 6724's default policy table gives fc00::/7 a precedence of 3 and IPv4 (::ffff:0:0/96) 35. If a name has both an A record and a ULA AAAA record, hosts try IPv4 first. For internet destinations, a host with only a ULA source sees a label mismatch with the global destination and also prefers IPv4. So a ULA plus NAT66 design can be "deployed" and carry almost no traffic.

If you do use ULA

  • Generate the 40-bit global ID randomly. fd00::/48 is what everyone types and will collide in a merger.
  • Never advertise it to the internet, and filter fc00::/7 at the edge in both directions.
  • Expect to tune the policy table (/etc/gai.conf on Linux, netsh interface ipv6 show prefixpolicies on Windows) if you need hosts to prefer it.

Traps

  • Saying NAT provides security. The firewall does.
  • Picking a non-random ULA prefix.
How did you do?Book 4.2 IP Version 6