SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor · Aktualisiert 2026-08-07

VPS mit verschachtelter Virtualisierung: Proxmox nutzen?

Viele VPS-Anbieter verbergen das vmx-Flag. Pruefen Sie es mit kvm-ok in einer Minute und finden Sie heraus, ob KVM oder Proxmox-Gaeste laufen, inklusive Fehlermeldungen.

Die kurze Antwort

Verschachtelte Virtualisierung bedeutet, dass ein Hypervisor innerhalb einer virtuellen Maschine läuft: Ihr VPS ist bereits ein Gast, und Sie möchten darin eigene Gäste betreiben. Das funktioniert nur, wenn der Hypervisor Ihres Providers die Virtualisierungserweiterungen der CPU gezielt für Ihre Instanz bereitstellt. Prüfen Sie /proc/cpuinfo auf das Flag vmx (Intel) oder svm (AMD). Wenn keines der beiden Flags angezeigt wird, lässt sich das innerhalb des VPS nicht beheben.

Zunächst eine wichtige Abgrenzung: Docker benötigt das alles nicht. Container verwenden den Kernel Ihres VPS gemeinsam und greifen nie auf /dev/kvm zu. Wenn Sie eigentlich mehrere Dienste in Containern auf Ihrem Server betreiben möchten, ist bereits alles Notwendige vorhanden. Verschachtelte Virtualisierung ist relevant, wenn Sie einen zweiten Kernel, eine Proxmox-Testumgebung, einen Windows-Gast, Firecracker-MicroVMs, einen Android-Emulator, eine Kubernetes-Testumgebung mit echten virtuellen Maschinen oder CI-Runner benötigen, die VM-Images booten.

Was wird tatsächlich verschachtelt?

Drei Ebenen:

  • L0, der Hypervisor des Providers auf der physischen Hardware. Sie haben keinen Zugriff darauf.
  • L1, Ihr VPS. Für L0 ist dies nur ein Gast.
  • L2, die VM, die Sie innerhalb Ihres VPS ausführen möchten.

Hardwarevirtualisierung verwendet VT-x (das vmx-Flag) und EPT auf Intel sowie AMD-V / SVM (svm) und RVI/NPT auf AMD. Ein Hypervisor verwendet diese Instruktionen, um den Gastmodus zu aktivieren und der CPU das gleichzeitige Durchlaufen von zwei Seitentabellen zu ermöglichen.

Keine dieser Technologien wurde für eine erneute Verschachtelung entwickelt. Deshalb wird die Verschachtelung emuliert: Wenn L1 eine VMX-Instruktion ausführt, wird die Ausführung an L0 übergeben. L0 verwaltet dann stellvertretend für L1 die Shadow-Strukturen für L2. KVM erledigt dies zuverlässig. Allerdings muss L0 bei jedem Exit zusätzliche Arbeit ausführen. Deshalb muss der Provider die Funktion ausdrücklich aktivieren.

Für eine beschleunigte L2 müssen beide Bedingungen erfüllt sein:

  1. Das KVM-Modul von L0 ist mit nested=1 geladen.
  2. L0 stellt Ihrem VPS ein CPU-Modell bereit, das dieses Flag führt: <cpu mode='host-passthrough'/> in libvirt, cpu: host in Proxmox und -cpu host bei direktem Einsatz von QEMU. Ein generisches emuliertes Modell (qemu64, kvm64) blendet vmx aus, selbst wenn die Verschachtelung global aktiviert ist.

VPS in einer Minute prüfen

# 1. Are you in a VM, and under what?
systemd-detect-virt          # kvm, vmware, xen, microsoft, or "none" on metal

# 2. Does the CPU expose the extensions to you?
grep -o -E 'vmx|svm' /proc/cpuinfo | sort -u
lscpu | grep -i -E 'virtual|hypervisor'

# 3. The definitive check
sudo apt update && sudo apt install -y cpu-checker
kvm-ok

