Howto Subnet IPv6

I’ve been trying to get my head around IPv6 subnetting for some time now. Today was finally the day that forced the issue…

First some background:

All IP addresses (IPv4 and IPv6) are allocated in large blocks to a regional registry (ARIN, RIPE, etc…) these registries then in turn allocate addresses down to ISPs, ISPs to customers and so on. By default the registry will allocate a /32 to an ISP and the ISP is supposed to allocate a /48 to a customer. The IPv6 equivalent of a IPv4 /24 subnet is a /64 which is the space a customer should break their network segments into.

This is where my brain starts to hurt.

An IPv6 /32 is 2^16 (65536) /48 subnets, which in turn are each 2^16 /64 subnets. A /64 is 2^64 addresses, the square of the size of the entire IPv4 Internet. It took me a while to find a calculator that would actually give the expanded result – 18,446,744,073,709,552,000.

The numbers are just unbelievably large. Anyways back to the problem at hand, how does an ISP properly subnet their /32 space to customers (or better put what are the breakpoints in the subnets)?
The answer is incredibly simple, since IPv6 is going to be subnetted based on the existing “:” octet separator all you need to do is increase the number and volia. Phyber’s IPv6 allocation is 2637:f238/32 which means the subnets are:


2607:f238:0000/48
2607:f238:0001/48
2607:f238:0002/48

And so on and so on. Another trick, IPv6 isn’t just 0-9, the numbering is 0-9 + a-f or:


2607:f238:0008/48
2607:f238:0009/48
2607:f238:000a/48
2607:f238:000b/48

It is a ridiculous amount of IP space. I’ll post more when I figure out what we are doing for our cross connects and loopback interfaces.