Zet snel een SSH VPN op met sshuttle
Gepubliceerd: Woensdag 22 februari 2012
Auteur: Koen Vervloesem
Meet ssh (Secure Shell) zet je snel een ssh-tunnel ad hoc VPN op. De tool sshuttle stroomlijnt dit en laat je toe om zonder enige configuratie en beheer een transparante proxy-server op te zetten.
Sshuttle is een Python-toepassing die ssh als transportprotocol gebruikt om snel een VPN (Virtual Private Network) op te zetten tussen een client en server die Linux, BSD of Mac OS X (waarvoor er zelfs een grafische interface van sshuttle bestaat) draaien. De enige softwarevereisten voor beide systemen is dat ze ssh draaien en Python geïnstalleerd hebben. Op de client heb je weliswaar root-toegang nodig (wat meestal geen probleem is), maar op de server waarmee je verbindt niet: een normale gebruiker waarmee je via ssh kunt inloggen is voldoende. Sshuttle uploadt de Python-broncode naar de server en draait deze daarna, waardoor je het programma ook niet op de server hoeft te installeren.
Transparante proxy
Om een VPN op te zetten met sshuttle is het volgende commando als root voldoende:
# sshuttle -r gebruiker@example.com 0.0.0.0/0
Hierin is example.com de server die je als VPN-server wil gebruiken. Sshuttle gebruikt de informatie uit ~/.ssh/config, dus ook bijvoorbeeld een standaard gebruikersnaam of poort die je daar opgeeft. Met 0.0.0.0/0 zorg je ervoor dat sshuttle al je tcp-netwerkverkeer transparant door de server proxy't. Dit is handig als je bijvoorbeeld op een onbeschermd WiFi-netwerk dat je niet vertrouwt online moet, en je geen toegang hebt tot een IPsec-, PPTP- of OpenVPN-account. Elke server waarop je via ssh kunt inloggen kan dan als VPN proxy dienen, zelfs als die server de PermitTunnel functie uitgeschakeld heeft.
Specifieker adresbereik
In plaats van het "catch all" IP-adresbereik 0.0.0.0/0 kun je ook een specifieker adresbereik opgeven. Op deze manier worden enkel één of meerdere specifieke IP-adressen of subnets geproxy'd via de opgegeven server. Elke tcp-sessie die je begint naar één van de geproxy'de IP-adressen wordt door sshuttle opgevangen en over een ssh-sessie gestuurd naar sshuttle op de server, die de sessie daar voortzet en de terugkerende pakketten weer door ssh stuurt naar de client.
Als de client waarop je sshuttle start geen pc maar een router is, kan iedere machine op het lokale netwerk die met die router verbonden is aan het remote netwerk. Je kunt ook meerdere keren sshuttle tegelijk draaien op een client om afhankelijk van het IP-adres waarmee je verbindt via een andere VPN-server te gaan. Sinds versie 0.50 kun je ook dns-aanvragen transparant tunnelen met de optie --dns. Bekijk de man-pagina voor meer opties.
Beter dan alleen ssh
Een vaak gebruikte poor man's VPN is simpele ssh port forwarding of ssh als SOCKS proxy, maar deze oplossingen hebben enkele nadelen ten opzichte van sshuttle. Ten eerste moet je in je programma's instellen dat die van de proxy gebruik moeten maken, terwijl sshuttle transparant werkt. Ten tweede vermijdt sshuttle ook de tcp-over-tcp aanpak, die voor een problematische performantie zorgt.
De rubriek Tips & Tools biedt praktische informatie die IT-professionals in hun dagelijkse werk kunnen toepassen.
