Problembehebung: Fehlende Netzwerkkarte in Windows 10 VM unter Proxmox

Wer bereits einmal eine virtuelle Maschine (VM) mit dem Betriebssystem Windows 10 (deutsche Version) unter Proxmox VE erstellt hat, ist möglicherweise auf das bekannte Problem gestoßen, dass keine Netzwerkkarte erkannt wird.

Ein funktionierender und unkomplizierter Lösungsansatz bestand darin, der betroffenen Windows 10 VM einen USB-Ethernet-Adapter hinzuzufügen. Nach dem Hinzufügen des Adapters wurde die Netzwerkkarte innerhalb des Betriebssystems sofort erkannt, und die Netzwerkanbindung funktionierte ohne weitere Konfiguration. Es ist davon auszugehen, dass dieser Workaround auch mit anderen kompatiblen Netzwerkkarten funktioniert.

Zum Zeitpunkt der Erstellung dieser VM war der Maschinentyp auf „pc-q35-6.0“ eingestellt. Diese Einstellung stammt noch aus vorherigen Tests und wurde in diesem Fall nicht verändert.

Geplant ist, zukünftig weitere Tests mit alternativen Maschinentypen und Netzwerkkarten durchzuführen. Ergebnisse und Empfehlungen werden entsprechend in diesem Beitrag ergänzt.


Beispiel: USB-Ethernet-Adapter in Proxmox-VM integrieren (Windows 10)

Voraussetzung:

  • Der USB-Ethernet-Adapter ist am Proxmox-Host angeschlossen und wird erkannt.
  • usbutils ist installiert, um USB-Geräte aufzulisten:

apt update && apt install usbutils

Schritt 1: USB-Gerät identifizieren

lsusb

Beispielausgabe:

Bus 001 Device 004: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter

Die ID 0bda:8153 benötigen wir für den nächsten Schritt.

Schritt 2: USB-Gerät in die VM einbinden

Option A: Über die Web-GUI
  1. Proxmox Web-GUI öffnen.
  2. VM auswählen → HardwareAddUSB Device.
  3. Das passende Gerät aus der Liste auswählen (z. B. der Realtek-Adapter).
  4. Bestätigen und die VM neu starten.
Option B: Direkt in der VM-Konfigurationsdatei (/etc/pve/qemu-server/<VMID>.conf)

Beispiel-Konfigurationszeile:

usb0: host=0bda:8153

Danach VM neustarten, damit das Gerät übernommen wird.

Schritt 3: In Windows 10 überprüfen

Nach dem Neustart der VM:

  • Öffne den Geräte-Manager (devmgmt.msc).
  • Unter Netzwerkadapter sollte der USB-Ethernet-Adapter erscheinen.
  • Falls notwendig, installiere passende Treiber (oft automatisch durch Windows Update erkannt).

Zusätzlicher Hinweis: Maschinentyp und Kompatibilität

Wie bereits erwähnt, war bei dir der Maschinentyp:

machine: pc-q35-6.0

Dieser Typ ist meist gut kompatibel mit modernen Windows-Gästen. Dennoch lohnt es sich, bei Problemen auch andere Typen wie pc-i440fx-* zu testen, insbesondere wenn ältere Betriebssysteme verwendet werden.

Wenn die Linux Container Turnkeylinux Templates nicht mehr auf Proxmox verfügbar sind

Wenn die Turnkeylinux Container Templates nicht mehr auf Proxmox verfügbar sind, einfach in der Proxmox-Konsole den folgenden Befehl ausführen:

pveam update

Nun sollten die Linux Container Turnkeylinux Templates wieder wie gewohnt verfügbar sein.

NGINX Proxy Manager – Reverse Proxy Installation auf Proxmox LXC Container mit Docker installieren

Der NGINX Reverse-Proxy ist sinnvoll, wenn man z.B. entsprechende CMS (content management system)- Dienste wie WordPress, Joomla und Drupal von extern erreichbar machen möchte oder mehrere Server unter dem gleichen Port wie den Port 433 für das HTTPS (Hypertext Transfer Protocol Secure) von außen erreichbar machen möchte. Eine schnelle zu realisierende Variante ist der Nginx Proxy Manager (kurz npm). Dieser kann ganz einfach über Docker installiert.

