Remote auf Windows XP in einer Virtualbox zugreifen

Vorweg, das Ziel dieses Artikels ist es für mich akzeptable Möglichkeiten auf eine entfernte Virtualbox auf einem Debian Host mit Windows XP als Gast, zu zugreifen zu finden. Als Server dient mir ein headless Entwicklungsserver mit Debian GNU/Linux Lenny (Stand Sebtember 2008) als Betriebssystem. Von außen bietet der Server lediglich SSH Zugang. Somit müssen alle nötigen Dienste über SSH getunnelt werden. Als Client soll ebenso Debian GNU/Linux, jetzt aber mit Geschmacksrichtung Unstable, dienen. Weiters sollen in der virtuellen Maschine keine Serverdienste angeboten werden, sondern lediglich Anwendungen für die es keinen adäquaten Ersatz in der Linuxwelt gibt betrieben werden.

In diesem Artikel wird nur der entfernte Zugang zum Gastbetriebssystem näher betrachtet. Das erfolgreiche Erstellen einer Virtuellen Maschine und das Installieren eines Betriebsystems darin wird hier nicht behandelt.

Um die grafische Oberfläche des Gastes, Windows XP Pro (Servicepack 3) zu erreichen führen drei Wege zum Ziel, diese sollen jetzt näher betrachtet werden.

Vergleich von VNC, RDP und ssh X-forwarding

Unter dem Aspekt der Sicherheit betrachtet sind für mich alle Lösungen gleichwertig, nachdem in meiner Konfiguration immer nur ein SSH Server von Außen erreichbar ist und alle Varianten über SSH getunnelt werden müssen. So unterscheiden sich die Lösungen lediglich bei der Benutzerfreundlichkeit, Geschwindigkeit und der Ausfallsicherheit bei Netzunterbrechungen.

Versionen der verwendeten Software

user@host % aptitude search "~i (vnc|xorg|virtualbox)" -F "%p %40v"
tightvncserver                               1.3.9-4
virtualbox-ose                               1.6.2-dfsg-4
virtualbox-ose-modules-2.6.26-1-amd64        2.6.26+1.6.2-dfsg-3
xserver-xorg                                 1:7.3+15
xserver-xorg-core                            2:1.4.2-5
xserver-xorg-input-kbd                       1:1.3.1-1
xserver-xorg-input-mouse                     1:1.3.0-1
xserver-xorg-video-ati                       1:6.9.0-1+lenny2
xserver-xorg-video-mach64                    6.8.0-1
xserver-xorg-video-r128                      6.8.0-1
xserver-xorg-video-radeon                    1:6.9.0-1+lenny2
xserver-xorg-video-vesa                      1:1.3.0-4
xserver-xorg-video-vga                       1:4.1.0-8
user@host % uname -a
Linux tracer 2.6.26-1-amd64 #1 SMP Thu Aug 28 11:13:42 UTC 2008 x86_64 GNU/Linux
user@host %

SSH X-forwarding

Viel gibt es dazu nicht zu sagen. SSH mit X-forwarding ist die einfachste Variante. Ich habe sie zum Aufsetzen der VM benutzt.

Vorteile SSH-X

  • einfach ssh user@server -X und in der Shell dann virtualbox aufrufen reicht, der Rest kann dann über die GUI erledigt werden.
  • keine Vorarbeiten nötig, es sind lediglich X und sshd nötig.
  • Virtualbox kann alle Features wie seamless Desktop, das Einbetten der Benutzerschnettstelle des Gasts in den Desktop des Hosts, direkt nutzen. [Strg] + [L] und Seamless ist aktiviert.

Nachteile SSH-X

  • Ein Abbruch der Verbindung, aus welchen Gründen auch immer, kommt einem kill <PID of Virtualbox> gleich.
  • extrem hoher Netzwerkverkehr
  • kein "detachen" der VM möglich

Auf Grund der Nachteile von SSH X-forwarding scheidet diese Variante für mich für den dauerhaften Betrieb aus, für das schnelle Aufsetzen einer VM, so man nicht die Commandline hiezu nutzen möchte, ist diese, auf Grund der Einfachheit, durchaus eine gangbare Lösung.

VNC - tightvncserver/xtightvncviewer

Der Vncserver, in meinem Fall tightvncserver, liefert einen Virtuellen Desktop der einfach mit einem Vncviewer, in meinem Fall xtightvncviewer, betrachte werden kann.

root@host # aptitude install tightvncserver
user@host % tightvncserver

You will require a password to access your desktops.

Password:
Warning: password truncated to the length of 8.
Verify:
Would you like to enter a view-only password (y/n)? n

New 'X' desktop is host:1

Starting applications specified in /home/user/.vnc/xstartup
Log file is /home/user/.vnc/host:1.log

user@host % netstat -tap | grep vnc

tcp        0      0 *:5901                  *:*                     LISTEN      5596/Xtightvnc
tcp        0      0 *:x11-1                 *:*                     LISTEN      5596/Xtightvnc

Beim ersten Aufruf von tightvncserver wird man noch nach einem Passwort gefragt, das für die kommenden Sitzungen zur Anmeldung nötig ist. In der Datei /home/user/.vnc/xstartup kann man dann die Applikationen eintragen die auf dem virtuellen Xserver gestartet werden sollen, in meinem Fall fluxbox, xterm und virtualbox.

Steht mit

user@client % ssh -L 5901:localhost:5901 user@host

ein Tunnel zum Host, kann dann vom Client aus einfach per

user@client % xtightvncviewer localhost:5901

der virtuelle Xserver nach Eingabe des Passwortes auf den Client geholt werden oder man nutzt die -via Option des xtightvncviewers und erstellt den Tunnel und verbindet sich zum Host gleich in einem Befehl:

user@client % xtightvncviewer -via host localhost:5901

Oder den virtuellen Desktop vergrößern und den vncviewer optimieren (erfordert aber Rechenleistung)

user@host % tightvncserver -depth 24 -geometry 1400x1050

user@client % xtightvncviewer -depth 24 -nojpeg -compresslevel 9 -via host localhost:5901

Das weitere Vorgehen kann dann gleich wie mit einer lokalen Virtuellen Maschine erfolgen.

Vorteile VNC - tightvnc

  • gegenüber reinem SSH weniger Netzwerkverkehr
  • auch andere Applikationen mit GUI können leicht auf den Server ausgelagert werden.
  • "detachen" des GUI möglich
  • Tunnel kann automisch gebaut werden.

Nachteile VNC - tightvnc

  • leider scheint das Keyboardlayout nicht richtig durch VNC bis in die VM mit Windows XP durchgereicht zu werden. So stimmt das Layout bei nativen Anwendungen am Server, aber bei Windows XP kommen nur verstümmelte Zeichen an. (Server und Client deutsches UTF8)
  • Seamless beschränkt sich auf den Virtuellen Xserver am Server und erstreckt sich nicht auf den Xserver des Clients.

Bestünden nicht die Probleme mit dem Tastaturlayout, wäre dies die von mir favorisierte Lösung. Aber leider beinhaltet der letzte Satz für meinen Geschmack etwas zuviel Konjunktiv. ;)

RDP - Virtualbox/XP RDP - rdesktop

Um per RDP und somit rdesktop auf Windows XP in der Virtualbox zugreifen zu können, müssen einerseits in Windows das Remote Managemant für die nötigen User aktiviert sein anderseits eine Netzwerkstelle der Virtuellen Maschine im bridged Modus betrieben werden oder der NAT Modus wie folgt konfiguriert werden.

user@host % VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/rd/Protocol" TCP
user@host % VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/rd/GuestPort" 3389
user@host % VBoxManage setextradata "Windows XP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/rd/HostPort" 6666

Zum Starten von XP reicht dann

user@host % vboxheadless -startvm "Windows XP"

und zum Beenden:

user@host % VBoxManage controlvm "Windows XP" poweroff

Da dies der weniger aufwendige Weg ist um Zugriff auf XP zubekommen und ich sonst keine Dienst aus der VM anbieten will gehe ich nicht weiter auf die Konfiguration des bridged Modus ein. Um jetzt vom Client wieder auf die VM zugreifen zu können (RDP ist in Windows aktiviert!) muß in meinem Fall wieder ein SSH Tunnel aufgebeut werden nur jetzt auf Port 6666.

user@client % ssh -L 6666:localhost:6666 user@host

Weiters die Verbindung per rdesktop durch den Tunnel aufgebaut werden.

user@client % rdesktop localhost:6666

Vorteile RDP - rdesktop

  • wie Tightvnc schnelle Verbindung
  • "detachen" möglich
  • Korrektes Tastaturlayout, im Gegensatz zu VNC, auch in der VM mit Windows XP.
  • kein X oder VNC nötig
  • rdesktop nur am Client nötig

Nachteil RDP - rdesktop

  • die VM kann nur über die Kommandozeile gesteuert werden. (betrifft nicht Windows XP in der VM, bis auf das Herunterfahren von XP)

SeamlessRDP ist durch Installation von Erweiterungen in Windows möglich (siehe man rdesktop oder http://www.cendio.com/seamlessrdp/).

Resumee

Tightvnc bietet sehr viele Einstellungsmöglichkeiten und kann mit einem Befehl schnell über ssh angesprochen werden, jedoch bereiten der Kombination Tightvnc, Virtualbox und Windows XP Pro (Servicepack 3) scheinbar Tastaturlayouts, zumindest meines, Kopfschmerzen. Diese lassen sich leicht durch Nutzung von rdesktop umgehen. Ob man jetzt seamlessRDP vom Client aus, oder die von mir favorisierte Lösung, vom Client xtightvncviewer zum Server und rdesktop vom Server in die Virtuelle Maschine nutzt sei jedem selbst überlassen. Die zweite Lösung bietet aber die Möglichkeit auch native grafische Werkzeuge zB zur HDR Bildbearbeitung per GUI auf dem Server zu bedienen und damit nicht den Client zu belasten, diese wie auch XP zu "detachen" und schlußendlich unter allen von mir benutzten Betriebsystemen, GNU Linux und Mac OS, sollte es einmal nötig sein, schnell Zugriff auf eine saubere Windowsinstallation zu haben. Der einzige Nachteil der Installation in der Virtualbox ist der Verlust von OpenGL und DirectX Beschleunigung, jedoch ergeben sich ungeahnte Vorteile. Zum Beispiel, zur Zeit noch ungetestet, könnte man die Rambegrenzung des 32Bit Windows umgehen indem man der VM noch eine Festplatte, die in Wirklichkeit eine Ramdisk ist, zur Verfügung stellt und die Auslagerungsdatei von XP auf diese legt. Genügend Ram vorausgesetzt.