Ich habe mehrere VMs unter Ubuntu 9.10 über KVM + libvirt. Ich möchte in der Lage sein, die IP-Adresse herauszufinden, die jedem Host zugewiesen wurde, ohne physisch eine physische "Konsole" für jeden Computer zu öffnen und aufzurufen ifconfig
.
Erwägen:
rascher @ localhost: ~ $ virsh -c qemu: /// Systemliste --all Verbindung zum uri: qemu: /// System herstellen ID Name Status ---------------------------------- ------------------ 1 Maschine1 läuft 2 Maschine2 läuft - Maschine3 abschalten
Meine Netzwerkkonfiguration sieht folgendermaßen aus:
<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>
Wie kann ich eine Auflistung erhalten, in der steht:
IP-Adresse von Maschine1 = 192.168.122.16 IP-Adresse von machine2 = 192.168.122.238 ...
Ich habe gespielt mit arp
:
rascher @ localhost: ~ $ arp Adresse HW-Typ HWaddress Flags Mask Iface 192.168.122.238 Ether 00: 16: 36: 00: 61: b0 C virbr0 192.168.122.16 Ether 00: 16: 36: 52: e8: 9c C virbr0 ...
Dies ist jedoch nicht der ID einer virtuellen Maschine zugeordnet.
Gibt es ein Tool (über die Befehlszeile virsh
oder virt-*
), mit dem ich diese Informationen ermitteln kann? Oder brauche ich ein ausgefallenes Skript, das auf jeder einzelnen VM ausgeführt wird, ihre eigene IP überprüft und an das Host-Betriebssystem zurückmeldet?
Ich hatte das gleiche Problem und habe das folgende Skript erstellt:
quelle
Lars Kellogg-Stedman hat eine Reihe von Skripten erstellt, um einen Teil dieses Prozesses zu automatisieren. Er nennt es "Virt-Utils".
Er beschreibt es in seinem Blog-Beitrag hier: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/
Er hat auch einen Github mit einigen der Skripte, die er hier geschrieben hat:
https://github.com/larsks/virt-utils
Sie können dies einfach ausführen:
und Sie erhalten eine Liste jeder virtuellen Maschine anhand ihres "Domänennamens" im Virtual-Machine-Manager von libvirt. Auf meinem Computer laufen beispielsweise 3 VMS.
Beachten Sie, dass dies nicht der 'Hostname' ist, den die VM selbst verwendet, aber für eine große Anzahl von Anwendungsfällen ist er 'gut genug' und löst das Problem, dass innerhalb jeder VM im DHCP-Land 'ifconfig' ausgeführt werden muss.
Lars 'Blog-Posting zeigt auch eine Möglichkeit, Ihre eigene / etc / hosts-Datei automatisch zu aktualisieren, wenn libvirt neue VMs startet und / oder stoppt. Auf diese Weise können Sie beispielsweise ssh myname @ fedora20vm oder ssh myname @ debian6vm ausführen, ohne die Adressen 192.168.122.x manuell suchen zu müssen.
Ich habe hier einige sehr geringfügige Verbesserungen hinzugefügt, wie z. B. ein Skript zum Ausspucken einiger ~ / .ssh / config-Optionen (sehr, sehr praktisch für die Verwendung von Github auf VMs über Agent Forwarding):https://github.com/donbright/virt-utils (scheint gelöscht zu sein?)Ich möchte auch darauf hinweisen, dass die Methode zum Bearbeiten von dhclient.conf zum Senden des Hostnamens xxxxx nur auf Systemen funktioniert, die dhclient.conf tatsächlich auf standardmäßige Weise verwenden. Mageia hat zum Beispiel eine ungewöhnliche Konfiguration der Funktionsweise von dhclient, sodass die einfachen Anweisungen nicht unbedingt funktionieren. Mit der Methode von Lars funktioniert es jedoch unabhängig vom DHCP-Setup des Gastbetriebssystems, da er sich nicht darauf verlässt, dass die VM ihren Hostnamen sendet - er verwendet die 'Domänennamen' im Maschinenmanager von libvirt.
quelle
Zumindest auf Fedora können Sie diese Informationen folgendermaßen erhalten:
cat /var/lib/libvirt/dnsmasq/default.leases
hat eine Ausgabe ähnlich wie:
1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0
obwohl das ein bisschen mehr ist, als Sie verlangt haben
quelle
Unter Ubuntu wird dnsmasq verwendet, um DNS- und DHCP-Dienste für die VMs bereitzustellen. Die dnsmasq-Prozesse auf dem Host speichern ihre Leases in dieser Datei:
Dies ist eine normale Textdatei, und die darin enthaltenen Zeilen sehen hier möglicherweise ähnlich aus:
Die für Sie interessanten Felder sind die dritte und die vierte Spalte: Das dritte Feld enthält die IPv4-Adresse der VM und das vierte Feld enthält entweder ein Sternchen oder den Hostnamen der VM. Dies hängt von der DHCP-Antwort ab, die der Gast an den dnsmasq-Dienstprozess sendet.
quelle
Sie können die
default
Netzwerkdefinition ändern und MAC innerhalb der XML der IP zuordnen:Sobald Sie einen Gast gestartet haben, können Sie die MAC-Adresse aller Gäste über auflisten
Entsprechend dem letzten Byte einer MAC-Adresse können Sie die IP-Adresse eines Gastes ableiten.
quelle
virsh list --all --mac
funktioniert nicht in Version 3.0.0