Den Grundstein habe ich in Form eines Proxmox-LXC Container mit Docker hier: https://it-daten.de/docker-portainer-auf-proxmox-virtual-environment-7-2-3-installieren/ schon dokumentiert.

Der LXC Container muss nur noch gestartet sowie eine Verbindung zur Konsole hergestellt werden.

Danach einfach mit einem Benutzer (nicht als root) anmelden und in das Verzeichnis des Benutzers wechseln mit:

cd /home/docker/

Nun wird ein neues Verzeichnis für den NGINX Proxy Manager in diesem Verzeichnis anlegt mit:

mkdir npm

Jetzt wechseln wir in das Verzeichnis mit:

cd /home/docker/npm/

Dort erstellen wir eine config-Datei als JavaScript Object Notation mit:

nano config.json

Hier kopieren wir die folgen Angaben zu unseren zukünftigen Datenbank rein.

Wichtig!

Angaben zu: name, user und Passwort unbedingt in individuelle Angaben abändern!

{
  "database": {
    "engine": "mysql",
    "host": "db",
    "name": "npm",
    "user": "npm",
    "password": "npm",
    "port": 3306
  }
}

Nun wieder mit Strg+O abspeichern und mit Strg+x den Editor verlassen.

Im selben Verzeichnis: „/home/docker/npm/“ wird eine weitere Datei erstellt. Diesmal wird eine YAML-Datei erstellt.

nano docker-compose.yml

Hier kopieren wir die folgen Angaben rein.

Angaben zu: name, user und Passwort wieder die vorigen individuelle Angaben übernehmen und ein neues root-Passwort vergeben !

version: "3"
services:
  app:
    image: jc21/nginx-proxy-manager:latest
    restart: always
    ports:
      - 80:80
      - 81:81
      - 443:443
    volumes:
      - ./config.json:/app/config/production.json
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db
    environment:
    # if you want pretty colors in your docker logs:
    - FORCE_COLOR=1
  db:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "npm"
      MYSQL_DATABASE: "npm"
      MYSQL_USER: "npm"
      MYSQL_PASSWORD: "npm"
    volumes:
      - ./data/mysql:/var/lib/mysql

Nun wieder mit Strg+O abspeichern und mit Strg+x den Editor verlassen.

Als nächstes werden die beiden Docker-Container einmal Datenbank -Container (mariadb) und der NGINX Proxy Manager -Container automatisch zusammen gebaut.

Dazu einfach im selben Verzeichnis: „/home/docker/npm/“ den folgenden Befehle ausführen:

docker-compose up -d

Das war alles, mit der IPv4- Adresse des LXC Container und den Port: 81 (http://ContainerIPv4:81) erreicht man nun das Webinterface vom NGINX Proxy Manager.

Der voreingestellte Benutzer-Login ist admin@example.com und das Passwort changeme. Beides muss nun geändert werden.

Sollte die folgende Fehlermeldung kommen:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.
sudo chmod 666 /var/run/docker.sock

Viel Spaß 😉


GPU & PCIe-Passthrough unter Proxmox: So gibst du deiner VM Superkräfte

Wer unter Proxmox eine leistungsstarke VM betreiben will – etwa für Gaming, Video-Encoding, KI-Workloads oder einfach nur um Windows flüssig mit echter Hardware laufen zu lassen – kommt an PCIe-Passthrough nicht vorbei. Damit kannst du deiner VM eine physische GPU oder andere PCIe-Geräte direkt zuweisen – mit voller Power, als wären sie fest eingebaut.

In diesem Blogbeitrag zeige ich dir Schritt für Schritt, wie du das einrichtest.

Was du brauchst

Bevor es losgeht, check diese Voraussetzungen:

  • Proxmox VE installiert (empfohlen: aktuelle Version)
  • CPU & Mainboard unterstützen IOMMU (VT-d bei Intel / AMD-Vi bei AMD)
  • Die gewünschte Hardware ist nicht vom Host belegt (z. B. keine Boot-GPU)

Schritt 1: IOMMU aktivieren

Zuerst müssen wir IOMMU im Kernel aktivieren, damit der Host PCIe-Geräte sauber an VMs weitergeben kann.

nano /etc/default/grub

Zeile anpassen:

Für Intel:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

Für AMD:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

Dann speichern, und GRUB neu schreiben:

update-grub

Schritt 2: VFIO-Module laden

Ergänze diese Module in /etc/modules:

nano /etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

Optional kannst du einen Neustart vorziehen – oder gleich weitermachen und später rebooten.

Schritt 3: Die Hardware identifizieren

Welche PCIe-Geräte willst du durchreichen?

Finde sie mit:

lspci

Beispielausgabe:

01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080]

