Tunnelen met SSH

Met SSH kun je verkeer tunnelen. Tunnelen is het omleiden van verkeer tussen twee apparaten. Dit is bijvoorbeeld handig als je wel met machine A via SSH bij machine B kunt maar niet vanaf machine A bij MySQL op machine B, bijvoorbeeld omdat de firewall dit niet toestaat.

Er zijn drie soorten tunnels:

Local: Een poort op je lokale machine verbind je met een IP-adres en poort op de andere machine.

Remote: Een IP-adres en poort op je lokale machine sluis je door naar een poort op de andere machine (hiermee kan de remote machine bij iets waar jouw machine bij kan, werking is dus precies omgekeerd t.o.v. local). Dit wordt ook wel reverse port-forwarding genoemd.

Dynamic: Dit zet een SOCKS-proxy op, hiermee kun je al het verkeer op machine A via machine B laten lopen.

Een lokale tunnel opzetten:

machine-a$ ssh -L 9306:127.0.0.1:3306 my-username@machine-b

Met de -L optie geef je aan dat je een local-tunnel wilt opzetten. Als eerste geef je aan welke poort je op je lokale machine je wilt gebruiken voor de tunnel. Daarna het IP-adres en de poort van de externe service, gezien vanaf de externe service.

Dus met bovenstaand commando wordt de MySQL service (deze draait standaard op poort 3306) van machine-b (vanaf machine-b naar machine-b is dit dus 127.0.0.1) actief op de poort 9306 op machine-a.

Je kan zelfs een stapje verder gaan:

machine-a$ ssh -L 9306:172.19.12.40:3306 my-username@machine-b

Hiermee wordt verkeer van en naar poort 9306 op machine-a doorgestuurd naar poort 3306 op 172.19.12.40 via machine-b. Zo kun je dus zelfs een machine bereiken op het interne netwerk waar machine-b zich op bevind.

Een remote tunnel opzetten:

machine-a$ ssh -R 922:127.0.0.1:22 my-username@machine-b

Met bovenstaand commando maak je op poort 922 van machine-b de SSH service (poort 22) van machine-a (hier als localhost/127.0.0.1) beschikbaar.

Nadat bovenstaande verbinding is opgezet kun je vanaf machine-b dus het volgende doen om een SSH verbinding naar machine-a:

machine-b$ ssh -p 922 my-username@127.0.0.1

Je stelt hiermee dus lokale poorten beschikbaar aan de partij waarmee je verbinding maakt.

Een proxy gebruiken via een dynamic tunnel

machine-a$ ssh -D 9999 my-username@machine-b

Bovenstaand start op machine-a op poort 9999 een SOCKS proxy. Als je deze op machine-a als proxy instelt wordt al het verkeer geproxied via machine-b. Heb je op het netwerk van machine-a last van IP blokkades dan kun je die via machine-b omzeilen.

In Windows stel je de proxy in onder Configuratiescherm > Netwerk en internet > Internetopties > Verbindingen > LAN instellingen
Vink aan Een proxyserver voor uw LAN-netwerk gebruiken (deze instellingen zijn niet van toepassing op inbel- of VPN-verbindingen)
Klik vervolgens op Geavanceerd
Bij Socks-type voer je als adres in 127.0.0.1 en poort 9999
Sluit beide vensters via de OK knop.

Zowel Chrome, Internet Explorer/Edge (en sommige andere applicaties) zullen hun verkeer nu via de proxy server sturen. Firefox volgt standaard niet de Windows instellingen maar heeft in de opties eigen functies om de Socks proxy in te stellen.

Let op: Sinds Windows 10 1903/19-H1 kun je ook via de Instellingen-applicatie een optie op het proxyadres in te voeren. Deze biedt (nog) geen ondersteuning voor SOCKS-proxy instellingen.

21-02-2020 NL ssh tunnel proxy socks
Deel via: LinkedIn Twitter