VirtualBox

English version

L'idea è semplice: utilizzare una base sicura (e meglio "aggeggiabile") come Debian Etch con cui virtualizzare Windows Server 2003 (per alcuni servizi che non si possono far girare altrimenti) utilizzando VirtualBox. Tutto sommato non è stato così difficile, ecco qua cosa ho fatto.

Installazione

Ho effettuato l'installazione del "sistema standard" aggiungendo poi ai repository quello di virtualbox come descritto nella pagina ufficiale di download.
Il pacchetto da installare è virtualbox che si porta dietro un bel po' di dipendenze:

I seguenti pacchetti NUOVI (NEW) saranno installati:
cpp cpp-4.1 defoma fontconfig fontconfig-config libasound2 libaudio2 libdirectfb-0.9-25 libexpat1 libfontconfig1
libfreetype6 libglib2.0-0 libice6 libicu36 libidl0 libjpeg62 liblcms1 libmng1 libpng12-0 libqt3-mt libsdl1.2debian
libsdl1.2debian-alsa libsm6 libsvga1 libsysfs2 libx11-6 libx11-data libxalan110 libxau6 libxcursor1 libxdmcp6
libxerces27 libxext6 libxfixes3 libxft2 libxi6 libxinerama1 libxrandr2 libxrender1 libxt6 psmisc svgalibg1
ttf-dejavu virtualbox x11-common

Quindi aggiungete al gruppo vboxusers l'utente che poi lancerà la macchina virtuale (eventualmente createlo prima, io ho usato winserver2003).

Se volete lanciare la GUI VirtualBox per la configurazione della macchina virtuale o per utilizzarla in locale e' necessario installare anche i pacchetti xorg (o quelli che ritenete più opportuni per poter lanciare X e xterm) e libxalan110. Questi pacchetti non sono invece necessari se la macchina sara' configurata da console (o su un'altra macchina) e se sara' necessario solo l'accesso remoto.

ATTENZIONE
Puo' capitare che la compilazione del modulo vboxdrv fallisca, in questo caso verificate di aver installato il pacchetto linux-headers-vostrokernel ed, eventualmente, build-essential, dopodiche' rilanciate

 ~# /etc/init.d/vboxdrv setup

Creazione e configurazione della macchina virtuale con la GUI

A questo punto si può lanciare X con startx (dall'utente appena aggiunto al gruppo vboxusers) e da xterm si lancia virtualbox col comando VirtualBox. Creare una macchina virtuale è molto semplice e potete far riferimento alle tantissime risorse già presenti su internet. L'unica nota è non attivare il server RDP presente in VirtualBox (funziona malissimo!), se necessario meglio usare quello di Windows.

La macchina virtuale puo' essere creata su un pc e poi spostata nel server finale (dove, magari, non e' installato l'ambiente grafico) semplicemente spostando (e impostando poi i giusti permessi) la cartella ~/.VirtualBox.

Configurare la rete

La procedura consiste nel creare una scheda di rete virtuale vbox0 e un bridge tra essa e la scheda fisica su cui, per comodità, ho creato un ip alias per gestire meglio le richieste.

Ecco quindi il file /etc/network/interfaces col quale imposto l'ip primario e un alias che assocerò alla macchina virtuale:

# Interfaccia fisica
auto eth0
iface eth0 inet static
        address 192.168.2.60
        netmask 255.255.255.0
        gateway 192.168.2.254
        dns-nameservers 208.67.222.222 208.67.220.220

# Interfaccia virtuale
auto eth0:1
iface eth0:1 inet static
        address 192.168.2.61
        netmask 255.255.255.0

Poi, dopo aver installato bridge-utils, bisogna creare il bridge br0 tra eth0:1 e vbox0, io ho creato uno script che faccio avviare all'inizio, ovvero /etc/init.d/bridge linkato in /etc/rc.2/S20bridge.
ATTENZIONE: è fondamentale che parta PRIMA che virtualbox abbia creato vbox0, altrimenti br0 non viene trovato, ovvero prima dei files S20vboxdrv e S20vboxnet.

Ecco quindi /etc/init.d/bridge:

#!/bin/bash
brctl addbr br0
ifconfig br0 10.1.1.1 netmask 255.255.255.0 up

# Regole per far funzionare PASV mode in FTP
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

echo 1 > /proc/sys/net/ipv4/ip_forward

# Giro tutte le richieste su .61 alla macchina virtuale
iptables -t nat -A PREROUTING -p tcp -d 192.168.2.61 -j DNAT --to 10.1.1.2

# Con queste regole si possono girare singole porte
# HTTP
#iptables -t nat -A PREROUTING -p tcp -d 192.168.2.61 --dport 80 -j DNAT --to 10.1.1.2:80
# HTTPS
#iptables -t nat -A PREROUTING -p tcp -d 192.168.2.61 --dport 443 -j DNAT --to 10.1.1.2:443
# Desktop Remoto
#iptables -t nat -A PREROUTING -p tcp -d 192.168.2.61 --dport 3389 -j DNAT --to 10.1.1.2:3389

# Permetto alla macchina virtuale di navigare
iptables -t nat -A POSTROUTING -o eth0 -s 10.1.1.2 -j MASQUERADE

Infine creo l'interfaccio vbox0, prima però è meglio riavviare la rete per aggiornare gli indirizzi ip (attenzione se cambiate l'ip e siete connessi via SSH) ed eseguire lo script /etc/init.d/bridge per creare il bridge (altrimenti verrà mostrato un errore che si risolverà al riavvio del pc).

/etc/init.d/netrworking restart
chmod +x /etc/init.d/bridge
/etc/init.d/bridge

Il comando qui di seguito crea vbox0 e salva la cui configurazione nel file /etc/vbox/interfaces):

