Si la configuration réseau d'un container LXC peut s'effectuer directement depuis l'interface web de Proxmox VE, il est était nécessaire (et pénible) de la réaliser via la console NoVNC pour les machines virtuelles KVM tournant sous Debian/Ubuntu.
Nous allons voir dans ce tutoriel, comment configurer le réseau d'une machine virtuelle KVM en utilisant qemu-nbd, qui permet de monter le disque d'une VM et donc d'accéder directement aux fichiers de configuration des interfaces réseau.
Si la procédure peut sembler longue pour configurer une seule VM, il sera tout à fait possible de l'automatiser avec un script bash par la suite.
PS : Alors que j'écris ces lignes, le module cloud-init a déjà fait son apparition sur Proxmox VE 5.1, et représentera très probablement une excellente alternative à la solution présentée dans cette article. Mais cela fera sûrement l'objet d'un autre article.
Installer le client nbd
Pour commencer, il faut installer le client nbd sur votre serveur Proxmox.
apt-get update && apt-get install nbd-client -y
Puis charger le module :
modprobe nbd max_part=16
Et enfin, pour rendre la configuration persistente, on utilise :
echo "nbd" >> /etc/modules
cat > /etc/modprobe.d/nbd.conf <<\EOT
options nbd max_part=16
EOT
Monter le disque d'un VM avec qemu-nbd
Cas d'une machine virtuelle sans LVM
Pour monter le disque d'une VM, on utilise qemu-nbd
:
qemu-nbd -c /dev/nbd0 vm-101* -f raw
vm-101 correspond à l'ID de la machine virtuelle dans Proxmox.
On créer ensuite un dossier dans lequel nous allons pouvoir monter le disque de la machine virtuelle :
mkdir /mnt/ma-vm
mount /dev/nbd0p1 /mnt/ma-vm
Cas d'une machine virtuelle avec LVM
Dans le cas d'un LVM, il n'est pas possible de monter directement la partition car il faut pour cela connaître le nom du volume group qui contient les fichiers de configuration.
La procédure pour monter le disque est quasiment la même que précédemment :
qemu-nbd -c /dev/nbd0 vm-101*
Mais cette fois-ci on utilise vgscan
pour détecter les volume groups disponibles
vgscan
On obtient alors la liste des volume group et on active le volume auquel on souhaite accéder :
vgchange -a y vp-vg
Nous pouvons alors monter le VG :
mkdir /mnt/ma-vm
mount /dev/vp-vg/root /mnt/ma-vm
Configurer l'interface réseau
Maintenant que le disque de notre machine virtuelle est monté dans le répertoire /mnt/ma-vm
, nous pouvons modifier la configuation de ses interfaces réseau.
On se déplace à la racine du disque :
cd /mnt/ma-vm/
Et nous pouvons modifier directement le fichier /etc/network/interfaces
dans le cas d'une machine virtuelle tournant sous Debian ou Ubuntu (exemple avec Ubuntu 16.04 LTS sur un serveur dédié OVH) :
cat > etc/network/interfaces << EOF
auto ens18
iface ens18 inet static
address IP.FAIL.OVER
netmask 255.255.255.255
broadcast IP.FAIL.OVER
post-up route add IP.SERVEUR.DEDIE.254 dev ens18
post-up route add default gw IP.SERVEUR.DEDIE.254
pre-down route del IP.SERVEUR.DEDIE.254 dev ens18
pre-down route del default gw IP.SERVEUR.DEDIE.254
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 213.186.33.99
iface ens18 inet6 static
address IP:V6:FAIL:OVER
netmask 64
post-up /sbin/ip -f inet6 route add XXXX:XXXX:XXX:XXff:ff:ff:ff:ff dev ens18
post-up /sbin/ip -f inet6 route add default via XXXX:XXXX:XXX:XXff:ff:ff:ff:ff
pre-down /sbin/ip -f inet6 route del XXXX:XXXX:XXX:XXff:ff:ff:ff:ff dev ens18
pre-down /sbin/ip -f inet6 route del default via XXXX:XXXX:XXX:XXff:ff:ff:ff:ff
EOF
Terminer la configuration
Une fois la modification terminée, nous pouvons démonter le disque de la VM.
Sans LVM
Sans LVM, la méthode est la même que pour monter le disque
cd ..
umount /dev/nbd0p1
qemu-nbd -d /dev/nbd0
rm -r /mnt/ma-vm
Avec LVM
Avec LVM, il faut utiliser à nouveau vgchange de désactiver le volume group :
cd ..
umount /dev/vp-vg/root
vgchange -a n vp-vg
qemu-nbd -d /dev/nbd0
rm -r /mnt/ma-vm
Dernière étapes, redémarrer la machine virtuelle pour appliquer les modificiations. J'espère que cet article vous aidera à automatiser un peu plus vos création de machines virtuelles.
Commentaires