Dann hol dir die ID:

lspci -n -s 01:00.0

Beispiel:

10de:1b80

Notieren!

Schritt 4: VFIO zwingen, das Gerät zu übernehmen

Erstelle eine neue Datei:

nano /etc/modprobe.d/vfio.conf

Und trage ein:

options vfio-pci ids=10de:1b80

Wenn du z. B. noch das zugehörige Audio-Device hast (01:00.1), kannst du mehrere IDs mit Komma angeben:

options vfio-pci ids=10de:1b80,10de:10f0

Außerdem solltest du sicherstellen, dass der Host keinen falschen Treiber lädt (z. B. nouveau):

echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf

Schritt 5: Reboot

Jetzt ist der richtige Zeitpunkt für einen Reboot:

reboot

Schritt 6: VM konfigurieren

Bearbeite die Konfiguration deiner VM:

nano /etc/pve/qemu-server/100.conf

Und füge das hinzu:

hostpci0: 01:00.0,pcie=1

Wenn du z. B. auch das Audio-Device durchreichen willst:

hostpci0: 01:00.0;01:00.1,pcie=1

Wichtig: pcie=1 ist notwendig, wenn die VM als UEFI (OVMF) läuft.

Kontrolle: Hat’s geklappt?

Prüfen, ob VFIO das Gerät übernommen hat:

lspci -nnk -d 10de:1b80

Erwartet:

Kernel driver in use: vfio-pci

Auch dmesg gibt Aufschluss:

dmesg | grep -i vfio

USB-Geräte durchreichen

Willst du z. B. ein USB-Dongle oder Headset durchreichen?

Mit lsusb findest du die ID:

lsusb

Dann in die VM-Config:

usb0: host=1234:abcd

Fazit

Mit PCIe-Passthrough holst du das Maximum aus deiner Hardware raus. Egal ob du eine Windows-Gaming-VM, einen macOS-Hackintosh oder einen CUDA-Worker betreiben willst – Proxmox macht’s möglich.

Wenn du Fragen zu IOMMU-Gruppen, UEFI-Support oder BIOS-Einstellungen hast: Schreib’s in die Kommentare oder kontaktiere mich direkt.

Docker Portainer auf Proxmox Virtual Environment 7.2-3 installieren

Die Installation von Docker unter Proxmox ist eigentlich ganz simpel. Es gibt jedoch das ein oder andere zu berücksichtigen. Hier zeige ich, wie ich auf einen Ubuntu 20.04 LTS LXC Container, Docker und Portainer einrichte.

Die Hardware-Grundlage ist ein alter Aopen DE35-HD MiniPC mit Proxmox Virtual Environment 7.2-3 (PvE)

Als erstes wird ein Ubuntu LTS 20.04 Container auf PvE erstellt. Dazu geht man auf: local (pve) und Container Templates.

Anschließend auf Templates geklickt.

Danach in der Suche: “ ubuntu“ eingeben und ubuntu-20.04-standard auswählen und herunterladen.

Nun wird ein neuer Container (Erstelle CT) erstellt (oben rechts ).

In der Eingabemaske wird nun ein Hostname z.b. Docker sowie ein Kennwort vergeben und mit dem Button: „Vorwärts“ bestätigt.

Unter: „Templates“ wird nun das heruntergeladene ubuntu-20.04 ausgewählt und mit dem Button: „Vorwärts“ bestätigt.

Jetzt wird die Größe des Speichers für den LXC Container festgelegt und mit dem Button: „Vorwärts“ bestätigt.

Nun wird die Anzahl der CPU-Kerne für den LXC Container festgelegt und mit dem Button: „Vorwärts“ bestätigt.

Für den Arbeitsspeicher spendiere ich dem LXC Container ein 1 GB und mit dem Button: „Vorwärts“ bestätigt.

Anschließend werden die Netzwerkeinstellungen konfiguriert. Hier vergebe ich eine statische IPv4-Adresse. Als Gateway-Adresse wird in der Regel die IPv4-Adresse des Routers einstellt. IPv6 lasse ich auf automatische Zuweisung des DHCP-Servers stehen und mit: „Vorwärts“ bestätigt.

