KVM / libvirt: come configurare indirizzi IP guest statici sull'host di virtualizzazione


31

Quello che mi piacerebbe fare è impostare la configurazione di rete degli ospiti (indirizzo IP, sottorete, gateway, indirizzo di trasmissione) dal sistema host. L'impostazione di rete utilizzata è in bridgemodalità. Come posso configurare la rete dall'host anziché configurare il client stesso su una configurazione di rete statica?

Se eseguo:

virsh edit vm1

c'è anche un <network>blocco e ho provato a configurare l'interfaccia di rete da lì, ma sfortunatamente la VM guest non sembra usarla e come tale è offline alla rete (poiché utilizza solo la configurazione automatica della rete) ... Guest Le macchine virtuali sono entrambe basate su Linux e Windows. Qualsiasi aiuto sarebbe molto apprezzato.


2
La consegna degli indirizzi IP tramite leasing DHCP riservati non è un'opzione?
MadHatter supporta Monica il

Hm credo di si, ma mi piacerebbe assegnare VM # 1 a IP # 1, VM # 2 a IP # 2 ecc. (Piuttosto che dare loro un IP casuale dal mio contratto di locazione). Pensi che sarebbe possibile configurarlo in questo modo con DHCP? Se lo è, sarei felice di provare questo approccio.
beta

2
Suggerisco di rinominare la domanda in qualcosa come " KVM / libvirt: come configurare gli indirizzi IP guest statici sull'host di virtualizzazione "
Nils Toedtmann

1
Concordo con @NilsToedtmann, qualsiasi ulteriore dettaglio sull'hypervisor utilizzato come sistema operativo di base, ecc. Sarebbe utile. Potrebbero essere disponibili ulteriori strumenti di gestione basati su SO per aiutare con la configurazione della rete per i sistemi virtualizzati. Esistono ottime guide su KVM e LXC da utilizzare con i sistemi operativi basati su SUSE che possono utilizzare YaST.
Matt,

Risposte:


52

Se non si desidera eseguire alcuna configurazione all'interno del guest, l'unica opzione è un server DHCP che distribuisce indirizzi IP statici. Se usi la bridgemodalità, probabilmente sarà un server DHCP esterno. Consulta il suo manuale per scoprire come servire i contratti di locazione statici.

Ma almeno nelle modalità forward nato route, potresti usare il comando integrato di libvirt dnsmasqd(versioni più recenti di libvirtd supportano l'opzione "dhcp-hostsfile" di dnsmasq). Ecco come:

Innanzitutto, scopri gli indirizzi MAC delle macchine virtuali a cui desideri assegnare indirizzi IP statici:

virsh  dumpxml  $VM_NAME | grep 'mac address'

Quindi modificare la rete

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

Trova la <dhcp>sezione, limita l'intervallo dinamico e aggiungi le voci host per le tue VM

<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>

Quindi, riavviare la VM (o riavviare il suo client DHCP, ad es. ifdown eth0; ifup eth0)


Aggiornamento: vedo che ci sono rapporti secondo cui la modifica potrebbe non entrare in vigore dopo "virsh net-edit". In tal caso, prova questo dopo la modifica:

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

... e riavvia il client DHCP della VM.

Se il problema persiste, potrebbe essere necessario

  • interrompere il servizio libvirtd
  • uccide tutti i processi dnsmasq che sono ancora vivi
  • avvia il servizio libvirtd

Nota: non è possibile che l'host KVM imponga a una VM con sistema operativo sconosciuto e configurazione sconosciuta di utilizzare una determinata configurazione di rete. Ma se sai che la VM usa un certo protocollo di configurazione di rete - diciamo DHCP - puoi usarlo. Questo è ciò che assume questo post.

Alcuni sistemi operativi (ad esempio alcune distribuzioni Linux) consentono anche di passare le opzioni di configurazione di rete nel guest, ad esempio tramite la riga di comando del kernel. Ma questo è molto specifico per il sistema operativo e non vedo alcun vantaggio rispetto al metodo DHCP.


Grazie lo proverò e riporterò indietro se l'ho fatto funzionare in quel modo.
beta

Freddo. Ma dovrai cambiare la modalità di rete.
Nils Toedtmann,

1
Sono venuto qui perché ho un bisogno simile e penso di poter spiegare il vantaggio rispetto all'utilizzo del DHCP, almeno per il mio caso d'uso. La situazione è certamente insolita. Ho un server che si sposta avanti e indietro tra due reti ogni due settimane. Ha circa 10 ospiti. Una delle reti ha un server DHCP (che è difficile da controllare per me), l'altra no. Questo praticamente esclude l'utilizzo del DHCP. Sto cercando un modo per cambiare l'IP dell'host e aggiornare automaticamente gli indirizzi IP degli ospiti, ecc. In base a quello (sto usando chef per l'automazione, quindi una volta impostati gli indirizzi IP, sono pronto per andare).
Kevin Keane,

2
Posso confermare che le modifiche non hanno effetto senza distruggere e riavviare la rete. Ho anche scoperto, stranamente, che ho dovuto arrestare e quindi avviare la VM. Il semplice riavvio ha lasciato l'interfaccia in uno stato interrotto.
orodbhen,

Il riavvio della rete non rinnova i lease DHCP. Per questo, devi eliminare il file di stato della rete in / var / lib / libvirtd / dnsmasq
orodbhen


3

Sono stato in grado di dnsmasq"vedere" la mappatura IP-MAC appena aggiunta semplicemente inviando un -HUPsegnale al dnsmasqprocesso. Successivamente, è stato sufficiente riavviare il nuovo guest per assegnargli l'IP corretto, senza la necessità di riavviare libvirtdné la rete stessa.

La documentazione ufficiale di libvirt ( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network ) menziona questo script Perl non ufficiale che automatizza l'intero processo: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

Non ho provato questo script da solo, perché ho capito che il file hosts era già aggiornato e bastava inviare il segnale -HUP.

L'host esegue Debian 7.8 e le versioni dei pacchetti sono:

  • kvm 1: 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.