Direkter VNC Zugriff mit 3rd-Party-Clients auf Proxmox VE VMs
Standardmäßig kann in PVE entweder via noVNC oder SPICE auf die Konsolen der VMs zugegriffen werden. Normalweise funktioniert dies problemlos.
Trotzdem bin ich auf ein Problem gestoßen, das sicher öfters mal vorkommt. Ich greife auf meine PVE Hosts über das Clientless SSL-VPN meiner Fortigate Firewall zu. Darin habe ich eine HTTPS Proxy Connection zu den Hosts. Obwohl PVE einen non-default Port für HTTPS verwendet, funktioniert das SSL-VPN für die Web-GUI. Möchte ich nun aber über die Web-GUI die Konsole einer VM öffnen, funktioniert dies nicht, weil der Port der Konsolensitzung vom Port der HTTPS Sitzung abweicht.
Daher habe ich versucht einen Workaround dafür zu finden. Da das SSL-VPN auch VNC Verbindungen aufbauen kann, habe ich nach einer Möglichkeit gesucht, die VMs direkt per VNC zu verbinden.
Fündig geworden bin ich im PVE Wiki (siehe Quellen). Über eine Anpassung der VM Konfigurationsdateien lässt sich der Zugriff per VNC über 3rd-Party VNC-Clients realisieren.
VNC Zugriffskonfiguration über die VM Konfigurationsdateien
Die Konfigurationsdateien der VMs (.conf
) befinden sich im Ordner /etc/pve/local/qemu-server/
und sind nach der ID der VMs benannt (also z.B. 101.conf
für die VM mit der ID 101, etc.).
In die passende VM Konfigurationsdatei muss folgender Eintrag hinzugefügt werden:
args: -vnc 0.0.0.0:<Anzeigenummer>
Die Anzeigenummer kann frei gewählt werden, jede Anzeigenummer darf aber natürlich nur einmal in Verwendung sein (pro PVE Host). Der VNC Server hört dann auf Port 5900 plus der Anzeigenummer.
Im folgenden Beispiel ist dies Port 5951, der sich aus dem Standard-Port5900 plus meiner gewählten Anzeigenummer 51 ergibt:
args: -vnc 0.0.0.0:51
Die Funktion bietet noch mehrere Optionen (z.B. Passwort-Schutz, etc.), das habe ich aber hier nicht dokumentiert, weil’s im Quellen-Link nachgeschaut werden kann.
VNC Verbindung zur VM
Wichtig ist zu verstehen, dass die Änderung ja am Proxmox VE Host gemacht wurde. Somit ist auch die VNC Verbindung über den Host zu machen und nicht zur VM:
vnc://<ProxmoxVE-Host-IP>:<Port>
Der Vorteil hierbei: Man braucht an der Firewall für das SSL-VPN nur einen Host freischalten und kann für VNC eine Range anlegen, anstatt jede VM einzeln mit jedem Port freizuschalten.
Alternativ, wenn man im gleichen Netzwerk ist und trotzdem ohne den Umweg auf die Konsole möchte, hier das Beispiel mit der Real VNC Viewer URI:
com.realvnc.vncviewer.connect://<ProxmoxVE-Host-IP>:<Port>
Quellen:
Proxmox VE Wiki