{{tag>virtualisation sysadmin libvirt bridge dnsmasq firewall iptables NAT}} ====== 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) Pour du Xen il aurait fallu générer une adresse MAC en 00:16:3e:xx:xx:xx ==== 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: 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 : default * 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 Si vous souhaitez continuer à utiliser dnsmasq pour gérer le NDS/DHCP sur ce réseau par exemple, n'oubliez pas de l'installer completement : service et configuration globale : # apt-get install dnsmasq Il reste ensuite à le configurer pour n'écouter que sur cette interface virbr0 ===== Références ===== * https://jamielinux.com/docs/libvirt-networking-handbook/custom-nat-based-network.html * https://wiki.debian.org/HowTo/dnsmasq