
Tag: Bash, Virtualizzazione, Virtualization, kvm.Visto 1998 volte.
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:
o
sudo -s
yum groupinstall virtualization
yum install tunctl
Installato tutto il necessario possiamo procedere:
Code:
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:
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:
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:
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:
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:
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.

