VPN mit SSH #

Zum Aufbau eines VirtualPrivateNetwork kann auch ssh benutzt werden. Diese Lösung ist einfach und schnell und man benötigt lediglich zwei Linux-Maschinen, auf denen SSH installiert ist.

Vorteil #

Ein Vorteil ist wohl der leichte und schnelle Aufbau der Netzwerkverbindung. Da ich das jedoch noch nicht persönlich ausprobiert habe, rufe ich die Leser dieses Wikis auf, weitergehende Erfahrungen hier einzutragen!

Nachteil #

Dieser Tunnel hat jedoch einen entscheidenden Nachteil: Er setzt auf dem bestehenden SSH-Protokoll auf, das auf einer TCP-Verbindung basiert. Das bedeutet, daß TCP-typisch (und im Gegensatz z.B. zum UDP-Protokoll) sowohl der vollständige Erhalt als auch die Reihenfolge der Pakete bei der Übertragung garantiert wird. Falls also mal ein einzelnes Paket in den Wirren des Internet verloren geht, steht das gesamte VPN so lange, bis die beiden SSH-Programme sich wieder synchronisiert haben. Wenn wir ein verbindungsloses Protokoll (wie GRE beim VPNmitPPTP oder ESP bei VPNmitIPSec) benutzen, bewirkt ein verschwundenes Datenpaket nur, daß genau dieses eine Datenpaket weg ist. Das darüberliegende Protokoll, das das VPN benutzt, kann sich dann wie üblich überlegen, ob es das Paket neu haben will (z.B. bei TCP) oder verwirft (z.B. bei Streamingdaten). Andere Datenpakete und Verbindungen über das VPN werden so lange jedoch nicht gebremst.

Inzwischen habe ich die Seite http://sites.inka.de/sites/bigred/devel/tcp-tcp.html gefunden, auf der noch schöner erklärt ist, warum nicht nur UDP über TCP, sondern viel schlimmer noch TCP über TCP ein grosses Problem ist.

Ein weiterer Nachteil ist, daß man auf Plattformen angewiesen ist, die ssh unterstützen, d.h. ein Aufbau mit einer Windows-Gegenstation könnte problematisch werden. Ggf. würde ich es jedoch mal mit dem freien Windows-SSH-Programm PuTTY versuchen.

Installation #

Da ich bisher noch keine Erfahrungen mit ssh-Tunneln gesammelt habe, bitte ich den geneigten Wiki-Leser, diese nachzutragen...

--ThomasBayen

Beispiel 1 #

folgendes Beispiel erstellt einen Tunnel und funktioniert ohne Probleme
HOME=/home/tuser
HOST=192.168.1.50
GATEWAY=217.18.187.9
# generat a key for authentication
ssh-keygen -t dsa
scp $HOME/.ssh/id.dsa.pub $GATEWAY:$HOME/.ssh/authorized_keys
# open tunneling
ssh -2 -g -N -L 23:$HOST:23 $GATEWAY $* 2>/dev/null &
--Uwe Schimon <uwe@mailpost.de>

Beispiel2 #

Ich habe über VPN ssh-Zugang zu Kleopatra. Caesar befindet sich im selben Netz wie Kleopatra, aber ich kann Caesar nicht direkt erreichen.

entfernten Port auf lokalen Rechner umleiten #

Ich starte ssh auf Caesar:

caesar:~# ssh -R 2222:caesar:22 kleopatra

Das öffnet Port 2222 am Localhost-Interface auf kleopatra. Zugriffe werde auf Port 22 auf Caesar weitergeleitet.

Mit

caesar:~# ssh -R "*:2222:caesar:22" kleopatra
ist es auch möglich Port 2222 auf allen Interfaces von kleopatra zu öffnen, oder anstelle von "*" eine bestimmte IP-Adresse anzugeben. Voraussetzung dazu ist jedoch die Option GatewayPorts clientspecified in der sshd_config von kleopatra. Per Voreinstellung kann nur ans Localhost-Interface gebunden werden.

lokalen Port tunneln #

Alternativ starte ich auf Kleopatra:

kleopatra:~# ssh -L <VPN-IP-Adresse von Kleopatra>:8080:caesar:8080 caesar

Dann kann ich mit http://kleopatra:8080/ auf den Webserver auf Caesar (Port 8080) zugreifen.

--PeterHormanns

Lösung in Java #

Es kann sinnvoll sein, über einen Tunnel in Java nachzudenken, damit man auf jeder Plattform einen identischen Verbindungsaufbau anbieten kann. Läuft ein Client-Programm ausschließlich unter Linux, ist der oben beschriebene Weg sicherlich der sinnvollste.

Auch die Java-Bibliothek JSch erlaubt es neben normalen SSH-Verbindungen auch einen SSH-Tunnel aufzubauen. Hierzu habe ich einen einfach erklärten Artikel mit Beispiel gefunden.

Auf http://linuxmafia.com/ssh/java.html gibt es auch noch eine Menge andere SSH-Implementierungen in Java. JSch habe ich jedoch schonmal benutzt (es wird vom Eclipse Mercurial Plugin benutzt).

Wer nun zum Beispiel einen Tunnel für MySQL aufbauen will, findet im MySQL-Forum eine sehr lange Link-Liste zum Thema. Andererseits ist das Verständnis von Port Forwarding eigentlich recht trivial, wenn der Tunnel einmal steht, also nicht von der Fülle der Texte verwirren lassen...

--ThomasBayen

--PeterHormanns


Tags:  Ssh, VPN

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-7) was last changed on 31-May-2012 10:56 by Peter Hormanns