Questa guida è stata verificata solo con versioni obsolete di Ubuntu, potrebbe non essere più valida. Vuoi contribuire ad aggiornarla? Clicca qui!

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

La documentazione trattata fino ad ora è focalizzata all'uso di KVM attraverso libvirt, in questa pagina verrà spiegata la gestione diretta di KVM, un metodo non raccomandabile, ma in alcuni casi, utile.

Gestione diretta di KVM

KVM è molto simile a qemu e rende possibile l'esecuzione di macchine da riga di comando.

La sintassi di base è:

kvm -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2

dove:

Per ulteriori opzioni digitare:

kvm --help

Dispositivi di connessione bridged

Prima di avviare KVM usando sistemi di connessione bridged come utente, sono necessarie alcune configurazioni.

  1. Creare il bridge sulla scheda, come descritto nella relativa pagina.

  2. Installare il pacchetto: uml-utilities

  3. Aprire con un editor di testo il file /etc/udev/rules.d/40-permissions.rules e aggiugere alla fine del file la seguente riga:

     KERNEL=="tun", GROUP="kvm", MODE="0660"

    per impostare i permessi al dispositivo tun.

  4. Salvare e chiudere il file appena modificato.
  5. Riavviare la macchina per rendere visibili i dispositivi bridged e tun.

  6. Aprire con un editor di testo il file /etc/kvm/kvm-ifup e aggiungere «sudo» davanti ai comandi «ip» e «brctl»:

     #!/bin/sh
    
     switch=$(ip route ls | awk '/^default / { for(i=0;i<NF;i++) { if ($(i) == "dev") print $(i+1) }}')
     '''sudo''' /sbin/ip link set dev "$1" up 
     '''sudo''' /usr/sbin/brctl addif ${switch} $1
     exit 0
  7. Salvare e chiudere il file appena modificato.
  8. Per lanciare KVM è necessario uno script wrapper. È possibile inserirlo in ~/bin e chiamarlo kvm-bridge e richiamarlo direttamene con il comando kvm-bridge.

     #!/usr/bin/env bash.
     # script per gestire l'allocazione dell'interfaccia tap.
     # per kernels >= 2.6.18.
    
     # modificato da bodhi.zazen con l'ausilio di:
     # http://calamari.reverse-dns.net:980/cgi-bin/moin.cgi/FrequentlyAskedQuestions#head-2511814cb92c14dbe1480089c04f83c281117a86.
     # http://ubuntuforums.org/showthread.php?t=528046.
     # http://howtoforge.com/virtualization-with-kvm-on-ubuntu-9.10.
    
     # impostazione di una interfaccia tap per qemu.
     # USERID - uid sotto il quale è in esecuzione qemu.
     USERID=`whoami`
    
     # generare un indirizzo macchina casuale peril nic di qemu .
     # shell script preso in prestito dall'utente pheldens @ qemu forum.
    
     ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; \
     do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)
    
     # specificare quale NIC usare - vedere qemu.org per altri NIC.
     # model=r8169.
     # impostare il modello di scheda di rete.
     # http://howtoforge.com/virtualization-with-kvm-on-ubuntu-9.10.
    
     model=rtl8139
     iface=`sudo tunctl -b -u $USERID`
    
     # avviare kvm con questi parametri.
     # echo "rendere visibile l'interfaccia $iface con indirizzo macchina $ranmac".
     # nohup aggiunto per consentire a kvm di essere indipendente dal terminale.
     nohup kvm -net nic,vlan=0,macaddr=$ranmac -net tap,vlan=0,ifname=$iface $@
    
     # kvm è stato fermato - non usare più l'interfaccia tap.
     sudo tunctl -d $iface &> /dev/null
  9. Rendere eseguibile lo script appena creato digitando in un terminale:

     chmod 0755 ~/bin/kvm-bridge
  10. Modificare sudoers per consentire ai membri del gruppo KVM di eseguire lo script wrapper kvm-bridge e creare una intefaccia di rete bridged senza l'esecuzione di KVM come superutente:

     visudo
    Aggiungere le seguenti righe alla fine del file:
     # Autorizzare i membri del gruppo KVM a configurare una interfaccia di rete bridged virtuale.
     %kvm ALL=(ALL) NOPASSWD: /sbin/ip, /usr/sbin/brctl, /usr/sbin/tunctl
  11. Avviare KVM da riga di comando. Non è necessario dichiarare una interfaccia network.

     kvm-bridge -m 512 -hda disk.img -cdrom ubuntu.iso -boot -d -smp 2

iptables

Aggiungere le seguenti regole ad iptables:

# autorizza i pacchetti in ingresso per l'ospite kvm.
IPTABLES -A FORWARD -d $IPADDR_FROM_GUEST_OS -j ACCEPT
# autorizza i pacchetti in uscita da kvm.
IPTABLES -A FORWARD -s $IPADDR_FROM_GUEST_OS -j ACCEPT

Sostituire «$IPADDR_FROM_GUEST_OS» con l'attuale indirizzo ip dell'ospite di kvm. (Si raccomanda di configurare gli ospiti all'uso di un indirizzo IP statico).

Se si usa ufw, aggiungere queste regole al file /etc/ufw/before.rules.

Ulteriori risorse


CategoryVirtualizzazione CategoryDaRevisionare

Virtualizzazione/Kvm/GestioneDiretta (l'ultima modifica è del 09/02/2019 11.38.50, fatta da vipri-alessandro)