it-swarm.com.de

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) über das Host-System festlegen. Das verwendete Netzwerk-Setup befindet sich im Modus bridge. 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

da ist ein <network> blockiere auch und ich habe versucht, die Netzwerkschnittstelle von dort aus zu konfigurieren, aber leider scheint der Gast VM scheint es nicht zu verwenden und ist als solches offline im Netzwerk (da es automatisch verwendet) Nur Netzwerkkonfiguration) ... Gast-VMs basieren sowohl auf Linux als auch auf Windows. Jede Hilfe wäre sehr dankbar.

32
beta

Wenn Sie keine Konfiguration innerhalb des Gasts vornehmen möchten, ist die einzige Option ein DHCP-Server, der statische IP-Adressen ausgibt. Wenn Sie den Modus bridge verwenden, handelt es sich wahrscheinlich um einen externen DHCP-Server. Lesen Sie das Handbuch, um herauszufinden, wie statische Leasingverträge bedient werden können.

Aber zumindest in den Vorwärtsmodi nat oder route können Sie das in libvirt integrierte dnsmasqd 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"

Finde das <dhcp> Abschnitt, beschränken Sie den Dynamikbereich 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 Ihr VM) neu (oder starten Sie den DHCP-Client neu, z. B. ifdown eth0; ifup eth0)


Update: Ich sehe, dass es Berichte gibt, dass die Änderung nach "virsh net-edit" möglicherweise nicht wirksam wird. Versuchen Sie in diesem Fall Folgendes 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 laufenden dnsmasq-Prozesse
  • starten Sie den libvirtd-Dienst

Hinweis: Es gibt keine Möglichkeit, dass der KVM Host) ein VM mit unbekanntem Betriebssystem und unbekannter Konfiguration zur Verwendung einer bestimmten Netzwerkkonfiguration erzwingen könnte. Wenn Sie jedoch wissen, dass das VM verwendet ein bestimmtes Netzwerkkonfigurationsprotokoll - beispielsweise DHCP - das können Sie verwenden. Dies wird in diesem Beitrag vorausgesetzt.

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

54
Nils Toedtmann

virsh net-update ist ein guter Befehl für Sie (Sie müssen Ihr Netzwerk nicht neu starten/zerstören usw.)
siehe: https://www.redhat.com/archives/libvir-list/2012-September/msg01380.html

12
philm

Ich konnte dnsmasq die neu hinzugefügte IP-MAC-Zuordnung "sehen" lassen, indem ich einfach ein -HUP - Signal an den dnsmasq -Prozess sendete. Danach reichte ein Neustart des neuen Gasts aus, um ihm die richtige IP zuzuweisen, ohne dass libvirtd oder das Netzwerk selbst neu gestartet werden mussten.

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 Hosts-Datei bereits aktualisiert wurde und es ausreicht, nur das -HUP-Signal zu senden.

Auf dem Host wird Debian 7.8 ausgeführt 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
Stefano Rago