Als nächstes wird der DNS-Server konfiguriert. Bei den Einstellungen belasse ich die Standardeinstellung und bestätige wieder mit: „Vorwärts“.

Jetzt folgt eine kurze Zusammenfassung der zuvor konfigurierten Einstellungen, die mit dem Button: „Abschließen“ fertiggestellt werden. Nun wird der LXC Container erstellt, wenn alles Fehlerfrei verläuft kommt in der Ausgabe: „Task OK“

Wichtig, das Optionskästchen: „Nach Erstellen starten“ nicht aktivieren!

Damit Docker Portainer auch funktioniert müssen unter Optionen die Features nachträglich bearbeitet werden und „keyctl“ aktiviert werden.

Dazu unter Rechenzentrum den LXC Container: „Docker“ auswählen und die Optionen anklicken.

Nun: „Features“ anwählen und auf: „Bearbeiten“ klicken.

Nun wird das Kontrollkästchen: „keyctl“ aktiviert und mit dem Button: „OK“ werden die Einstellungen übernommen.

Jetzt, können wir unseren zukünftigen Docker LXC Container starten.

Anschließend verbinden wir uns mit der Konsole mit dem Benutzer: root und dem Kennwort welches wir zum Beginn bei der Erstellung des LXC Container vergeben haben.

Nun geben wir den Befehl ein:

apt update && apt upgrade -y

Um Docker installieren zu können müssen wir mit dem Befehl:

adduser docker

und Enter noch einen normalen Benutzer hinzufügen. Es folgt wieder eine Passwort-Vergabe sowie andere Angaben die nicht zwangsläufig angegeben werden müssen. Am Ende wird die Eingabe noch mit y bestätigt.

Jetzt müssen wir den neuen Benutzer noch Rechte erteilen, das machen wir mit dem Befehl:

nano /etc/sudoers

(Das geht nur mit dem Benutzer: root)

Unter # User privilege specification unter root wird folgende Zeile eingefügt:

docker  ALL=(ALL:ALL) ALL

Anschließend wird die Konfiguration mit der Tastenkombination: Strg + o gedrückt und mit Enter gespeichert. Danach verlassen wir den Editor nano mit der Tastenkombination: Strg + x

Jetzt können wir uns als Benutzer: docker anmelden. Dazu geben wir den Befehl:

logout

ein und melden uns als Benutzer: docker an

Als nächstes installieren wir Docker und weitere erforderliche Tools mit dem Befehl:

sudo apt install docker.io curl net-tools

(Passwort ist das von dem Benutzer: root )

Nun wird das Installationsskript für Docker mit Curl und Enter geladen.

curl -fsSL https://get.docker.com -o get-docker.sh

Anschließend wird das Script mit dem Befehl ausgeführt:

sudo sh get-docker.sh

Nun registrieren wir Docker als Service und

sudo systemctl enable docker

danach starten wir Docker

sudo systemctl start docker

Als nächstes installieren wir Docker-Compose. Gib dazu folgenden Befehl ein:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Danach müssen die Rechte vergeben werden. Dazu führen wir die beiden folgenden Befehle nacheinander aus:

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Damit wir als Benutzer: “docker” Docker ausführen können und dies ohne: sudo funktioniert, müssen wir dem Benutzer: docker noch Rechte geben. Danach melden wir uns ab und wieder als docker an, damit die Rechte zur Geltung kommen.

sudo usermod -a -G docker docker

Jetzt installieren wir Portainer mit folgendem Befehl:

sudo docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock -v /opt/portainer:/data portainer/portainer-ce:latest

Portainer ist nun installiert. Um uns per Browser mit Portainer zu verbinden, müssen wir ein konfigurierte IPv4-Adresse + den Port eintragen: https://IPv4-Adresse:9000 anschließend führen wir die Einrichtung aus.

Nach dem Login als Administrator: docker kommen wir zum Quick Setup Wizard der Portainer-Weboberfläche. Neben der lokalen Docker-Umgebung lassen sich entfernte Umgebungen hinzufügen. In meinem Fall wähle ich: Get Started aus.

Nun erscheint die Home-Site der Portainer-Weboberfläche. Dort werden uns die derzeit von Portainer verwalteten Docker-Umgebungen angezeigt.

Damit ist die Installation fertig 🙂