Frage KVM / libvirt: So konfigurieren Sie statische Gast-IP-Adressen auf dem Virtualisierungshost


Ich möchte die Netzwerkkonfiguration der Gäste (IP-Adresse, Subnetz, Gateway, Broadcast-Adresse) vom Hostsystem aus festlegen. Das verwendete Netzwerk-Setup ist in bridge Modus. Wie kann ich das Netzwerk vom Host aus konfigurieren, anstatt den Client selbst für eine statische Netzwerkkonfiguration zu konfigurieren?

Wenn ich folgendes ausführe:

virsh edit vm1

da ist ein <network> blockieren, und ich habe versucht, die Netzwerkschnittstelle von dort zu konfigurieren, aber leider scheint die Gast-VM sie nicht zu verwenden und als solche offline zum Netzwerk zu sein (da sie nur die automatische Netzwerkkonfiguration verwendet) ... Gast-VMs sind beides , Linux und Windows basiert. Jede Hilfe würde sehr geschätzt werden.


23
2017-09-09 11:24


Ursprung


Ist das Übergeben von IP-Adressen über reservierte DHCP-Leases keine Option? - MadHatter
Hm ich denke, es ist, aber ich würde gerne VM # 1 zu IP # 1, VM # 2 zu IP # 2 usw. zuweisen (anstatt ihnen eine zufällige IP aus meinem Mietvertrag). Denken Sie, dass es möglich wäre, dies mit DHCP zu konfigurieren? Wenn es so ist, würde ich es gerne versuchen. - beta
Ich schlage vor, die Frage in etwas wie "KVM / libvirt: So konfigurieren Sie statische Gast-IP-Adressen auf dem Virtualisierungshost" - Nils Toedtmann
Vereinbaren Sie mit @NilsToedtmann, dass zusätzliche Details über den verwendeten Hypervisor wie das Basis-Betriebssystem usw. von Vorteil wären. Es kann zusätzliche, auf dem Betriebssystem basierende Verwaltungstools geben, die bei der Konfiguration von Netzwerken für virtualisierte Systeme helfen. Es gibt tolle Führungen auf KVM und LXC zur Verwendung mit SUSE-basierten Betriebssystemen, die YaST nutzen können. - Matt


Antworten:


Wenn Sie keine Konfiguration im Gast vornehmen möchten, ist die einzige Option ein DHCP-Server, der statische IP-Adressen ausgibt. Wenn du benutzt bridge Modus, das wird wahrscheinlich ein externer DHCP-Server sein. Konsultieren Sie das Handbuch, um herauszufinden, wie Sie statische Leasingverträge anbieten können.

Aber zumindest in Vorwärts-Modi nat oder route, könnten Sie libvirt's eingebauten 'dnsmasq' verwenden (neuere Versionen von libvirtd unterstützen die "dhcp-hostsfile" Option des dnsmasq). Hier ist, wie:

Ermitteln Sie zunächst die MAC-Adressen der VMs, denen Sie statische IP-Adressen zuweisen möchten:

virsh  dumpxml  $VM_NAME | grep 'mac address'

Bearbeiten Sie dann das Netzwerk

virsh  net-list
virsh  net-edit  $NETWORK_NAME    # Probably "default"

Finde das <dhcp> Abschnitt, beschränken Sie den dynamischen Bereich und fügen Sie Host-Einträge für Ihre VMs hinzu

<dhcp>
  <range start='192.168.122.100' end='192.168.122.254'/>
  <host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
  <host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
  <host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>

Starten Sie dann Ihre VM neu (oder starten Sie ihren DHCP-Client neu, z. ipdown eth0; ifup eth0)


Update: Ich sehe, es gibt Berichte, dass die Änderung möglicherweise nicht nach "virsh net-edit" wirksam wird. Versuchen Sie dies in diesem Fall nach der Bearbeitung:

virsh  net-destroy  $NETWORK_NAME  
virsh  net-start    $NETWORK_NAME  

