Fine, I’ll Route It Myself: How I got IPv6 without my ISP

The internet is pretty neat.

I don’t mean the websites, the blogs, or the memes. I mean the network itself. The internet protocol is a beautifully designed system that allows for data to be sent anywhere in the world quickly (mostly) and easily.

The Internet Protocol routes packets of data using IP addresses. You’ve probably heard of these from VPN ads promising to hide yours. Unfortunately, there is an issue with these addresses: we are fresh out of them. Most internet traffic runs over IPv4. IPv4 is great, but uses 32bit IP addresses. Since it uses a 32-bit binary number, there are only around 4.3 billion possible addresses (232 to be precise). This might seem like a lot, but there are way more than 4.3 billion internet-connected devices in the world, and we don’t have enough IP addresses for all of them.

IPv4 Stopgaps

Since we don’t have enough addresses for every device, we have had to resort to some less-than-ideal solutions. Most home Wi-Fi networks use a technology called Network Address Translation (NAT). NAT gives every device on the network an internal IP address. This address isn’t functional outside of the network, and only allows for local connections. Only the router has a public IP address which can reach the whole internet. Devices use NAT to talk to servers, but they all have to share the router’s IP address.

Increasingly, many ISP don’t even give customers a simple IP address. On mobile networks ISPs use convoluted systems like NAT64/DNS64, 464XLAT, and DS-Lite to share a single address between many devices. This works, but it has drawbacks if you try to do anything other than just connecting to a server. Plus, they are as complicated as their names suggest.

A Real Solution

The good news is that there is a real, permanent solution: IPv6. This new version of the Internet Protocol (no there isn’t a version 5) uses much larger addresses. With IPv6 we have 2128 addresses. That’s more than 340 undecillion. Ever heard of an undecillion? It wasn’t even in my spellcheck. Well, it’s a whole dang lot. We basically can’t run out of IPv6 addresses unless something crazy and unforeseen happens in the future. There are more possible IPv6 addresses than there are atoms on the surface of the earth.

One Small Problem

There is one issue. IPv6 and IPv4 are not comparable. They are different protocols, so routers, devices, operating systems, and apps have to be updated to support it. Unfortunately this is…. not going well. Despite coming out in the late 90s., IPv6 adoption is still under 50% adoptions (https://www.google.com/intl/en/ipv6/statistics.html).

Yes, after decades we still don’t have half of devices on IPv6. This is mostly due to ISPs. Every modern operating system supports it. Almost all major apps support it. But many ISPs don’t offer IPv6 service to customers. Mobile phone companies have done this well—nearly every cell phone has IPv6—but many people do not have IPv6 on their home Wi-Fi. Personally, I have never had a home IPv6 connection. Because of the lack of adoption, anyone running something on the internet had to make it work over IPv4. Many sites are IPv4 only, since almost everyone has IPv4 connectivity.

Adoption has been disastrously slow.

Getting My Own IPv6

Since my ISP won’t give me and IPv6 address (or several, you’re supposed to have one for every device) I decided to get one for myself. Or rather, I got a little over 18.4 quintillion. That’s more than 4 billion times the number of possible IPv4 addresses. That’s how plentiful IPv6 addresses are.

The way IPv6 normally works is this: your ISP hands your routed a /64. This is the first half of an IPv6 address. The rest is basically a blank check you can fill in to make as many addresses as you want (unless you somehow want more than 18.4 quintillion). This way every device you own gets its own address. You can directly connect to them without bothering with stuff like port forwarding. It also makes P2P applications much more practical.

Since I can’t get a /64 from my ISP, what do I do? Well, I rent a few Virtual Private Servers (VPS) from a company called Linode. A VPS is basically a virtual computer that runs in the cloud that you can use as a server. As it happens, Linode allows you to get a /64 for your server for free! So I can get all these IPv6 addresses for my server.

But now that I have a blank check for functionally unlimited IPv6 addresses, how do I use them on my devices at home? For this, I used a custom VPN setup.

Guarding the Wires

There’s a great bit of software called Wireguard. Wireguard is a simple, yet versatile, VPN protocol that lets you create your own virtual networks. With Wireguard I can connect my laptop to my VPS using a secure, encrypted tunnel. Then, I can run IPv6 traffic over this tunnel. While the tunnel itself goes through IPv4, it basically lets me add an IPv6 address to each of my devices. Now, I can remotely connect to any of them without having to forward ports and such (which on my apartment Wi-Fi, I am not actually able to do).

The only downside is that since many people don’t have IPv6, they can’t actually connect to me. If I run a Minecraft server on my laptop, only people with IPv6 can connect. (I actually do this, and I have a different convoluted setup to make it work for people with IPv4).

IPv6 is great, and hopefully everyone gets it soon. Until then, comment below if you’d like me to make a blog post about actually setting up my VPN server. There is a lot of configuration to be done.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *