VoIP and Hacking | Consulenza Documentazione

Virtualizzazioni in Linux (Parte 2 - KVM)

by admin on Oct.21, 2010, under Hacking, Linux

Nella puntata precedente, ho mostrato come impostare un server virtuale Debian Lenny eseguito sotto UML su Ubuntu 10.04.
In questo secondo articolo, ancora in tema di virtualizzazione, esamineremo KVM.
KVM sta per “kernel-based virtual machine”, disponibile a partire dalla versione 2.6.20 del kernel.

Passo per passo esamineremo stavolta:

1. i requisiti hardware per KVM
2. come impostare Ubuntu 10.04 come hosting OS.
3. come lanciare Puppy Linux come guest OS image
3. come installare BackTrack 4 R1 come guest OS image
4. come avviare ed eseguire il guest OS sotto KVM
5. come eseguire il KVM OS guest su un host con una singola interfaccia di rete col bridge networking

Prerequisiti: Virtualizzazione Hardware
Per ottenere le migliori performance il processore deve supportare la virtualizzazione hardware. Per scoprire se il proprio processore possieda il supporto hardware native alla virtualizzazione (HVM), si dia questo comando nella shell:

# egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Se qualcosa viene emesso in output, significa che il processore fornisce il supporto alla virtualizzazione hardware ed è utilizzabile con KVM.
Senza supporto hardware, KVM ripiega sulla considerevolmente più lenta emulazione basata su QEMU.
Il processore Intel Core i3 dell’ammiraglia dei miei laptop non dovrebbe avere problemi a fornire una adeguata capacità di virtualizzazione hardware:

# egrep '^flags.*(vmx|svm)' /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat tpr_shadow vnmi flexpriority ept vpid
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat tpr_shadow vnmi flexpriority ept vpid
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat tpr_shadow vnmi flexpriority ept vpid
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat tpr_shadow vnmi flexpriority ept vpid

In realtà questo non era sufficiente, dato che impartendo un:

# modprobe kvm_intel

ottenevo infatti un bel messaggio di “Operation not supported”.
Per fortuna il dmesg si rivelava meno laconico indicando chiaramente che il supporto alla virtualizzazione hardware era disattivato nel BIOS.
Effettuata la necessaria modifica tutto è proceduto senza intoppi.

Verifichiamo se i moduli kernel siano già caricati:

# lsmod |grep kvm
kvm_intel              39416  0
kvm                   244969  1 kvm_intel
# modinfo kvm
filename:       /lib/modules/2.6.32-25-generic/kernel/arch/x86/kvm/kvm.ko
license:        GPL
author:         Qumranet
srcversion:     F0C69C7192C4B21232EB958
depends:
vermagic:       2.6.32-25-generic SMP mod_unload modversions 586
parm:           oos_shadow:bool
parm:           ignore_msrs:bool
# modinfo kvm_intel
filename:       /lib/modules/2.6.32-25-generic/kernel/arch/x86/kvm/kvm-intel.ko
license:        GPL
author:         Qumranet
srcversion:     BDE3ADC0C2485840173870E
depends:        kvm
vermagic:       2.6.32-25-generic SMP mod_unload modversions 586
parm:           bypass_guest_pf:bool
parm:           vpid:bool
parm:           flexpriority:bool
parm:           ept:bool
parm:           unrestricted_guest:bool
parm:           emulate_invalid_guest_state:bool
parm:           ple_gap:int
parm:           ple_window:int

È il momento di mandare in esecuzione una virtual machine sotto KVM.
Ho scaricato a questo scopo la iso più recente di una delle distro live che va per la maggiore, Puppy Linux 5.1.1:

# kvm -cdrom lupu-511.iso -boot d -m 256

Questo comando è servito a montare lupu-511.iso come un CD-ROM (”-cdrom” opzione), avviare KVM con 256MB Ram (”-m 256″ opzione) ed effettuare il boot da cdrom (”-boot d” opzione). Una volta lanciato il comando kvm in una finestra terminale, un’altra finestra terminale compare mostrando gli abituali messaggio di boot.

puppy_start

Se il boot ha successo si otterrà la tipica schermata di Puppy.

puppy_screen

Il comando appena utilizzato avvia da cdrom e l’ OS kvm guest dispone solo di un CD-ROM device corrispondente ad un file immagine ISO. Non vi è alcun disk device o disk image.
Vediamo perciò qualcosa di più completo utilizzando come OS image, al posto di Puppy, la BackTrack 4 R1 Release ISO, che oltre ad essere utilizzabile come distro live, è anche installabile in maniera permanente.

Per installare BackTrack 4 R1 come KVM guest OS, occorre una disk image. Dal momento che kvm deriva da qemu, si può usare il comando qemu-img per creare la disk image.

# qemu-img create backtrack-kvm 10G
Formatting 'backtrack-kvm', fmt=raw size=10737418240

In tal modo si è creata una disk image di 10GB sparsi destinata a essere usata per l’installazione di una BackTrack 4 R1 (1.9 Gb).
10GB dovrebbero costituire una dimensione sufficiente.

Se in Debian, kvm usa lo script /etc/kvm/kvm-ifup per inizializzare la rete per la virtual machine (host side) quando essa viene avviata, in Ubuntu tale compito viene svolto da /etc/qemu-ifup. /etc/qemu-ifup si presenta così:

#!/bin/sh
switch=$(/sbin/ip route list | awk '/^default / { print $5 }')
/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif ${switch} $1

Evidentemente, esso assume che il sistema host usi un bridge.
Pertanto lo imposteremo nel sistema host:

# vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.11
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

# /etc/init.d/networking restart
 * Reconfiguring network interfaces...

# ifconfig eth0; ifconfig br0
eth0      Link encap:Ethernet  HWaddr 54:42:49:62:95:b0
          inet6 addr: fe80::5642:49ff:fe62:95b0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10327 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8300 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9898036 (9.8 MB)  TX bytes:1153209 (1.1 MB)
          Interrupt:18 

br0       Link encap:Ethernet  HWaddr 54:42:49:62:95:b0
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::5642:49ff:fe62:95b0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3054 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2278110 (2.2 MB)  TX bytes:363995 (363.9 KB)

Ora effettuiamo il download della distro Backtrack:

# wget ftp://ftp.uio.no/linux/backtrack/bt4-r1.iso

quindi testiamola come distro live in KVM, attivandone il networking in bridge mode:

# kvm -hda /backtrack-kvm -cdrom ./bt4-r1.iso -m 256 -boot d -net nic -net tap,name=br0

bt1

bt2

Avviando l’interfaccia grafica KDE di backtrack si ha subito la possibilità di installare permanentemente la distro nella partizione indicata.

bt3

bt4

Se l’installazione permanente ha avuto successo, dopo aver effettuato un completo shutdown e non un semplice reboot, come sarebbe normale se non fosse avvenuta su una macchina virtuale, l’ultimo passo da compiere rimane quello di dire a KVM di avviarsi dalla disk image:

# kvm -hda ./backtrack-kvm -m 256 -boot c -net nic -net tap,name=br0

bt5

Nonostante l’assurdo riferimento a Ubuntu 8.10, abbiamo ottenuto il nostro scopo:

bt6

Se si desidera mandare in esecuzione la virtual machine come daemon, si possono passare a kvm i parametri “-nographic” e “-daemonize” come argomenti.

# kvm -hda ./backtrack-kvm -m 256 -boot c -net nic -net tap,name=br0 -nographic -daemonize

Send post as PDF to PDF | PDF Creator | PDF Converter
:, , , , , , , , ,

Comments are closed.

Cerchi qualcosa in particolare?

Usa il form qui sotto per cercare nel sito:

Blogroll!

Alcuni links...

Archives

Tutte le entries, in ordine cronologio...