A unique local address, or ULA, is a private IPv6 range that stays inside your own network and is never routed across the public internet. It is the IPv6 answer to private IPv4 ranges like 10.0.0.0/8 and 192.168.0.0/16. RFC 4193 defines it, and you can create one in seconds with the local IPv6 generator.
The fd prefix
ULAs occupy the fc00::/7 block, which splits into two halves. The fd00::/8 half, where the eighth bit is 1, is the part you are meant to use, with the global ID chosen yourself. The fc00::/8 half is reserved for a future assignment scheme that never arrived. In practice, then, every ULA you will use starts with fd.
That fd is how you recognise a private IPv6 address at a glance, the same way 192.168. or 10. flags a private IPv4 address.
The random global ID
After the fd come 40 bits called the global ID. RFC 4193 asks you to choose these bits at random rather than picking something memorable like all zeros. The reason is collision avoidance: with 40 random bits, two networks that have never met are vanishingly unlikely to pick the same prefix. That matters the day you connect two sites with a VPN, or merge two networks, because their ranges will not clash and you will not have to renumber.
The fd plus the 40-bit global ID make up a /48 prefix, and that /48 is yours. A generated one looks like this:
fd2a:7c91:e304::/48
The generator draws those 40 bits from your browser’s cryptographic random source, so each prefix it produces is a fresh, well-distributed value. Picking a global ID by hand, or reusing fd00::, throws away the collision protection the random ID is there to provide.
Carving the /48 into /64 subnets
A /48 gives you 16 more bits before the standard /64 subnet boundary. Those 16 bits are the subnet ID, and they let you create 65,536 separate subnets:
fd2a:7c91:e304:0000::/64 ← first subnet
fd2a:7c91:e304:0001::/64 ← second subnet
fd2a:7c91:e304:ffff::/64 ← last subnet
Each /64 is the usual IPv6 subnet size, with room for an enormous number of hosts, far more than any network needs. You assign one /64 per VLAN, per site, or per purpose, and you still have tens of thousands spare.
If you want to see the exact first and last address a given prefix covers, an IPv6 CIDR to range calculation will show it; the addresses themselves are written in the canonical short form described in how to compress an IPv6 address.
When to use a ULA
ULAs suit any address that should not depend on your internet connection. Printers, NAS boxes, management interfaces and other internal services keep working under a ULA even if your ISP changes the public prefix it hands you, because the ULA range never changes. Many networks run a ULA for internal traffic alongside a globally routable prefix for anything that talks to the outside world.
They also make a clean sandbox for learning IPv6. You can experiment with subnetting and routing on a real, valid private range without touching anything public, and if you are coming from IPv4 it helps to see how the same ideas carry over; how to convert IPv4 to IPv6 walks through that mapping.
Generate one now
You do not need to register a ULA or ask anyone for it; the whole point is that you pick a random prefix yourself. Open the local IPv6 generator, read the /48 it produces, and press Regenerate until you have one you want to keep. It runs in your browser, so the prefix is never sent anywhere, and a sample /64 is shown so you can see exactly where your subnets begin.