Table des matières
Changer le réseau par défaut libvirt
libvirtd crée par défaut un réseau de type nat, c'est a dire qu'en plus de faire le café, libvirt lance automatiquement un serveur DHCP sur ce réseau, mais aussi insere des règles de firewall qui ont la facheuse tendance a ne pas cohabiter avec les règles existantes.
Du coup si vous voulez remplacer le réseau par défaut par un ou vous gérez vous mêmes vos regles de firewall/NAT, ce guide est fait pour vous. On va remplacer le réseau par defaut de type NAT par un réseau de type bridge. Il faut gérer manuellement la création du bridge ainsi que les regles de firewall
Detruire l'ancien réseau par défaut
# virsh net-destroy default # virsh net-undefine default
Definir notre nouveau réseau libvirt par défaut
Créer les interfaces nécessaires
Pour ne pas que votre bridge change d'adresse MAC (il prend l'adresse MAC de la première interface intégrée dans le bridge) nous allons définir une interface dummy avec MAC connue et fixe.
Génération d'adresse MAC
Pour générer une adresse MAC aléatoire conforme à ce qu'attend libvirt pour du KVM (52:54:00:xx:xx:xx) :
$ hexdump -vn3 -e '/3 "52:54:00"' -e '/1 ":%02x"' -e '"\n"' /dev/urandom
Notez cette adresse MAC que nous allons réutiliser dans la suite (52:54:00:78:f9:8c pour nous)
Création des interfaces dummy et bridge
Nous utiliserons une interface bridge nommee virbr0, adapter la suite si vous souhaitez modifier le nom. Idem pour notre sous réseau ip associé 192.168.123.0/24.
Sous Debian (stretch) nous définirons ces interfaces dans le fichier /etc/network/interfaces.d/libvirt avec le contenu suivant :
auto virbr0-dummy iface virbr0-dummy inet manual pre-up /sbin/ip link add virbr0-dummy type dummy up /sbin/ip link set virbr0-dummy address 52:54:00:78:f9:8c down /sbin/ip link del virbr0-dummy auto virbr0 iface virbr0 inet static bridge_ports virbr0-dummy bridge_stp on bridge_fd 2 address 192.168.123.1 netmask 255.255.255.0
ces interfaces seront automatiquement activées lors du prochain redémarrage, mais pour les activer manuellement pour l'instant sans redémarrer :
# ifup virbr0-dummy
On peut vérifier la configuration obtenue avec un petit “ip a s virbr0” comme dans l'exemple suivant :
# ip a s virbr0 13: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:78:f9:8c brd ff:ff:ff:ff:ff:ff inet 192.168.123.1/24 brd 192.168.123.255 scope global virbr0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe78:f98c/64 scope link valid_lft forever preferred_lft forever
Definir réellement notre nouveau réseau libvirt par défaut
- Créer le fichier XML de définition du réseau (par exemple /tmp/default-network.xml) avec le contenu suivant :
<network> <name>default</name> <forward mode='bridge'/> <bridge name='virbr0' /> </network>
- Définir ce réseau, le démarrer et activer son autodémarrage :
# virsh net-define /tmp/default-network.xml # virsh net-start default # virsh net-autostart default
On peut vérifier a l'aide de la commande “virsh net-list” que tout est conforme, comme par exemple :
# virsh net-list Name State Autostart Persistent ---------------------------------------------------------- default active yes yes
# apt-get install dnsmasq
Il reste ensuite à le configurer pour n'écouter que sur cette interface virbr0