Routing via SSH Tunnel 2012
Wir schreiben das Jahr 2012. Noch immer befindet man sich manchmal temporär in “fremden” Netzen und nicht zu “Hause”, sei es bei Freunden oder Kunden oder in einem öffentlichen W-LAN.
Gerne möchte man natürlich nach “Hause” eine gesicherte Verbindung haben und sämtlichen Traffic darüber abgefackelt sehen.
In der Vergangenheit wurden dazu Techniken wie OpenVPN oder PPTP verwendet. Manchmal wurde eine dedizierte Kombination von IPTABLES+SSH-FORWARDING eingesetzt, welche aber für den täglichen Gebrauch umständlich war.
Der Nachteil der Lösungen via OpenVPN und PPTP ist das man auf der Gegenstelle Einstellungen vornehmen muss und nur für diesen seltenen Fall des Zugriffs dauerhaft etwas abweichend vom “Standard” betreiben muss.
Kürzlich bin ich aber über ein kleines nettes Tool namens “sshuttle” gestossen, was die ganze Thematik “IPTABLES+SSH-FORWARDING” mehr oder weniger geschmeidig automatisiert und genau das tut was es soll, ohne die VPN-Keule oder PPTP rausholen zu müssen.
Hat man als Client ein gängiges Linux unterm Arsch kann man davon ausgehen, das etwaig benötigte Tools wie ‘iptables’ und ‘ssh’ in entsprechender Ausprägung mit ‘DNAT’ + ‘REDIRECT’ + ‘ttl’ vorhanden sind. Server-seitig ist ein ssh-Daemon notwendig, welcher über einen beliebigen Port öffentlich erreichbar sein muss.
Zum Installieren auf dem Client reicht ein einfaches “apt-get install sshuttle”.
Dannach kann man in einem Terminal “sshuttle” wie folgt starten ..
sshuttle -r username@ssh-server:ssh-port 0/0 -H -v
Ab diesem Moment läuft sämtlicher Traffic über den SSH-Server, da das Tool zur Laufzeit für jeden Netzwerkzugriff dynamisch IPTABLES Regeln anlegt und selbige verwaltet. “-H” meint noch mit auch DNS-Requests mit durchzuschieben. “-v” zeigt einem noch etwas auf der Konsole an. “0/0” meint hier, das alles durchgeroutet werden soll.
Beendet wird das Routing einfach indem man mit STRG+C im Terminal sshuttle beendet. Damit werden sämtliche Regeln “zurückgebaut” und das Programm ordentlich beendet.
Wie man merkt, musste man hier auf den Ziel-Server weder etwas “verbiegen” noch dort zusätzliche Packete installieren. Der Server muss nur per SSH erreichbar sein. Einzig ein zusätzliches Packet ist auf dem Client notwendig, welches auf Standard-Tools zurückgreift.
Übrigens ist ein bekannter BUG, dass sshutte beim beenden noch ein wenig Hilfe beim Aufräumen benötigt.
sudo ipfw list
und danach
sudo ipfw -f flush
Eine gute Anleitung gibts dann auch noch hier
Danke, sshuttle kannte ich noch nicht! Tolle Lösung so ganz ohne Server-invasiv zu sein 😉