J'ai plusieurs VMS fonctionnant sur Ubuntu 9.10 via KVM + Libvirt. Je souhaite pouvoir trouver l'adresse IP attribuée à chaque hôte sans ouvrir physiquement une "console" physique à chaque machine et invoquer ifconfig
.
Envisager:
Rascher @ localhost: ~ VIRSH -C QEMU: /// Liste système --all Connexion à Uri: QEMU: /// Système Nom de l'identifiant -------------------------------------------------] 1 machine1 courante 2 Machine2 en cours d'exécution - Machine3 éteint
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 de la machine1 = 192.168.122.16 Adresse IP de la machine2 = 192.168.122238 [.____] ...] ...] ...] ...] ...] ...] ...]
J'ai joué avec arp
:
[ 192.168.122.16 Ether 00: 16: 36: 52: E8: 9C C VIRBR0 [.____] ...
Mais cela ne correspond pas à une pièce d'identité de la machine virtuelle.
Y a-t-il un outil (via la ligne de commande, virsh
ou virt-*
) Je peux vérifier ces informations? Ou dois-je avoir un script de fantaisie qui fonctionne sur chaque VM, vérifie sa propre adresse IP et le rapporte-t-il à l'OS hôte?
Cette fonctionnalité a été demandée il y a longtemps. Maintenant, Libvirt le supporte en fournissant deux nouvelles commandes: DOMIFADDR et Net-DHCP-Baux
Usage: domifaddr <domain> [interface] [--full] [--source lease|agent]
Example outputs:
virsh # domifaddr f20 --source agent
Name MAC address Protocol Address
-------------------------------------------------------------------------------
lo 00:00:00:00:00:00 ipv4 127.0.0.1/8
- - ipv6 ::1/128
eth0 52:54:00:2e:45:ce ipv4 10.1.33.188/24
- - ipv6 2001:db8:0:f101::2/64
- - ipv6 fe80::5054:ff:fe2e:45ce/64
eth1 52:54:00:b1:70:19 ipv4 192.168.105.201/16
- - ipv4 192.168.201.195/16
- - ipv6 2001:db8:ca2:2:1::bd/128
eth2 52:54:00:36:2a:e5 N/A N/A
eth3 52:54:00:20:70:3d ipv4 192.168.105.240/16
- - ipv6 fe80::5054:ff:fe20:703d/64
virsh # domifaddr f20 --full
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet0 52:54:00:2e:45:ce ipv6 2001:db8:0:f101::2/64
vnet1 52:54:00:b1:70:19 ipv4 192.168.105.201/16
vnet1 52:54:00:b1:70:19 ipv6 2001:db8:ca2:2:1::bd/128
vnet3 52:54:00:20:70:3d ipv4 192.168.105.240/16
virsh # domifaddr f20 eth0 --source agent --full
Name MAC address Protocol Address
-------------------------------------------------------------------------------
eth0 52:54:00:2e:45:ce ipv4 10.1.33.188/24
eth0 52:54:00:2e:45:ce ipv6 2001:db8:0:f101::2/128
eth0 52:54:00:2e:45:ce ipv6 fe80::5054:ff:fe2e:45ce/64
For eth0, ipv6 is managed by libvirt, but ipv4 is not.
For eth1, the second IP is created using ip aliasing.
For eth2, there is no IP configured as of yet.
For eth3, only ipv4 has been configured.
fd00::/8 are private ipv6 ranges. Hence not visible through --source lease
Dans un autre scénario:
Example Usage: net-dhcp-leases <network> [mac]
virsh # net-dhcp-leases --network default6
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
2014-06-16 03:40:14 52:54:00:85:90:e2 ipv4 192.168.150.231/24 Fedora20-test 01:52:54:00:85:90:e2
2014-06-16 03:40:17 52:54:00:85:90:e2 ipv6 2001:db8:ca2:2:1::c0/64 Fedora20-test 00:04:b1:d8:86:42:e1:6a:aa:cf:d5:86:94:23:6f:94:04:cd
2014-06-16 03:34:42 52:54:00:e8:73:eb ipv4 192.168.150.181/24 ubuntu14-vm -
2014-06-16 03:34:46 52:54:00:e8:73:eb ipv6 2001:db8:ca2:2:1::5b/64 - 00:01:00:01:1b:30:c6:aa:52:54:00:e8:73:eb
libvirt utilise DNSMASQ pour fournir à DHCP aux invités. Vous pouvez donc chalouiller /var/log/daemon.log ou creuser via le fichier de location dans/var/libvirt pour obtenir une adresse IP à la cartographie de l'hôte.
Lars Kellogg-Stedman a créé un ensemble de scripts pour automatiser une partie de ce processus. Il appelle ça "virt-utils".
Il le décrit dans son article de blog ici: http://blog.odddbit.com/2013/10/04/AUTOMATIC-DNS-ENTRIE/
Il a également un GitHub avec certains des scripts qu'il a écrites, ici:
https://github.com/larsks/virt-utils
Vous pouvez essentiellement juste courir ceci:
git clone https://github.com/larsks/virt-utils
cd virt-utils
Sudo make install
virt-hosts
et vous obtiendrez une liste de chaque machine virtuelle par son "nom de domaine" à l'intérieur de la machine virtuelle-machine de Libvirt. Par exemple, sur ma machine, j'ai 3 VMS en cours d'exécution.
don@serebryanya:~/src/virt-utils$ virt-hosts
192.168.122.23 mageia4.x64-net0.default.virt mageia4.x64.default.virt
192.168.122.197 debian7AMD64-net0.default.virt debian7AMD64.default.virt
192.168.122.15 freebsd10_AMD64-net0.default.virt freebsd10_AMD64.default.virt
Remarque, ce n'est pas le "nom d'hôte" le VM = utiliser, mais pour un grand nombre de cas d'utilisation, il sera "assez bon" et résout le problème de l'avoir à "ifconfig 'de chaque VM dans la terre DHCP.
Le blog de Lars 'L'affichage montre également un moyen de "mettre à jour automatiquement" votre fichier propre/etc/hosts comme Libvirt démarre et/ou arrête de nouveaux VMS. Cela vous permet de faire des choses comme SSH Myname @ Fedora20vm ou SSH Myname @ Debian6vm sans avoir à trouver les adresses de 192.168.122.x à la main.
J'ai ajouté quelques améliorations très mineures, comme un script pour cracher des options ~/.SSH/Config (très très pratique pour utiliser GitHub sur VMS, via un transfert d'agent), ici:
https://github.com/donbright/virt-utils (semble être supprimé?)
J'aimerais également noter que la méthode d'édition dhclient.conf pour "envoyer le nom d'hôte XXXXX" fonctionne uniquement sur des systèmes qui utilisent réellement dhclient.conf de manière standard. MAGEIA, par exemple, a une configuration inhabituelle de la manière dont il fonctionne Dhclient fonctionne, de sorte que les instructions simples ne fonctionnent pas nécessairement. Cependant, avec la méthode de Lars, il travaille régulièrement de la configuration de DHCP invitée, car il ne s'appuie pas sur le VM pour l'envoyer son nom d'hôte - il utilise les "noms de domaine" dans Libvirt's Machine Manager.
J'ai eu le même problème alors j'ai créé le script suivant:
#!/bin/bash
function showMAC(){
virsh dumpxml ${1}|grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"
}
function showIP(){
for mac in $($0 -m $1); do
grep $mac /var/log/daemon.log | tail -n 1 | awk '{print $7}'
done
}
if test -z "${1}"; then
echo "Usage: ${0} [-i | -m] <domain>"
echo " -i Show IP address (the default)."
echo " -m Show MAC address."
exit
fi
addr_type="-i"
if test ${1} = "-i" || test ${1} = "-m"; then
addr_type=${1}
shift
fi
domain=${1}
test $addr_type = "-i" && showIP $domain || showMAC $domain