It seems to be the time of the year when geeks think that IPv6 is perfect, ready to be used, and the best thing after sliced bread (or canned energy drinks). Over on Twitter, someone pointed out to me that FontAwesome (which is used by the Hugo theme I’m using) is not accessible over an IPv6-only network, and as such the design of the site is broken. I’ll leave aside my comments on FontAwesome because they are not relevant to the rant at hand.
You may remember I called IPv6-only networks unrealistic two years ago, and I called IPv6 itself a geeks’ wet dream last year. You should then not be surprised to find me calling this Fantasyland an year later.
First of all, I want to make perfectly clear that I’m not advocating that IPv6 deployment should stop or slow down. I really wish it would be actually faster, for purely selfish reasons I’ll get to later. Unfortunately I had to take a setback when I moved to London, as Hyperoptic does not have IPv6 deployment, at least in my building, yet. But they provide a great service, for a reasonable price, so I have no intention to switch to something like A&A just to get a good IPv6 right now.
$ host hyperoptic.com hyperoptic.com has address 126.96.36.199 hyperoptic.com has address 188.8.131.52 hyperoptic.com mail is handled by 0 hyperoptic-com.mail.eo.outlook.com. $ host www.hyperoptic.com www.hyperoptic.com has address 184.108.40.206 www.hyperoptic.com has address 220.127.116.11 $ host www.virginmedia.com www.virginmedia.com has address 18.104.22.168 $ host www.bt.co.uk www.bt.co.uk is an alias for www.bt.com. www.bt.com has address 22.214.171.124 Host www.bt.com not found: 2(SERVFAIL) $ host www.sky.com www.sky.com is an alias for www.sky.com.edgekey.net. www.sky.com.edgekey.net is an alias for e1264.g.akamaiedge.net. e1264.g.akamaiedge.net has address 126.96.36.199 $ host www.aaisp.net.uk www.aaisp.net.uk is an alias for www.aa.net.uk. www.aa.net.uk has address 188.8.131.52 www.aa.net.uk has address 184.108.40.206 www.aa.net.uk has IPv6 address 2001:8b0:0:30::65 www.aa.net.uk has IPv6 address 2001:8b0:0:30::68
I’ll get back to this later.
IPv6 is great for complex backend systems: each host gets their own uniquely-addressable IP, so you don’t have to bother with jumphosts, proxycommands, and so on so forth. Depending on the complexity of your backend, you can containerize single applications and then have a single address per application. It’s a gorgeous thing. But as you move towards user facing frontends, things get less interesting. You cannot get rid of IPv4 on the serving side of any service, because most of your visitors are likely reaching you over IPv4, and that’s unlikely to change for quite a while longer still.
Of course the IPv4 address exhaustion is a real problem and it’s hitting ISPs all over the world right now. Mobile providers already started deploying networks that only provide users with IPv6 addresses, and then use NAT64 to allow them to connect to the rest of the world. This is not particularly different from using an old-school IPv4 carrier-grade NAT (CGN), which a requirement of DS-Lite, but I’m told it can get better performance and cost less to maintain. It also has the advantage of reducing the number of different network stacks that need to be involved.
And in general, having to deal with CGN and NAT64 add extra work, latency, and in general bad performance to a network, which is why gamers, as an example, tend to prefer having a single-stack network, one way or the other.
$ host store.steampowered.com store.steampowered.com has address 220.127.116.11 $ host www.gog.com www.gog.com is an alias for gog.com.edgekey.net. gog.com.edgekey.net is an alias for e11072.g.akamaiedge.net. e11072.g.akamaiedge.net has address 18.104.22.168 $ host my.playstation.com my.playstation.com is an alias for my.playstation.com.edgekey.net. my.playstation.com.edgekey.net is an alias for e14413.g.akamaiedge.net. e14413.g.akamaiedge.net has address 22.214.171.124 $ host www.xbox.com www.xbox.com is an alias for www.xbox.com.akadns.net. www.xbox.com.akadns.net is an alias for wildcard.xbox.com.edgekey.net. wildcard.xbox.com.edgekey.net is an alias for e1822.dspb.akamaiedge.net. e1822.dspb.akamaiedge.net has address 126.96.36.199 e1822.dspb.akamaiedge.net has IPv6 address 2a02:26f0:a1:29e::71e e1822.dspb.akamaiedge.net has IPv6 address 2a02:26f0:a1:280::71e $ host www.origin.com www.origin.com is an alias for ea7.com.edgekey.net. ea7.com.edgekey.net is an alias for e4894.e12.akamaiedge.net. e4894.e12.akamaiedge.net has address 188.8.131.52
But multiple other options started spawning around trying to tackle the address exhaustion problem, faster than the deployment of IPv6 is happening. As I already noted above, backend systems, where the end-to-end is under control of a single entity, are perfect soil for IPv6: there’s no need to allocate real IP addresses to these, even when they have to talk over the proper Internet (with proper encryption and access control, goes without saying). So we won’t see more allocations like Xerox’s or Ford’s of whole /8 for backend systems.
$ host www.xerox.com www.xerox.com is an alias for www.xerox.com.edgekey.net. www.xerox.com.edgekey.net is an alias for e1142.b.akamaiedge.net. e1142.b.akamaiedge.net has address 184.108.40.206 $ host www.ford.com www.ford.com is an alias for www.ford.com.edgekey.net. www.ford.com.edgekey.net is an alias for e4213.x.akamaiedge.net. e4213.x.akamaiedge.net has address 220.127.116.11 $ host www.xkcd.com www.xkcd.com is an alias for xkcd.com. xkcd.com has address 18.104.22.168 xkcd.com has address 22.214.171.124 xkcd.com has address 126.96.36.199 xkcd.com has address 188.8.131.52 xkcd.com has IPv6 address 2a04:4e42::67 xkcd.com has IPv6 address 2a04:4e42:200::67 xkcd.com has IPv6 address 2a04:4e42:400::67 xkcd.com has IPv6 address 2a04:4e42:600::67 xkcd.com mail is handled by 10 ASPMX.L.GOOGLE.com. xkcd.com mail is handled by 20 ALT2.ASPMX.L.GOOGLE.com. xkcd.com mail is handled by 30 ASPMX3.GOOGLEMAIL.com. xkcd.com mail is handled by 30 ASPMX5.GOOGLEMAIL.com. xkcd.com mail is handled by 30 ASPMX4.GOOGLEMAIL.com. xkcd.com mail is handled by 30 ASPMX2.GOOGLEMAIL.com. xkcd.com mail is handled by 20 ALT1.ASPMX.L.GOOGLE.com.
Another technique that slowed down the exhaustion is SNI. This TLS feature allows to share the same socket for applications having multiple certificates. Similarly to HTTP virtual hosts, that are now what just about everyone uses, SNI allows the same HTTP server instance to deliver secure connections for multiple websites that do not share their certificate. This may sound totally unrelated to IPv6, but before SNI became widely usable (it’s still not supported by very old Android devices, and Windows XP, but both of those are vastly considered irrelevant in 2018), if you needed to provide different certificates, you needed different sockets, and thus different IP addresses. It would not be uncommon for a company to lease a /28 and point it all at the same frontend system just to deliver per-host certificates — one of my old customers did exactly that, until XP became too old to support, after which they declared it so, and migrated all their webapps behind a single IP address with SNI.
Does this mean we should stop caring about the exhaustion? Of course not! But if you are a small(ish) company and you need to focus your efforts to modernize infrastructure, I would not expect you to focus on IPv6 deployment on the frontends. I would rather hope that you’d prioritize TLS (HTTPS) implementation instead, since I would rather not have malware (including but not limited to “coin” miners), to be executed on my computer while I read the news! And that is not simple either.
$ host www.bbc.co.uk www.bbc.co.uk is an alias for www.bbc.net.uk. www.bbc.net.uk has address 184.108.40.206 www.bbc.net.uk has address 220.127.116.11 $ host www.theguardian.com www.theguardian.com is an alias for guardian.map.fastly.net. guardian.map.fastly.net has address 18.104.22.168 guardian.map.fastly.net has address 22.214.171.124 guardian.map.fastly.net has address 126.96.36.199 guardian.map.fastly.net has address 188.8.131.52 $ host www.independent.ie www.independent.ie has address 184.108.40.206 www.independent.ie has address 220.127.116.11 www.independent.ie has address 18.104.22.168 www.independent.ie has address 22.214.171.124 www.independent.ie has address 126.96.36.199 www.independent.ie has address 188.8.131.52 www.independent.ie has address 184.108.40.206 www.independent.ie has address 220.127.116.11
Okay I know these snippets are getting old and probably beating a dead horse. But what I’m trying to bring home here is that there is very little to gain in supporting IPv6 on frontends today, unless you are an enthusiast or a technology company yourself. I work for a company that believes in it and provides tools, data, and its own services over IPv6. But it’s one company. And as a full disclosure, I have no involvement in this particular field whatsoever.
In all of the examples above, which are of course not complete and not statistically meaningful, you can see that there are a few interesting exceptions. In the gaming world, XBox appears to have IPv6 frontends enabled, which is not surprising when you remember that Microsoft even developed one of the first tunnelling protocols to kickstart adoption of IPv6. And of course XKCD, being ran by a technologist and technology enthusiast couldn’t possibly ignore IPv6, but that’s not what the average user needs from their Internet connection.
Of course, your average user spends a lot of time on platforms created and maintained by technology companies, and Facebook is another big player of the IPv6 landscape, so they have been available over it for a long while — though that’s not the case of Twitter. But at the same time, they need their connection to access their bank…
to pay their bills…
$ host www.mybills.ie www.mybills.ie has address 18.104.22.168 $ host www.airtricity.ie www.airtricity.ie has address 22.214.171.124 $ host www.bordgaisenergy.ie www.bordgaisenergy.ie has address 126.96.36.199 $ host www.thameswater.co.uk www.thameswater.co.uk is an alias for aerotwprd.trafficmanager.net. aerotwprd.trafficmanager.net is an alias for twsecondary.westeurope.cloudapp.azure.com. twsecondary.westeurope.cloudapp.azure.com has address 188.8.131.52 $ host www.edfenergy.com www.edfenergy.com has address 184.108.40.206 $ host www.veritasenergia.it www.veritasenergia.it is an alias for veritasenergia.it. veritasenergia.it has address 220.127.116.11 veritasenergia.it mail is handled by 10 mail.ascopiave.it. veritasenergia.it mail is handled by 30 mail3.ascotlc.it. $ host www.enel.it www.enel.it is an alias for bdzkx.x.incapdns.net. bdzkx.x.incapdns.net has address 18.104.22.168
to do shopping…
$ host www.paypal.com www.paypal.com is an alias for geo.paypal.com.akadns.net. geo.paypal.com.akadns.net is an alias for hotspot-www.paypal.com.akadns.net. hotspot-www.paypal.com.akadns.net is an alias for wlb.paypal.com.akadns.net. wlb.paypal.com.akadns.net is an alias for www.paypal.com.edgekey.net. www.paypal.com.edgekey.net is an alias for e3694.a.akamaiedge.net. e3694.a.akamaiedge.net has address 22.214.171.124 $ host www.amazon.com www.amazon.com is an alias for www.cdn.amazon.com. www.cdn.amazon.com is an alias for d3ag4hukkh62yn.cloudfront.net. d3ag4hukkh62yn.cloudfront.net has address 126.96.36.199 $ host www.ebay.com www.ebay.com is an alias for slot9428.ebay.com.edgekey.net. slot9428.ebay.com.edgekey.net is an alias for e9428.b.akamaiedge.net. e9428.b.akamaiedge.net has address 188.8.131.52 $ host www.marksandspencer.com www.marksandspencer.com is an alias for prod.mands.com.edgekey.net. prod.mands.com.edgekey.net is an alias for e2341.x.akamaiedge.net. e2341.x.akamaiedge.net has address 184.108.40.206 $ host www.tesco.com www.tesco.com is an alias for www.tesco.com.edgekey.net. www.tesco.com.edgekey.net is an alias for e2008.x.akamaiedge.net. e2008.x.akamaiedge.net has address 220.127.116.11
to organize fun with friends…
$ host www.opentable.com www.opentable.com is an alias for ev-www.opentable.com.edgekey.net. ev-www.opentable.com.edgekey.net is an alias for e9171.x.akamaiedge.net. e9171.x.akamaiedge.net has address 18.104.22.168 $ host www.just-eat.co.uk www.just-eat.co.uk is an alias for 72urm.x.incapdns.net. 72urm.x.incapdns.net has address 22.214.171.124 $ host www.airbnb.com www.airbnb.com is an alias for cdx.muscache.com. cdx.muscache.com is an alias for 2-01-57ab-0001.cdx.cedexis.net. 2-01-57ab-0001.cdx.cedexis.net is an alias for evsan.airbnb.com.edgekey.net. evsan.airbnb.com.edgekey.net is an alias for e864.b.akamaiedge.net. e864.b.akamaiedge.net has address 126.96.36.199 $ host www.odeon.co.uk www.odeon.co.uk has address 188.8.131.52
and so on so forth.
This means that for an average user, an IPv6-only network is not feasible at all, and I think the idea that it’s a concept to validate is dangerous.
What it does not mean, is that we should just ignore IPv6 altogether. Instead we should make sure to prioritize it accordingly. We’re in a 2018 in which IoT devices are vastly insecure, so the idea of having a publicly-addressable IP for each of the devices in your home is not just uninteresting, but actively frightening to me. And for the companies that need the adoption, I would hope that the priority right now would be proper security, instead of adding an extra layer that would create more unknowns in their stack (because, and again it’s worth noting, as I had a discussion about this too, it’s not just the network that needs to support IPv6, it’s the full application!). And if that means that non-performance-critical backends are not going to be available over IPv6 this century, so be it.
One remark that I’m sure is going to arrive from at least a part of the readers of this, is that a significant part of the examples I’m giving here appear to all be hosted on Akamai’s content delivery network which, as we can tell from XBox’s website, supports IPv6 frontends. “It’s just a button to press, and you get IPv6, it’s not difficult, they are slackers!” is the follow up I expect. For anyone who has worked in the field long enough, this would be a facepalm.
The fact that your frontend can receive IPv6 connections does not mean that your backends can cope with it. Whether it is for session validation, for fraud detection, or just market analysis, lots of systems need to be able to tell what IP address a connection was coming from. If your backend can’t cope with IPv6 addresses being used, your experience may vary between being unable to buy services and receiving useless security alerts. It’s a full stack world.