Unique Local Addresses (RFC 4193) are IPv6 addresses intended for local communications within a site or between a limited set of sites. They are not globally routable on the public IPv6 Internet.
ULA Address Structure:
- Prefix: fd00::/8 (fd = 1111 1101 in binary, L bit set to 1)
- Global ID: 40 bits (pseudo-randomly generated)
- Subnet ID: 16 bits (for internal subnet hierarchy)
- Interface ID: 64 bits (host identifier)
- Total: 128 bits
Format Breakdown:
- Bits 0-7: fd (11111101) - ULA prefix with L-bit set
- Bits 8-47: Global ID (40 bits, randomly generated)
- Bits 48-63: Subnet ID (16 bits, organizationally assigned)
- Bits 64-127: Interface ID (64 bits, host portion)
Example ULA Address:
- Full prefix: fd12:3456:789a:bcde::/64
- Prefix: fd
- Global ID: 12:3456:789a (40 bits)
- Subnet ID: bcde (16 bits)
- /48 prefix: fd12:3456:789a::/48 (organization-wide)
- /64 prefix: fd12:3456:789a:bcde::/64 (specific subnet)
Why Random Global ID?
The 40-bit pseudo-random Global ID provides 2^40 (about 1.1 trillion) possible values, making accidental collisions extremely unlikely when two organizations merge or establish VPN connections. This is a major improvement over IPv4 where 10.0.0.0/8 conflicts are common.
RFC 4193 Generation Algorithm:
- Obtain the current time (NTP timestamp)
- Obtain a unique identifier (MAC address or system ID)
- Concatenate time + identifier
- Compute SHA-1 hash of the concatenated value
- Take the least significant 40 bits of the hash as Global ID
ULA vs. IPv4 Private Addresses:
- IPv4: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 (identical everywhere)
- IPv6 ULA: fd00::/8 with unique Global ID per organization
- ULA collision probability: ~1 in 1 trillion for random selection
- IPv4 collision probability: 100% (guaranteed conflict)
Routing and Reachability:
- ULAs are not advertised to the global IPv6 Internet
- ISPs and public routers filter ULA prefixes
- ULAs are routable within an organization or VPN
- Hosts can have both ULA and Global Unicast addresses simultaneously
ULA Best Practices:
- Generate once and reuse across your entire organization
- Document your Global ID for future reference
- Consider registering at ula-central.com (optional, informal registry)
- Use consistent Subnet IDs across your network architecture
- Plan subnet hierarchy before deploying (Subnet ID provides 65,536 subnets)
When to Use ULA:
- No global IPv6 prefix available: ISP doesn't provide IPv6
- Stable internal addressing: Addresses that shouldn't change if ISP changes
- VPNs and inter-site links: Private connectivity between locations
- Isolated networks: Air-gapped or security-sensitive environments
- DNS split-horizon: Different addresses for internal vs. external clients
ULA + Global Unicast Dual Addressing:
Many organizations assign both ULA and Global Unicast addresses to hosts. ULA provides stable internal addresses while Global Unicast enables Internet access. Applications can use ULA for local communication (reducing latency and bypassing firewalls) and Global addresses for external services.
fc00::/8 vs. fd00::/8:
- fc00::/8: Centrally assigned (L-bit = 0) - never implemented, avoid using
- fd00::/8: Locally assigned (L-bit = 1) - RFC 4193 standard, use this
- Only fd00::/8 should be generated and used in practice