Aus Linux-Magazin 03/2018

Aus dem Alltag eines Sysadmin: Sshuttle

Wer sich beim TCP-Tunnelbau weder mit Versionskonflikten zwischen den beteiligten Open-VPN-Versionen noch mit Congestion-Control-Problemen auseinandersetzen will, fährt mit der Tool-Empfehlung von Sysadmin-Kolumnist Charly Kühnast ebenso gut wie bequem.

In nicht vertrauenswürdigen Netzwerken lasse ich meinen Laptop per Open VPN tunneln. Es gibt durchaus Alternativen, eine besonders simple möchte ich vorstellen: Sshuttle [1]. Dass das Tool über SSH arbeitet, verrät bereits der Name. Als Endpunkt des Tunnels dient mir, wie auch bei Open VPN, ein angemieteter Rootserver. Sshuttle ist sehr genügsam: Es erwartet auf dem Server lediglich einen SSH-Zugang mit Benutzerrechten, Rootrechte sind nicht nötig. Außerdem muss auf dem Server Python installiert sein – das war’s schon.

Das liegt daran, dass Sshuttle den benötigten Python-Code nach dem Aufbau der SSH-Verbindung auf den Server lädt und dort ausführt. So vermeidet es zudem Versionskonflikte zwischen Server- und Client-Software. Um den Tunnel aufzubauen, reicht das Kommando:

sudo sshuttle -r User@Server:Port 0/0

Die Portnummer lasse ich weg, wenn es sich um den SSH-Standardport 22 handelt. Die »0/0« bedeutet, dass Linux alle Verbindungen in den Tunnel lenken soll. Das bringt aber mit sich, dass ich dann andere Geräte im lokalen Netz nicht mehr erreiche. Um das lokale LAN weiterhin sichtbar zu halten, definiere ich es mit dem Parameter »-x« als Ausnahme:

sudo sshuttle -r --dns User@Server 0/0 -x 192.168.2.0/24

Hier ist »–dns« mit dabei. Damit laufen DNS-Abfragen auch durch den Tunnel, was per se nicht geschieht. Das ist Sshuttle’s Achillesferse: Es transportiert nur TCP; ICMP und UDP passen, abgesehen von DNS, nicht durch den Tunnel.

Staumeldung

Das TCP-Tunneling löst es dafür sehr elegant. Während andere VPN-Techniken auf Paketebene arbeiten und dafür die TUN-TAP-Devices bemühen, arbeitet Sshuttle auf Session-Ebene. Es baut den TCP-Strom lokal zusammen, multiplext ihn Status-erhaltend über die SSH-Verbindung und zerlegt es auf der Zielseite wieder in Pakete.

Dies vermeidet das TCP-über-TCP-Problem, das beispielsweise Open VPN plagt: TCP hat eine Überlast-Steuerung (Congestion Control, Staukontrolle). Anhand von Paketverlusten ermittelt das Protokoll eine Performancegrenze. Wer TCP über TCP tunnelt, verliert für die innere Verbindung die Staukontrolle, was zu bizarren Fehlerbildern führen kann. Sshuttle ist gegen das Problem immun.

Wird doch eine Fehlersuche nötig, helfen Verbose-Parameter. Abbildung 1 zeigt einen Verbindungsaufbau mit »-v«. Mit »-vv« ist Sshuttle brutal geschwätzig, weshalb ich zum Umleiten in eine Datei rate, die man in Ruhe auswerten kann. Mein Fazit: Sshuttle ist ein exzellentes und einfaches VPN für Leute, die auf UDP und ICMP verzichten können.

Abbildung 1: Sshuttle baut ein VPN zu einem Server auf. Wegen »-v« fallen die Meldungen reichhaltiger aus als ohne.

Abbildung 1: Sshuttle baut ein VPN zu einem Server auf. Wegen »-v« fallen die Meldungen reichhaltiger aus als ohne.

Der Autor

Charly Kühnast administriert Unix-Systeme im Rechenzentrum Niederrhein. Zu seinen Aufgaben gehören Sicherheit und Verfügbarkeit der Firewalls und der DMZ.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben