Il processore Intel P9500 montato sul mio piccolo portatilino supporta il set di istruzioni Intel® VT specifiche per una virtualizzazione a livello quasi hardware (anche se non è la z/Architecture :P).
Con gli ultimi Kernel, Linux ha introdotto moduli per questa tecnologia e una versione modificata dell’emulatore QEMU riesce a sfruttare, o almeno ci prova, questa caratteristiche. La Kernel-based Virtual Machine (KVM) supporta una gran quantità di sistemi operativi, ma fortunatamente basta Windows XP a chi, data l’arretratezza della cultura informatica italiana, è obbligato ad usare sistemi Microsoft per piccoli e stupidi lavori, dove nemmeno Wine ti può essere d’aiuto.
Il sistema in sé è molto grezzo e per far scroccare al sistema ospitato la rete di quello ospitante ci sono non pochi passi da compiere. La soluzione base è quella di creare un bridge tra le due connessioni, ma questo approccio può compromettere gli eventuali automatismi di un sistema desktop. Ho optato quindi per la creazione di una rete virtuale e dare al mio sistema delle capacità di routing temporanee.
Ecco lo script kvm-ifup:
/etc/kvm/kvm-ifup
-
#!/bin/sh
-
-
switch=$(/bin/netstat -rn | awk '/^0\.0\.0\.0/ { print $NF }')
-
dns=$(grep nameserver /etc/resolv.conf | cut -f 2 -d " ")
-
-
/sbin/ifconfig $1 192.168.2.1 netmask 255.255.255.0 up
-
echo 1 > /proc/sys/net/ipv4/conf/$1/proxy_arp
-
echo 1 > /proc/sys/net/ipv4/conf/$1/forwarding
-
echo 1 > /proc/sys/net/ipv4/conf/$switch/forwarding
-
-
/sbin/iptables -t nat -I PREROUTING 1 -i $1 -p udp -d 192.168.2.1 –dport 53 -j DNAT –to-destination $dns
-
/sbin/iptables -t nat -I POSTROUTING 1 -o $switch -s 192.168.2.0/24 -j MASQUERADE
L’orribile e oscena tecnica di reindirizzare le query DNS, l’ho presa da tutti i router ultimamente in commercio. Chiedo perdono…
Ed invece lo script kvm-ifdown:
/etc/kvm/kvm-ifdown
-
#!/bin/sh
-
-
switch=$(/bin/netstat -rn | awk '/^0\.0\.0\.0/ { print $NF }')
-
-
/sbin/iptables -t nat -D POSTROUTING 1
-
/sbin/iptables -t nat -D PREROUTING 1
-
-
echo 0 > /proc/sys/net/ipv4/conf/$1/proxy_arp
-
echo 0 > /proc/sys/net/ipv4/conf/$1/forwarding
-
echo 0 > /proc/sys/net/ipv4/conf/$switch/forwarding
-
-
/sbin/ifconfig $1 down
Questi due script vengono ovviamente lanciati dall’invocazione del kvm:
-
modprobe tun; kvm -smp 2 -usb -net tap -net nic winxp_x86.img
Come si può notare, è necessario invocare il comando con i privilegi di root, altrimenti niente caricamento di moduli per l’interfaccia virtuale, niente configurazione di interfacce di rete, niente impostazione del firewall, ecc. ecc… E sul sistema operativo emulato va impostato un indirizzo di classe 192.168.2.0/24 mentre il default gateway e il dns impostati su 192.168.2.1.
Devo risolvere ancora qualche problemino come aggiungere l’audio o una tastiera a 105 tasti visto che freccette, pagina su e giù non vanno.
Tags:
emulation,
linux,
network,
notebook,
software