IPv6 ULA Generator
Generate RFC 4193 Unique Local Addresses. Create /48 prefixes, enumerate /64 subnets, and validate ULA addresses. 100% client-side.
How to Use the IPv6 ULA Generator
- Generate mode — click Generate Prefix to create a new cryptographically random /48 ULA prefix compliant with RFC 4193. The tool displays the compressed and expanded address forms, a bit-level breakdown, and an optional example host address within the prefix.
- Subnet mode — paste a /48 prefix and choose how many /64 subnets to enumerate, with a configurable start offset. This is useful for documenting your subnet allocation or planning VLAN assignments.
- Validate mode — enter any IPv6 address or prefix to check whether it is a valid ULA, determine which sub-range it belongs to, and see its expanded and compressed canonical forms.
What Is an IPv6 ULA?
An IPv6 Unique Local Address (ULA) is the IPv6 equivalent of IPv4 private address space (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). Defined in RFC 4193, ULAs occupy the fc00::/7 block and are not routable on the global internet. They are designed for use within private networks — home labs, corporate LANs, container networks, and virtual machines — where global reachability is not needed. Their key property is that the 40-bit Global ID is generated randomly, making the probability of two independent sites choosing the same prefix negligibly small (approximately 1 in 10^12).
ULA Address Structure
A ULA address has four parts:
- Prefix (8 bits) — always
fdfor locally generated addresses. This marks the address as a ULA within thefc00::/7block with the Local (L) bit set to 1. - Global ID (40 bits) — five random bytes generated using a cryptographically strong RNG. These 40 bits are the key to uniqueness across different networks.
- Subnet ID (16 bits) — 16 bits that identify individual /64 subnets within your /48 prefix. With 16 bits you have 65,536 subnets to allocate.
- Interface ID (64 bits) — identifies a specific host within a /64 subnet. Commonly set using EUI-64 (derived from a MAC address) or generated randomly per RFC 7217.
ULA vs. Link-Local vs. Global Unicast
IPv6 defines several address scopes. Link-local addresses (fe80::/10) are auto-configured on every interface but cannot cross routers — they are strictly for on-link communication. ULA addresses (fc00::/7) can be routed within a private network, making them suitable for multi-site VPN topologies or internal service meshes. Global unicast addresses (2000::/3) are publicly routable and allocated by IANA through RIRs. For private infrastructure that should never reach the internet, ULAs are the correct choice.
Why Not Use fc00::/8?
The fc00::/8 block is reserved for centrally assigned Global IDs — an assignment mechanism that has never been implemented by any authority. In practice, every ULA deployment uses the fd00::/8 block with a locally generated Global ID. The IETF has discussed deprecating fc00::/8 in favor of expanding the locally assigned range, but for now simply always use fd as your prefix byte. This tool generates only fd-prefixed ULAs, in line with all current guidance.
RFC 4193 Generation Algorithm
The RFC recommends generating the 40-bit Global ID from a SHA-1 hash of the current time and MAC address. In practice, a cryptographically secure random number generator (such as crypto.getRandomValues() in the browser or /dev/urandom on Linux) is equally valid and simpler. This tool uses crypto.getRandomValues() to generate 5 random bytes, which are then formatted as the five groups after the fd prefix byte. For other random generation tools, see our UUID Generator and Random Port Generator.
Practical Uses of ULA Addresses
- Home lab networks — assign stable internal addresses to servers and VMs without depending on a router's prefix delegation.
- Docker and Kubernetes — use ULA prefixes for pod and service networks in IPv6-enabled container environments.
- VPN meshes — connect multiple sites with WireGuard or OpenVPN using ULA addresses that do not collide with any public space.
- Testing and CI/CD — generate deterministic or random ULA prefixes for isolated test network namespaces.
- IoT networks — give each device a stable ULA address that persists regardless of ISP prefix changes (ISPs may renumber your global prefix; your ULA never changes).