web-dev-qa-db-fra.com

KVM / libvirt: comment configurer des adresses IP d'invités statiques sur l'hôte de virtualisation

Ce que je voudrais faire, c'est définir la configuration réseau des invités (adresse IP, sous-réseau, passerelle, adresse de diffusion) à partir du système hôte. La configuration réseau utilisée est en mode bridge. Comment puis-je configurer le réseau à partir de l'hôte plutôt que de configurer le client lui-même sur une configuration réseau statique?

Si j'exécute:

virsh edit vm1

il y a un <network> bloquer également et j'ai essayé de configurer l'interface réseau à partir de là, mais malheureusement l'invité VM ne semble pas l'utiliser et en tant que tel est hors ligne sur le réseau (car il utilise automatique configuration réseau uniquement) ... Les machines virtuelles invitées sont à la fois basées sur Linux et Windows.Toute aide serait très appréciée.

32
beta

Si vous ne voulez faire aucune configuration à l'intérieur de l'invité, la seule option est un serveur DHCP qui distribue des adresses IP statiques. Si vous utilisez le mode bridge, ce sera probablement un serveur DHCP externe. Consultez son manuel pour savoir comment servir les baux statiques.

Mais au moins dans les modes avancés nat ou route, vous pouvez utiliser le dnsmasqd intégré de libvirt (les versions plus récentes de libvirtd prennent en charge l'option "dhcp-hostsfile" du dnsmasq). Voici comment:

Tout d'abord, recherchez les adresses MAC des machines virtuelles auxquelles vous souhaitez attribuer des adresses IP statiques:

virsh  dumpxml  $VM_NAME | grep 'mac address'

Puis éditez le réseau

virsh  net-list
virsh  net-edit  $NETWORK_NAME    # Probably "default"

Trouvez le <dhcp> section, restreignez la plage dynamique et ajoutez des entrées d'hôte pour vos machines virtuelles

<dhcp>
  <range start='192.168.122.100' end='192.168.122.254'/>
  <Host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
  <Host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
  <Host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>

Ensuite, redémarrez votre VM (ou redémarrez son client DHCP, par exemple ifdown eth0; ifup eth0)


Mise à jour: je constate qu'il y a des rapports selon lesquels la modification pourrait ne pas entrer en vigueur après "virsh net-edit". Dans ce cas, essayez ceci après la modification:

virsh  net-destroy  $NETWORK_NAME  
virsh  net-start    $NETWORK_NAME  

... et redémarrez le client DHCP de la VM.

Si cela ne fonctionne toujours pas, vous devrez peut-être

  • arrêtez le service libvirtd
  • tuer tous les processus dnsmasq encore en vie
  • démarrer le service libvirtd

Remarque: Il n'y a aucun moyen que l'hôte KVM puisse forcer un VM avec un système d'exploitation inconnu et une configuration inconnue à utiliser une certaine configuration réseau. Mais si vous savez que le VM utilise un certain protocole de configuration réseau - par exemple DHCP - vous pouvez l'utiliser. C'est ce que ce post suppose.

Certains OS (par exemple certaines distributions Linux) permettent également de passer des options de configuration réseau à l'invité, par exemple via la ligne de commande du noyau. Mais cela est très spécifique à l'OS, et je ne vois aucun avantage sur la méthode DHCP.

54
Nils Toedtmann

virsh net-update est une bonne commande pour vous (vous n'avez pas besoin de redémarrer/détruire votre réseau, etc.)
voir: https://www.redhat.com/archives/libvir-list/2012-September/msg01380.html

12
philm

J'ai pu faire dnsmasq 'voir' le mappage IP-MAC nouvellement ajouté en envoyant simplement un -HUP signal au processus dnsmasq. Après cela, le redémarrage du nouvel invité a suffi pour lui attribuer l'IP correcte, sans avoir besoin de redémarrer libvirtd ni le réseau lui-même.

La documentation officielle de libvirt ( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network ) mentionne ce script Perl non officiel qui automatise l'ensemble du processus: https: //Gist.github .com/bendiken/032ea1bddb9ffafe98b4

Je n'ai pas essayé ce script moi-même, car j'ai compris que le fichier hosts était déjà mis à jour et l'envoi du signal -HUP était suffisant.

L'hôte exécute Debian 7.8 et les versions des packages sont:

  • kvm 1: 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
3
Stefano Rago