So, for Independence Day, my family set out on a road trip to Lake Tahoe. My wife and I take turns driving. During one of my turns riding shotgun, something came up at the office that required my attention. It should have been a quick task, but my particular carrier throttles my hotspot connection. It's very frustrating because the same connections that go through my phone directly work quickly and are not throttled. So, I did a little workaround to get past this restriction.
SSH has the ability to create a SOCKS proxy. This is a general TCP proxy that can be used to forward traffic from your computer through another computer. So, with an android app acting as an SSH server and any SSH client (I'm using MacOS), you can bypass any hotspot throttling using an application that can connect using a SOCKS proxy. Your traffic will basically appear to come from your phone directly instead of a client behind a hotspot NAT connection.
My preferred SSH server on Android is SSHDroid. The option to enable an SSH proxy is simply -D followed by the port you want the proxy server to listen on. Here is the basic idea:
1 - Turn on hotspot tethering and confirm that your client can connect.
2 - Launch SSHDroid. Hit the start button. SSHDroid will report the IP and port that the SSH server is running on.
3. Connect to the SSH server from your ssh client. For example, I would connect to SSHdroid from my Mac with this command:
ssh firstname.lastname@example.org -D 9999
This will start the SSH connection to the SSHDroid server on my android phone and create a local SOCKS proxy on port 9999 on my laptop.
4. Finally, configure your client to connect to the proxy server. For Mac OS, that means configuring the network settings to connect to the proxy server at localhost:9999. For some clients (like Firefox or git), they use their own proxy settings apart from the system wide proxy settings.
While this is connected, you should now have full speed from your carrier. No more throttling. Just freedom.
Things to note:
- You may want to check the TOS with your provider. This stuff may violate the TOS. But, in a pinch, it works well. You shouldn't abuse it.
- You don't need root access to your phone!
- You may get better performance if you add the -C option in your ssh command. This turns on compression.
- This method works well with any SSH client. It should work with putty on Windows. It works well on my Chromebook running in Crostini (you may need to forward ports) and with the wonderful Chromebook SSH app.
- Creating a SOCKS proxy is also a good way to encrypt your traffic without having to use VPN. For example, during this roadtrip, I SSH into my home SSH servers to create the SOCKS proxy tunnel. This protects me from the foreign network that I'm on with encryption and my point of presence for the Internet is my home.
- SSHdroid has a lot of options including the ability to use keys or passwords.