Condividi su Facebook
KVM bridged network - KVM aggiungere interfacce di rete bridged
Scritto da: gisto85 il 08/11/2010 alle 12:33
Tag: Bash, Virtualizzazione, Virtualization, kvm.Visto 2298 volte.


KVM

Virtualizzando con Qemu e Kvm può risultare difficoltoso creare delle nuove
macchine virtuali con le schede di rete bridgiate (bridged) alla rete lan/dmz principale.
Seguendo i passaggi qui sotto creeremo una macchina virtuale che sarà visibile da tutta la rete come se fosse una macchina fisica.
La guida è testata per Fedora/CentOS, funziona facilmente anche per Ubuntu/Debian con piccoli cambiamenti.
In particolare lo script kvent (il principale) non dovrebbe richiedere cambiamenti.

Preparazione dell'ambiente
Da questo punto in poi si assume di avere i privilegi di root per tutti i comandi eseguiti.


Code:

su -
o
sudo -s
yum groupinstall virtualization
yum install tunctl

Installato tutto il necessario possiamo procedere:


Code:

/etc/init.d/libvirtd restart

Lo script qui sotto crea un bridge (br0) ed aggiunge un scheda di rete virtuale.
Configuriamo anche la variabile PR_ETH inserendo la nostra scheda di rete che già utilizziamo per navigare e sulla quale vogliamo creare il bridge.
Inoltre per potere accedere verso internet configuriamo il gateway e opzionalmente dns diversi: rispettivamente le variabili GW e DNS


Code:

#!/bin/bash

NUM_OF_DEVICES="1"
KVMNET_GID=$(grep kvm /etc/group | cut -d ':' -f 3)
BR_NAME="br0"
BR_IP="192.168.1.110"
BR_NETMASK="255.255.255.0"
IF_NAME="kvmnet"
PR_ETH="eth0"
GW="192.168.1.1"
DNS="$GW"

case $1 in
   start)
      modprobe tun

      brctl addbr "$BR_NAME"
      ifconfig "$BR_NAME" "$BR_IP" netmask "$BR_NETMASK" up
      /sbin/route add default gw "$GW"
      #echo "nameserver $DNS" >> /etc/resolv.conf
      
      for ((i=0; i < $NUM_OF_DEVICES ; i++)); do
         echo "configuring "$IF_NAME"$i"
         tunctl -b -g ${KVMNET_GID} -t "$IF_NAME"$i
         brctl addif "$BR_NAME" "$IF_NAME"$i
         ifconfig "$IF_NAME"$i up 0.0.0.0 promisc
      done
      
      brctl addif "$BR_NAME" "$PR_ETH"
      ifconfig "$PR_ETH" up 0.0.0.0 promisc
      echo "1" > /proc/sys/net/ipv4/ip_forward
      iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
   ;;

   stop)
      for ((i=0; i < $NUM_OF_DEVICES ; i++)); do
         ifconfig "$IF_NAME"$i down
         brctl delif "$BR_NAME" "$IF_NAME"$i
         tunctl -d "$IF_NAME"$i
      done
      brctl delif "$BR_NAME" "$PR_ETH"
      ifconfig "$BR_NAME" down
      brctl delbr "$BR_NAME"
      /etc/init.d/iptables stop
      #ifup "$PR_ETH"
   ;;
   *)
      echo "Usage: $(basename $0) (start|stop)"
;;

esac

Eseguiamo ora lo script che può essere scaricato da qui


Code:

sh kvnet.sh start

Verifichiamo con ifconfig e route -n che tutto sia andato a buon fine e proseguiamo con l'installazione della macchina.

Lo script qemu-kvm crea una macchina virtuale attraverso qemu e kvm
Prima di lanciare lo script creiamo un file da utilizzare come disco: in questo esempio viene creato un file da 10GB con dd


Code:

dd if=/dev/zero of=fedora.img bs=1024 count=10000000

Configuriamo nelle rispettive variabili RAM, CPU, path del file dell'hard-disc e file iso da utilizzare come cdrom.
Attenzione: la variabile IFNAME deve contenere il nome di un interfaccia creata con lo script precedente.


Code:

#!/bin/bash

RAM="1024"
CPU="1"
DISK="/home/egidio/virtimage/fedora.img"
CDROM="/home/ftp/pub/iso/Fedora-14-i686-Live-Desktop.iso"
IFNAME="kvmnet0"
MACADDR=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)
#echo $MACADDR

qemu-kvm "$DISK"
   -net nic,model=rtl8139,macaddr="$MACADDR"
   -net tap,ifname="$IFNAME",script=no
   -m "$RAM"
   -smp "$CPU"
   -usb
   -cdrom "$CDROM"
   --boot order=dc
   -localtime

Eseguiamo lo script che può essere scaricato da qui


Code:

sh qemu-kvm.sh

Se è attivo un server dhcp, la macchina virtuale sarà già connessa alla rete e raggiungibile attraverso l'ip al pari di qualsiasi altro computer.

Per qualsiasi informazione contattaci.


Aggiungi un commento:
Nick:
captchaInserire il codice:





Licenza Creative Commons

Blog CodiceASbarre.Net di CodiceASbarre.Net sotto licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia License.
Lavoro basato su www.codiceasbarre.net.
Ulteriori permessi in merito questa licenza possono essere richiesti a info@codiceasbarre.net.


Link ad altri blog: