# KVM Hypervisor mit Qemu und Windows 11 Gast mit verschlüsseltem Plattenimage auf einem Debian GNU Linux host, und dabei einen virtuellen Folders via RDP Session nutzen
Zunächst musst du die Windows 11 Installations-CD als ISO-Datei von der offiziellen Microsoft Webseite herunterladen. Du findest diese hier: https://www.microsoft.com/de-de/software-download/windows11
Auf der Microsoft-Webseite sieht dies so aus:
Speichere die ISO-Datei als Win11_German_x64.iso.
Auf deinem debian installierst du nun qemu als Hypervisor. Zudem werden die kleinen Pakete rdesktop und xvncviewer gebraucht. Dann laden wir das Kernel-Modul kvm, damit die Virtualisierung Hardwarebeschleunigung durch deine CPU erfährt.
apt-get update
# QEMU installieren
apt-get install qemu-system qemu-kvm
# RDP Client und VNC Viewer installieren
apt-get install rdesktop xtightvncviewer
# kvm modul laden
modprobe kvm
Wir werden nun im nachfolgenden Script ein neues, leeres verschlüsseltes LUKS Disk Image in der Datei "win11.luks.img" erstellen. Dabei erzeugen wir eine Zufalls-Passphrase für das verschlüsselte Image in der Datei "win11.luks.key". Beim Erzeugen der Passphrase vermeiden wir verwechselbare Zeichen wie Null, Oh, 1 und großes I etc.
Die Imagedatei wird als Sparse-File erstellt, belegt also nicht von Anfang an 32 GB Speicherplatz, sondern wächst mit. Allerdings wird der Speicherplatz alloziert! Das bedeutet, dass er fix belegt wir dafür. (Siehe du -h vs. ls -lh)
So, du brauchst nun nur noch dieses Script 1:1 ausführen:
#!/bin/sh
isofile="Win11_German_x64.iso"
keyfile="win11.luks.key"
imagefile="win11.luks.img"
imagesize="32G"
# luks keyfile erzeugen, wenn nicht existent
test ! -f "$keyfile" && \
umask 077 && tr -dc "0-9a-zA-Z" < /dev/urandom | \
tr -d "01IloO" | head -c 32 > "$keyfile"
# imagefile erzeugen, wenn noch nicht existent
test ! -f "$imagefile" && \
qemu-img create -f luks \
--object secret,id=sec0,file="$keyfile" \
-o key-secret=sec0 "$imagefile" "$imagesize"
# qemu im hintergrund starten
test -f "$imagefile" && \
qemu-system-x86_64 -enable-kvm \
-cdrom "$isofile" \
-cpu core2duo -smp cores=2 -m 2048 \
-object secret,id=sec0,file="$keyfile" \
-device ahci,id=sata \
-drive if=none,id=drive0,driver=luks,key-secret=sec0,file="$imagefile" \
-device ide-drive,bus=sata.0,drive=drive0 \
-sandbox on -k de -usb -device usb-tablet -monitor /dev/null \
-netdev user,id=n0,restrict=y,hostfwd=tcp::3389-:3389 \
-device rtl8139,netdev=n0 \
-vga qxl -vnc 127.0.0.1:4 -daemonize
Beachte: Wir starten QEMU mit einem restricted Network (restrict=y), damit das Windows11 als unser Gast nicht ins Internet oder zu anderen Hosts kommunizieren kann. Zudem verwenden wir -daemonize um es als Hintergrundprozess zu starten.
Nun mittels VNC Viewer an die QEMU Session zur Grafikausgabe andocken
xvncviewer :4
Wenn die VNC Session terminiert (Das passiert z.B. bei Auflösungs-Wechseln durch den Gast), kann man sie einfach nochmal aufbauen. Die Emulation läuft durch QEMU ja im Hintergrund weiter. Du kannst also jederzeit wieder mit xvncviewer :4 die Session aufbauen und auch einfach beenden.
Nun Die Windows Installation vollständig durchführen!
Wichtig: Windows11 setzt ja TPM 2.0 und Secure Boot voraus.. Haben wir hier aber derzeit nicht in der Emulation.
Daher wird dir im Installer nun diese Meldung angezeigt werden:
"Windows 11 kann auf diesem PC nicht ausgeführt werden." "Dieser PC erfüllt nicht die Mindestanforderungen zum Installieren dieser Windows-Version."
Wir schalten daher diese Prüfung ab, um Windows 11 auch ohne TPM installieren zu können.
Daher einfach die Tastenkombination Shift-F10 drücken, um eine Kommandozeile zu öffnen.
Darin dann regedit.exe ausführen. Dann hierhin navigieren: Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid
Dann einen Ordner höher Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup
einen neuen Ordner-Schlüssel namens LabConfig anlegen und darin drei neue DWORD-32 Schlüssel anlegen namens:
Deren Werte alle auf 1 setzen, also 0x00000001.
Dann regedit schließen. Im Installer Dialog einfach links oben den Pfeil "zurück" klicken
Dann wieder auf Weiter und es tut!
Danach in die frische Installation booten, und in die Systemsteuerung "Einstellung" wechseln
In der Systemsteuerung RDP aktivieren, sowie für den Benutzer freigeben.
Dabei den Schalter auf "Ein" umstellen und mit dem Pfeil nach unten den Dialog erweitern.
Entferne(!) dort das Häkchen bei "Computer müssen für Verbindungen die Authentifizierung auf Netzwerkebene verwenden".
Den Sicherheitsdialog musst Du dabei mit "Trotzdem fortsetzen" bestätigen.
Das wars schon. Wenn du nun unter Linux rdesktop zum Verbindungsaufbau benutzt..
rdesktop -k de -g 800x600 -x -z 127.0.0.1:3389
... siehst du die Loginmaske:
Die VNC Session kann nun geschlossen werden, stattdessen die RDP Session verwenden und den gewünschten Shared-Folder mit durchgeben. Wir legen erst mal Demodaten auf deinem debian an:
# in homedir wechseln
cd ~
# dort den ordner transfer erstellen
mkdir transfer
# demodaten darin anlegen
date > transfer/demo.txt
echo erbsen >> transfer/demo.txt
nun einfach immer wie folgt die RDP-Session aufbauen, wenn du dein neues Win10 nutzen willst. Die Auflösung kannst du dabei hier übergeben. Wir wählen 800x600 Pixel und deutsche Tastatur, sowie eben den shared Folder transfer. Beim Sitzungsaufbau kannst du beliebige weitere Shared Folder mit über die RDP Session durchreichen.
# RDP Session aufbauen und den Ordner Transfer als Shared Folder einhängen
rdesktop -r disk:data=./transfer/ -k de -g 800x600 -x -z 127.0.0.1:3389
Damit kannst du nun unter Windows über den RDP Share "data" auf den Shared Folder zugreifen.
Wenn du nicht jedes Mal dein Kennwort beim RDP Aufbau eingeben willst, kannst du auch einfach das hier nutzen:
rdesktop -u Benutzername -p HierPasswort -r disk:data=./transfer/ -k de -g 800x600 -x -z 127.0.0.1:3389 -r sound:local:alsa
Siehe dir dazu auch das Manual von rdesktop an. Du kannst das Windows Account Passwort z.B. auch verschlüsselt speichern und dann via stdin reinpipen. Dieses Verfahren ist zu empfehlen, da man Kennwörter nicht als Parameter übergeben sollte, da diese in der prozessliste sichtbar sind.
gpg -d < mein_kennwortfile | rdesktop -u Benutzername -p - -r disk:data=./transfer/ -k de -g 800x600 -x -z 127.0.0.1:3389 -r sound:local:alsa
Eine Alternative zu rdesktop ist xfreerdp, das auch 3D Beschleunigung unterstützt. Sowohl das leichtgewichtige rdesktop, als auch das schwerere xfreerdp bieten dir zudem die Möglichkeit des Copy&Paste zwischen deinem Gast und deinem Host via Zwischenablage. Das ist auch sehr praktisch: Siehe im Manual zu rdesktop -r clipboard:off wenn du das abschalten willst.
Ergänzend: RDP bietet dir auch die Möglichkeit, Druckerport, Sound oder Kartenleser mit durchzureichen.
Wenn du noch weitere Features möchtest, auch Videobeschleunigung und den neusten heißen Scheiß, dann kannst du statt rdesktop auch xfreerdp verwenden:
apt-get install freerdp2-x11
xfreerdp /v:127.0.0.1 /u:BENUTZERNAME /p:PASSWORT /w:800 /h:600 /drive:data,./transfer /sound:sys:alsa +fonts
Dieser RDP Client ist damit deutlich schneller, jedoch auch schwergewichtiger. Auch das Durchreichen beliebiger USB Geräte ist möglich.