Mam kilka maszyn wirtualnych działających na Ubuntu 9.10 za pośrednictwem KVM + libvirt. Chcę móc znaleźć adres IP przypisany do każdego hosta bez fizycznego otwierania fizycznej „konsoli” na każdym komputerze i wywoływania ifconfig
.
Rozważać:
rascher @ localhost: ~ $ virsh -c qemu: /// lista systemowa --all Łączenie z systemem uri: qemu: /// Stan nazwy identyfikatora ---------------------------------- 1 maszyna 1 pracuje 2 maszyna 2 działa - maszyna3 wyłączona
Moja konfiguracja sieci wygląda następująco:
<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>
Jak mogę uzyskać listę, która mówi:
adres IP maszyny1 = 192.168.122.16 adres IP maszyny2 = 192.168.122.238 ...
Grałem z arp
:
rascher @ localhost: ~ $ arp Adres HWtype HWaddress Flags Mask Iface 192.168.122.238 eter 00: 16: 36: 00: 61: b0 ° C virbr0 192.168.122.16 eter 00: 16: 36: 52: e8: 9c C virbr0 ...
Ale to nie jest mapowane na identyfikator maszyny wirtualnej.
Czy jest jakieś narzędzie (za pomocą wiersza polecenia virsh
lub virt-*
) Mogę ustalić te informacje? Czy też muszę mieć jakiś fantazyjny skrypt, który działa na każdej maszynie wirtualnej, sprawdza swój adres IP i zgłasza go z powrotem do systemu operacyjnego hosta?
Miałem ten sam problem, więc utworzyłem następujący skrypt:
źródło
Lars Kellogg-Stedman stworzył zestaw skryptów automatyzujących część tego procesu. Nazywa to „virt-utils”.
Opisuje to w swoim blogu tutaj: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/
Ma także github z kilkoma skryptami, które napisał tutaj:
https://github.com/larsks/virt-utils
Możesz po prostu uruchomić to:
a otrzymasz listę każdej maszyny wirtualnej według jej „nazwy domeny” w menedżerze maszyn wirtualnych libvirt. Na przykład na moim komputerze mam uruchomione 3 vms.
Zauważ, że nie jest to „nazwa hosta”, z której korzysta sama maszyna wirtualna, ale w przypadku dużej liczby przypadków użycia będzie „wystarczająco dobra” i rozwiązuje problem konieczności „ifconfig” z każdej maszyny wirtualnej na ziemi dhcp.
Publikowanie na blogu Larsa pokazuje również sposób na „automatyczną aktualizację” własnego pliku / etc / hosts, gdy libvirt uruchamia i / lub zatrzymuje nowe maszyny wirtualne. Umożliwia to wykonywanie takich czynności, jak ssh moja nazwa @ fedora20vm lub ssh moja nazwa @ debian6vm bez konieczności ręcznego wyszukiwania adresów 192.168.122.x.
Dodałem kilka bardzo drobnych usprawnień, takich jak skrypt wypluwający niektóre opcje ~ / .ssh / config (bardzo przydatne przy używaniu github na maszynach wirtualnych za pośrednictwem przekazywania agentów), tutaj:https://github.com/donbright/virt-utils (wydaje się być usunięty?)Chciałbym również zauważyć, że metoda edycji pliku dhclient.conf w celu wysłania nazwy hosta xxxxx działa tylko w systemach, które faktycznie używają pliku dhclient.conf w standardowy sposób. Na przykład Mageia ma nietypową konfigurację tego, jak działa dhclient, więc proste instrukcje niekoniecznie będą działać. Jednak dzięki metodzie Larsa działa ona ponownie w konfiguracji dhcp systemu operacyjnego gościa, ponieważ nie polega on na maszynie wirtualnej, aby wysłać jej nazwę hosta - używa „nazw domen” w menedżerze maszyn libvirt.
źródło
przynajmniej na fedorze możesz uzyskać te informacje w ten sposób:
cat /var/lib/libvirt/dnsmasq/default.leases
ma wyjście podobne do:
1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0
chociaż to trochę więcej, niż prosiłeś
źródło
Na Ubuntu dnsmasq służy do dostarczania usług DNS i DHCP dla maszyn wirtualnych. Procesy dnsmasq na hoście przechowują swoje dzierżawy w tym pliku:
To jest normalny plik tekstowy, a linie w nim mogą wyglądać podobnie do tego tutaj:
Pola zainteresowań to trzecia i czwarta kolumna: trzecie pole zawiera adres IPv4 maszyny wirtualnej, a czwarte pole zawiera gwiazdkę lub nazwę hosta maszyny wirtualnej. Zależy to od odpowiedzi DHCP wysłanej przez gościa do procesu usługi dnsmasq.
źródło
Możesz zmienić
default
definicję sieci, mapować MAC na IP w xml:Po uruchomieniu gościa możesz wyświetlić adres MAC wszystkich gości za pośrednictwem
Zgodnie z ostatnim bajtem adresu MAC można wywnioskować adres IP gościa.
źródło
virsh list --all --mac
nie działa w wersji 3.0.0