Configurer la mise en réseau KVM avec virsh, nmcli et brctl sous Linux |
Il existe de nombreux choix de configurations réseau dans l'hôte KVM. Dans cet article, je vais vous guider à travers deux choix principaux pour configurer le réseau KVM. Nous considérerons la mise en réseau interne et la mise en réseau externe pour les systèmes d'exploitation invités fonctionnant sur KVM.
Les deux façons de configurer le réseau KVM que nous aborderons sont :
- Utilisation d'un pont Linux avec NAT pour les invités KVM
- Utilisation d'un pont Linux (sans NAT) pour les invités KVM
Les autres moyens disponibles pour configurer la mise en réseau KVM que nous n'aborderons pas dans cet article sont :
- Utiliser un pont Open vSwitch avec des invités KVM
- Utilisation du pilote MacVTap avec les invités KVM
Création d'un réseau de pont KVM Linux basé sur NAT
Cette configuration réseau utilise un pont Linux en combinaison avec la traduction d'adresses réseau (NAT) pour permettre à un système d'exploitation invité d'obtenir une connectivité sortante quel que soit le type de réseau (filaire, sans fil, ligne commutée, etc.) utilisé dans l'hôte KVM sans nécessitant une configuration administrateur spécifique.
L'utilisation de cette méthode pour configurer le réseau KVM est simple et directe.
Le moyen le plus rapide de commencer consiste à utiliser la configuration réseau par défaut existante. Videz la configuration XML du réseau par défaut à l'aide de la commande ci-dessous.
sudo virsh net-dumpxml default > br1.xmlVous pouvez modifier ce fichier en conséquence et l'utiliser pour définir une nouvelle interface réseau
Créer manuellement un fichier XML
Jetez un œil au fichier ci-dessous pour un aperçu général de la façon dont le fichier devrait ressembler :
Créez un nouveau fichier br1.xml
sudo vim br1.xmlAjoutez des paramètres de configuration réseau.
<network>
<name>br1</name>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='br1' stp='on' delay='0'/>
<ip address='192.168.10.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.10.10' end='192.168.10.100'/>
</dhcp>
</ip>
</network>
Pour définir un réseau à partir d'un fichier XML sans le démarrer, utilisez :
$ sudo virsh net-define br1.xml
Network br1 defined from br1.xmlPour démarrer un réseau inactif (précédemment défini), utilisez :
$ sudo virsh net-start br1
Network br1 startedPour créer un réseau transitoire qui ne peut pas être configuré pour démarrer automatiquement :
$ sudo virsh net-create br1.xml
Network br1 created from br1.xmlPour configurer le démarrage automatique du réseau, utilisez :
$ sudo virsh net-autostart br1
Network br1 marked as autostartedCochez Confirmer si l'indicateur de démarrage automatique est réglé sur oui – Persistant doit également lire oui.
$ sudo virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
br1 active yes yes
default active yes yes
Pour convertir un nom de réseau en UUID réseau – UUID précédemment défini, utilisez :
$ sudo virsh net-uuid br1
ed90dfcf-c895-4d5c-9d34-bd307f8c3ec0Confirmez que le pont a été créé avec succès
Vous pouvez utiliser la commande brctl fournie par le package bridge-utils pour vérifier les ponts disponibles sur votre système Linux.
$ sudo brctl show br1
bridge name bridge id STP enabled interfaces
br1 8000.525400515825 yes br1-nic
Vérification de l'adresse IP attribuée à l'interface
Vous pouvez utiliser la commande ip pour cela :
$ ip addr show dev br1
19: br1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:51:58:25 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global br1
valid_lft forever preferred_lft foreverAttacher une interface à une VM
Dans cet exemple, j'attacherai l'interface br1 à la machine virtuelle pxe qui sera configurée en tant que serveur d'environnement d'exécution de pré-lancement.
- Cela prend effet immédiatement et la carte réseau sera persistante lors des prochains redémarrages.
- Attachez l'interface comme ci-dessous :
$ sudo virsh attach-interface --domain pxe --type bridge \
--source br1 --model virtio --config --live
$ sudo virsh domiflist pxe
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge virbr0 virtio 52:54:00:e9:ad:17
vnet1 bridge br1 virtio 52:54:00:47:2f:ebDétacher une interface attachée à une VM
$ sudo virsh detach-interface --domain pxe --type bridge --mac 52:54:00:47:2f:eb --config
$ sudo virsh domiflist pxe
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge virbr0 virtio 52:54:00:e9:ad:17Supprimer un réseau
Pour supprimer complètement un réseau, suivez les étapes ci-dessous :
- Détruisez d’abord le réseau pour le mettre en mode inactif :
$ sudo virsh net-destroy br1
Network br1 destroyed- Ensuite, annulez la définition du réseau.
$ sudo virsh net-undefine br1
Network br1 has been undefined- Confirmez que le réseau n'est pas répertorié comme inactif/actif.
$ sudo virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes- Vous pouvez également utiliser la commande
brctlpour vérifier :
$ sudo brctl show br1
bridge br1 does not exist!Création d'un pont KVM Linux (sans NAT) pour les invités KVM
Une alternative à l'utilisation d'un réseau basé sur NAT pour configurer le réseau KVM serait d'utiliser un pont réseau Linux standard.
Un pont réseau est un périphérique Link Layer qui transfère le trafic entre les réseaux en fonction des adresses MAC et est donc également appelé périphérique Layer 2. Il prend des décisions de transfert basées sur des tableaux d'adresses MAC qu'il construit en apprenant quels hôtes sont connectés à chaque réseau.
Un pont logiciel peut être utilisé au sein d'un hôte Linux afin d'émuler un pont matériel, par exemple dans des applications de virtualisation pour partager une carte réseau avec une ou plusieurs cartes réseau virtuelles.
Créer un pont Linux à l'aide de nmcli
Nmcli est un client de ligne de commande pour NetworkManager. Il permet de contrôler NetworkManager et de signaler son état.
Pour créer un pont Linux appelé br0 à l'aide de nmcli, exécutez les commandes suivantes :
nmcli con add type bridge con-name br0 ifname br0 autoconnect yes
Cet exemple montre l'ajout d'une connexion maître de pont et d'un esclave.
- La première commande ajoute une connexion de pont maître, en nommant l'interface du pont et le profil
br0. - La deuxième commande ajoute le profil des esclaves asservi à
br0. L'esclave sera lié à l'interfaceens3. - La dernière commande désactivera
802.1DSTP pour le profilbr0.
Ensuite, modifiez le pont pour activer la connexion automatique, ajoutez l'adresse IPv4 et la passerelle :
nmcli connection modify br0 ipv4.addresses 192.168.10.5/24 \
ipv4.method manual ipv4.gateway 192.168.10.1 ipv4.dns 8.8.8.8 Affichez l'interface :
# nmcli con up br0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15)
# brctl show br0
bridge namebridge idurlSTP enabledinterfaces
br0-slave-18000.000000000000noCréer un pont Linux à l'aide de brctl
Si vous n'avez pas installé networkmanager, vous pouvez utiliser la commande brctl installée avec l'installation de bridge-utils pour configurer le pont Linux que nous utiliserons pour configurer le réseau KVM.
Créez un nouveau pont :
sudo brctl addbr br0Ajoutez un périphérique à un pont, par exemple eth0 :
sudo brctl addif br0 eth0Attribution d'une adresse IP :
sudo ip addr add dev br0 192.168.2.4/24
sudo ip route add default via 192.168.2.1 dev br0Afficher les ponts actuels et les interfaces auxquelles ils sont connectés :
$ brctl showConfigurez le périphérique pont :
$ sudo ip link set up dev br0Supprimez un pont, vous devez d'abord le définir :
$ sudo ip link set dev br0 down
$ sudo brctl delbr br0
$ sudo brctl delbr br0- https://wiki.libvirt.org/page/VirtualNetworking
- http://www.linux-kvm.org/page/Networking
- IBM – Centre de connaissances KVM
man 5 nmcli-examples
Si vous souhaitez générer des modèles de VM KVM, reportez-vous à :
- Comment créer des modèles de VM CentOS/Fedora/RHEL sur KVM
Pour automatiser le déploiement des VM sur KVM, vérifiez :
- Comment provisionner des machines virtuelles sur KVM avec Terraform
Lectures complémentaires :
- Maîtriser la virtualisation KVM
- Les essentiels de la virtualisation, 2e édition