SSH tunelling is no big secret, and there are loads of guides out there that explain how it is done in generic terms. This guide is slightly different, as it explains how to tunnel to hosts that are not publicly addressable.
For example, if you have a Linux server as your home network gateway then you can simply open ports on it, e.g. port 80 for a web server.
If you want to access a service on a computer on your network other than your server, you will have to set up port forwarding.
But there’s another way. Today while I was at work, I needed to change something on my home network printer’s web interface. The printer has a private IP address in the range 192.168.0.0/24
and there is no port forwarding set up (why would I want to share my printer’s control panel on the internet?).
Supposing my server is called jonathangazeley.com
then I can enter a command like this from my work PC:
ssh -f jonathan@jonathangazeley.com -L 2000:192.168.0.105:80 -N
This command sets up port 2000 on localhost
to point to port 80 on my printer at home.
Then I open my browser at work and navigate to http://localhost:2000
Hey presto, I can now see my printer’s config page remotely. As a nice by-product, the connection is also encrypted by the ssh
protocol.