... und starten Sie den DHCP-Client der VM neu.

Wenn das immer noch nicht funktioniert, müssen Sie möglicherweise

  • Stoppen Sie den libvirtd-Dienst
  • Töte alle Dnsmasq-Prozesse, die noch am Leben sind
  • Starten Sie den libvirtd-Dienst

Hinweis: Es gibt keine Möglichkeit, dass der KVM-Host eine VM mit einem unbekannten Betriebssystem und einer unbekannten Konfiguration dazu zwingen kann, eine bestimmte Netzwerkkonfiguration zu verwenden. Aber wenn Sie wissen, dass die VM ein bestimmtes Netzwerkkonfigurationsprotokoll verwendet - sagen wir DHCP -, können Sie das verwenden. Dies ist, was dieser Beitrag annimmt.

Etwas OS (z. B. einige Linux-Distributionen) erlauben auch, Netzwerkkonfigurationsoptionen an den Gast zu übergeben, z. über die Kernel-Befehlszeile. Aber das ist sehr spezifisch für das Betriebssystem, und ich sehe keinen Vorteil gegenüber der DHCP-Methode.


39
2017-09-09 11:55



Danke, ich werde es versuchen und melden, wenn ich es so funktioniert. - beta
Cool. Aber Sie müssen den Netzwerkmodus ändern. - Nils Toedtmann
Es funktioniert alles jetzt, danke für deine Hilfe. :) - beta
Ich bin hierher gekommen, weil ich ein ähnliches Bedürfnis habe, und ich denke, ich kann den Vorteil gegenüber der Verwendung von DHCP erklären, zumindest für meinen Anwendungsfall. Die Situation ist zugegebenermaßen ungewöhnlich. Ich habe einen Server, der sich alle paar Wochen zwischen zwei Netzwerken hin und her bewegt. Es hat ungefähr 10 Gäste. Eines der Netzwerke hat einen DHCP-Server (der für mich schwer zu kontrollieren ist), das andere nicht. Das schließt ziemlich viel mit DHCP aus. Ich bin auf der Suche nach einer Möglichkeit, die IP des Hosts zu ändern und automatisch Gast-IP-Adressen usw. zu aktualisieren (Ich benutze Chef für die Automatisierung, also sobald die IP-Adressen eingerichtet sind, bin ich gut zu gehen). - Kevin Keane
Ich kann bestätigen, dass Änderungen nicht wirksam werden, ohne das Netzwerk zu zerstören und neu zu starten. Ich fand auch seltsamerweise, dass ich herunterfahren musste und dann die VM startete. Einfacher Neustart verließ die Schnittstelle in einem gebrochenen Zustand. - orodbhen


virsh net-update ist das gute Kommando für Sie (Sie müssen Ihr Netzwerk nicht neu starten / zerstören)
sehen: https://www.redhat.com/archives/libvir-list/2012-September/msg01380.html


11
2017-11-06 16:46



Das hat nicht für mich funktioniert. Ich musste das Netzwerk zerstören / starten. - Alex Willison


Ich konnte es machen dnsmasq "Sehen" Sie das neu hinzugefügte IP-MAC-Mapping, indem Sie einfach ein -HUP Signal an die dnsmasq verarbeiten. Danach war ein Neustart des neuen Gastes ausreichend, um die korrekte IP zugewiesen zu bekommen, ohne dass ein Neustart erforderlich war libvirtd noch das Netzwerk selbst.

Die offizielle libvirt Dokumentation (http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network) erwähnt dieses inoffizielle Perl-Skript, das den gesamten Prozess automatisiert: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

Ich habe dieses Skript nicht selbst ausprobiert, weil ich herausgefunden habe, dass die hostsfile bereits aktualisiert wurde und nur das Senden des -HUP-Signals genug war.

Auf dem Host läuft Debian 7.8 und die Paketversionen sind:

  • kvm 1: 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1

3
2017-07-14 15:06