IPv6 ULA Generator
Technical details
How the IPv6 ULA Generator Works
What the Tool Does
The IPv6 ULA Generator produces a /48 Unique Local Address prefix that is unlikely to collide with any other site, following the algorithm in RFC 4193 §3.2.2. Provide a MAC address (or let the tool pick a random one), and it derives a 40-bit Global ID from SHA-1 of the EUI-64 concatenated with the current NTP timestamp. Output includes the /48 prefix, the Global ID and Subnet ID, and an example /64 host address.
Common Developer Use Cases
Network admins use ULAs to build private IPv6 networks that don't depend on globally-routable address space. Lab and homelab operators pick a ULA prefix once per site, then reuse it for all internal VLANs and overlay networks. They are also useful for cloud VPCs, container networks, and air-gapped environments where global IPv6 isn't available or desirable.
Data Formats, Types, or Variants
ULAs live in the fc00::/7 block. With the locally-assigned (L) bit set to 1, the practical prefix becomes fd00::/8. The full /48 layout is: 8-bit prefix (fd) + 40-bit Global ID + 16-bit Subnet ID + 64-bit Interface ID. The Global ID is the lowest 40 bits of SHA-1 over EUI-64 ‖ NTP timestamp; this tool derives EUI-64 from the supplied MAC by inserting FFFE and flipping the universal/local bit.
Common Pitfalls and Edge Cases
Don't pick fd00:0:0::/48 or another trivial prefix — the whole point is to randomise and reduce collision probability. The fc00::/8 half (L bit = 0) is reserved and shouldn't be used today. ULAs are not routable on the public internet; if you need internet-routable IPv6, request a Global Unicast prefix from your ISP or RIR instead.
When to Use This Tool vs Code
Use the browser tool when setting up a new site to pick a one-shot prefix you'll reuse forever. In code, libraries like Python's ipaddress, Go's net/netip, or Rust's ipnet can generate or validate ULAs alongside Global Unicast addresses with consistent error handling.