Why dynamic IPv6 subnet allocations for home users are evil

23 June 2009

Currently, a home Internet user will be assigned one IP address from their ISP, and their router will then use NAT to share the single IP address amongst all the internal devices which are typically assigned private (RFC 1918) addresses.

The IP address assigned by your ISP is typically dynamic, and that is not a problem for the average home user, or even your typical power user, because the router’s use of NAT shields the internal devices from the mechanics of a changing external IP address.

These assumptions are broken in IPv6, where being able to connect to the Internet, whether you are a router or a device on an internal network, means you need a global IPv6 address. These global IPv6 addresses are assigned by your ISP.

If an ISP were to assign an IPv6 prefix dynamically, that means the addresses of internal devices are prone to change. A router reconfiguration, brief dropout, or even the passage of time could mean suddenly all internal devices need to have their addresses changed.

So far this doesn’t sound like a problem. But often devices that perform a server role, such as web servers, mail servers, printers, refrigerators, air conditioners, etc. (the list is endless) have persistent, long-lived, and bi-directional connections to/from other hosts on the Internet, and therefore need a static and predictable address.

This will become horribly broken and frustrating if ISPs choose to assign IPv6 prefixes to customers on a dynamic basis. I urge ISPs to assign static IPv6 prefixes to all their customers.

I am aware of the existence of unique local addresses (ULAs), which are designed to be used on a local network. In practice, this is problematic because ULAs will cause source address confusion should your global address be unavailable at the moment you try to make a connection, and also doesn’t work for a server that is supposed to be globally accessible.

Deprecating IPv6 prefixes through Router Advertisement is possible, but in practice buggy, not to mention causing active connections to simply hang (and I’m not just talking about the side of the connection that just got deprecated!).

Seriously, we live in an age where people will be starting to connect their refrigerators, air conditioners, and electricity meters to the Internet. Dynamic prefixes just won’t cut it in the next wave of Internet-connected devices.

So, dear ISPs of the world, please make static IPv6 subnets a part of your standard offering — not a “paid upgrade” or anything silly like that. It might kinda-sorta work in the NAT’ed world of IPv4, but you are doing IPv6 customers a disservice.

Update Sep 2014: I’ve rewritten a lot of outdated and poorly written crap in this post.