Sie sind hier

Netzwerke verbinden (VPN) mit SSH

Vorwort:
Um von z.B. Unterwegs auf sein Heimnetzwerk zuzugreifen, oder um zwei Netzwerke miteinander zu verbinden, setzt man meistens VPN-Software wie openVPN ein. Diese sind eigens für diese Aufgabe geschaffen und dementsprechend optimiert.
Eine weitere Lösung ist der Einsatz des SSH-Protokolls. Wenn man sowieso schon einen SSH-Server am laufen hat, kann man sich die Einrichtung und Freigabe eines weiteren Dienstes sparen. (Diese Methode geht nach meiner persönlichen Meinung einfacher also der ganze Einrichtung mit Zertifizierungsschlüssel)

Ausgehend von Debian-Linux werden ausser dem SSH-Server nur das Paket bridge-utils benötigt.

Vorbereitung SSH-Server:
Einrichtung einer Bridge:
Da wir das sich einwählende Netzwerk-Device direkt mit dem lokalen Netzwerk verbinden wollen, müssen wir eine Bridge erstellen und diese mit der Netzwerkkarte verbinden. Um dieses Dauerhaft zu machen, empfiehlt es sich die Datei /etc/network/interfaces abzuändern (Leider ist dann der Netzwork-Manager nicht möglich, bzw. für dieses Device nicht):

Alte Datei:

...
auto eth0
iface eth0 inet static
 address 192.168.0.2
 gateway 192.168.0.1
 netmask 255.255.255.0
...

wie folgt abändern (Adressen natürlich den eigenen Anforderungen anpassen):

...
auto eth0
iface eth0 inet static
 address 192.168.0.2
 gateway 192.168.0.1
 netmask 255.255.255.0

auto br0
iface br0 inet static
 address 192.168.0.2
 gateway 192.168.0.1
 netmask 255.255.255.0
 bridge_ports eth0
 bridge_fd 0
 bridge_hello 2
 bridge_maxage 12
 bridge_stp off
...

Jetzt muss noch die Verwendung von Tunneln im SSH-Server freigeschaltet werden. Wenn man SSH mit Passwort verwendet, muss dieses in der Datei /etc/ssh/sshd_config durch folgenden Eintrag freigeschaltet werden (Nachteil: Diese Freigabe gilt für ALLE SSH-Nutzer):

PermitTunnel           ethernet

Wenn man SSH mit Private-Public-Key verwendet (was immer zu empfehlen ist, da dieses mindestens so sicher wie die zertifizierten Schlüssel ist), muss stattdessen in der Datei ~/.ssh/authorized_keys des betreffenden Benutzers vor dem Schlüssel folgende Zeichen eingefügt werden:

PermitTunnel=ethernet ssh-rsa.....

Man kann die Sache auch auf die Spitze treiben, indem man für die VPN-Einwahl einen eigenen Schlüssel erstellt und diesen zu dem normale Schlüssel des Benutzers in die Datei ~/.ssh/authorized_keys hinzufügt. Bei diesem Schlüssel kann man dann auch die Startkommandos hinzufügen:

PermitTunnel=ethernet,command="ip link set tap0 up; brctrl addif br0 tap0" ssh-rsa.....

Kompliziert wird es allerdings, wenn mehrere Benutzer sich einwählen wollen. (Prinzipiell ist das möglich, jedoch habe ich noch keinen einfachen Weg gefunden herauszufinden, welches tap-Device der aktuelle Benutzer zugewiesen bekommen hat.)

Einwahl mit dem Client:
Eine besondere Installation/Konfiguration mit dem Client ist nicht direkt notwendig. Die Einwahl erfolgt mit dem Kommando:

ssh -C -T -w any -o Tunnel=ethernet <USER>@<IP/URL> &

und die Verbindung ist aufgebaut. Nun muss nur noch die Schnittstelle konfiguriert und gestartet werden

ip addr add <IP>/<NM> dev tap0
ip link set tap0 up

und die Netzwerkschnittstelle tap0 ist mit dem entfernten Netzwerk verbunden.

(Anmerkung: Diese Anleitung ist noch nicht ganz fertig, also nicht wundern, wenn es nicht auf Anhieb funktioniert)

Weitere Infos: http://bodhizazen.net/Tutorials/VPN-Over-SSH (Beispiel mit tun-Device statt tap-Device)