Generate a unique local IPv6 address (fd00::/8) with a random 40-bit global ID, and see the /48 prefix for your site.
Private IPv6 without globals. Create a Unique Local Address in the fd00::/8 range. A random 40-bit global ID keeps your site's prefixes unique, and a 64-bit interface ID fills the rest. Generated locally with crypto randomness.
Site /48 prefix
–
Unique local addresses in practice
What fd00::/8 is for
Unique local addresses are the IPv6 answer to RFC 1918 private ranges: addresses that are routable inside your own network but that no operator will carry across the public Internet. RFC 4193 reserves fc00::/7 for this, split into two halves. Only fd00::/8 is defined for general use, where the 40-bit global ID is chosen randomly by whoever needs the prefix. The other half, fc00::/8, was reserved for centrally assigned prefixes under a registry that was never created, so in practice every ULA you meet begins with fd.
The layout is fixed: 8 bits of fd, then a 40-bit global ID, then a 16-bit subnet ID, then a 64-bit interface identifier. The first 48 bits together form the prefix your site owns, which is why a ULA generator hands you a /48 rather than a single address.
Why the global ID must be random
The 40 random bits are the entire mechanism preventing collisions. Pick a memorable prefix like fd00:1:: or fd12:3456:789a:: and you have chosen something everybody else also finds memorable — the collision risk stops being theoretical the moment you merge networks, set up a VPN to a partner, or acquire a company. With 2^40 possibilities and a properly random pick, the odds of two sites clashing are negligible.
This generator draws its 40 bits from the browser's cryptographic random source, so the value is unpredictable and unique to you. Note the address itself is not a secret — the randomness is about avoiding collisions, not about hiding anything.
Planning subnets inside your /48
The 16-bit subnet ID gives you 65,536 /64 networks. A /64 is the standard size for a single LAN segment in IPv6 and you should not subdivide it further; SLAAC, privacy addressing and several other mechanisms assume 64 host bits. Resist the temptation to be frugal here. IPv6 gives you enough space that mapping subnet IDs onto something meaningful — one per VLAN, per site, per environment — is far more valuable than saving address space you will never run out of.
Finally, ULAs are not a replacement for global addresses. The usual design runs them alongside globally routable addresses so that internal services keep stable numbering even when an ISP-assigned prefix changes.
FAQ
What is a ULA for?
Unique local addresses are the IPv6 counterpart of the RFC 1918 private ranges. They are routable inside your own network but are never routed on the public internet.
Why is the prefix a /48?
RFC 4193 fixes the first 8 bits to fd and fills the next 40 with a random global ID. Those 48 bits are your site prefix, leaving 16 bits for subnets and 64 for interface identifiers.
Does the global ID really need to be random?
Yes. Randomness is what makes a collision unlikely if two networks are ever merged. Sequential or memorable values such as fd00::/48 defeat the entire design.
What is the difference between fc00::/8 and fd00::/8?
fd00::/8 is for locally assigned prefixes and is what you should generate. fc00::/8 was reserved for centrally assigned prefixes, and no registry for them was ever created.
Can I use a ULA and a global prefix at the same time?
Yes. Interfaces commonly carry both: the ULA gives stable internal addressing that survives an ISP prefix change, while the global address handles outbound traffic.
Is the generated prefix registered anywhere?
No. There is no registry, which is exactly why the 40 random bits matter — statistical uniqueness is the only protection against an overlap.