The Devs Tools

Network Engineering: A Practical Guide to IPv6 ULA Generator

August 18, 2026 · The Devs Tools Team

IPv6's answer to the private addressing space that RFC 1918 provides for IPv4 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) is the Unique Local Address, defined in RFC 4193. Unique Local Addresses, or ULAs, occupy the fc00::/7 block, and in practice almost all generated ULAs fall specifically within fd00::/8 — the half of that block where the "Local" bit is set to 1, indicating a locally assigned (as opposed to a hypothetical future centrally allocated) prefix. What makes ULAs genuinely useful for internal networks isn't just that they're non-routable on the public internet — it's that each ULA prefix includes a 40-bit Global ID that's generated using a pseudo-random algorithm, giving every organization, lab, or even home network an extremely high probability of picking a globally unique prefix without coordinating with anyone. That matters enormously for network mergers, VPN interconnects, and multi-site deployments, where colliding private address ranges have historically caused real operational headaches with IPv4's much smaller RFC 1918 space. A ULA is not the same thing as a link-local address (fe80::/10), which is automatically assigned to every IPv6 interface for on-segment communication only and is never used for routed internal traffic — and it's also distinct from the now-deprecated site-local addressing scheme (fec0::/10) that RFC 4193 formally replaced because its ambiguous scoping caused routing problems.

[!TIP] Need to generate a properly randomized RFC 4193 private IPv6 range right now? Try our free, local IPv6 ULA Generator to produce a unique local prefix completely offline.


Anatomy of a ULA Prefix

A full RFC 4193 ULA breaks down into four fields packed into the first 64 bits, with the remaining 64 bits reserved for the interface identifier:

| 7 bits  | 1 bit | 40 bits           | 16 bits    | 64 bits             |
| Prefix  | L     | Global ID         | Subnet ID  | Interface ID        |
| 1111110 | 1     | (random)          | (assigned) | (host-assigned)     |
------------------------------------------------------------------------
  fc00::/7   ->  fd00::/8 in practice (L=1, locally assigned)

The 40-bit Global ID is what makes each organization's ULA space practically unique — it should be generated using a source of randomness, not chosen sequentially or set to a predictable value like all zeros, since predictable prefixes reintroduce the collision risk ULAs are designed to avoid.

ULA vs. Link-Local vs. Deprecated Site-Local

  • ULA (fd00::/8): routable within an organization's internal network, never routed on the public internet, intended as a long-lived internal prefix analogous to RFC 1918 space.
  • Link-local (fe80::/10): auto-assigned to every interface, scoped strictly to the local network segment, and never forwarded by routers under any circumstances.
  • Site-local (fec0::/10, deprecated): an earlier IPv6 private addressing scheme retired by RFC 3879 and formally superseded by ULA because its ambiguous scope boundaries made routing behavior inconsistent.

Conclusion

RFC 4193 Unique Local Addresses give internal IPv6 networks a private addressing scheme with a strong statistical uniqueness guarantee, thanks to the randomly generated 40-bit Global ID inside the fd00::/8 block. Keeping ULA, link-local, and the deprecated site-local scheme clearly distinct is essential for designing IPv6 networks that won't collide when merged or interconnected later.