Here are two examples of problems that I've had to overcome with my HE tunnel. I'm not going to go deeply into cause/politics here because in each of these cases all parties acted the way they should have.
Netflix
Sometime in the distant past maybe ten years ago or so, some jerk in Europe realize that he could bypass geolocation and view the US Netflix catalog from nearly anywhere by creating a Tunnelbroker connection to the New York endpoint and consuming Netflix only via IPv6. Netflix eventually figured this out and kick-banned either portions of the entirety of HE's IPv6 space. Concurrently, HE figured out what was going on and took steps to block the abuser. Then they talked to the Netflix engineers in an attempt to remove the kick-ban. Netflix declined to remove the ban. When Netflix did the ban, I wish , they would have done this by sending a TCP RST on initial connection attempt but they instead decided to just drop the inbound packets. My personal experience debugging this was the night I debugged this issue. We really didn't get anywhere until I turned of SLAAC and rebooted my Apple TV. Above I said that "turn off IPv6" has to be in your toolkit for debugging problem. This experience is why. At the end of the day, my research showed that I had to block outbound connection to anything DNS identified as Netflix with a TCP RST to make happy eyeballs work. Figuring what addresses to block was not a simple thing. To make things worse, Netflix implements a lot of their stuff in AWS. At the end of the day, I have to block selective /48s from AWS address space to use Netflix in my house. This solution has required at least one tune since I implemented it.
Google
This started a few years ago but Google finally got tired of things and kick-banned HE IPv6 addresses perhaps three years ago. Some mal-actor decided to skew Google search results by building a robot to flood google with crafted searches. Google's initial reaction was to force a CAPTCHA check on searches that came from HE. Google eventually just blocked all searches from HE's IPv6 range. Again, HE's network engineers tried to work with Google's engineers but they couldn't resolve the problem in a way that made using Google from an HE IPv6 address seamless. In my case, I just added a whole bunch of google hostnames to my DNS/IP based blocker.
My solution
I've got a three-fold solution for these problems.
- I maintain a list of domains that my DNS resolver will not give out AAAA answers to.
- Once every fifteen minutes. I resolve a list of names to IPv6 addresses by using Cloudflare's resolvers. I filter the addresses up to /48 address blocks and then configure my firewall to block connection to the resulting addresses with a TCP RST. Happy eyeballs sees this RST and forces an IPv4 connection to the service. This is a cover in case a device could find the IPv6 address of a service in the first place.
- Once every 15 minutes I generate a list of internal IPv6 addresses via NDP on my SLAAC server by MAC address. The listed MAC addresses belong to Apple TVs, iPads, and iPhones. If any of these devices attempts to open a TCP connection to 443 on an external IPv6 address, they get a TCP RST.
I found this reasonable to do because my firewall is an OpenBSD box running pf so running python scripts out of cron is easy and modifying the firewall by adding address blocks to a table.
Notes
Hurricane Electric will give you two kinds of address in tunnelbroker. You get a /64 for your network automatically and you can ask for a /48 for your own use. HE says that many of the issues that I'm seeing are mitigated by asking for the /48, ignoring the /64 and cutting your network address from the /48 that you received. I've had my tunnelbroker account since 2008 or so and it's been in heavy use since at least 2010. Moving out of the /64 would be difficult but I am working on that. But honestly, I can't say I've done a good test.