Einführung
Proxmox Virtual Environment (Proxmox VE) ist eine Open-Source-Virtualisierungsplattform mit Unterstützung für Kernel-based Virtual Machine (KVM) und Linux Containers (LXC). Proxmox bietet eine webbasierte Verwaltungsschnittstelle, CLI-Tools und eine REST-API für Verwaltungszwecke sowie eine großartige Dokumentation mit einem ausführlichen Proxmox VE Guide, Handbuchseiten und API-Viewer.
Dieses Tutorial zeigt, wie man Proxmox VE 9 auf Debian 13 installiert und IP-Adressen auf virtuellen Maschinen konfiguriert.
Schritt 1 - Installation
Es gibt mehrere Möglichkeiten, Proxmox VE auf einem dedizierten Hetzner Root-Server zu installieren. Man kann entweder Debian 13 installieren und anschließend auf Proxmox upgraden oder das offizielle Image verwenden und Proxmox über qemu
installieren.
1.1 Installation von Proxmox VE auf Debian
- Booten Sie den Server in das Rescue System.
- Führen Sie installimage aus, wählen Sie das erforderliche Debian 13 (trixie) aus und installieren Sie es.
- Konfigurieren Sie den RAID-Level, den Hostnamen und die Partitionierung.
- Speichern Sie die Konfiguration und führen Sie nach Abschluss der Installation einen Neustart durch.
- Sobald der Server wieder erreichbar ist, folge der offiziellen Anleitung zum Upgrade von Debian 13 auf Proxmox.
1.2 Installation mit ZFS
Proxmox kann auch über qemu
mit dem offiziellen ISO installiert werden. Dabei wird der Installer in einer virtuellen Maschine aus dem Hetzner Rescue System gestartet. Das Netzwerk muss jedoch vor dem Neustart konfiguriert werden, da das interface in dieser Methode virtualisiert ist.
Vorbereitung
Bevor Sie mit der Installation beginnen, leiten Sie einen lokalen Port weiter und verbinden Sie sich mit Ihrem Server über den folgenden Befehl:
ssh -L 5900:localhost:5900 root@your_server_ip
Kopiere die Download-URL des ISO-Images und lade es im Rescue System mit wget
herunter:
wget https://enterprise.proxmox.com/iso/proxmox-ve_9.0-1.iso
Nun kann eine virtuelle Maschine im Rescue System gestartet, die Laufwerke durchgereicht und vom ISO gebootet werden:
qemu-system-x86_64 \
-enable-kvm \
-cpu host \
-m 16G \
-boot d \
-cdrom ./proxmox-ve_9.0-1.iso \
-drive file=/dev/nvme0n1,format=raw,if=virtio \
-drive file=/dev/nvme1n1,format=raw,if=virtio \
-bios /usr/share/OVMF/OVMF_CODE.fd \
-vnc 127.0.0.1:0
(Die Zeile -bios /usr/share/OVMF/OVMF_CODE.fd \
ist nur für EFI-Server erforderlich. Entfernen Sie diese, wenn Ihr Server auf Legacy eingestellt ist. Prüfen können Sie dies mit [ -d "/sys/firmware/efi" ] && echo "UEFI" || echo "BIOS"
.)
root@rescue ~ # [ -d "/sys/firmware/efi" ] && echo "UEFI" || echo "BIOS"
UEFI
Falls Sie SATA-Laufwerke haben, passen Sie den Befehl entsprechend an (z. B. /dev/sda
statt /dev/nvme0n1
).
Verbinden Sie sich mit einem VNC-Client zu 127.0.0.1
Bitte beachten Sie, dass der VNC-Client nach dem Klick auf ‚Install‘ einen Timeout bekommen kann. Verbinden Sie sich in diesem Fall einfach erneut.
Konfiguration der Netzwerkschnittstelle
Nach Abschluss der Installation beenden Sie QEMU mit strg + C
im Terminal. Vor dem Neustart muss das interface in /etc/network/interfaces
angepasst werden.
Sie können den richtigen Interface Namen herausfinden, indem Sie den Befehl predict-check
im Rescue-System verwenden:
root@rescue ~ # predict-check
eth0 -> enp0s31f6
In diesem Fall lautet der Interface Name enp0s31f6
. Das im Rescue System aktive Interface können Sie mit netdata
einsehen:
root@rescue ~ # netdata
Network data:
eth0 LINK: yes
MAC: aa:bb:cc:dd:cc:ff
IP: 192.168.1.100/24
IPv6: (none)
Intel(R) PRO/1000 Network Driver
Starten Sie Proxmox anschließend erneut mit QEMU, diesmal ohne Installationsmedium:
qemu-system-x86_64 \
-enable-kvm \
-cpu host \
-m 16G \
-boot d \
-drive file=/dev/nvme0n1,format=raw,if=virtio \
-drive file=/dev/nvme1n1,format=raw,if=virtio \
-bios /usr/share/OVMF/OVMF_CODE.fd \
-vnc 127.0.0.1:0
Melden Sie sich an und passen Sie das Interface in /etc/network/interfaces
an:
nano /etc/network/interfaces
Standard Konfiguration:
auto lo
iface lo inet loopback
auto enp0s31f6
iface enp0s31f6 inet static
address server_ip/32
gateway server_gateway
Schritt 2 - Netzwerkkonfiguration
Hetzner hat eine strenge IP/MAC-Bindung, um die Sicherheit zu gewährleisten und Spoofing zu verhindern. In einigen Szenarien ist nur eine geroutete Konfiguration möglich. Beispielsweise sind zusätzliche Subnetze, einzelne Failover-IPs und Failover-Subnetze immer MAC-gebunden und statisch auf die Haupt IP-Adresse des Servers geroutet und können nur in einer gerouteten Konfiguration eingerichtet werden.
In einigen Fällen kann das zusätzliche Subnetz (mit Ausnahme des Failover-Subnetzes) auch an die zusätzliche IP-/MAC-Adresse des Servers gebunden/geroutet werden, wenn im Robot Panel eine virtuelle MAC-Adresse generiert ist. Dies kann direkt über eine Support Ticket Anfrage beantragt werden.
Standardmäßig sind die Haupt- und zusätzlichen einzelnen IP-Adressen an die Haupt MAC-Adresse des Servers gebunden. Für bridged setups müssen Sie im Robot-Panel eine virtuelle MAC-Adresse generieren.
IP-Weiterleitung auf dem Host aktivieren
Bei einem gerouteten Setup sind die Bridges (z.B. vmbr0
) nicht mit der physikalischen Schnittstelle verbunden. Die IP-Weiterleitung muss auf dem Host-System aktiviert werden. Bitte beachten Sie, dass die Paketweiterleitung zwischen Netzwerkschnittstellen bei der Standardinstallation von Hetzner deaktiviert ist.
Für IPv4 und IPv6:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Änderungen anwenden:
systemctl restart systemd-sysctl
Prüfen, ob das forwarding aktiv ist:
sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding
Netzwerkkonfiguration hinzufügen
Wählen Sie eine passende Variante:
- Routed Setup
- Bridged Setup
- vSwitch mit öffentlichem Subnetz
» Zuweisung von IP-Adressen an VMs/Container von vSwitch mit öffentlichem Subnetz. - Hetzner Cloud Netzwerk
» Stellt eine Verbindung zwischen den virtuellen Maschinen/LXC und der Hetzner Cloud her. - Masquerading (NAT)
» Ermöglicht VMs mit privaten IP-Adressen den Zugriff auf das Internet, indem die öffentliche IP-Adresse des Hosts genutzt wird..
2.1 Routed Setup
In einer gerouteten Konfiguration dient die Bridge-IP-Adresse des Hostsystems standardmäßig als Gateway. Das manuelle Hinzufügen einer Route zu einer virtuellen Maschine ist erforderlich, wenn die zusätzliche IP nicht zum selben Subnetz gehört. Aus diesem Grund setzen wir die Subnetzmaske auf /32
, da Geräte wie vmbr0 grundsätzlich den Datenverkehr nur für IP-Adressen weiterleiten, die zum selben Subnetz gehören. Durch die Verwendung einer /32
-Subnetzmaske wird jede zusätzliche IP-Adresse als eigene Netzwerkeinheit behandelt, wodurch sichergestellt wird, dass der Datenverkehr sein richtiges Ziel erreicht, auch wenn die zusätzliche IP-Adresse nicht aus demselben Subnetz stammt.
-
Hostsystem Routed
Um ein reales Szenario darzustellen, werden wir die folgenden Beispiel-Adressen verwenden:
- Haupt-IP:
198.51.100.10/24
- Gateway der Haupt-IP:
198.51.100.1/24
- Zusätzliches Subnetz:
203.0.113.0/24
- Zusätzliche Einzel-IP (fremdes Subnetz):
192.0.2.20/24
- Zusätzliche Einzel-IP (gleiches Subnetz):
198.51.100.30/24
- Failover Einzel-IP:
172.17.234.100/32
- Failover Subnetz:
172.17.234.0/24
- IPv6:
2001:DB8::/64
- Haupt-IP:
Bitte beachten Sie, dass Sie das Netzwerk nach dem Anwenden der Netzwerkkonfiguration neu starten müssen, damit der Proxmox-Host die statischen Routen hinzufügt. Wenn während des Neustarts des Netzwerks virtuelle Maschinen oder Container aktiv sind, müssen Sie diese anhalten (nicht nur neu starten) und anschließend wieder starten. Dadurch werden die Punkt-zu-Punkt-Verbindungen zwischen den virtuellen Maschinen und dem Host korrekt neu erstellt.
systemctl restart networking
# /etc/network/interfaces
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto enp0s31f6
iface enp0s31f6 inet static
address 198.51.100.10/32 # Haupt-IP
gateway 198.51.100.1 # Gateway
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
# IPv6 des Main-interface
iface enp0s31f6 inet6 static
address 2001:db8::2/128 # /128 auf dem Ethernet, /64 auf der Bridge
gateway fe80::1
# Bridge für einzelne IP's (fremdes und gleiches Subnetz)
auto vmbr0
iface vmbr0 inet static
address 198.51.100.10/32 #Haupt-IP
bridge-ports none
bridge-stp off
bridge-fd 0
post-up ip route add 192.0.2.20/32 dev vmbr0 # Zusätzliche IP aus einem fremden Subnetz
post-up ip route add 198.51.100.30/32 dev vmbr0 # Zusätzliche IP aus dem gleichen Subnetz
post-up ip route add 172.17.234.100/32 dev vmbr0 # Failover IP
# IPv6 für die bridge
iface vmbr0 inet6 static
address 2001:db8::3/64 # Sollte nicht die gleiche Adresse wie das Main-interface sein
# Zusätzliches Subnetz 203.0.113.0/24
auto vmbr1
iface vmbr1 inet static
address 203.0.113.1/24 # Setzen Sie eine nutzbare IP aus dem Subnetzbereich
bridge-ports none
bridge-stp off
bridge-fd 0
# Failover Subnetz 172.17.234.0/24
auto vmbr2
iface vmbr2 inet static
address 172.17.234.1/24 # Setzen Sie eine nutzbare IP aus dem Subnetzbereich
bridge-ports none
bridge-stp off
bridge-fd 0
-
Gastsystem Routed (Debian 12)
Als Gateway wird immer die IP der Bridge im Hostsystem verwendet, d.h. die Haupt-IP für einzelne IPs und die IP aus dem im Hostsystem konfigurierten Subnetz für Subnetze.
Gastkonfiguration:
-
Mit einer zusätzlichen IP aus dem gleichen Subnetz:
# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet static adresse 198.51.100.30/32 # Zusätzliche IP gateway 198.51.100.10 # Haupt-IP # IPv6 iface ens18 inet6 static address 2001:DB8::4/64 # IPv6-Adresse des Subnetzes gateway 2001:DB8::3 # Bridge Adresse
-
Mit einer fremden Additional IP:
# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet static address 192.0.2.20/32 # Zusätzliche IP aus einem fremden Subnetz gateway 198.51.100.10 # Haupt-IP
-
Mit einer IP aus dem zusätzlichen Subnetz:
# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet static address 203.0.113.10/24 # Subnetz-IP gateway 203.0.113.1 # Gateway ist die IP der bridge (vmbr1)
-
Mit einer IP aus dem failover Subnetz:
# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet static address 172.17.234.10/24 # Failover Subnetz-IP gateway 172.17.234.1 # Gateway ist die IP der bridge (vmbr2)
-
Einzelne failover IP:
# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet static address 172.17.234.100/32 # Failvoer IP gateway 198.51.100.10 # Haupt-IP
-
2.2 Bridged Setup
Wenn Sie Proxmox im Bridged-Modus einrichten, müssen Sie unbedingt virtuelle MAC-Adressen für jede einzelne zusätzliche IP-Adresse über das Robot Panel anfordern (virtuelle MAC-Adressen können nur für einzelne zusätzliche IP-Adressen generiert werden). In diesem Modus fungiert der Host als transparente Brücke und ist nicht Teil des Routing-Pfads. Das bedeutet, dass Pakete, die am Router ankommen, die MAC-Quelladresse der virtuellen Maschinen enthalten. Wenn die MAC-Quelladresse vom Router nicht erkannt wird, wird der Datenverkehr als "Abuse" eingestuft und kann dazu führen, dass der Server blockiert wird. Daher ist es wichtig, virtuelle MAC-Adressen im Robot Panel anzufordern.
-
Hostsystem Bridged
Wir konfigurieren hier nur die Haupt-IP des Servers. Die zusätzlichen IPs werden in den Gastsystemen konfiguriert.
# /etc/network/interfaces auto lo iface lo inet loopback auto enp0s31f6 iface enp0s31f6 inet manual auto vmbr0 iface vmbr0 inet static address 198.51.100.10/32 # Haupt-IP gateway 198.51.100.1 # Gateway bridge-ports enp0s31f6 bridge-stp off bridge-fd 0
-
Gastsystem Bridged (Debian 12)
Hier verwenden wir das Gateway der zusätzlichen IP, oder wenn die zusätzliche IP im gleichen Subnetz wie die Haupt-IP liegt, verwenden wir das Gateway der Haupt-IP.
Statische Konfiguration:
# /etc/network/interfaces auto ens18 iface ens18 inet static address 192.0.2.20/32 # Zusätzliche IP gateway 192.0.2.1 # Gateway der zusätzlichen IP
Im Bridged Modus kann DHCP auch zur automatischen Konfiguration der Netzwerkeinstellungen verwendet werden. Es ist jedoch wichtig, die virtuelle Maschine so zu konfigurieren, dass sie die vom Robot Panel erhaltene virtuelle MAC-Adresse für die spezifische IP-Konfiguration verwendet.
Sie können dies auch manuell in der virtuellen Maschine selbst, in
/etc/network/interfaces
, einstellen:# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet dhcp hwaddress ether aa:bb:cc:dd:ee:ff # Die MAC-Adresse ist nur ein Beispiel
Dasselbe kann für LXC-Container über die Proxmox-GUI gemacht werden, indem Sie einfach auf den Container klicken, zu "Network" navigieren und dann auf die Bridge klicken. Wählen Sie DHCP und fügen Sie die korrekte MAC-Adresse aus dem Robot Panel hinzu (in unserem Fall wäre das Beispiel
aa:bb:cc:dd:ee:ff
):
2.3 vSwitch mit öffentlichem Subnetz
Proxmox kann auch so eingerichtet werden, dass es sich direkt mit einem Hetzner vSwitch verbindet, der das Routing für ein öffentliches Subnetz verwaltet, so dass IP-Adressen aus diesem Subnetz direkt an VMs und Container zugewiesen werden können. Das Setup muss ein Bridged-Setup sein und es muss ein virtuelles Interface erstellt werden, damit die Pakete den vSwitch erreichen können. Die Bridge muss nicht VLAN-fähig sein und es muss keine VLAN-Konfiguration innerhalb der VM oder des LXC-Containers vorgenommen werden, das VLAN tagging erfolgt hier über das Subinterface, in unserem Beispiel das enp0s31f6.4009
. Jedes Paket, das durch das Interface geht, wird mit der entsprechenden VLAN ID getaggt. (Bitte beachten Sie, dass diese Konfiguration für die LXC/VM's gedacht ist. Wenn Sie möchten, dass der Host selbst mit dem vSwitch kommunizieren kann, müssen Sie eine zusätzliche Routing-Tabelle erstellen). In diesem Fall werden wir 203.0.113.0/24
als Beispielsubnetz verwenden.
- Hostsystem Konfiguration:
# /etc/network/interfaces auto enp0s31f6.4009 iface enp0s31f6.4009 inet manual auto vmbr4009 iface vmbr4009 inet static bridge-ports enp0s31f6.4009 bridge-stp off bridge-fd 0 mtu 1400 #vSwitch Subnetz 203.0.113.0/24
- Gastsystem Konfiguration:
# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet static address 203.0.113.2/24 # Subnetz-IP vom vSwitch gateway 203.0.113.1 # vSwitch-Gateway
2.4 Hetzner Cloud Netzwerk
Es ist auch möglich, eine Verbindung zwischen den virtuellen Maschinen/LXC in Proxmox mit dem Hetzner Cloud Netzwerk herzustellen. Für dieses Beispiel nehmen wir an, dass Sie Ihr Cloud Netzwerk bereits eingerichtet haben und den vSwitch mit der folgenden Konfiguration hinzugefügt haben:
192.168.0.0/16
- Ihr Cloud Netzwerk (übergeordnetes Netzwerk)192.168.0.0/24
- Subnetz des Cloud Servers192.168.1.0/24
- vSwitch (#12345)
Die Konfiguration sollte in etwa wie folgt aussehen:
Ähnlich wie im Beispiel zuvor erstellen wir zunächst eine virtuelle Schnittstelle und definieren die VLAN ID, in unserem Fall wäre das enp0s31f6.4000
. Wir müssen die Route zum Cloud Netzwerk 192.168.0.0/16
über den vSwitch hinzufügen. Bitte beachten Sie, dass das Hinzufügen einer Route zum Hetzner-Cloud-Netzwerk und das Zuweisen einer IP-Adresse aus dem privaten Subnetzbereich des vSwitch an die Bridge nur notwendig ist, wenn der Proxmox-Host selbst mit dem Hetzner-Cloud-Netzwerk kommunizieren soll.
- Hostsystem Konfiguration:
# /etc/network/interfaces auto enp0s31f6.4000 iface enp0s31f6.4000 inet manual auto vmbr4000 iface vmbr4000 inet static address 192.168.1.10/24 bridge-ports enp0s31f6.4000 bridge-stp off bridge-fd 0 mtu 1400 post-up ip route add 192.168.0.0/16 via 192.168.1.1 dev vmbr4000 #vSwitch-to-cloud Privates Subnetz 192.168.1.0/24
- Gastsystem Konfiguration:
# /etc/network/interfaces auto lo iface lo inet loopback auto ens18 iface ens18 inet static address 192.168.1.2/24 gateway 192.168.1.1
2.5 Masquerading (NAT)
Die Freigabe der virtuellen Maschinen/LXC-Container gegenüber dem Internet ist auch möglich, ohne weitere öffentliche zusätzliche IP-Adressen zu konfigurieren/zu nutzen. Hetzner hat eine strenge IP/MAC-Bindung, d.h. wenn der Datenverkehr nicht richtig geroutet wird, kommt es zu Abuse und kann zu Server-Sperrungen führen. Um dieses Problem zu vermeiden, können wir den Datenverkehr von den LXC/VMs über das Main-Interface des Hosts leiten. Dadurch wird sichergestellt, dass alle Netzwerkpakete die gleiche MAC-Adresse verwenden. Masquerading ermöglicht virtuellen Maschinen mit privaten IP-Adressen den Internetzugang über die öffentliche IP-Adresse des Hosts für ausgehende Kommunikation. Iptables ändert jedes ausgehende Datenpaket so, dass es so aussieht, als käme es vom Host, und eingehende Antworten werden so angepasst, dass sie an den ursprünglichen Absender zurückgeleitet werden können.
# /etc/network/interfaces
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto enp0s31f6
iface enp0s31f6 inet static
address 198.51.100.10/24
gateway 198.51.100.1
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
#post-up iptables -t nat -A PREROUTING -i enp0s31f6 -p tcp -m multiport ! --dports 22,8006 -j DNAT --to 172.16.16.2
#post-down iptables -t nat -D PREROUTING -i enp0s31f6 -p tcp -m multiport ! --dports 22,8006 -j DNAT --to 172.16.16.2
auto vmbr4
iface vmbr4 inet static
address 172.16.16.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s '172.16.16.0/24' -o enp0s31f6 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '172.16.16.0/24' -o enp0s31f6 -j MASQUERADE
#NAT/Masq
Bitte beachten Sie, dass diese Regeln (unten) nicht notwendig sind, damit die LXC/VM's Zugang zum Internet haben. Diese Regel ist optional und dient dem Zweck des externen Zugriffs auf eine bestimmte VM/Container. Sie leitet den gesamten eingehenden Datenverkehr, außer auf den Ports 22 und 8006 (22 ist hier ausgenommen, damit Sie sich weiterhin über SSH mit Proxmox verbinden können, und 8006 ist der Port für das Webinterface), an eine bestimmte virtuelle Maschine unter `172.16.16.2` innerhalb des Subnetzes um. Dies ist ein übliches Szenario/Setup für Router-VMs wie pfSense, bei dem der gesamte eingehende Verkehr an die Router-VM umgeleitet und dann entsprechend geroutet wird.
post-up iptables -t nat -A PREROUTING -i enp0s31f6 -p tcp -m multiport ! --dports 22,8006 -j DNAT --to 172.16.16.2
post-down iptables -t nat -D PREROUTING -i enp0s31f6 -p tcp -m multiport ! --dports 22,8006 -j DNAT --an 172.16.16.2
Schritt 3 - Sicherheit
Das Webinterface ist durch zwei verschiedene Authentifizierungsmethoden geschützt:
- Proxmox VE-Standard-Authentifizierung (Proxmox-eigene Authentifizierung)
- Linux PAM-Standard-Authentifizierung
Dennoch wären zusätzliche Schutzmaßnahmen empfehlenswert, um sich vor der Ausnutzung von Sicherheitslücken oder verschiedenen anderen Angriffen zu schützen.
Hier sind einige Möglichkeiten:
Ergebnis
Mit diesem Tutorial sollten Sie Proxmox VE als Virtualisierungsplattform auf Ihrem Server installiert und konfiguriert haben.
Proxmox VE unterstützt auch Clustering. Details finden Sie im Tutorial "Einrichten einer eigenen Public Cloud mit Proxmox auf Hetzner Bare Metal" (EN).