# 4. The device node the whole stack depends on
ls -l /dev/kvm

Eine nutzbare Instanz gibt vmx oder svm aus, kvm-ok lautet KVM acceleration can be used, und /dev/kvm ist mit dem Modus root:kvm 660 vorhanden. Ist das Flag vorhanden, aber der Gerätedateiknoten fehlt, laden Sie das Modul manuell und lesen Sie das Kernel-Log:

sudo modprobe kvm_intel     # or kvm_amd
sudo dmesg | tail -n 20

Eine Datei wird häufig zitiert und oft falsch verstanden:

cat /sys/module/kvm_intel/parameters/nested   # Y or N

In Ihrem VPS ist das die Einstellung Ihres KVM-Moduls. Sie legt fest, ob ein L2-Gast eine dritte Ebene verschachteln könnte. Sie sagt nichts darüber aus, ob L0 die Verschachtelung für Sie aktiviert hat. /proc/cpuinfo und kvm-ok geben darüber Auskunft. Der Parameter nested ist der Regler, den Sie auf einer Maschine setzen, die Ihnen vollständig gehört:

echo 'options kvm_intel nested=1' | sudo tee /etc/modprobe.d/kvm-nested.conf
sudo modprobe -r kvm_intel && sudo modprobe kvm_intel

Das Entfernen des Moduls wird abgelehnt, solange eine VM läuft. Fahren Sie die Gäste daher zuerst herunter.

Warum die meisten VPS-Hoster die Funktion deaktiviert lassen

  • Live-Migration. Wenn Ihnen vmx bereitgestellt wird, wird ein CPU-Modell mit diesem Flag offengelegt. Eine Gast-VM, die von diesen CPU-Funktionen abhängt, kann nicht sicher auf eine Maschine migriert werden, deren CPU diese Funktionen nicht unterstützt. Ein Hoster, der Knoten durch die Migration von Kunden-VMs leert, gibt diese Möglichkeit auf, sobald er verschachtelte Virtualisierung aktiviert.
  • Angriffsfläche. Die Pfade für verschachteltes VMX/SVM gehören zu den komplexesten Teilen der Virtualisierungsschicht des Kernels. Die CVE-Historie dieser Pfade ist entsprechend umfangreich.
  • L0 muss nicht KVM sein. Wenn systemd-detect-virt vmware, xen oder microsoft ausgibt, gelten die Regeln des jeweiligen Virtualisierungs-Stacks und nicht die von KVM.

Wird auf Ihrer Instanz kein Flag angezeigt, fragen Sie den Support. Manche Anbieter aktivieren die Funktion pro VM. Alternativ wählen Sie einen Tarif, der verschachtelte Virtualisierung ausdrücklich unterstützt, oder wechseln Sie auf einen dedizierten Server. Im weiteren Verlauf wird vorausgesetzt, dass Sie auf einer Maschine mit diesem Flag über root-Zugriff verfügen.

L2-Gast mit libvirt ausführen

sudo apt install -y qemu-system-x86 libvirt-daemon-system virtinst ovmf
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt,kvm "$USER"   # log out and back in

virt-install \
  --name guest1 \
  --memory 2048 \
  --vcpus 2 \
  --cpu host-passthrough \
  --disk path=/var/lib/libvirt/images/guest1.qcow2,size=20,format=qcow2,bus=virtio \
  --network network=default,model=virtio \
  --os-variant debian13 \
  --location https://deb.debian.org/debian/dists/trixie/main/installer-amd64/ \
  --graphics none \
  --console pty,target_type=serial \
  --extra-args 'console=ttyS0,115200n8'

