web-dev-qa-db-fra.com

libvirt: récupère l'adresse ipv4 de l'invité

Je recherche une solution pour récupérer l'adresse ipv4 ou d'autres métadonnées d'un VM fonctionnant sur qemu/kvm avec libvirt? J'ai également examiné l'agent invité ovirt et l'agent invité qemu, mais je Je me demandais s'il y avait un moyen meilleur/plus facile de récupérer ces données?

Fondamentalement, j'ai quelques hôtes exécutant KVM et pour chaque adresse IP privée spécifique, je dois être en mesure de savoir quel VM fonctionne avec cette adresse IP ( fourni par un serveur DHCP).

17
Jochen

J'installe avahi sur chaque machine virtuelle, donc ils publieront leurs propres adresses. Cependant, ce n'est pas la seule option disponible (surtout si vous VM contient quelque chose de différent de Linux). Entrez donc dans le monde magique des options virsh!

*) Vous devez d'abord obtenir les adresses MAC des cartes réseau de votre machine virtuelle:

[root@5844 ~]# virsh domiflist b2bua
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      network    default    virtio      52:54:00:aa:bb:cc
vnet1      bridge     br1        virtio      52:54:00:dd:ee:ff

[root@5844 ~]#

*) Jetons maintenant un œil à la table ARP

[root@5844 ~]# arp -e
 Address                  HWtype  HWaddress           Flags Mask            Iface
 xx.xx.xx.xx              ether   xx:xx:xx:xx:xx:xx   C                     br0
 192.168.122.14           ether   52:54:00:xx:xx:xx   C                     virbr0
 192.168.122.51           ether   52:54:00:aa:bb:cc   C                     virbr0
 [root@5844 ~]# 

*) Maintenant, collons tout ensemble (et ajoutons un peu de magie Shell/regex):

[root@5844 ~]# for mac in `virsh domiflist b2bua |grep -o -E "([0-9a-f]{2}:){5}([0-9a-f]{2})"` ; do arp -e |grep $mac  |grep -o -P "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" ; done
192.168.122.51
[root@5844 ~]# 
33
Peter Lemenkov

Vous pouvez simplement lire le fichier de location:

# cat /var/lib/libvirt/dnsmasq/default.leases 
1381437666 52:54:00:98:75:eb 192.168.122.240 chat *
1381437643 52:54:00:dc:ee:f8 192.168.122.112 burp *

Ou, encore mieux, utilisez le net-dhcp-leases commande de virsh:

virsh # net-dhcp-leases nat --help
  NAME
    net-dhcp-leases - print lease info for a given network

  SYNOPSIS
    net-dhcp-leases <network> [<mac>]

  DESCRIPTION
    Print lease info for a given network

  OPTIONS
    [--network] <string>  network name or uuid
    [--mac] <string>  MAC address

Ou en Python:

import libvirt
conn = libvirt.open('qemu+ssh://root@localhost/system')
for lease in conn.networkLookupByName("my_network").DHCPLeases():
    print(lease)
22
goneri

Cela fonctionne sur Ubuntu 16.04 Host avec un invité CentOS 7 en cours d'exécution pour moi.

$ virsh list
 Id    Name                           State
----------------------------------------------------
 5     centos7.0                      running

$ virsh domifaddr centos7.0
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      52:54:00:a1:28:e5    ipv4         192.168.122.15/24
9
Deepak Vilakkat

Il y a, en général, deux options:

  1. installer dans le système d'exploitation invité un agent invité pour votre hyperviseur et utiliser une API spécifique à l'hyperviseur pour interroger la machine invitée pour l'adresse IP
  2. s'appuyer sur les informations disponibles sur votre réseau local - j'utilise arp-scan pour cela

informations plus spécifiques pour VirtualBox ou libvirt + QEM

1
Rostislav Matl

Aucune des suggestions n'a fonctionné dans mon cas. Voici comment j'ai obtenu l'IP invité.

Obtenez le nom du réseau:

$ virsh net-list

Name                 State      Autostart     Persistent
----------------------------------------------------------
default              active     yes           yes

Ensuite:

$ virsh net-dhcp-leases default

Expiry Time          MAC address        Protocol  IP address                Hostname        Client ID or DUID
-------------------------------------------------------------------------------------------------------------
2018-11-06 15:47:33  52:54:00:1b:ee:f6  ipv4      192.168.122.6/24          vm1             -
2018-11-06 15:36:58  52:54:00:d7:1c:2e  ipv4      192.168.122.4/24          vm2             -
1
McMutton