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

31

Ich möchte die Netzwerkkonfiguration der Gäste (IP-Adresse, Subnetz, Gateway, Broadcast-Adresse) auf dem Host-System festlegen. Das verwendete Netzwerk-Setup befindet sich im bridgeModus. Wie kann ich das Netzwerk vom Host aus konfigurieren, anstatt den Client selbst für eine statische Netzwerkkonfiguration zu konfigurieren?

Wenn ich ausführe:

virsh edit vm1

Es gibt auch einen <network>Block und ich habe versucht, die Netzwerkschnittstelle von dort aus zu konfigurieren, aber leider scheint die Gast-VM sie nicht zu verwenden und ist daher für das Netzwerk offline (da nur die automatische Netzwerkkonfiguration verwendet wird) ... Gast VMs basieren sowohl auf Linux als auch auf Windows. Jede Hilfe wäre sehr dankbar.

Beta
quelle
2
Ist die Weitergabe von IP-Adressen über reservierte DHCP-Leases keine Option?
MadHatter unterstützt Monica
Hm, ich denke, das ist es, 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 zu geben). Glaubst du, es wäre möglich, es mit DHCP so zu konfigurieren? Wenn ja, würde ich diesen Ansatz gerne ausprobieren.
Beta
2
Ich schlage vor, die Frage in " KVM / libvirt: So konfigurieren Sie statische Gast-IP-Adressen auf dem Virtualisierungshost "
Nils Toedtmann
1
Stimmen Sie mit @NilsToedtmann überein, zusätzliche Details zum verwendeten Hypervisor wie Basisbetriebssystem usw. wären von Vorteil. Möglicherweise gibt es zusätzliche betriebssystembasierte Verwaltungstools, die bei der Konfiguration des Netzwerks für virtualisierte Systeme helfen. Es gibt großartige Anleitungen zu KVM und LXC für die Verwendung mit SUSE-basierten Betriebssystemen, die YaST verwenden können.
Matt

Antworten:

52

Wenn Sie im Gast keine Konfiguration vornehmen möchten, ist die einzige Option ein DHCP-Server, der statische IP-Adressen ausgibt. Wenn Sie den bridgeModus verwenden, handelt es sich wahrscheinlich um einen externen DHCP-Server. Konsultieren Sie das Handbuch, um herauszufinden, wie statische Leases bereitgestellt werden.

Aber zumindest in Vorwärtsmodi natoder routekönnen Sie dnsmasqdlibvirts eingebauten Modus verwenden (neuere Versionen von libvirtd unterstützen die Option "dhcp-hostsfile" von 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"

Suchen Sie den <dhcp>Abschnitt, schränken Sie den dynamischen Bereich ein und fügen Sie Hosteinträ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 den DHCP-Client neu, z. B. ifdown eth0; ifup eth0)


Update: Es gibt Berichte, dass die Änderung nach "virsh net-edit" möglicherweise nicht wirksam wird. In diesem Fall versuchen Sie dies 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

  • Beenden Sie den libvirtd-Dienst
  • Beenden Sie alle noch aktiven dnsmasq-Prozesse
  • Starten Sie den libvirtd-Dienst

Hinweis: Der KVM-Host kann auf keinen Fall eine VM mit unbekanntem Betriebssystem und unbekannter Konfiguration zur Verwendung einer bestimmten Netzwerkkonfiguration zwingen. Wenn Sie jedoch wissen, dass die VM ein bestimmtes Netzwerkkonfigurationsprotokoll verwendet, beispielsweise DHCP, können Sie dieses Protokoll verwenden. Dies wird in diesem Beitrag vorausgesetzt.

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

Nils Toedtmann
quelle
Danke, ich versuche es und melde mich, wenn es so funktioniert.
Beta
Cool. Sie müssen jedoch den Netzwerkmodus ändern.
Nils Toedtmann
1
Ich bin hierher gekommen, weil ich ein ähnliches Bedürfnis habe und ich denke, ich kann den Vorteil gegenüber der Verwendung von DHCP zumindest für meinen Anwendungsfall erklären. Die Situation ist zugegebenermaßen ungewöhnlich. Ich habe einen Server, der alle paar Wochen zwischen zwei Netzwerken hin und her wechselt. 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 DHCP so ziemlich aus. Ich suche nach einer Möglichkeit, die IP-Adresse des Hosts zu ändern und die IP-Adressen der Gäste usw. automatisch zu aktualisieren (ich verwende chef für die Automatisierung. Sobald die IP-Adressen eingerichtet sind, kann ich loslegen).
Kevin Keane
2
Ich kann bestätigen, dass Änderungen nicht wirksam werden, ohne das Netzwerk zu zerstören und neu zu starten. Seltsamerweise stellte ich auch fest, dass ich herunterfahren und dann die VM starten musste. Durch einen einfachen Neustart war die Schnittstelle defekt.
Orodbhen
Durch einen Neustart des Netzwerks werden die DHCP-Leases nicht erneuert. Dazu müssen Sie die Statusdatei des Netzwerks in / var / lib / libvirtd / dnsmasq
orodbhen
3

Ich konnte dnsmasqdie neu hinzugefügte IP-MAC-Zuordnung durch einfaches Senden eines -HUPSignals an den dnsmasqProzess "sehen". Danach reichte ein Neustart des neuen Gasts aus, um ihm die richtige IP zuzuweisen, ohne dass ein Neustart libvirtdoder das Netzwerk selbst erforderlich wäre .

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

Ich habe dieses Skript nicht selbst ausprobiert, da ich herausgefunden habe, dass die Hostdatei bereits aktualisiert wurde und das Senden des -HUP-Signals ausreichend 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
Stefano Rago
quelle