lunedì 27 ottobre 2008

Ubuntu e VirtualBox: configurare un ponte a cui collegare le macchine virtuali

Virtualbox è un comodo programma per creare macchine virtuali all’interno del proprio PC: esiste in versione Windows/OsX/Linux ed è reso disponibile sia in versione open-source che closed. Quest’ultima ha qualche funzionalità in più (ad esempio, il supporto USB all’interno delle macchine virtuali), ed è comunque gratuita per l’uso privato.

Perchè si dovrebbero creare delle macchine virtuali? Un PC non è abbastanza? Per fare qualche esempio tra i primi che mi vengono in mente, una macchina virtuale può essere utile per provare un sistema che non vogliamo installare sulla macchina fisica (evitando in questo modo i problemi di partizionamento, ma non solo). Potrebbe anche servire per avere a disposizione un sistema sempre pulito da usare, ad esempio, per collegarsi in VPN alla rete della propria azienda.

La configurazione di una macchina virtuale è piuttosto semplice: Virtual Box ha però un sistema di NAT interno che rende ogni VM isolata dalle altre e dal resto della nostra rete locale, pur mantenendo la possibilità di accedere a Internet. Se in certe situazioni questo è comodo, ci sono casi in cui è necessario che le VM si vedano fra di loro e siano viste dal resto della rete come se fossero collegate al nostro switch, come si può vedere nello schema:

Per arrivare alla situazione descritta, è necessario configurare un bridge (uno switch “virtuale”, per capirci) sulla macchina host a cui collegare la scheda di rete e qualche interfaccia virtuale, a cui faranno si collegheranno poi le VM che verranno create in VirtualBox. Queste istruzioni si riferiscono a Ubuntu 8.10, ma penso che siano adattabili in modo abbastanza semplice ad altre distribuzioni.

Come prima cosa, bisogna disinstallare il Network Manager di Gnome, che interagisce (e provoca problemi, in questa particolare sicuazione) con la configurazione della rete, affidandosi al classico file /etc/network/interfaces per la configurazione del tutto. E’ anche necessario installare i pacchetti bridge-utils e resolvconf, che servirannoa gestire il bridge e l’assegnazione dei DNS dal file di configurazione.

sudo apt-get remove –purge network-manager*
sudo apt-get install bridge-utils resolvconf

A questo punto vanno inserite nel file /etc/network/interfaces (non prima di averne fatto un backup, perché non si sa mai) le righe necessarie alla configurazione del bridge:

auto lo
iface lo inet loopback

auto switch
iface switch inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
dns-nameservers 192.168.0.254
pre-up tunctl -u matteo -t vbox0
pre-up tunctl -u matteo -t vbox1
pre-up brctl addbr switch
pre-up brctl addif switch eth0
pre-up brctl addif switch vbox0
pre-up brctl addif switch vbox1
pre-up ifconfig eth0 up
pre-up ifconfig vbox0 up
pre-up ifconfig vbox1 up
post-down brctl delbr switch
post-down ifconfig eth0 down
post-down tunctl -d vbox0
post-down tunctl -d vbox1

L’interfaccia lo è quella di loopback, necessaria al funzionamento di molte componenti interne del sistema e va lasciata così com’è. L’interfaccia switch, invece, sarà il bridge a cui si collegheranno sia la scheda fisica eth0 che quelle virtuali (nel mio caso due: vbox0 e vbox1). Le impostazioni di rete assegnate, nel mio caso statiche, all’interfaccia switch servono a rendere visibile a utilizzabile in rete il PC che ospita le macchine virtuali e il bridge stesso (è la stessa configurazione che avremmo usato normalmente per l’interfaccia eth0). Successivamente, si andranno ad aggiungere e abilitare le altre interfacce, immaginandole come porte di uno switch fisico.

Nel caso in cui, per la configurazione di rete del bridge, si volesse utilizzare DHCP, questo andrà configurato in sostituzione delle impostazioni di rete statiche, secondo la sintassi del file /etc/network/interfaces (man interfaces, per maggiori informazioni).

A questo punto si può riavviare il PC per abilitare la nuova configurazione (oppure giocare un po’ con ifconfig e /etc/init.d/networking, ma si fa prima a riavviare :D) e impostare la rete delle macchine virtuali come “Interfaccia host“, indicando l’interfaccia virtuale a cui la VM si dovrà collegare: è l’equivalente, nel mondo reale, del collegare il cavo ethernet ad uno switch.

Una volta avviata la VM, questa dovrebbe trovarsi, dal punto di vista della connessione di rete, nella stessa situazione di un qualunque PC collegato al nostro switch, con tutti i vantaggi (ed eventuali pericoli) che ne conseguono.

Nessun commento: