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 artizionamento, 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 loopbackauto 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
) 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.




Domanda: a cosa corrisponde l’indirizzo assegnato allo switch? Mi riferisco a 192.168.0.1, perché a grandi linee (anche se in modo diverso) la mia configurazione è la stessa… ma, al bridge, assegno un IP diverso da quello del router – che per me è 192.168.1.1 (che poi sarebbe anche il gateway) – e da eth0 – che sarebbe 192.168.1.2 –, però non funziona! Né con VirtualBox come vbox0, né con QEMU come tap0 — ovviamente. Un’altra domanda che mi faccio (almeno, da quando non funziona più il bridging… perché con “Hardy” non avevo problemi) è che indirizzo assegnare al guest, perché è ancora diverso da quello del bridge — nel mio caso, 192.168.1.5 (gli altri sono assegnati ad altrettanti computer nella WLAN).
@Federico:
L’indirizzo del bridge corrisponde all’indirizzo che assegneresti al PC nell’uso “normale”, se non ospitasse macchine virtuali. In realtà potresti anche non assegnarlo, ma a quel punto ti troveresti a usare il PC come un vero switch anzichè anche come un normale PC.
Nel mio caso il PC ha indirizzo 192.168.0.1 e il gateway/dns 192.168.0.254.
Pingback: ZicZac.it, clicca qui e vota questo articolo!
Pingback: diggita.it
Pingback: Plim.it - Vota questo articolo!
ottimo tutorial… giusto una precisazione, visto che l’ho sperimentato sulla mia pelle ieri: con le connessioni wireless tutto ciò non può funzionare. Se dovete “condividere” una scheda wireless, bisogna usare parprouted. Qui c’è un’ottima spiegazione, purtroppo in inglese:
http://www.scottro.net/vboxbridge.html#Wireless
@mimmozzo:
Non avevo considerato la condivisione della rete wifi, grazie della segnalazione
Dovresti usare “bridge_ports eth0 vbox0 vbox1″ per fare le cose per bene, senza dover usare “brctl”.
Guarda che non serve tutta quella divina commedia di righe in network/interfaces, leggi il pdf di documentazione di Virtualbox dove spiega come fare su Debian/Ubuntu, è tutto molto più semplice!
$ cat /etc/network/interfaces
auto br0
iface br0 inet static
address 192.168.66.2
netmask 255.255.255.0
gateway 192.168.66.1
bridge_ports eth0
$ cat /etc/vbox/interfaces
vbox0 scorp br0
Un po’ di ragione ce l’avete, farò qualche altra prova. Male non mi farà di sicuro
Pingback: Risolti i problemi di bridging con VirtualBox 2.0.6 PUEL at brand:GNU
Pingback: Analizzare le statistiche del blog: dati di aprile 2009 - Matteo Moro