48 votes

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

Ce que j'aimerais faire, c'est configurer la configuration réseau des invités (adresse IP, sous-réseau, passerelle, adresse de diffusion) depuis le système hôte. Le mode de configuration réseau utilisé est en mode bridge. Comment puis-je configurer le réseau depuis l'hôte plutôt que de configurer le client lui-même avec une configuration réseau statique?

Si j'exécute:

virsh edit vm1

il y a un bloc également et j'ai essayé de configurer l'interface réseau à partir de là, mais malheureusement la machine virtuelle invitée ne semble pas l'utiliser et est donc hors ligne par rapport au réseau (car elle utilise uniquement une configuration réseau automatique)... Les machines virtuelles invitées sont tant basées sur Linux que sur Windows. Toute aide serait grandement appréciée.

84voto

Nils Toedtmann Points 3104

Si vous ne souhaitez pas effectuer de configuration à l'intérieur de l'invité, alors la seule option est un serveur DHCP qui attribue des adresses IP statiques. Si vous utilisez le mode bridge, il s'agira probablement d'un serveur DHCP externe. Consultez son manuel pour savoir comment attribuer des baux statiques.

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

Tout d'abord, trouvez les adresses MAC des VM que vous souhaitez attribuer des adresses IP statiques :

virsh dumpxml $NOM_VM | grep 'mac address'

Ensuite, modifiez le réseau

virsh net-list
virsh net-edit $NOM_DU_RÉSEAU    # Probablement "default"

Trouvez la section , restreignez la plage dynamique et ajoutez des entrées d'hôtes pour vos VM

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


Mise à jour : Je vois des rapports indiquant que le changement pourrait ne pas prendre effet après "virsh net-edit". Dans ce cas, essayez ceci après la modification :

virsh net-destroy $NOM_DU_RÉSEAU
virsh net-start $NOM_DU_RÉSEAU

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

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

  • arrêter le service libvirtd
  • tuer les processus dnsmasq qui sont toujours actifs
  • démarrer le service libvirtd

Note : Il n'existe aucun moyen pour l'hôte KVM de forcer une VM avec un système d'exploitation inconnu et une configuration inconnue à utiliser une certaine configuration réseau. Mais si vous savez que la VM utilise un certain protocole de configuration réseau - disons DHCP - vous pouvez l'utiliser. C'est ce que suppose ce message.

Certains systèmes d'exploitation (par exemple certains distributions Linux) permettent également de transmettre des options de configuration réseau à l'invité par exemple via la ligne de commande du kernel. Mais c'est très spécifique à l'OS, et je ne vois pas d'avantage par rapport à la méthode DHCP.

16voto

philm Points 151

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

3voto

Maverick Points 133

J'ai pu faire en sorte que dnsmasq 'voit' le mappage IP-MAC récemment ajouté en envoyant simplement un signal -HUP au processus dnsmasq. Ensuite, redémarrer le nouvel invité a suffi pour lui attribuer la bonne IP, 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 tout le processus: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

Je n'ai pas essayé ce script moi-même, car j'ai réalisé que le fichier hosts était déjà mis à jour et qu'envoyer simplement le 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X