Eine grafische Sitzung ist nicht erforderlich. Eine serielle Installation läuft eine Weile. Starten Sie sie daher in einer persistenten Shell: Derselbe tmux-Workflow, der Claude-Code-Sitzungen auf einem VPS aktiv hält, hält eine virt-install-Konsole auch nach einer unterbrochenen SSH-Verbindung verbunden. Wenn --os-variant debian13 abgelehnt wird, ist Ihre osinfo-db älter als die betreffende Version. Führen Sie osinfo-query os aus und wählen Sie einen vorhandenen Namen. --cpu host-passthrough leitet vmx in den L2-Gast weiter. Das ist nur erforderlich, wenn L2 seinerseits virtualisieren muss. Machen Sie den Gast mit virsh autostart guest1 für den Bootvorgang geeignet.

Der virtio-Bus für Festplatte und NIC ist keine reine Formsache: Emulierte IDE- und e1000-Geräte verursachen deutlich häufiger Trap-Ereignisse im Hypervisor als virtio-Warteschlangen. Bei verschachtelter Virtualisierung wird jedes Trap-Ereignis zweimal verarbeitet.

Netzwerk: Der Teil, den Tutorials auslassen

Ihr VPS hat eine öffentliche IP-Adresse und befindet sich hinter einer Infrastruktur, die unbekannte MAC-Adressen filtert. Daraus ergeben sich zwei Konsequenzen.

L2-Gäste direkt in das öffentliche Netzwerk zu bridgen funktioniert normalerweise nicht. Setzen Sie br0 auf die öffentliche Netzwerkkarte, geben Sie dem Gast eine eigene MAC-Adresse, und Sie werden sehen, dass ARP-Anfragen hinausgehen, aber keine Antwort zurückkommt. Der Switch des Providers verwirft Frames von einer MAC-Adresse, die er Ihnen nicht zugewiesen hat. Wenn dies Ihr Fehlerbild ist, suchen Sie den Fehler nicht weiter in der Bridge. Das ist die Ursache.

Verwenden Sie stattdessen das NAT-Netzwerk. libvirt stellt default bereit: virbr0, 192.168.122.0/24, Leases von dnsmasq und sofort funktionierenden ausgehenden Datenverkehr. Für eingehende Verbindungen beenden Sie TLS auf L1 und leiten die Anfragen per Proxy weiter. Die Zertifikatspfade weiter unten stammen aus Ausstellen eines Let's-Encrypt-Zertifikats mit Certbot unter Nginx:

server {
    listen 443 ssl;
    server_name lab.example.com;

    ssl_certificate     /etc/letsencrypt/live/lab.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lab.example.com/privkey.pem;

    location / {
        proxy_pass http://192.168.122.50:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Weisen Sie dem Gast zuerst ein statisches Lease zu (virsh net-edit default), damit die Adresse in proxy_pass unverändert bleibt.

Management-Schnittstellen bleiben vom Internet getrennt: VNC auf 5900 und die Proxmox-Weboberfläche auf 8006 gehören an loopback und werden über einen SSH-Tunnel (ssh -N -L 8006:127.0.0.1:8006 you@your-vps) oder über ein selbst gehostetes WireGuard-VPN in den VPS erreicht. Dadurch liegt der gesamte 192.168.122.0/24-Gastbereich nur einen privaten Hop entfernt. Halten Sie die Firewall restriktiv: sudo ufw allow 22,80,443/tcp, sonst nichts. Wenn Gäste unmittelbar nach der Aktivierung von ufw keine ausgehende Verbindung mehr haben, ist DEFAULT_FORWARD_POLICY="DROP" in /etc/default/ufw meist die Ursache. Setzen Sie den Wert auf ACCEPT und laden Sie ufw neu.

Proxmox auf einem VPS

Proxmox VE 9 basiert auf Debian 13 und lässt sich daher auf einem Debian-VPS installieren, indem Sie das pve-no-subscription-Repository und das Paket proxmox-ve hinzufügen. Übernehmen Sie die Repository- und Keyring-Zeilen aus der aktuellen Proxmox-Dokumentation. Eine aus einem alten Blogbeitrag kopierte URL lässt die Installation fehlschlagen. Ob Proxmox überhaupt auf gemieteter Hardware eingesetzt werden sollte, sollten Sie klären, bevor Sie einen Abend mit der folgenden Netzwerkkonfiguration verbringen. Der Kosten- und Leistungsvergleich zwischen einem Proxmox-System zu Hause und einem gemieteten VPS beantwortet diese Frage bereits anhand der Berechnung von Stromkosten und Hardwareanforderungen.

Die Pakete sind nicht der schwierige Teil. Proxmox erwartet vmbr0 als Bridge an einer physischen Netzwerkkarte. Damit laufen Sie direkt in die oben beschriebene Sackgasse der MAC-Filterung. Auf einem VPS funktioniert ein NAT- oder geroutetes vmbr0 ohne angeschlossenen physischen Port. Die Gastsysteme verwenden einen privaten Adressbereich. Für öffentlich erreichbare Dienste konfigurieren Sie DNAT-Regeln oder einen Reverse Proxy auf dem Host. Wenn die öffentlich erreichbaren Dienste Container statt VMs sind, übernimmt Traefik vor mehreren Anwendungen aus einer Docker-Compose-Datei dieselbe Routing-Aufgabe mit automatischen Zertifikaten. Erstellen Sie zuerst einen Snapshot von /etc/network/interfaces. Eine fehlerhafte Bridge-Konfiguration kann Sie von einem System aussperren, dessen Konsole möglicherweise nicht verfügbar ist.

Leistung, ehrlich beschrieben

Eine verschachtelte Virtualisierung ist langsamer als eine einstufige. Der Mechanismus ist klar abgegrenzt: Nicht der Speicherzugriff verursacht die Kosten, sondern Exits. Wenn EPT/NPT verfügbar ist, verwaltet L0 Shadow-Page-Tables für L2. Gewöhnliche Speicherzugriffe laufen dann mit Hardwaregeschwindigkeit. Teuer wird jeder Vorgang, der den Gastmodus verlässt: I/O, Timer-Interrupts, MMIO und Inter-Prozessor-Interrupts. Ein L2-Exit wird von L0 verarbeitet und möglicherweise über L1 zurückgeleitet. CPU-intensive Arbeit mit Daten, die sich bereits im RAM befinden, erreicht nahezu native Leistung. Arbeit, die hauptsächlich aus Systemaufrufen, Paketen und Festplatten-I/O besteht, wird durch die Virtualisierungsebenen deutlich beeinflusst.

Daher: überall virtio-Geräte verwenden. Außerdem liegt Ihre qcow2-Datei auf einem Datenträger, den der Provider bereits virtualisiert hat. Dadurch sind zwei Thin-Provisioning-Ebenen übereinandergeschichtet. Auf diesem Datenträger sorgt cache=none dafür, dass dieselben Blöcke nicht gleichzeitig in zwei Page-Caches liegen. Hier gibt es keine Benchmarkwerte. Messen Sie Ihre eigene Arbeitslast auf Ihrer eigenen Instanz.

Fehlerbilder und die angezeigten Meldungen

INFO: /dev/kvm does not exist / KVM acceleration can NOT be used aus kvm-ok. Entweder ist das Modul nicht geladen, oder das Flag wird nicht bereitgestellt. Prüfen Sie zuerst /proc/cpuinfo.

kvm: disabled by bios in dmesg. Auf Bare Metal aktivieren Sie den VT-x/SVM-Schalter in der Firmware. In einem VPS bedeutet dies, dass L0 die Erweiterungen nicht an Sie weitergibt. Keine Eingabe im Gast kann das ändern.

modprobe: ERROR: could not insert 'kvm_intel': Operation not supported. Die vom Kernel erkannte CPU unterstützt vmx nicht. Auch das ist eine Entscheidung von L0.

Could not access KVM kernel module: Permission denied. Die Ursache sind Berechtigungen, nicht die Hardware. ls -l /dev/kvm sollte die Gruppe kvm und den Modus 660 anzeigen. Fügen Sie sich dieser Gruppe hinzu und starten Sie eine neue Login-Shell, da die Gruppenmitgliedschaft in einer bereits laufenden Sitzung nicht übernommen wird.

kvm: Device or resource busy, wenn QEMU startet. Ein anderes Hypervisor-Modul belegt die CPU. Führen Sie lsmod aus und suchen Sie neben kvm_intel nach vboxdrv oder VMware-Modulen. Entladen Sie das nicht benötigte Modul.

/var/run/libvirt/libvirt-sock: No such file or directory aus virsh. Der Daemon ist nicht aktiv: sudo systemctl enable --now libvirtd.

Proxmox: KVM virtualisation configured, but not available. Für einen Gast ist KVM-Beschleunigung aktiviert, obwohl der Host sie nicht bereitstellen kann. Konfigurieren Sie Nested Virtualization korrekt oder deaktivieren Sie die Option und verwenden Sie Emulation.

Android-Emulator: x86_64 emulation currently requires hardware acceleration! Erneut /dev/kvm, normalerweise liegt die Ursache bei der Gruppe.

Keine Fehlermeldung und alles ist extrem langsam. QEMU fällt ohne Accelerator-Flag auf TCG, seinen Software-Emulator, zurück. Das funktioniert korrekt, ist aber langsam. Ein Bootvorgang, der in Sekunden abgeschlossen ist, dauert dann Minuten. Übergeben Sie -accel kvm explizit. Dadurch beendet sich QEMU mit einer Fehlermeldung, statt unbemerkt zu emulieren.

Ein Gast verschwindet während des Betriebs. Suchen Sie in dmesg nach Out of memory: Killed process ... qemu-system-x86_64. Ein L2-Gast ist ein Prozess auf L1, und der OOM-Killer behandelt ihn wie jeden anderen Prozess. Der Arbeitsspeicher für L2 stammt aus der festen Speicherzuweisung von L1. Er kann sich keinen Speicher vom Host ausleihen.

Betrieb: Backups, Upgrades und Grenzen

Backups. Wenn Sie die qcow2-Datei eines laufenden Gasts kopieren, erhalten Sie ein beschädigtes Image. Führen Sie entweder virsh shutdown guest1 aus und kopieren Sie anschließend, oder erstellen Sie einen externen Snapshot (virsh snapshot-create-as guest1 snap1 --disk-only --atomic). Dann werden Schreibvorgänge während des Kopierens in ein Overlay umgeleitet, während Sie die nun statische Basis kopieren. Führen Sie das Overlay anschließend mit virsh blockcommit zurück. Übertragen Sie die Kopien vom VPS auf ein anderes System. Ein Snapshot auf derselben Festplatte schützt vor keinem Ausfall.

Upgrades. apt full-upgrade installiert neue kvm_intel/kvm_amd-Module. Der laufende Kernel verwendet jedoch weiterhin die alten Module, bis Sie einen Reboot durchführen. Lassen Sie den vorherigen Kernel installiert und führen Sie nach jeder Kerneländerung kvm-ok erneut aus. Wenn der Host anschließend ohne vmx startet, ist nur noch ein Boot-Eintrag erforderlich, damit er wieder funktioniert.

Wo diese Lösung nicht mehr skaliert. Eine öffentliche IP-Adresse bedeutet, dass jeder L2-Dienst über einen Proxy oder eine DNAT-Regel auf L1 das Internet erreicht. Live-Migration ist nicht möglich. Bei CPU-Konkurrenz ist zuerst der verschachtelte Exit-Pfad betroffen. Ein Hypervisor mit mehreren Gästen ist außerdem ein System, dessen RAM Sie bereits vollständig zugewiesen haben. Verschachtelte VMs können eine feste Zuweisung nicht durch Overcommit ausgleichen. Wenn ein Laborsystem darüber hinauswächst, ist ein höherer verschachtelter Stack nicht die Lösung. Die Lösung ist ein dedizierter Rechner, auf dem Sie L0 sind und für den diese Einschränkungen nicht gelten.

FAQ

Benötige ich verschachtelte Virtualisierung, um Docker auf einem VPS auszuführen?

Nein. Container verwenden den Kernel Ihres VPS gemeinsam und öffnen niemals /dev/kvm. Daher läuft Docker und Docker Compose auf einer einfachen Instanz ohne vmx- oder svm-Flag problemlos. Verschachtelte Virtualisierung ist nur erforderlich, wenn Sie einen zweiten Kernel benötigen: für ein Proxmox-Labor, einen Windows-Gast, Firecracker-Mikro-VMs, einen Android-Emulator oder CI-Runner, die VM-Images booten.

Wie prüfe ich, ob mein VPS verschachtelte Virtualisierung unterstützt?

Führen Sie grep -o -E 'vmx|svm' /proc/cpuinfo | sort -u und anschließend kvm-ok aus dem Paket cpu-checker aus. Eine geeignete Instanz gibt vmx (Intel) oder svm (AMD) aus. kvm-ok meldet KVM acceleration can be used. Außerdem ist /dev/kvm mit der Gruppe kvm und dem Modus 660 vorhanden. Ignorieren Sie /sys/module/kvm_intel/parameters/nested bei dieser Prüfung. Diese Datei beschreibt Ihr eigenes KVM-Modul und nicht das, was der Hypervisor des Anbieters für Sie bereitstellt.

Warum deaktivieren die meisten VPS-Anbieter die verschachtelte Virtualisierung?

Wenn vmx bereitgestellt wird, erhält der Gast ein CPU-Modell mit diesem Flag. Ein Gast, der von diesen CPU-Funktionen abhängt, kann nicht live auf eine Maschine migriert werden, deren CPU diese Funktionen nicht unterstützt. Ein Anbieter, der Knoten durch das Verschieben von Kundeninstanzen entlastet, verzichtet deshalb darauf. Die Codepfade für verschachteltes VMX/SVM weisen außerdem eine lange CVE-Historie auf. Einige Anbieter aktivieren die Funktion weiterhin auf Anfrage pro VM. Andere führen verschachtelte Virtualisierung als Bestandteil bestimmter Tarife auf.

Meine verschachtelte VM hat keine Netzwerkverbindung über die öffentliche Bridge. Was ist falsch?

Der Switch des Anbieters verwirft Frames von einer MAC-Adresse, die er Ihnen nicht zugewiesen hat. Daher sendet ein L2-Gast, der über die öffentliche NIC gebridged ist, ARP-Anfragen, erhält aber keine Antwort. Beenden Sie die Fehlersuche bei br0. Verwenden Sie stattdessen das libvirt-NAT-Netzwerk default (virbr0, 192.168.122.0/24), weisen Sie dem Gast eine statische Lease zu und veröffentlichen Sie öffentliche Dienste über einen Reverse Proxy oder eine DNAT-Regel direkt auf dem VPS.

Wie viel langsamer ist eine verschachtelte VM?

Der Aufwand entsteht bei VM-Exits, nicht beim Speicherzugriff. Wenn EPT/NPT aktiv ist, laufen normale Lese- und Schreibzugriffe innerhalb von L2 mit Hardwaregeschwindigkeit. I/O, Timer-Interrupts, MMIO und IPIs werden dagegen von L0 verarbeitet und müssen möglicherweise über L1 zurückgeleitet werden. CPU-intensive Aufgaben mit bereits im RAM befindlichen Daten erreichen nahezu native Geschwindigkeit. Bei Workloads mit vielen Systemaufrufen, Netzwerkpaketen oder Festplattenzugriffen wirkt sich jede Virtualisierungsebene aus. Verwenden Sie überall virtio-Geräte und cache=none auf den Gastlaufwerken. Messen Sie anschließend Ihren eigenen Workload.