IPv6 ULA Generator
Generate IPv6 Unique Local Addresses (ULA) for private networks
IPv6 ULA Generator
Generate IPv6 Unique Local Addresses (ULA) for private networks
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
- Click Generate - Create a new random ULA prefix
- Copy Prefix - Use the generated fc00::/48 or fd00::/48 prefix
- Create Subnets - Divide the /48 into /64 subnets for different network segments
- Assign Addresses - Use the ULA prefix for internal network addressing
Advertisement
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
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
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