VBoxAddIF vbox0 nomeutente br0

Al posto di nomeutente ho usato winserver2003.
Ricordatevi di impostare su Windows l'ip a 10.1.1.2/24 e il gateway a 10.1.1.1

Avvio automatico all'accensione del pc

Per avviare con l'interfaccia grafica ho usato gdm con login automatico dell'utente con cui lancio la macchina virtuale e nel file .bashrc ho inserito il comando necessario a lanciare la macchina da console:

VBoxSDL -fullscreen -vm WinServer2003

Se invece volete soltanto l'accesso remoto alla macchina il comando e':

VBoxVRDP -startvm WinServer2003

Per l'avvio automatico ho creato il file /etc/init.d/VBoxAutostart linkato in /etc/rc.2/S99VBoxAutostart come questo qui sotto:

#!/bin/bash

echo -e ""
echo -e "### AVVIO DELLA MACCHINA VIRTUALE ###"
echo -e ""
su winserver2003 -c 'VBoxVRDP -startvm WinServer2003 &'
sleep 5
echo -e ""

In alternativa e' possibile creare uno script contenente

VBoxVRDP -startvm WinServer2003 &

da lanciare poi con start-stop-daemon sempre nel file /etc/init.d/VBoxAutostart

#!/bin/bash
start-stop-daemon --start -c winserver2003 --exec /path/script.sh

Cose che capitano...
Ho avuto modo di provare più volte la procedura descritta qui sopra e di correggerla altrettante volte a causa di qualche "svista". Alcuni fallimenti nella creazione/avvio della macchina virtuale però non sono relativi alla procedura da me descritta ed ho quindi deciso di elencarli per cercare di esservi d'aiuto.

Se, ad esempio, la macchina da linea di comando non si avvia con l'errore Invalid machine name! non è proprio detto che sia sbagliato il nome della macchina. Nel mio caso infatti mi ero scordato di creare la cartella /home/winserver2003/scambio che avevo impostato come cartella di scambio tra il sistema host e quello virtuale.

Altri errori sui permessi, ad esempio, dell'uso del cdrom o altre periferiche li ho risolti aggiungendo l'utente ai gruppi relativi (audio, cdrom, floppy, plugdev, ecc.)

continua... :D

blog comments powered by Disqus