sshuttle - transparenter proxy meets vpn & ssh

Kurt Klinner

Bei meinen aktuellen Tunnelarbeiten bin ich auf das kleine, leichtgewichtige Tool sshuttle gestossen.

sshuttle ist eine Mixture aus transparentem Proxy, VPN und SSH. Due Funktionsweise ist hierbei wie folgt, sobald sshuttle gestartet wird, erzeugt es eine SSH Session zum spezifizierten Remotehost.
Nach erfolgreichem Verbindungsaufbau wird das zugehörige Python Skript auf den entfernten Rechner kopiert und dort gestartet (Voraussetzung ist für die Remoteseite also das Python installiert ist). Auf dem lokalen Rechner werden einige iptables redirect rules angelegt, die die lokalen Sessions "abfangen" und über den Remotehost leiten.

Der große Vorteil von sshuttle ist, dass man kann beliebig viele Ports mit nur einem Befehl transparent über ein Remote-System tunneln kann und es z.B. im Fall von der Verwendung von Firefox keine Addons ala FoxyProxy erfordert.

sshuttle selbst ist schnell installiert, entweder aus dem Distributions-Repos heraus

apt-get install sshuttle

oder direkt als git clone aus dem Repo des Entwicklers

git clone git://github.com/apenwarr/sshuttle

Und los geht es, im konkreten Fall ist auf dem Remoteserver bereits der Publickey des Users hinterlegt, so dass kein Passwort spezifiziert werden muss.
--dns sorgt dafür das auch DNS Requests an den Remoteserver (der mittels -r angegeben wird) weitergeleitet werden.

sshuttle --dns -r <REMOTESERVER> <IP|SUBNET>

Um den kompletten Traffic weiterzuleiten einfach 0/0 als Subnetspezifikation angeben.

Ein weiterer hilfreicher Schalter ist --auto-hosts, der dafür sorgt das auf der remote Seite nach hostnames gescannt wird und diese in die lokale /etc/hosts mit aufgenommen werden.

Weitere Infos finden sich unter https://github.com/apenwarr/sshuttle