Linux Story: USB Tethering
This was originally meant to be a thread on my Mastodon, but I figured it's better preserved over here.
Last week, I took a lovely 7 hour train ride into the mountains and back. Instead of playing video games I was messing with my Arch laptop for the entire journey. I was trying to get IPv6 via USB tethering to work.
First, I had to enable IPv6 in the phone's APN settings. It was disabled for some reason.
Then, the phone stopped appearing as an Ethernet controller. It appeared as a WWAN modem instead. I thought, I was going the right direction, but still no IPv6 connectivity. In fact, it wasn’t connecting at all anymore.
Problem 1: Broken Kernel Update
After many hours of troubleshooting, I found that a recent commit in the Linux Kernel labelled rndis_host: Flag RNDIS modems as WWAN devices broke USB tethering. I reverted back to an older kernel and it connected again, but still only via IPv4.
Problem 2: Android's WiFi Hotspot
The real problem is so stupid: If you enable the WiFi hotspot on Android, any subsequently established USB tethering will not have IPv6 connectivity. I had the hotspot enabled for the entire ride because my wife was using it. All I had to do was disable the hotspot, connect USB tethering and then enable the hotspot again.
The Linux Life
Sometimes I wonder why I even bother. I didn’t have to do any of this. Before I started, it was connecting via IPv4 just fine. I could’ve just watched a movie or something. Instead, I spent many hours investigating.
Linux is great. It almost never breaks unless I mess with it. But that's the problem. I can mess with it, and I will mess with it. Whenever I discover a slight imperfection or a mild inconvenience I get this deep urge to fix it and I can't stop until I found the real root cause. Don't get me wrong: I have fun doing it and I learn a lot; but man, the amount of time I spent doing this kind of stuff...
On any other operating system, you usually have no choice than accepting it the way it is. But nothing is set in stone on Linux, which is a blessing and a curse.
