Testing Environment: Our tools are currently under heavy testing. You may experience slower performance or temporary issues.

🌐

IPv6 ULA Generator

Generate IPv6 Unique Local Addresses (ULA) for private networks

0 characters

About IPv6 ULA Generator

Generate IPv6 Unique Local Addresses (ULA) according to RFC 4193 specifications. ULAs are the IPv6 equivalent of private IPv4 addresses, designed for local communication within organizations.

  • RFC 4193 compliant ULA generation
  • Cryptographically secure random generation
  • Support for fc00::/7 address space
  • Generate complete /48 network prefixes
  • Suitable for internal network addressing

How to Use IPv6 ULA Generator

  1. Click Generate - Create a new random ULA prefix
  2. Copy Prefix - Use the generated fc00::/48 or fd00::/48 prefix
  3. Create Subnets - Divide the /48 into /64 subnets for different network segments
  4. Assign Addresses - Use the ULA prefix for internal network addressing

Advertisement

AdSense Banner Ad Placeholder

Frequently Asked Questions

What are IPv6 Unique Local Addresses?

ULAs are IPv6 addresses intended for local communications within a site or organization. They are not routable on the global internet, similar to private IPv4 addresses (RFC 1918).

What's the difference between fc00::/7 and fd00::/8?

The fc00::/7 range includes both fc00::/8 (centrally assigned) and fd00::/8 (locally assigned). Currently, only fd00::/8 is used for locally generated ULAs.

Are ULAs globally unique?

ULAs are designed to be globally unique with very high probability through cryptographic pseudo-random generation, even though they're not centrally assigned.

Can ULA addresses be routed on the internet?

No, ULA addresses should not be routed on the global internet. They are intended for local use within organizations and should be filtered by ISPs.

How many subnets can I create from a ULA /48?

A /48 ULA prefix provides 65,536 /64 subnets (2^16), which is typically more than sufficient for most organizational network designs.

Common Use Cases

  • Internal organization networks
  • VPN and private connections
  • Lab and test environments
  • Site-to-site communications
  • Backup and redundant addressing
  • IoT device networks
  • Development environments
  • Multi-site organizations

Sponsored Content

AdSense Square Ad Placeholder

Technical Details

ULA Structure (RFC 4193):

  • Prefix: fd00::/8 for locally assigned ULAs
  • Global ID: 40-bit pseudo-random identifier
  • Subnet ID: 16-bit field for subnet identification
  • Interface ID: 64-bit interface identifier
  • Format: fd[global_id]:[subnet_id]::[interface_id]

ULA Address Format

fd
XX
XX
XX
XX
XX
YY
YY
Prefix (8 bits) | Global ID (40 bits) | Subnet ID (16 bits)
Example: fd12:3456:789a:bcde::/64

Programming Examples

Python:

import secrets
import ipaddress

def generate_ula_prefix():
    # Generate 40-bit global ID
    global_id = secrets.randbits(40)
    
    # Format as ULA prefix
    prefix_int = (0xfd << 40) | global_id
    prefix_bytes = prefix_int.to_bytes(6, 'big')
    
    # Create IPv6 network
    prefix_hex = prefix_bytes.hex()
    formatted = ':'.join([prefix_hex[i:i+4] for i in range(0, 12, 4)])
    
    return ipaddress.IPv6Network(f"{formatted}::/48", strict=False)

# Example usage
ula_network = generate_ula_prefix()
print(f"ULA Prefix: {ula_network}")

# Create subnets
subnets = list(ula_network.subnets(new_prefix=64))
print(f"First subnet: {subnets[0]}")
            

JavaScript:

function generateULA() {
    // Generate 5 random bytes for global ID
    const globalId = new Uint8Array(5);
    crypto.getRandomValues(globalId);
    
    // Construct ULA prefix
    const prefix = ['fd'];
    
    // Add global ID as hex groups
    for (let i = 0; i < 5; i += 2) {
        if (i + 1 < 5) {
            prefix.push(
                globalId[i].toString(16).padStart(2, '0') + 
                globalId[i + 1].toString(16).padStart(2, '0')
            );
        } else {
            prefix.push(globalId[i].toString(16).padStart(2, '0') + '00');
        }
    }
    
    return prefix.join(':') + '::/48';
}

// Example usage
const ulaPrefix = generateULA();
console.log('Generated ULA:', ulaPrefix);

function createSubnet(ulaPrefix, subnetId) {
    const base = ulaPrefix.replace('::/48', '');
    return `${base}:${subnetId.toString(16).padStart(4, '0')}::/64`;
}
            

Advertisement

AdSense Bottom Ad Placeholder