OpenSSH - Tunnelointi ja port forward
Remote port forward
SSH-tunnelilla ja port forwardilla voidaan tunneloida yhteyksiä palomuurin tai esimerkiksi verkko-osoitemuunnoksen (NAT) tekevän laitteen läpi. Esimerkissä meillä on IoT-laite, joka saa verkkoasetukset DHCP-palvelimelta ja palomuuri erottaa laitteen julkisesta verkosta, niin että ulkoa tulevat yhteydet on estetty. Palvelimeen tulee päästä julkisesta verkosta. Esimerkissä käytetään yksityistä IP-osoitetta, mutta toimintaperiaate on sama riippumatta osoitteesta. Palomuurista on sallittu yhteydet palvelimen SSH-porttiin 22.

Otetaan SSH-yhteys IoT-laitteelta palvelimelle antti-tunnuksella. -R -optiolla määritellään remote port forward, eli kaikki palvelimen localhost-osoitteen porttiin 2000 tulevat yhteydet ohjataan takaisin IoT-laitteen porttiin 22.
antti@IoT $ ssh -l antti -R 2000:localhost:22 192.168.0.100 antti@192.168.0.100's password: Last login: Tue Apr 25 11:25:36 2016 from 192.168.0.3 antti@palvelin $ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:2000 0.0.0.0:* LISTEN tcp 0 0 192.168.0.100:22 192.168.0.20:52133 ESTABLISHED
antti@palvelin $ ssh localhost -p 2000 antti@localhost's password: The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Apr 25 12:37:58 2016 from localhost antti@IoT $

Local port forward
Tilanteessa jossa yhteys on estetty tiettyyn osoitteeseen, tässä esimerkissä googlen hakukoneeseen, voidaan esto kiertää ohjaamalla liikenne palvelimen kautta. Palvelimella on julkinen osoite ja internetistä on pääsy palvelimen SSH-palveluun. Meillä voi myös olla vahvan tunnistuksen tarjoava gateway-palvelin jonka takana palvelimet sijaitsevat. GW-palvelimeen voidaan ottaa SSH-yhteyksiä, ja palvelimelta SSH-yhteyksiä UNIX-palvelimille. Port forwardia tarvitaan, jos GW-palvelimen takana on Windows-palvelimia joihin halutaan ottaa remote desktop-yhteyksiä. GW-palvelimelle tehdän local port forward ja ohjataan liikenne tietyn Windows-koneen remote desktop -porttiin.

debian nimiseltä tietokoneelta otetaan SSH-yhteys palvelimen IP-osoiteeseen 192.168.0.100. -L optiolla tehdään local port forward. debian-koneen localhost porttiin 2000 otetut yhteydet ohjataan SSH-tunnelia pitkin palvelimelle ja palvelimelta google.com -osoitteeseen ja http-porttiin 80.
antti@debian $ ssh -l antti -L 2000:google.com:80 192.168.0.100 antti@192.168.0.100's password: Last login: Wed Apr 26 16:32:01 2016 from 192.168.0.20 antti@palvelin $
antti@debian $ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:2000 0.0.0.0:* LISTEN tcp 0 0 192.168.0.20:46892 192.168.0.100:22 ESTABLISHED
Huom. Jos google.com -osoitteen tilalle laitetaan localhost, niin yhdistettäessä paikallisen tietokoneen porttiin 2000 yhteydet ohjataan SSH-tunnelin läpi palvelimen localhostiin, eli palvelimen porttiin 80. Tietoturvasyistä (local ja remote) port forwardissa kuunnellaan oletuksena localhostia. Tämä voidaan kuitenkin kiertää komentorivillä -g optiolla tai lisäämällä sshd_config-tiedostoon GatewayPorts yes. GatewayPorts asetuksella SSH-asetetaan kuuntelemaan kaikkia osoitteita.
antti@debian $ ssh -l antti -g -L 2000:google.com:80 192.168.0.100 antti@192.168.0.100's password: Last login: Wed Apr 26 16:32:01 2016 from 192.168.0.20 antti@palvelin $
antti@debian $ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN tcp 0 0 192.168.0.20:56832 192.168.0.100:22 ESTABLISHED