2013-09-27 34 views
12

Szukam rozwiązania, aby pobrać adres IP lub inne metadane maszyny wirtualnej działającej na qemu/kvm z libvirt? Sprawdziłem również gościa gościa o ovirt i gościa gościa qemu, ale zastanawiałem się, czy istnieje lepszy/łatwiejszy sposób na pobranie tych danych?libvirt: pobranie adresu IP z gościa

Zasadniczo mam kilka hostów z KVM i dla każdego konkretnego prywatnego adresu IP muszę wiedzieć, która maszyna wirtualna działa z tym adresem IP (dostarczonym przez serwer DHCP).

Odpowiedz

28

Instaluję avahi na każdej maszynie wirtualnej, więc będą reklamować swoje własne adresy. Jednak nie jest to jedyna dostępna opcja (szczególnie, jeśli maszyna wirtualna zawiera coś innego niż system Linux). Wejdź do magicznego świata opcji virsh!

*) Najpierw trzeba uzyskać adresy MAC kart sieciowych VM:

[[email protected] ~]# 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 

[[email protected] ~]# 

*) Teraz rzućmy okiem na tabelę ARP

[[email protected] ~]# 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 
[[email protected] ~]# 

*) Teraz skleić wszystko razem (i dodając trochę Skorupa/regex magii):

[[email protected] ~]# 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 
[[email protected] ~]# 
+0

ów piękny rozwiązanie, ale nie działała dokładnie w Busybox, --------> kvm # for Mac w 'virsh domiflist yoc6 | 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 grep: niepoprawna opcja - 'P' arp: nieprawidłowa opcja - 'e' BusyBox v1.22.1 (2015-11-04 15:02:18 PST) BusyBox v1.22.1 (2015-11-04 15 : 02: 18 PST) multi-call binarny. Użycie: grep [-HhnlLoqvsriwFE] [-m N] [-A/B/CN] WZORZEC/-e WZORZEC .../- f PLIK [PLIK] ... –

+1

należy pamiętać, że tablica Arp może być stare lub brakujących wpisów. możesz chcieć pingować zamiatać podsieć przed wywołaniem polecenia arp. –

21

można tylko odczytać pliku najmu:

# 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 * 

Albo, jeszcze lepiej, użyj komendy net-dhcp-leases z 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 

albo w Pythonie:

import libvirt 
conn = libvirt.open('qemu+ssh://[email protected]/system') 
for lease in conn.networkLookupByName("my_network").DHCPLeases(): 
    print(lease) 
+5

Jest teraz nowy dodatek: domifaddr (http://libvirt.org/git/?p=libvirt.git;a=commit;h=2f36e6944e6eb56a00e19fcd85ec8513461597c9) –

+0

najlepsza odpowiedź ... dzięki ... –

+0

Wznowienie dla przykładu Pythona – Flippym

0

Istnieją generalnie dwie opcje:

  1. zainstalowanie w systemie operacyjnym gościa w wieku gościa nt dla hypervisor i używać hypervisor specyficzny API do kwerendy maszynę gości do OD
  2. polegać na informacjach dostępnych w sieci lokalnej - Używam ARP-skan dla tego

more specific info for VirtualBox or libvirt+QEMU

7

Działa to na komputerze Ubuntu 16.04 z uruchomionym dla mnie gościem CentOS 7.

$ 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 
+0

Nie pokazuje żadnego adresu, gdy używany jest most z zewnętrznym DHCP. – Xdg