Aller au contenu
English
English
Virtualisation medium

Créer un réseau libvirt personnalisé

25 min de lecture

Vous voulez un réseau NAT séparé du "default" pour isoler un projet ou un lab ? Cette recette vous montre comment créer un réseau libvirt personnalisé.

  • Définir un réseau libvirt sur mesure, au lieu de surcharger default
  • Écrire son XML : plage d'adresses, nom du bridge et mode de sortie
  • Y connecter une VM et rendre le réseau persistant au redémarrage
  • Distinguer net-destroy de net-undefine, qui ne font pas la même chose

Le réseau default de libvirt suffit tant que l'hôte ne porte qu'une poignée de machines. Dès que plusieurs projets cohabitent, il devient un point de collision : toutes les VMs partagent la même plage d'adresses et se voient mutuellement. Un réseau NAT dédié rétablit la séparation sans toucher au default, qui reste disponible pour le reste.

  • Isoler les VMs d'un projet des autres
  • Utiliser une plage d'adresses différente (ex: 10.x.x.x)
  • Avoir plusieurs labs avec des réseaux distincts

Un réseau libvirt se crée en deux temps : on écrit sa définition XML, puis on la confie à libvirt, qui crée le bridge Linux décrit dans le fichier et lui attribue l'adresse de passerelle. La séquence ne varie jamais, définir, démarrer, activer au boot, vérifier. Sauter net-autostart est l'oubli classique : le réseau fonctionne jusqu'au prochain redémarrage de l'hôte, puis disparaît.

  1. Créer le fichier de définition XML

    Fenêtre de terminal
    cat > /tmp/lab-network.xml << 'EOF'
    <network>
    <name>lab-network</name>
    <forward mode='nat'>
    <nat>
    <port start='1024' end='65535'/>
    </nat>
    </forward>
    <bridge name='virbr-lab' stp='on' delay='0'/>
    <ip address='10.10.10.1' netmask='255.255.255.0'>
    <dhcp>
    <range start='10.10.10.100' end='10.10.10.200'/>
    </dhcp>
    </ip>
    </network>
    EOF

    Paramètres à personnaliser :

    ParamètreExempleDescription
    namelab-networkNom du réseau (utilisé avec virsh et virt-install)
    bridge namevirbr-labNom du bridge Linux créé
    ip address10.10.10.1IP de l'hôte sur ce réseau (passerelle)
    dhcp range.100 à .200Plage d'IP pour les VMs
  2. Définir le réseau dans libvirt

    Fenêtre de terminal
    virsh net-define /tmp/lab-network.xml
  3. Démarrer le réseau

    Fenêtre de terminal
    virsh net-start lab-network
  4. Activer le démarrage automatique

    Fenêtre de terminal
    virsh net-autostart lab-network
  5. Vérifier

    Fenêtre de terminal
    virsh net-list --all
    # Doit afficher lab-network comme active
    ip addr show virbr-lab
    # Doit afficher 10.10.10.1/24

Une VM ne référence jamais le bridge, elle référence le nom du réseau : libvirt fait la correspondance au démarrage du domaine. C'est tout l'intérêt de cette abstraction, changer le bridge sous-jacent ne demande aucune modification des machines. Deux chemins selon le moment, virt-install à la création de la VM, virsh edit sur une machine déjà définie.

Avec virt-install :

Fenêtre de terminal
virt-install --network network=lab-network ...

Ou modifier une VM existante :

Fenêtre de terminal
virsh edit ma-vm
<interface type='network'>
<source network='lab-network'/>
<model type='virtio'/>
</interface>

virsh edit écrit la configuration persistante du domaine : la nouvelle interface n'apparaît qu'au prochain démarrage complet de la machine. Un reboot lancé depuis l'intérieur de l'invité ne suffit pas, il faut un arrêt réel puis un virsh start.

Les deux variantes ci-dessous repartent du même squelette XML et n'en changent qu'un élément. La première retire le NAT pour obtenir un réseau strictement interne, la seconde ajoute une réservation DHCP pour qu'une machine retrouve toujours la même adresse. Rien n'interdit de les combiner dans une même définition.

Pour un réseau interne sans accès extérieur :

<network>
<name>isolated-net</name>
<bridge name='virbr-iso' stp='on' delay='0'/>
<ip address='172.16.0.1' netmask='255.255.255.0'>
<dhcp>
<range start='172.16.0.10' end='172.16.0.100'/>
</dhcp>
</ip>
</network>

Notez l'absence de <forward>, les VMs peuvent communiquer entre elles et avec l'hôte, mais pas avec Internet.

Vous pouvez réserver une IP pour une VM spécifique :

<network>
<name>lab-network</name>
<forward mode='nat'/>
<bridge name='virbr-lab' stp='on' delay='0'/>
<ip address='10.10.10.1' netmask='255.255.255.0'>
<dhcp>
<range start='10.10.10.100' end='10.10.10.200'/>
<host mac='52:54:00:aa:bb:cc' name='web-server' ip='10.10.10.10'/>
</dhcp>
</ip>
</network>

La VM avec l'adresse MAC 52:54:00:aa:bb:cc obtiendra toujours l'IP 10.10.10.10.

Les commandes de gestion reprennent la logique de celles des domaines, avec le préfixe net-. Deux d'entre elles se confondent facilement : net-destroy arrête le réseau et laisse sa définition sur disque, alors que net-undefine supprime la définition persistante et laisse tourner un réseau déjà démarré. Faire disparaître un réseau pour de bon demande donc les deux commandes, dans cet ordre.

ActionCommande
Voir la configvirsh net-dumpxml lab-network
Arrêtervirsh net-destroy lab-network
Supprimervirsh net-undefine lab-network
Modifiervirsh net-edit lab-network

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens ce site gratuitement, sans publicité, sans profilage et sans compte à créer. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn