VirtualBox con Interfaccia Host
UPADTE: Con la nuova versione di VirtualBox lo script contenuto in questa pagina non occorre più in quanto la gestione della Host Interface è semplificata al massimo tramite il pannello di configurazione.
VirtualBox è un software di virtualizzazione sempre più usato ed apprezzato soprattutto da chi, per lavoro o altro, non può fare a mano di usare programmi che girano su sistemi operativi diversi da quello che si usa abitualmente.
Facile da installare e semplice da configurare anche su Linux, si propone come una valida alternativa al più blasonato VMWare.
Nella sua ultima release, Virtualbox offre anche la modalità seamless che permette di vedere i software che girano nella macchina emulata come se fossero applicazioni native, nascondendo il desktop e l'interfaccia del programma di emulazione. È possibile interagire con le applicazioni emulate anche attraverso la clipboard copiando testi tra programmi emulati e non.
Una delle pecche che si possono rimproverare a VirtualBox è la relativa difficoltà di configurazione della rete per permettere al sistema host di comunicare con le macchine emulate. La scelta di usare la configurazione NAT per la macchina virtuale permette ad essa di navigare su internet ma la isola dalla macchina host.
Per rimediare a questo incoveniente è possibile usare l'interfaccia host con una quasi banale configurazione di rete dell'host.
Lo script che trovate sotto configura in maniera dinamica un Linux usato come host e permette la comunicazione tra le due macchine.
L'uso è semplicissimo.
Configurate la rete della macchina Virtuale come mostrato in figura.
Salvate lo script come virtualboxconfig.sh e mettetelo in una directory che fa parte del PATH.
Modificate il nome dell'utente che userà virtualbox ed, eventualmente, i parametri di rete e date i permessi di esecuzione con chmod +x virtualboxconfig.sh.
Lanciate: visrtualboxconfig.sh start.
Una volta avviata la macchina virtuale assegnatele un indirizzo ip della stessa rete ad esempio 192.168.1.12.
Terminata la sessione è possibile far tornare tutto come prima con il comando visrtualboxconfig.sh stop.
Testato con Fedora 8 ed XP.
PS: lo script all'avvio chiude il firewall iptables quindi attenzione !#!/bin/bash#Crea interfaccia tap1 per VirtualBox#Testato con vers 1.5.2
start(){interface=`VBoxTunctl -b -t tap1 -u leo` #cambiare il nome utenteif [ -z "$interface" ]; thenexit 1fiecho $interface creata/usr/sbin/brctl addbr br0ifconfig eth0 0.0.0.0 promiscbrctl addif br0 eth0echo "Interfaccia bridge creata"/sbin/ifconfig $interface up/usr/sbin/brctl addif br0 $interfaceifconfig br0 192.168.1.2 upecho "Bridge avviato"echo "stop iptables"/etc/init.d/iptables stop &>/dev/nullsleep 1echo "fatto"}
stop(){echo "Stoping VirtualBox "echo "Elimino bridge"brctl delif br0 tap1brctl delif br0 eth0ifconfig br0 downifconfig tap1 downbrctl delbr br0VBoxTunctl -d tap1echo "ripristino eth0"ifup eth0ifconfig eth0 -promiscecho "Avvio di Iptables"/etc/init.d/iptables start &>/dev/nullsleep 1echo "Fatto";}case "$1" instart)start;;stop)stop;;
*)echo $"Usage: $0 {|start|stop}"exit 1esac
exit 0
Commenti(41) | 18-11-07
umberto favari
Ciao, sul mio serveretto casalingo ho usato un metodo molto simile a quello che hai spiegato tu, unica differenza, ho installato le uml-utilities ed ho usato tunctl al posto di VBoxTunctl. Non so se ci sia differenza, quando torno a casa provo anch'io ad usare le utiliy VB.
La macchina host è una slackware 12 ed ha 2 schede di rete, la macchina emulata è un'ipcop che fa da firewall, entrambe le schede di rete sono in bridge, ma solo la green è utilizzata da entrambe le macchine, in questo modo all'interno della lan le vedo entrambe, mentre l'altra viene usata solo dalla macchina virtuale come red. Con questa configurazione tutto il traffico internet passa tramite il firewall... fin qui tutto bene, i problemi sorgono quando mi collego in openvpn sul firewall, riesco a connettemi correttamente ma non riesco a raggiungere la macchina host in nessuna maniera, l'host fa anche da web server, ho configurato il port forward sul firewall ma anche li ho lo stesso problema, l'host non è raggiungibile...sono sicuro che, sia openvpn che il port forward per apache siano configurati correttamente... le due macchine virtuali riescono a pingarsi a vicenda... io attribuisco la colpa al bridge. Ho trovato molti how-to per debian, loro inseriscono bridge_ports eth0 nel file /etc/network/interfaces, che non esiste ne in slackware ne in Fedora 8 che è il mio pc desktop.
Sapresti darmi qualche dritta? Io non so più a che santo votarmi.
Mon 10-12-2007 15:37
Per quanto riguarda l'uso di VBoxTunctl penso che non ci sia differenza con le uml-utilities.
C'è da dire che l'uml-utilities non sono più supportate su Fedora e l'utimo rpm disponibile è per Fedora 3; da qui il fatto che VirtualBox includa gli strumenti nel suo programma.
Per il tuo problema non ho chiaro quel che fai. Probabilemente quello che ti serve è gestire la route tra gli indirizzi interni di openvpn e quelli della scheda di rete in comune tra ipcop e slackware.
Per il file interfaces in Fedora forse lo trovi in /etc/sysconfig/networking mentre in slackware devi fartelo da solo, casomai agendo in /etc/rc.d/rc.local.
Una cosa: ma senza la vpn i due sistemi comunicano ??
Mon 10-12-2007 19:11
Umberto
Ciao, grazie per la risposta.
Ora ho anche capito perche ho faticato così tanto per trovare le uml-util, infatti me le sono ricompilate ignorando niubbamente l'esistenza degli strumenti virtualbox.
In breve una delle 2 schede di rete dell'host è dedicata solamente a ipcop, la red, mentre per la lan ho fatto il bridge tra l'altra scheda di rete e la green di ipcop, è più difficile da spiegare che da vedere.
Cmq si le 2 macchine comunicano, si pingano a vicenda e riesco ad accedere in ssh, l'host naviga attraverso l'ipcop emulato.
Per openvpn ho utilizzato zerina, un modulo apposta per ipcop che si arrangia a fare il route tra l'ip di openvpn e la green, che è in bridge con l'host.
Mon 10-12-2007 19:40
Se tutto il resto funziona, secondo me, il problema risiede nella configurazione della vpn o nel firewall.
Non conosco openvpn ma sei sicuro di aver fatto una configurazione host-to-network e non host-to-host ?
Eppoi controlla che il firewall non blocchi le connessioni entranti rivolte verso il network.
Io uso virtualbox, oltre che per testare siti, anche per connettermi in vpn con windows ad una rete remota e, qualche tempo fa, ho fatto passare anche l'host fedora sulla vpn ed ha funzionato benissimo, ma forse questo è l'esatto contrario di quello che devi fare tu. :-)
Mon 10-12-2007 20:14
Umberto
Si in effetti è quasi il contrario... sono ancora certo che il problema sta nel bridge cmq perchè in rete ho un altra macchina fisica e quella se mi metto in openvpn riesco a pingarla :(
In realtà tutta la trafila della virtualizzazione la uso per non avere 100 pc accesi in casa che fanno aumentare la bolletta elettrica.
Il certificato è giusto e tutto, a sto punto temo sia un problema di tempi o quache storia strana.
Mon 10-12-2007 21:58
"in rete ho un altra macchina fisica e quella se mi metto in openvpn riesco a pingarla".
Questo ping esce dall'interfaccia green, sei sicuro che l'altro faccia altrettanto ?
Prova a fare una sottorete per il collegamento tra slack e ipcop diversa da quella della rete Lan e fai in modo il firewall abbia una route apposita verso questa sottorete.
Lan 198.168.0.0/24
host/guest 192.168.1.0/24
vpn 10.0.0.0/8
red 192.168.2.0/24
o comunque qualcosa del genere.
Mon 10-12-2007 23:18
Umberto
Niente da fare, quando mi connetto in vpn, raggiungo tutta la rete tranne la macchina host :(
Tue 11-12-2007 15:54
Il ping cosa ti restituisce?
un "Destination Host Unreachable"
oppure rimane fermo in attesa di risposte ??
Tue 11-12-2007 21:17
Umberto
Resta li fermo in attesa di risposta...
Volevo usare l'host anche come web server, in lan funziona, ma dall'esterno, dopo l'opportuno port forwarding sul firewall resta cmq irraggiungibile, si nota che il forward viene eseguito ma apache non risponde... resta li e dopo un paio di minuti da richiesta ascaduta
Wed 12-12-2007 00:53
quindi, non solo in vpn ma anche da red non funziona.
Allora forse è l'host che non ha chiaro dove mandare la risposta.
Controlla le route su slack e vedi se esiste quella che rimanda alla sottorete della scheda red e quella eventuale della vpn.
Wed 12-12-2007 09:30
Umberto
Non ho nessuna delle 2 rotte su slack, l'unica rotta che ho è verso il gateway, il firewall appunto, ma servono anche le altre? Alla fine passa tutto per la green no?
Wed 12-12-2007 23:17
Teoricamente passa tutto per green, ma in pratica non è cosi.
Percorso andata:
vpn-> scheda virtuale ipcop-> bridge-> scheda eth0-> sistema host
Percorso ritorno:
host-> eth0 ..... dove si và per la vpn?
se la vpn ha un indirizzo della lan come green tenterà di uscire nella lan ma non trovera niente in quanto l'indirizzo della vpn non esiste...
Occore una route nell'host che dica di cercare quell'indirizzo passando (gateway) per il sistema guest
Thu 13-12-2007 14:24
Umberto
mmm, inizio a perdermi per strada mi sa...
Allora la vpn è installata su IpCop e dovrebbe essere lui a gestire tutte le rotte, infatti tutte le route che dici tu su ipcop ci sono, quando l'host risponde ad un ping mandato tramite vpn, che non ha una classe di rete come quella della lan dovrebbe uscire per il gateway che a sua volta dovrebbe gestire le rotte ed inoltrarmi la risposta, magari sbaglio, non sono proprio un mostro di tcp-ip.
Cmq mi sto preparando per aggirare il problema, una terza scheda di rete dedicata all'host senza bridge, mentre il br servirà solo la green dell'ipcop... stasera faccio una prova poi ti so dire
Thu 13-12-2007 15:17
sull'host:
route add vpn_net ipguest eth_dove_sta_il bridge_green
Thu 13-12-2007 15:27
Umberto
Tra un po', quando vado a casa provo, solo una cosa non mi torna, ma allora perchè l'altro pc in rete risponde ai ping? Non dovrebbe avere lo stesso problema dell'host?
Thu 13-12-2007 16:55
e se dall'host cerchi di pingare gli indirizzi della vpn cosa succede ?
Thu 13-12-2007 17:38
umberto
Ehm, mi sa che sono da picchiare, ho trovato il problema, nello script di avvio del bridge inizializzo anche br1, l'altro bridge, invece di tirarlo su con 0.0.0.0 mi è scappato un 1 davanti, e quindi veniva su con 10.0.0.0, l'ip della vpn guardacaso è 10.70.... quindi le risposte ai ping tentavano di uscire dall'altra scheda di rete...mmm quanti nervosi per una stupidata simile... ti ringrazio per la pazienza e mi scuso per il disturbo, la prossima volta riguarderò meglio gli ip prima di imprecare.
Thu 13-12-2007 21:23
Ma figurati!
Quando mi servirà qualcosa su ipcop ho la tua email! ;-)
A proposito perchè non provi anche con endian? è una derivata di ipcop tutta italiana.
http://www.endian.com/it/community/
Thu 13-12-2007 23:28
Umberto
Endian non la conoscevo, ho sempre usato IpCop perchè lo usiamo anche a lavoro così ho avuto modo di smanettarci e di conoscerlo un po'. Una cosa che mi piace molto sono tutti gli addon disponibili, in base alle necessità. Ma per quello che ho visto sul sito sembra molto completa anche Endian. Non appena avrò l'occasione la proverò. :)
Fri 14-12-2007 00:08
xavy
Ciao a tutti..
mi chiedevo, ma se io ho il mio pc scollegato da qualsiasi apperecchi router e quindi la mia macchina host non ha indirizzo ip, come posso fare per crearmi una rete lan virtual?
ale
Thu 10-04-2008 10:10
Gli assegni un indirizzo ip manualmente ...
Thu 10-04-2008 19:16
ciao ragazzi vorrei fare della mia macchina un host che terrei accesso per far funzionare il mio sito internet così da non pagare più l'hosting di aruba, avrei anche un db da mettere come posso risolvere questo problema come faccio? grazie a tutti se dovete magari scrivermi molto vi lascio la mia mail fabio1588@hotmail.it
Tue 29-04-2008 20:20
Solo tre parole:
Apache, MySql, noip.
Per il resto studia, fabio!
Tue 29-04-2008 22:01
Nik
Ciao, ma non c'è modo per mantenere attiva la connessione ad internet anche dopo aver lanciato lo script?
Mon 14-07-2008 14:21
Di che tipo di connessione parli ??. Hai forse un modem adsl ed una connessione pppoe ?
In questo caso non so cosa accada, non ho mai provato. Forse bisognerebbe aggiungere anche il comando che faccia ripartire una eventuale ppp0.
Se invece sei ditro ad un router allora l'unico problema che si di solito si verifica è una certa attesa prima di risabilire una route corretta. Per questo basta aspettare qualche secondo prima di avviare virtualbox.
Mon 14-07-2008 18:35
Nik
...sono dietro un router, ma quando lancio lo script non ho più la connessione ad internet sul host e quindi tanto meno sul guest. Riesco a pingare il router ma non riesco ad uscire. Stò utilizzando il tuo script per l'abilitazione dell'accelerazione 3D su vm. Grazie per l'aiuto!
Tue 15-07-2008 08:29
Il problema di cui ti parlavo... Con kernel più vecchi non succedeva ora invece viene reimpostata la route per portare il default gateway su br0 ma non sempre riesce e spesso ci vuole un po di tempo. Aspetta un mezzo minuto prima di lanciare VirtualBox, oppure controlla con il comado route -n se il gateway è stato reimpostato correttamente.
Con l'ultimo kernel aggiornato di Fedora 9 ( 2.6.25.9-76 ) il tempo di aggiornamento della route si è, comunque, notevolmente ridotto.
Tue 15-07-2008 18:15
Nik
niente da fare, ho provato ad aspettare qualche minuto prima di avviare virtualbox ma il problema rimane. Facendo route -n ho visto che il gateway è 0.0.0.0 !
Tue 15-07-2008 20:12
Prova a dare:
route add -net 0.0.0.0 gw 192.168.1.1 br0
Cambia, naturalmente, l'ip del gateway
Al limite, se funziona, inserisci il comando alla fine della funzione start dello script.
Tue 15-07-2008 21:17
Nik
Sei un grandissimo!!! Sull'host la connessione ad internet funziona!!! sul guest faccio la stessa cosa? Grazie mille per l'aiuto! Con le mie scarse conoscenze non ci sarei mai arrivato!!
Tue 15-07-2008 21:30
Nik
Mi rispondo da solo, così non ti rompo più le scatole e magari può servire anche ad altri: sul guest si da questo comando:
route add -net 0.0.0.0 gw 192.168.1.1 eth0
Tue 15-07-2008 21:35
massimo
ho un problema potete aiutarmi?
ho creato un vm con virtulbox, e non riesco a farla entrare nel dominio del mio ufficio. ho provato a creare un'interfaccia host ma non riesco a farla funzionare.
crazie anticipatamente
max
Wed 24-09-2008 13:31
Dici un po poco, Massimo.
Guest, host, per dominio intendi active directory ??
Lo script e le configurazioni di questo post funzionano, almeno a me lo fanno da anni.
Faccio una raccomandazione a tutti adesso:
La rete su host linux va configurata in maniera "tradizionale", lasciate perdere i vari Network-Manager che automatizzano le cose ma si incartano quando si esce dal seminato.
Leo
Thu 25-09-2008 22:40
Massimo
Scusa mi spiego meglio,
il pc che uso è xp e fa parte di un dominio Active Directory (windows server 2003), quello che non riesco a fare è di far entrare nel dominio la VM con XP perche non riesco ad impostare la sceda di rete della VM senza usare la NAT. Preciso di non essere ne un sistemista ne un tecnico, ma un semplice "smanettone", tra l'altro lo script sopra descritto onestamente non saprei come usarlo. Scusate la mia ignoranza.
ciao a tutti
Fri 26-09-2008 16:29
Su questo c'è un'ottima spiegazione sull'help di VirtualBox.
6.6. Host Interface Networking and bridging on Windows hosts
When you install VirtualBox on a Windows host, the setup program installs a special networking driver on your system. This driver, the VirtualBox Host Interface NDIS driver, can be used to create additional host interfaces. These must be created explicitly before they can be attached to a virtual machine.
You can use the network configuration in the VirtualBox GUI to create and delete host interfaces on your Windows system. ...
ecc ecc
Fri 26-09-2008 16:55
Massimo
Gia' fatto, anzi provato a fare, ma non riesco a creare il bridge tra la scheda reale e quella virtuale.
Fri 26-09-2008 17:16
salvo
Ottimo questo articolo; io utilizzo Feora 9 e tutto sommato funziona (per Fedora9 bisogna aggiungere il percorso /usr/sbin/ a tutti i comandi brctl e /sbin/ a tutti i comandi ifconfig). Ho notato però che dalla macchina reale non si riesce a collegarsi; ho provato con /sbin/route -n e non spunta nessun gateway! Il comando sopra suggerito (route add -net 0.0.0.0 gw 192.168.1.1 br0) mi restituisce il seguente output
SIOCADDRT: No such process
Sai quale può essere il problema?
Sat 22-11-2008 19:22
ciao Salvo,
probabilmente non hai creato br0
Il percorso completo di solito andrebbe sempre messo ma, visto che questo script deve essere lanciato da root, si presume che /sbin ed /usr/sbin facciano gia parte del $PATH.
Sat 22-11-2008 22:44
Salvo
penso che br0 sia stata creata automaticamente dallo script; infatti eseguendo ifconfig mi restituisce:
br0 Link encap:Ethernet HWaddr 00:C0:9F:C8:77:59
inet6 addr: fe80::2c0:9fff:fec8:7759/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:71 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14692 (14.3 KiB) TX bytes:468 (468.0 b)
eth0 Link encap:Ethernet HWaddr 00:C0:9F:C8:77:59
inet6 addr: fe80::2c0:9fff:fec8:7759/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:707 errors:0 dropped:0 overruns:0 frame:0
TX packets:764 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:534870 (522.3 KiB) TX bytes:98261 (95.9 KiB)
Interrupt:19
....
da considerare che utilizzo il DHCP. Sopra non spunta l'indirizzo IP; Riaggiornando la connessione, viene aquisito di nuovo l'indirizzo, ma continuo a non riuscire a connettermi dalla macchina reale. Hai qualche idea? (grazie anticipate)
Mon 24-11-2008 16:46
togli il DHCP e tutte le altre amenità tipo Network-Manager
Ho Fedora 9 anch'io e va che è una meraviglia
Mon 24-11-2008 17:08
salvo
è vero. ho provato con indirizzo statico e FUNZIONA!; comunque mi è utile il DHCP; ... con il comando /etc/init.d/network restart mi ricarica gli indirizzi; con il comando /sbin/route add -net 0.0.0.0 gw 192.168.1.1 br0 viene aggiunta la default route ... manca SOLO il DNS per funzionare anche con il DHCP...
Wed 26-11-2008 10:24
*I commenti sono moderati