Mit einem VNC Server hinter einem Gateway verbinden

Diese Anleitung ist schon etwas speziell, aber alles selbst rauszufinden kostet schon einiges an Zeit. Betreibt man einen VNC Server auf einer VM, die selbst nicht online ist, sondern hinter einem Gateway liegt, ist ein Verbindungsaufbau von einem beliebigen Laptop oder Rechner mit einem VNC Viewer nicht möglich. Der VNC Viewer ist nur in der Lage eine Verbindung zum Gateway herzustellen. Die theoretische Lösung liegt auf der Hand. Der Gateway muss die Verbindung weiterleiten an den richtigen Server im lokalen Netz, der den VNC Server betreibt.

So hat's funktioniert:

Der Gateway hat i.d.R. zwei IP-Adressen. Eine externe, die über das Internet erreichbar ist (z.B. 213.244.18.34), und eine interne, weil er ebenfalls Teil des internen Netzes ist (z.B. 10.10.10.11). D.h. die Weiterleitung muss über zwei Hops erfolgen. Die Verbindung mit der externen IP des Gateways muss weitergeleitet werden auf die interne IP des Gateways und diese Verbindung muss dann weitergeleitet werden auf die IP der VM, die den VNC Server betreibt (z.B. 10.10.10.12) mit dem Port auf den der VNC Server lauscht (z.B. 5901)

Für den ersten Schritt gibt es unter OS X ein nützliches Tool namens Coccinellida. Unter Windows benutzt man ganz einfach Putty. Beide Tools können SSH Tunnel konfigurieren. Wir konfigurieren also einen Tunnel mittels der externen IP des Gateways (213.244.18.34). Einfach den root User und das root Passwort und die externe IP des Gateways (213.244.18.34) als SSH Tunnel eintragen. Dann erstellen wir eine Regel für den Tunnel, so dass ein Aufruf (vom Laptop aus) der Adresse localhost:15900 weitergeleitet wird auf die interne IP des Gateways und den selben Port (10.10.10.11:15900). Wenn wir jetzt localhost:15900 von unserem Laptop aufrufen, dann stellt der Gateway eine Verbindung mit seiner lokalen IP 10.10.10.11 und dem Port 15900 her. 

Jetzt müssen wir mit folgendem Befehl auf dem Gateway einstellen, dass ein Aufruf von 10.10.10.11:15900 weitergeleitet wird an die Adresse der VM mit dem VNC Server und dem Port auf den der VNC Server lauscht:

ssh -fNg -L 10.10.10.11:15900:10.10.10.12:5901 root@10.10.10.12

Je nach Server-Konfiguration muss jetzt das Root-Passwort der VM 10.10.10.12 eingegeben werden. Danach steht die Weiterleitung und vom Laptop aus kann über den VNC Viewer Client die Adresse localhost:15900 für eine VNC Verbindung aufgerufen werden.