Als richtiges VPN lässt sich SSH natürlich nicht nutzen, allerdings kann mit entsprechenden Tunneln durchaus auf einen Serverdienst hinter einer Firewall zugegriffen werden. Benötigt wird dazu ein Server im Internet, ein Rechner hinter einer Firewall, auf den aus dem Internet zugegriffen werden soll und ein Computer in einem entfernten Netzwerk, der auf den Server hinter der Firewall zugreifen soll.
Nun zunächst einmal in der Theorie. Steht ein Server hinter einer Firewall ist der Zugriff aus dem Internet erstmal natürlich nicht möglich. Dies kann man oft noch mit einer Portfreigabe in der Firewall seines (Heim)routers beheben. Dazu kommt aber, dass man als Privatkunde bei kaum einem Internetanbieter eine statische IP Adresse erhält. Somit benötigt man auch noch einen DynDNS Dienst, der nach meiner Erfahrung mal weniger gut und mal schlechter funktioniert. Über das Kabelnetz ist eine Portfreigabe zudem oft überhaupt nicht möglich, weil Providern wie Unitymedia die IPv4 Adressen ausgehen, werden IP Adressen mittlerweile oft geteilt. Auch, wenn man zu den Glücklichen mit einer IPv6 Adresse gehört, heißt das dann auch nocht nicht, dass man einfach darauf zugreifen kann. Dazu müsste der Computer im entfernten Netz schließlich über IPv6 verfügen oder einen entsprechenden Adapter nutzen. Auch, wenn dank Apple Adapter wieder zum guten Ton gehören, möchte man sich möglicherweise kein Pseudointerface erzeugen. Immerhin stünde die Verwendung von Teredo oder ähnlichem wieder im Konflikt mit dem Ziel Datenschutz.
Einfacher ist es dagegen den Traffic über einen zusätlichen Server zu schleifen. Das selbe Prinzip wird auch bei Programmen wie TeamViewer oder Hamachi angewendet. Anstatt eine Portfreigabe zu erzeugen, verbinden sich alle Teilnehmer zu einem Server des jeweiligen Anbieters. Da die Firewall ausgehende Verbindungen im Gegensatz zu eingehenden Verbindungen zulässt, können die Verbindungen auf dem Server Daten miteinander austauschen. Das kann man natürlich machen, aber der Datenschutz ist dann dahin. Dazu kommt, dass die Einrichtung eines TeamViewer VPN auf einem Server ohne X wohl eher nicht möglich ist.
Wer aber einen SSH Server im WWW stehen hat, z.B. einen Uberspace oder einen vServer, der kann einfach zwei SSH Tunnel erzeugen und so den Traffic an der Firewall vorbeischleusen. Im Beispiel möchte ich den SSH Server meines Heimservers durch den SSH Servers meines Uberspace tunneln, um einen Zugriff auf meine Dateien über SFTP aus der Schule zu erhalten.
Zunächst wird auf dem Server hinter der Firewall der folgende Befehl ausgeführt. Damit wird der lokale Port 22, also der SSH Server, über einen Tunnel an Port 9000 auf den Server im Internet weitergeleitet. Da wir auch per SSH auf diesen Port zugreifen, muss Port 9000 nicht per Portfreigabe im Internet stehen.
ssh -R 9000:localhost:22 username@server-im-www
Anschließend wird eine Verbindung von einem anderen Computer irgendwo im Internet zu Port 9000 aufgebaut. Lokal wird anschließend der Port 9191 geöffnet, zu dem wir nun eine SSH Verbindung aufbauen können. Somit werden die Daten nun über einen Server an unseren Computer getunnelt, egal wo sich der Computer befindet.
ssh username@server-im-www -L 9191:127.0.0.1:9000
Unter Sicherheitsaspekten macht es natürlich nicht so viel Sinn eine SSH Verbindung durch einen SSH Tunnel zu übertragen. Schließlich ist die SSH Verbindung bereits verschlüsselt. Dieses Vorgehen hat allerdings den Vorteil, dass der SSH Server meines Homeservers nicht direkt im Internet steht. Zugriffe von Außen wegen schlechter Konfiguration werden somit wirksam vermieden. Zudem können natürlich auch andere Serverdienste getunnelt werden, die möglicherweise unverschlüsselt sind. So wäre es auch denkbar CIFS oder NFS sicher über das Internet zu übertragen.
Es ist sogar möglich andere Server aus dem Netzwerk zu tunneln. Hat man also eins dieser “hochmodernen” und “sicheren” IoT Geräte, die natürlich stets eine “hochgradig sichere Verschlüsselung” einsetzen und auf dem neuesten Stand der Technik sind, kann man auch diese sicher von Außen steuern. Als Beispiel sei eine IP Kamera erwähnt, deren unverschlüsseltes Webinterface sicher aus dem Internet erreichbar sein soll:
ssh -R 9000:ipcam:80 username@server-im-www
Nach dem Verbindungsaufbau wie oben beschrieben ist nun ein normaler Zugriff über den Webbrowser auf 127.0.0.1:9191 möglich.