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.
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
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.
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
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: