Why would I want to open a tunnel through my firewall?

Suppose you have one service (HTTP, SSH, etc) in one specific computer (Laptop, RPi, etc) that is behind a firewall that prevents anyone from the Internet to get access to it and you need to share it with another device from outside the network.

Go to NGROK [Link] and create one account.

Find the version of the system you want to share the service from.

Copy the link and download the NGROK in the host machine.

For a Linux 64 bits would be:

wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip

For a Raspberry Pi would be:

wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip

In the host device, extract the zip content and insert the ‘authtoken‘ from your account:

unzip ngrok*.zip
./ngrok authtoken 1nGTE96CoM7lXK8A0e7FNvg4NiD_6FCzSWB6fV9pgjAHQafoh

Now just run the NGROK setting the method and the port of the service. Follow the example for an HTTP server running in the localhost:

./ngrok http 80

One window will open with the public address that redirects the traffic through the tunnel to the host device.

Copy and paste the generated address into a browser on any client computer to get access. As long as the NGROK still running the tunneled service will be available. Press CTRL + C to stop at any time.

If you want to tunnel the SSH port issue the command:

./ngrok tcp 22

For help:

./ngrok help