I use used to use my mobile phone for internet access. My provider's Unlimited data plan
discouragesd tethering (using the phone as a hotspot), though, by throttling
traffic it sees coming from other devices.
A fairly simple and robust solution is was to run a proxy server on the phone, and
then set up the router to send all traffic through the proxy.
I no longer use this setup, and do not have access to the mobile account or router that is described here. The comments section below may have further updates. If you can suggest improvements I will integrate them into the gist, but am not able to troubleshoot or verify changes.
There are several apps in the Play store which can do this on a stock phone (root not required). I've used Socks Server Ultimate. It's best to get this running first, and manually configure the browser on your laptop to use it, to verify that it's working properly. Then procede to the router setup.
On my TP-Link Archer C7 1750 router, I can use the 5Ghz radio as a client to
talk to my phone, and the 2.4Ghz radio as the access point. OpenWRT makes it
easy to configure via the Scan
button in the UI.
If your phone has locked down Hotspot, you may be able to install adb
tools and
run adb forward tcp:12345 tcp:12346
on the router to forward traffic from the
router's port 12345 to the proxy running on the phone's port 12346.
I use redsocks and iptables
to send all the traffic on the router to the
SOCKS5 proxy running on the phone.
I use OpenWRT on my router, but any OS that lets you run redsocks
should do fine. For OpenWRT, opkg install redsocks
gets it done.
Edit /etc/redsocks.conf
to have this:
// send all traffic to a remote SOCKS5 proxy
base {
log_info = on;
log = "file:/var/log/proxy_vpn.log";
daemon = on;
redirector = iptables;
}
redsocks {
// Use iptables to redirect traffic here
local_ip = 0.0.0.0;
local_port = 12345;
// Remote proxy info
// Use 127.0.0.1 if using adb forward; otherwise use the
// Phone's hotspot IP
ip = 192.168.43.1;
port = 12346;
type = socks5;
}
The package should automatically install /etc/init.d/redsocks
and enable it
in /etc/rc.d
so it will run when the router boots up.
Next, put the following in /etc/init.d/proxy_vpn
:
#! /bin/sh /etc/rc.common
# Modified from https://github.com/darkk/redsocks#iptables-example
# Tested on OpenWRT 18.06, TP-LINK Archer C7 v2.0, redsocks 0.4
# Prereq: opkg install redsocks
START=91
REDSOCKS_PORT=37419
start () {
# Redsocks should be running already, but just in case...
/etc/init.d/redsocks start
#
# Set up iptables
#
echo "Routing traffic to redsocks on port $REDSOCKS_PORT"
#
# Create the chain of rules to send non-local traffic through redsocks
#
iptables -t nat -N REDSOCKS
# Don't proxy local or private traffic
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
# Send everything else through the redsocks daemon
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
#
# Jump to the REDSOCKS chain if packet is going out on wlan (to phone)
#
iptables -t nat -A PREROUTING -i br-lan -p tcp -j REDSOCKS
# XXX It seems that OUTPUT is too late?
#iptables -t nat -A OUTPUT -o wlan0 -p tcp -j REDSOCKS
}
stop () {
iptables -t nat -F REDSOCKS
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -F INPUT
iptables -F FORWARD
iptables -t nat -X REDSOCKS
/etc/init.d/firewall restart
}
restart () {
stop
start
}
The Socks Server Ultimate app runs a SOCKS5 proxy. It is running on the phone (or other hotspot device, I suppose), which has direct internet access. You can verify that much is working by setting up your web browser on your laptop to use it. In Firefox, that's under Preferences ... General ... Network Settings. Select "Manual proxy" and put your hotspot's IP in "SOCKS Host", and make sure it's set to SOCKS5. It's not an SSH proxy, so SSH to the port won't work, if I understand you correctly.
The router portion requires that your router can both talk to the hotspot and also talk to normal wifi clients on the wifi LAN. Some routers can do this with two radios, or maybe you can do it by talking to your phone with
adb
over USB.The
redsocks
program, running on the router, hijacks traffic sent on the router and forwards it back and forth to the SOCKS5 proxy. Just like the browser on your laptop does. So if the laptop browser isn't using the Socks Server Ultimate proxy correctly, then redsocks won't be able to either.It took me quite a lot of fiddling to get it set up and working correctly. Since you're using a significantly different setup than I did, you might need some different settings in either redsocks.conf or iptables. But hopefully with enough tinkering it might work. I no longer use this setup, nor have access to the hardware or cell phone account, so I am limited in what I can help with. I wish you good luck!