Jak vyřešit problém s duplicitní IP adresou při klonování virtuálního serveru s DHCP a Ubuntu
V tomto článku dozvíte proč DHCP server přiděluje klonu virtuálního serveru IP adresu identickou se zdrojovým serverem, přestože klon a zdrojový server mají různé MAC adresy. Dozvíte se jak tento problém vyřešit.
Typická situace
Používáte Proxmox / Qemu / VMWare, vytvořili jste dokonale nakonfigurovaný virtuální server s Ubuntu a vyrobili jste jeho klon. Přestože jste následovali rady dokumentace, a ujistili jste se, že MAC adresy obou serverů jsou různé, jak zdroj tak klonovaný server dostávají od DHCP serveru přidělenu stejnou IP adresu!
Obvykle se s tímto problémem setkáte při klonování serverů s OS Ubuntu Server 18.04, Ubuntu 19.10, Ubuntu 20.04 a novějších. Příčinou vašeho problému jsou moznosti DHCPv4 (RFC 3942) a standardní nastavení Linux OS používající pro konfiguraci sítě /etc/netplan s konfigurovaným explicitním rendererem systemd-networkd. Standardní konfigurace systemd-networkd totiž využívá pro generování unikátního DHCP Client identifikátoru právě machine-id, které je při klonování zkopírováno.
Rychlá oprava
Na mnoha místech Internetu najdete jako řešení vašeho problému rychlou opravu / workaround v podobě vymazání machine-id.
Zde je jeden způsob jak toho dosáhnout:
- Přihlásit se jako root
- Vynulovát machine-id
echo -n > /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id - Restartovat klonovaný server
Pozn: pokud klonujete ze šablony, pak doporučuji tyto kroky provézt již při tvorbě šablony, tj. bez 3.kroku, machine-id tak bude vygenerováno při prvním startu klonovaného serveru!
Alternativní postup:
- Přihlásit se jako root
- Vynulovát machine-id
echo -n > /etc/machine-id
systemd-machine-id-setup - Obnovit konfiguraci sítě
netplan apply
Alternativní řešení
Jako další možnost se nabízí upravit konfiguraci systemd-networkd tak, aby využil pro vytváření DHCP Client Identifikátoru MAC adresu síťová karty. Dosáhneme toho přidáním dhcp-identifier: mac do konfiguračního souboru netplan ve složce /etc/netplan (viz netplan.io – příklady)
$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp3s0:
dhcp4: true
dhcp-identifier: mac
version: 2
Zmeny se projevi po re-konfiguraci sítě nebo po restartu.
sudo netplan apply
Elegance na závěr
Případě že vaším zdrojem pro klonování je claud-image, který jste předtím sami vytvořili, můžete elegantně problému předejít jednoduchou změnou ve vašem výrobním postupu. Stačí zařadit vynulováním /etc/system-id po spuštění virt-sysprep.
...
virt-sysprep -a /tmp/my-cloud-image.img
virt-customize -a /tmp/my-cloud-image
.img --truncate /etc/machine-id
...