If you live in San Francisco there’s a good chance that you can use IPv6 on your home router. Comcast, AT&T, and Sonic.net all support it. (let me know if there’s one I missed).
It took me a while to get everything set up, so here is a collection of everything you need to know to move from IPv4 only to IPv4 + IPv6.
It goes without saying that you’ll need an IPv6 compatible modem. Almost all modern equipment should work, and Comcast maintains an official list of what they support. If you need to upgrade, I have a Motorola Surfboard 6141 and a Netgear R6300v2 that work together flawlessly.
If you open test-ipv6.com, it will hopefully show you that you are connected to IPv6 and that everything works. If not, there are two scenarios to consider:
Everything’s working, but only on IPv4. In this case your laptop is not trying to use IPv6. Double check that the router has an IPv6 address, and that your laptop is configured to use it automatically. You should turn your laptop’s Wifi off and on again after everything has been configured.
Things are broken. This means that your laptop is using IPv6, but your connection isn’t. This usually implies that the router is using IPv6 correctly on the LAN, but the WAN IPv6 is mis-configured. Hopefully your router will have a readable status page where you can see what it thinks is going on, or ask for help.
What are all these addresses?
The most confusing thing I found about IPv6 is that every device gets many IPv6 addresses.
At a minimum every adaptor automatically gets a link-local
address that is based on its
MAC address. These can’t be used for
anything (you can’t even
ping6 them) but they appear in routing tables (
# On my network, there are three of these. fe80::2acf:e9ff:fe1a:d1e5 # laptop wifi fe80::2acf:e9ff:fe1a:d1e6 # laptop wired fe80::c604:15ff:fe3e:407c # router LAN
Adaptors connected to the internet also
one or two globally unique IPv6 addresses. These all share the address prefix that Comcast
has assigned to my network (
2601:9:8480:11d2::/64), and they can actually be used (you
2601:9:8480:11d2:2acf:e9ff:fe1a:d1e5 # laptop, MAC-address autoconfig 2601:9:8480:11d2:195d:8dd3:6e4a:d7a # laptop, random autoconfig 2601:9:8480:11d2:486f:6805:63c7:fe4a # router LAN, random autoconfig 2001:558:6045:109:58cc:71bf:9106:df9a # router WAN, comcast-provided
Because there’s no NAT in IPv6, when I visit
whatismyv6.com I actually see
2601:9:8480:11d2:195d:8dd3:6e4a:d7a which is the random autoconfig address of
my laptop. If you’re used to IPv4 + NAT, you might expect to see the WAN address
of the router, but that is not the case anymore.
ping6It’s just like ping, but for IPv6.
curlworks as expected (http requires square brackets around IPv6 addresses) but you need to pass -g and use single quotes to avoid shell shenanigans
curl -L -g 'http://[2a03:2880:2110:df07:face:b00c:0000:0001]/'
ifconfig. Prints out all your IPv6 addresses, and IPv4 address too.
netstat -nr. Prints out the routing table so you can see which packets are being sent where.
ndp -a. Finds all IPv6 addresses on your LAN (equivalent to
arp -ain IPv4)
Feedback, or questions?
If you’ve got feedback on this post, or need a hand getting IPv6 working, let me know.