I have always been very vocal about enabling IPv6 in residential networks. It’s the direction the internet is taking, and since its world wide launch in June 2012, global IPv6 traffic has increased over 5000% (yep, you read that right). IPv6 helps your device connect to the internet without NAT (Network Address Translation) which adds unnecessary latency with complex routing rules in IPv4 traffic. This does not necessarily mean IPv6 WAN side communication is faster in the current state, it all depends on which service you connect to and from where. Read a more comprehensive performance benchmark here, but with less overhead on subnet communication (each packet requires less raw computation, there is one less checksum to validate which saves small amounts of time, and on special networks, the ability to have very large packets can further save processing), IPv6 is designed to be faster than IPv4.
I personally love the dual-stack implementation, where you have both IPv4 and IPv6 traffic, and your device chooses which one to use to best serve you. Most major broadband providers have implemented dual-stack in their networks. And if you have smart phones (who doesn’t), you probably already know that almost all mobile broadband providers are IPv6 only, in fact, Apple has mandated App Store apps to support IPv6 only traffic from as early as iOS 9, and the only way almost all smart phones reach IPv4 only services is by using NAT64 that translates IPv4 addresses into IPv6 space.
Now that I have iterated how important IPv6 is (could I have been any less subtle about my feelings?), let’s figure out how to enable IPv6 networking without breaking your internet. Now, since I am stuck at my sister’s cabin in the woods for this Coronavirus pandemic, and don’t have my own gateway online (blame a sudden power outage right before I left my apartment; thank you, PECO), it will be quite an interesting challenge for me too; she has a consumer grade router, and I have done all my IPv6 networking stuff on my Ubuntu gateway. So let’s dig in!
Before we start. Make sure your ISP supports IPv6. If it doesn’t, then this guide isn’t for you.
Login to your router (192.168.1.1, or 10.0.0.1, or something along those lines). For the router I’m using now, it’s:
It’s a D-Link router, so number of available options is very limited. Luckily, it’s open enough for me to configure IPv6.
In this particular example, IPv6 is a separate option all together. I have also personally used Asus routers (if you have an Asus router, congratulations on an excellent choice, by the way), and I do remember seeing IPv6 as a separate option there too. Anyway, go to your IPv6 settings page, that’s what we need. For me now, it looks something like this:
To use IPv6 for outside internet connection, let’s go to “Manual IPv6 Internet Connection Setup”. It should be somewhat similar across all router brands. Now, most ISP’s will use Stateless DHCPv6 and SLAAC to assign IPv6 addresses, but it’s always advisable to check with them directly. For most residential broadband connections though, you should be fine.
- Choose you IPv6 connection as “Autoconfiguration” or “Native”.
- I prefer to use Cloudflare (well, I prefer to use my Pi-Hole server, but that server itself gets answers from Cloudflare) as my DNS server. For IPv6, their addresses are: 2606:4700:4700::1111, 2606:4700:4700::1001.
- Enable DHCP-PD.
- Enable Automatic IPv6 address assignment and Automatic DHCP-PD in LAN (if you don’t have these options present, that’s fine, your router enables those by default).
- Choose Autoconfiguration as “SLAAC + Stateless DHCPv6”. If you don’t see SLAAC or DHCPv6 by name, choose anything that says “Stateless”.
- Enable Router Advertisement (or keep the default time as it was).
There is an almost political debate over SLAAC vs DHCPv6, but most newer devices support both, so it’s easier to use the option SLAAC + Stateless DHCPv6. If you want to have static IPv6 address, I don’t even know if it’s possible in residential broadband, contact your ISP for Stateful DHCPv6 connection. For all our purposes, a stateless configuration is just fine.
Voila! You have IPv6 connection! I might add, this was way less painful than configuring IPv6 in my Ubuntu gateway; but I guess, that’s the whole point of consumer grade routers! They simplify everything (although at the cost of giving up a few functionalities that are only important to a handful of power users).
You can check your IPv6 connectivity using:
If you want to use Google (I wouldn’t, unless I have another service running in my network blocking Google from tracking me) in IPv6 only mode, you can go to: