J'ai plusieurs machines virtuelles exécutées sur Ubuntu 9.10 via KVM + libvirt. Je veux pouvoir découvrir l'adresse IP qui a été assignée à chaque hôte sans ouvrir physiquement une "console" physique à chaque machine et invoquer ifconfig
.
Considérer:
rascher @ localhost: ~ $ virsh -c qemu: /// liste système --all Connexion au système uri: qemu: /// ID Nom État ---------------------------------- 1 machine1 en marche 2 machine2 en marche - arrêt machine3
Ma configuration réseau ressemble à:
<network>
<name>default</name>
<uuid>1be...</uuid>
<forward mode='route' dev="eth0"/>
<bridge name='virbr0' stp='on' forwardDelay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254' />
</dhcp>
</ip>
</network>
Alors, comment puis-je obtenir une liste qui dit:
adresse IP machine1 = 192.168.122.16 adresse IP machine2 = 192.168.122.238 ...
J'ai joué avec arp
:
rascher @ localhost: ~ $ arp Adresse HWtype HWaddress Flags Mask Iface 192.168.122.238 éther 00: 16: 36: 00: 61: b0 C virbr0 192.168.122.16 éther 00: 16: 36: 52: e8: 9c C virbr0 ...
Mais cela ne correspond pas à l'ID d'une machine virtuelle.
Existe-t-il un outil (via la ligne de commande, virsh
ou virt-*
) je peux vérifier ces informations? Ou dois-je avoir un script sophistiqué qui s'exécute sur chaque machine virtuelle individuelle, vérifie sa propre IP et le signale au système d'exploitation hôte?
J'ai eu le même problème alors j'ai créé le script suivant:
la source
Lars Kellogg-Stedman a créé un ensemble de scripts pour automatiser une partie de ce processus. Il l'appelle «virt-utils».
Il le décrit dans son article de blog ici: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/
Il a également un github avec certains des scripts qu'il a écrits, ici:
https://github.com/larsks/virt-utils
Vous pouvez simplement exécuter ceci:
et vous obtiendrez une liste de chaque machine virtuelle par son "nom de domaine" dans le gestionnaire de machine virtuelle de libvirt. Par exemple, sur ma machine, j'ai 3 vms en marche.
Remarque, ce n'est pas le `` nom d'hôte '' que la VM elle-même utilise, mais pour un grand nombre de cas d'utilisation, il sera `` assez bon '' et résout le problème d'avoir à `` ifconfig '' à partir de chaque VM dans le pays DHCP.
La publication du blog de Lars montre également un moyen pour cela de «mettre à jour automatiquement» votre propre fichier / etc / hosts lorsque libvirt démarre et / ou arrête de nouvelles machines virtuelles. Cela vous permet de faire des choses comme ssh myname @ fedora20vm ou ssh myname @ debian6vm sans avoir à trouver les adresses 192.168.122.x à la main.
J'ai ajouté quelques améliorations très mineures, comme un script pour cracher quelques options ~ / .ssh / config (très très pratique pour utiliser github sur les VM, via le transfert d'agent), ici:https://github.com/donbright/virt-utils (semble être supprimé?)Je voudrais également noter que la méthode d'édition de dhclient.conf pour «envoyer le nom d'hôte xxxxx» ne fonctionne que sur les systèmes qui utilisent réellement dhclient.conf de manière standard. Mageia, par exemple, a une configuration inhabituelle de la façon dont fonctionne dhclient, donc les instructions simples ne fonctionneront pas nécessairement. Cependant, avec la méthode de Lars, cela fonctionne sans régularisation de la configuration DHCP du système d'exploitation invité, car il ne s'appuie pas sur la machine virtuelle pour envoyer son nom d'hôte - il utilise les `` noms de domaine '' dans le gestionnaire de machine de libvirt.
la source
au moins sur fedora, vous pouvez obtenir ces informations de cette façon:
cat /var/lib/libvirt/dnsmasq/default.leases
a une sortie similaire à:
1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0
bien que ce soit un peu plus que ce que vous aviez demandé
la source
Sur Ubuntu, dnsmasq est utilisé pour fournir des services DNS et DHCP aux machines virtuelles. Les processus dnsmasq sur l'hôte stockent leurs baux dans ce fichier:
Il s'agit d'un fichier texte normal et les lignes qu'il contient peuvent ressembler à ceci ici:
Les champs qui vous intéressent sont la troisième et la quatrième colonne: le troisième champ contient l'adresse IPv4 de la machine virtuelle et le quatrième champ contient soit un astérisque, soit le nom d'hôte de la machine virtuelle. Cela dépend de la réponse DHCP envoyée par l'invité au processus de service dnsmasq.
la source
Vous pouvez changer la
default
définition du réseau, mapper MAC à IP dans le xml:Une fois que vous démarrez un invité, vous pouvez répertorier l'adresse MAC de tous les invités via
Selon le dernier octet d'une adresse MAC, vous pouvez déduire l'adresse IP d'un invité.
la source
virsh list --all --mac
ne fonctionne pas dans la version 3.0.0