Hetzner + Proxmox + Migration

Eine VM, die auf einem Hetzner-Rootserver unter virsh läuft, soll in einen existierenden Proxmox-Cluster umgezogen werden. Soweit kein Problem, aaaaber: die offizielle IP-Adresse, eine Hetzner-Zusatz-IP soll erhalten bleiben.

Da Hetzner die Zusatz-IPs nur maschinenspezifisch vergibt und keinen Umzug auf eine andere Maschine ermöglicht, muss der Traffic von der alten IP zur neuen VM im PVE umgeleitet werden. Nach Möglichkeit sollte das mit Bordmitteln (und zerotier) ohne iptables-Umleitungen funktionieren.

Zerotier

Das Mittel der Wahl, diverse Hosts performant miteinander zu verbinden, ist hier zerotier.

Unter der GUI wird ein neues Netzwerk angelegt, das alle teilnehmenden Hosts joinen.

Für den alten Virtualisierungshost (im Folgenden VH, wie Virsh-Host) genannt, sowie alle teinehmenden PVEs wird ein Eintrag in dieser Form angelegt:

VM-Networking

Auf dem alten Host wird eine Bridge mit einer privaten IP und einer Route zur Zusatz-IP angelegt:

auto vmbr1001
iface vmbr1001
         address 10.111.222.1/24
         bridge-ports none
         bridge-stp off
         bridge-fd 0
         up brctl addif vmbr1001 ztks553soy
         up ip link set ztks553soy up
         up ip route add <Zusatz-IP>/32 dev vmbr1001
         # bridge fuer alte VM

Die Zusatz-IP wird also auf diese Bridge geroutet

Auf den teilnehmenden PVEs wird eine ähnliche Bridge gleichen Namens (muss nicht!) angelegt, allerdings ohne IP-Adresse und Route.

auto vmbr1001
iface vmbr1001
         bridge-ports none
         bridge-stp off
         bridge-fd 0
         # siehe if-up.d/vmbr1001
         # bridge fuer alte VM

Beide Bridges werden über das vorher erzeugte Zerotier-Interface verbunden.

Da die Zerotier-Interfaces erst nach dem kompletten Netzwerk-Setup gestartet werden, muss das weitere Setup zeitverzögert erfolgen. Leider unterstützt zerotier bislang keine Script-hooks, ähnlich if-up.d, sonst könnte das weitere Setup dort erfolgen. So erledigt diese Aufgabe das Script if-up.d/vmbr1001 mit dem etwas unschönen „sleep“.

!/bin/sh
[ "$IFACE" != "vmbr1001" ] && exit 0
# Interface ztks553soy kommt erst mit zerotier hoch,
# ist also jetzt noch nicht bereit.
# Daher muss der folgende Block verzögert ausgeführt werden.
(
 sleep 30
 brctl addif vmbr1001 ztks553soy
 ip link set ztks553soy up
 ip r add <guest ip>/32 dev vmbr1001
) &

Guest Setup

Im portierten Guest wird als externes Interface jetzt die (auf dem PVE erzeugte) Bridge zugewiesen.

Im Gast wird jetzt die Hetzner Zusatz-IP dem externen Interface zugewiesen.

Im Guest muss jetzt noch das Gateway bekannt gemacht werden.

ip route add <private-ip-von-vmbr1001> dev eth0
ip route add default via <private-ip-von-vmbr1001> dev eth0

Danach sollte die Verbindung über die Bridge funktionieren.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert