Proxmox VE 9 auf verschlüsseltem Debian 13 mit Dropbear-Remote-Unlock installieren
Diese Anleitung beschreibt die Installation von Proxmox VE 9 auf einem bereits installierten Debian 13 System mit verschlüsseltem Root-Dateisystem via LUKS. Das System wird vor dem Boot per dropbear-initramfs über SSH entsperrt. Zusätzlich wird ein zweiter verschlüsselter lokaler Storage für VM-Disks und ISO-Dateien eingerichtet.
Ausgangslage in diesem Beispiel:
- Debian 13 Trixie ist bereits installiert.
- Root liegt auf LUKS + LVM.
/bootund/boot/efisind unverschlüsselt.dropbear-initramfsfunktioniert bereits.- Der Server wird als
rootadministriert. - Hostname:
byte-me - Management-IP:
10.100.3.13
1. Bestehende Partitionierung prüfen
lsblk
df -h
uname -r
Beispielhafte Zielstruktur für das Systemlaufwerk:
nvme0n1
├─nvme0n1p1 /boot/efi
├─nvme0n1p2 /boot
└─nvme0n1p3 crypto_LUKS
└─nvme0n1p3_crypt
├─broken--vg-root /
└─broken--vg-swap_1 [SWAP]
Wichtig: /boot ist bei verschlüsselten Debian-Installationen oft klein. Proxmox-Kernel und Initramfs-Dateien können sehr groß werden. Vor der Installation sollte ausreichend Platz geschaffen werden.
2. Alten Debian-Kernel bereinigen
Aktuell laufenden Kernel prüfen:
uname -r
Installierte Kerneldateien prüfen:
ls -lh /boot
dpkg -l 'linux-image*' 'linux-headers*' | awk '/^ii|^rc/ {print $1, $2, $3}'
Wenn mehrere alte Kernel vorhanden sind, zuerst in den neuesten Debian-Kernel booten und danach alte Kernel entfernen.
Beispiel:
apt purge linux-image-6.12.85+deb13-amd64
apt autoremove
update-grub
df -h /boot
Falls das Paket anders heißt, den Besitzer der Kerneldatei ermitteln:
dpkg -S /boot/vmlinuz-6.12.85+deb13-amd64
Dann das exakt passende Paket entfernen, zum Beispiel:
apt purge linux-image-6.12.85+deb13-amd64-unsigned
3. Proxmox Repository einrichten
Benötigte Werkzeuge installieren:
apt install -y wget ca-certificates
Proxmox-Keyring für Debian 13 / Trixie herunterladen:
wget https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -O /usr/share/keyrings/proxmox-archive-keyring.gpg
Hash prüfen:
sha256sum /usr/share/keyrings/proxmox-archive-keyring.gpg
Erwarteter Hash:
136673be77aba35dcce385b28737689ad64fd785a797e57897589aed08db6e45 /usr/share/keyrings/proxmox-archive-keyring.gpg
Repository-Datei anlegen:
cat > /etc/apt/sources.list.d/proxmox.sources <<'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
Paketlisten aktualisieren:
apt update
4. Proxmox-Kernel installieren
Zuerst nur den Proxmox-Kernel installieren, noch nicht das komplette Proxmox-Paket:
apt install proxmox-default-kernel
Danach GRUB prüfen:
update-grub
Erwartet wird ein Eintrag ähnlich zu:
Found linux image: /boot/vmlinuz-7.0.2-2-pve
Found initrd image: /boot/initrd.img-7.0.2-2-pve
5. Initramfs-Größe bei kleinem /boot reduzieren
Bei kleinem /boot kann der Proxmox-Initramfs zu groß werden. In diesem Setup wurde die Kompression von zstd auf xz geändert.
Datei öffnen:
nano /etc/initramfs-tools/initramfs.conf
Diese Zeile ändern:
COMPRESS=zstd
zu:
COMPRESS=xz
MODULES=most wurde bewusst beibehalten, damit Netzwerk- und Storage-Treiber für Dropbear/LUKS möglichst robust im Initramfs enthalten bleiben.
Proxmox-Initramfs neu bauen:
update-initramfs -c -k 7.0.2-2-pve
Prüfen:
df -h /boot
ls -lh /boot/initrd.img-7.0.2-2-pve
6. In den Proxmox-Kernel booten
reboot
Nach dem Reboot wie gewohnt per Dropbear entsperren.
Danach prüfen:
uname -r
Erwartet:
7.0.2-2-pve
7. Debian-Kernel entfernen
Nachdem der Proxmox-Kernel erfolgreich gebootet wurde, können die Debian-Kernel entfernt werden. Das schafft Platz in /boot und verhindert spätere Initramfs-Probleme.
Paketnamen ermitteln:
dpkg -S /boot/vmlinuz-6.12.86+deb13-amd64
Falls Debian-Headers den Kernel wieder installieren wollen, Kernel und Headers zusammen entfernen:
apt purge linux-image-6.12.86+deb13-amd64-unsigned linux-headers-6.12.86+deb13-amd64 linux-headers-6.12.86+deb13-common linux-headers-amd64
Danach Proxmox-Initramfs erneut bauen:
update-initramfs -c -k 7.0.2-2-pve
update-grub
df -h /boot
8. ZFS-DKMS entfernen und Proxmox-ZFS verwenden
Falls Debian-ZFS bereits installiert war, insbesondere zfs-dkms, sollte zfs-dkms entfernt werden. Proxmox nutzt eigene Kernel und passende ZFS-Pakete.
ZFS-Pakete prüfen:
dpkg -l 'zfs*' 'spl*' | awk '/^ii|^rc/ {print $1, $2, $3}'
zfs-dkms entfernen:
apt purge zfs-dkms
Falls dabei zfsutils-linux und zfs-zed entfernt wurden, diese aus dem Proxmox-Repository wieder installieren:
apt install zfsutils-linux zfs-zed
Prüfen:
dpkg -l 'zfs*' 'proxmox*' 'pve*' | awk '/^ii|^rc/ {print $1, $2, $3}'
Gewünscht:
ii proxmox-default-kernel ...
ii proxmox-kernel-7.0 ...
ii pve-firmware ...
ii zfs-zed ...
ii zfsutils-linux ...
Nicht gewünscht:
ii zfs-dkms ...
9. Proxmox VE installieren
apt install proxmox-ve postfix open-iscsi chrony
Bei der Postfix-Abfrage kann für einen normalen Proxmox-Host gewählt werden:
Local only
Entfernungen während der Installation sind normal:
exim4-*wird durchpostfixersetzt.ifupdownwird durchifupdown2ersetzt.systemd-timesyncdwird durchchronyersetzt.
10. Hostname-Auflösung für Proxmox korrigieren
Proxmox benötigt, dass der Hostname auf eine echte Nicht-Loopback-IP zeigt. Wenn pve-cluster nicht startet und im Journal steht:
Unable to resolve node name 'byte-me' to a non-loopback IP address
dann muss /etc/hosts angepasst werden.
Datei öffnen:
nano /etc/hosts
Beispiel:
127.0.0.1 localhost
10.100.3.13 byte-me.localdomain byte-me
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Wichtig: Der Hostname byte-me darf nicht auf 127.0.0.1 oder 127.0.1.1 zeigen.
Prüfen:
hostname
hostname -f
getent hosts byte-me
Erwartung:
byte-me
byte-me.localdomain
10.100.3.13 byte-me.localdomain byte-me
Proxmox-Dienste neu starten:
systemctl reset-failed pve-cluster
systemctl restart pve-cluster
systemctl restart pvedaemon pveproxy pvestatd
Status prüfen:
systemctl status pve-cluster pvedaemon pveproxy pvestatd --no-pager
Erwartung:
pve-cluster active
pvedaemon active
pveproxy active
pvestatd active
Weboberfläche:
https://10.100.3.13:8006/
Verschlüsselten lokalen VM-Storage einrichten
Zusätzlich wurde eine zweite NVMe als verschlüsselter Storage für VMs und ISO-Dateien eingerichtet. In diesem Beispiel:
/dev/nvme1n1
Achtung: Die folgenden Schritte löschen die Zielplatte. Nicht auf dem Systemlaufwerk ausführen.
11. Zielplatte prüfen
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
wipefs -n /dev/nvme1n1
Beispiel:
nvme1n1 953,9G disk SKHynix_HFS001TEJ9X162N
12. Partition erstellen
fdisk /dev/nvme1n1
In fdisk:
g
n
1
y
w
Danach prüfen:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL /dev/nvme1n1
Erwartung:
nvme1n1 953,9G disk
└─nvme1n1p1 953,9G part
13. LUKS2 sicher formatieren
cryptsetup luksFormat \
--type luks2 \
--label crypt-vmstore \
--cipher aes-xts-plain64 \
--key-size 512 \
--hash sha512 \
--pbkdf argon2id \
--iter-time 5000 \
--verify-passphrase \
/dev/nvme1n1p1
Eine lange Passphrase verwenden. Keine kurzen Passwörter, keine Projektnamen, keine Tastaturmuster.
14. LUKS öffnen
In diesem Beispiel wurde der Mapper exploding_disk genannt.
cryptsetup open /dev/nvme1n1p1 exploding_disk
Prüfen:
lsblk /dev/nvme1n1p1
Erwartung:
nvme1n1p1
└─exploding_disk
15. LUKS-Header sichern
Ein LUKS-Header-Backup ist wichtig. Wenn der Header beschädigt wird, sind die Daten sonst praktisch verloren.
mkdir -p /root/luks-header-backups
chmod 700 /root/luks-header-backups
cryptsetup luksHeaderBackup /dev/nvme1n1p1 \
--header-backup-file /root/luks-header-backups/nvme1n1p1-crypt-vmstore-header.img
chmod 400 /root/luks-header-backups/nvme1n1p1-crypt-vmstore-header.img
Dieses Header-Backup sollte zusätzlich extern und sicher verschlüsselt gesichert werden. Ohne passenden Header und ohne Passphrase sind die Daten nicht wiederherstellbar.
16. LVM auf dem entschlüsselten Device erstellen
pvcreate /dev/mapper/exploding_disk
vgcreate vg_vmstore /dev/mapper/exploding_disk
Prüfen:
vgs
pvs
Erwartung:
VG VSize VFree
vg_vmstore 953,85g 953,85g
17. LVM-thin für VM-Disks erstellen
lvcreate -L 850G -T vg_vmstore/vmdata
Prüfen:
lvs
Beispiel:
LV VG Attr LSize
vmdata vg_vmstore twi-a-tz-- 850,00g
18. ISO-Storage erstellen
lvcreate -L 60G -n iso vg_vmstore
mkfs.ext4 -L pve-iso /dev/vg_vmstore/iso
mkdir -p /mnt/pve/iso-store
UUID anzeigen:
blkid /dev/vg_vmstore/iso
Beispiel:
/dev/vg_vmstore/iso: LABEL="pve-iso" UUID="0f1496f7-d7ad-4e97-9243-cff799d44e5e" BLOCK_SIZE="4096" TYPE="ext4"
19. ISO-Storage in /etc/fstab eintragen
nano /etc/fstab
Eintrag ergänzen:
UUID=0f1496f7-d7ad-4e97-9243-cff799d44e5e /mnt/pve/iso-store ext4 defaults,noatime 0 2
Systemd neu laden und Mount testen:
systemctl daemon-reload
mount -a
df -h /mnt/pve/iso-store
20. Storage in Proxmox eintragen
LVM-thin für VM- und Container-Disks:
pvesm add lvmthin vmstore \
--vgname vg_vmstore \
--thinpool vmdata \
--content images,rootdir
Directory-Storage für ISOs und Container-Templates:
pvesm add dir iso-store \
--path /mnt/pve/iso-store \
--content iso,vztmpl
Status prüfen:
pvesm status
Beispiel:
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
iso-store dir active 61611820 2084 58447624 0.00%
local dir active 477545328 154494456 298719404 32.35%
vmstore lvmthin active 891289600 0 891289600 0.00%
Optional: Automatisches Entsperren des zweiten LUKS-Storage
Ein Keyfile auf dem verschlüsselten Root-Dateisystem ist komfortabel, reduziert aber die Trennung der Sicherheitsstufen. Ohne Keyfile braucht ein Angreifer bei Diebstahl beider Platten Root-Passphrase und Storage-Passphrase. Mit Keyfile reicht die Root-Passphrase, weil danach das Keyfile verfügbar ist.
Variante A: Maximale Trennung
Kein Keyfile verwenden. Nach jedem Boot manuell entsperren:
cryptsetup open /dev/nvme1n1p1 exploding_disk
vgchange -ay vg_vmstore
mount -a
VM-Autostart für VMs auf diesem Storage sollte dann deaktiviert werden, weil der Storage nach dem Boot zunächst fehlt.
Variante B: Komfortabler Auto-Unlock nach Root-Unlock
Keyfile auf verschlüsseltem Root-Dateisystem erstellen:
mkdir -p /root/luks-keys
chmod 700 /root/luks-keys
dd if=/dev/random of=/root/luks-keys/exploding_disk.key bs=64 count=1
chmod 400 /root/luks-keys/exploding_disk.key
Keyfile zu LUKS hinzufügen:
cryptsetup luksAddKey /dev/nvme1n1p1 /root/luks-keys/exploding_disk.key
LUKS-UUID anzeigen:
blkid /dev/nvme1n1p1
/etc/crypttab bearbeiten:
nano /etc/crypttab
Eintrag ergänzen:
exploding_disk UUID=DEINE-LUKS-UUID-HIER /root/luks-keys/exploding_disk.key luks
Systemd neu laden:
systemctl daemon-reload
Ceph-Zukunftsplanung
Für später geplante drei Proxmox-Nodes mit Ceph gilt:
- Die aktuell lokal genutzte NVMe muss später für Ceph gelöscht werden.
- VMs müssen vorher vom lokalen Storage auf Ceph migriert werden.
- Ceph-OSDs sollten später direkt über Proxmox/Ceph mit Encryption erstellt werden.
- Nicht vorher manuell LUKS + LVM bauen und dann Ceph darüberlegen.
Geplanter späterer Ablauf:
1. PVE 2 und PVE 3 installieren
2. Cluster erstellen
3. Dediziertes 10G-Netz für Ceph konfigurieren
4. Ceph installieren
5. Auf allen Nodes freie NVMe als verschlüsselte Ceph-OSD einrichten
6. Ceph-Pool erstellen
7. VM-Storage auf Ceph RBD anlegen
8. VMs vom lokalen vmstore auf Ceph migrieren
9. Lokalen LUKS/LVM-Storage auf nvme1n1 entfernen
10. nvme1n1 als Ceph-OSD neu verwenden
Mit nur einem Node ist Ceph nicht sinnvoll redundant. Für produktive Ceph-Nutzung sollten mindestens drei Proxmox-Nodes vorhanden sein.
Wichtige Checks nach der Einrichtung
dpkg --audit
df -h /boot
uname -r
pvesm status
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
vgs
lvs
systemctl status pve-cluster pvedaemon pveproxy pvestatd --no-pager
Erwartung:
Kernel: 7.0.2-2-pve
/boot nicht voll
pve-cluster active
pvedaemon active
pveproxy active
pvestatd active
vmstore active
iso-store active
Zusammenfassung
- Debian 13 mit LUKS-Root und Dropbear-Remote-Unlock wurde als Basis verwendet.
- Proxmox VE 9 wurde auf Debian installiert.
- Der Proxmox-Kernel wurde zuerst einzeln installiert und getestet.
/boot-Probleme wurden durch Entfernen alter Debian-Kernel undCOMPRESS=xzbehoben.zfs-dkmswurde entfernt und Proxmox-ZFS verwendet.- Hostname-Auflösung wurde für
pve-clusterkorrigiert. - Eine zweite NVMe wurde mit LUKS2 verschlüsselt.
- Darauf wurde LVM-thin für VM-Disks eingerichtet.
- Ein ext4-LV wurde als ISO-/Template-Storage eingebunden.
- Späterer Ceph-Betrieb ist möglich, erfordert aber Migration und Neuanlage der Disk als Ceph-OSD.
No Comments