Server web virtuale con VirtualBox, port forwarding
Una caratteristica di VirtualBox rispetto a VMware è l’approccio al networking che si presenta abbastanza impegnativo, specie se volessimo far vedere alla rete la macchina virtuale o parte di essa. E’ possibile infatti usare la rete connessa, oppure il NAT, ma la prima necessita di un’interfaccia tap/tun e la seconda “blinda” all’esterno i servizi e le porte esposte.
Per questo quando si deve virtualizzare un server, che vada quindi oltre il sistema operativo virtualizzato e che punti invece al sito web/ftp, si può seguire la tecnica del port forwarding attraverso l’uso del comando VBoxManage.
Nell’esempio che segue ho usato un server ubuntu-jeos con apache/mysql/php e proftpd sul quale per puro gioco ho installato wordpress 2.5.1, così potrò gestire il mio famosissimo blog “Virtual Blog”
Con la macchina virtuale spenta, si esegue un piccolo script:
#!/bin/sh
VBoxManage setextradata ubuntu-jeos “VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache2/Protocol” TCP
VBoxManage setextradata ubuntu-jeos “VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache2/GuestPort” 80
VBoxManage setextradata ubuntu-jeos “VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache2/HostPort” 8080
VBoxManage setextradata ubuntu-jeos “VBoxInternal/Devices/pcnet/0/LUN#0/Config/proftpd/Protocol” TCP
VBoxManage setextradata ubuntu-jeos “VBoxInternal/Devices/pcnet/0/LUN#0/Config/proftpd/GuestPort” 21
VBoxManage setextradata ubuntu-jeos “VBoxInternal/Devices/pcnet/0/LUN#0/Config/proftpd/HostPort” 8021
VBoxManage getextradata ubuntu-jeos enumerate
in modo tale che le richieste indirizzate alla macchina host su 8080 vengano girate allla macchina guest (ubuntu-jeos) sulla porta 80 e quelle ricevute sulla 8021 a loro volte verranno girate sulla 21.
Eventuali approfondimenti sul manuale di VirtualBox.
Una volta avviata la macchina “ubuntu-jeos” vedremo in LISTEN le porte:
$ sudo netstat -anp|grep LISTEN|grep -v LISTENING
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 8282/VirtualBox
tcp 0 0 0.0.0.0:8021 0.0.0.0:* LISTEN 8282/VirtualBox
Potremo vedere il sito sul browser con http://localhost:8080 e effettuare ftp sulla porta 8021.
Se poi volessimo evitare di usare questa scomoda sintassi è possibile istruire le chiamate con iptables con l’aggiunta di poche righe al firewall:
-A PREROUTING -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 8080
-A PREROUTING -p tcp -m tcp –dport 21 -j REDIRECT –to-ports 8021
-A OUTPUT -d 127.0.0.1 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 8080
-A OUTPUT -d 127.0.0.1 -p tcp -m tcp –dport 21 -j REDIRECT –to-ports 8021
Alcuni accorgimenti:
1) Lo script per il port forwarding deve essere lanciato a macchina virtuale spenta.
2) il firewall con iptables può essere azzerato (per tutte le regole!) in ogni momento, con l’uso di
#!/bin/sh
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Buon virtualboxing
Di seguito alcune schermate:
- vboxextra6
Postato in: Linux, Tools, Ubuntu, Virtualbox, Virtualization | Contrassegnato da tag: Linux, nat, port forwarding, Virtualbox, Virtualization, wordpress

Digg/adoldo
Del.icio.us/antoniodoldo
GMail/antonio.doldo
Technorati/adoldo
MyBlogLog/adoldo
Blog/adoldo





























leggermente OT: Mi riusciresti a quantificare le prestazioni utilizzando la soluzione tun/tap da te proposta (che uso anche io) ?
Spiego meglio: ho virtualizzato un normalissimo Windows XP Pro utilizzando appunto tun/tap per il forwarding. Su un Pentium III 1Ghz con 1GB ram ( che non sarà un mostro ma nemmeno ultrascarso ) mi tiene praticamente su un paio di connessioni contemporaneamente ( 2 connessioni da 2 diversi indirizzi IP ) dopodichè “muore tutto” e la connessione si blocca senza rimedio sulla macchina guest.
Non penso che l’host che ho usato per le prove possa andare in crisi con 2 due sole connessioni.
PS: per queste cose, VirtualBox mi sembra ancora piuttosto giocattolosa, o sbaglio ?
@LuNa
perfettamente d’accordo con te, non è pensabile ancora di usarlo in produzione, se però nelle versioni future verranno fuori strumenti di monitoraggio e gestione via console delle funzionalità di disco, rete e snapshot (tipo vmware-server per intenderci), allora sarà tutt’altra cosa
…. ma questa è un’altra storia
ciao,
Antonio
PS: giocattolosa: LOL
@LuNa
scusa ma dimenticavo di risponderti sul precedente messaggio, purtroppo, non so dirti se le cose funzionano meglio con l’interfaccaia tun/tap oppure con il port forwarding con VBoxManage, la seconda è secondo me ancora peggio, poiché il binario VirtualBox, vedi le porte in LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 13485/VirtualBox

tcp 0 0 0.0.0.0:8021 0.0.0.0:* LISTEN 13485/VirtualBox
deve rispondere alla richieste e li non so se le prestazioni o peggio ancora la sicurezza siano compromesse
Ultima considerazione strettamente personale: se non ci fosse, bisognerebbe inventarlo, prima c’era solo vmware (//$//), l’opensource rimane sempre trainante, proponendo soluzioni che maturano e arrivano a livelli incredibili, staremo a vedere
saluti,
A.
quindi direi che l’idea che mi sono fatto provando è corretta. Va bene (per ora) per virtualizzare per uso locale. In quell’ambito, salvo alcuni problemini con alcuni sistemi operativi o qualche kernel linux molto ma molto patchato, il tutto risulta funzionante e direi anche molto veloce.
Peccato. Non adoro VMWARE per dirversi motivi ma mi ci dovrò adattare se voglio arrivare a scopi più ‘nobili’
Io invece per una cosa del genere uso vmware in produzione e non fa’ una grinza.
Pure col reverse proxy.
http://www.spippolazione.net/index.php/2007/11/07/reverse-proxy-con-ubuntu-gutsy/
@LuNa
La differenza di prestazioni può essere un punto a favore di VirtualBox, considerando che tutto il software è più piccolo e meno esigente di risorse di vmware, si installa anche su pendrive e fa bene il suo lavoro. Nessuno pensa ancora di paragonarlo a vmware, ma visto che su innotek ha messo le mani Sun, potrebbe essere a breve un diretto antagonista del colosso vmware. Certo è che al momento nelle virtualizzazioni produttive nelle aziende vmware non ha rivali, anche se forse non è tra i software (è pur sempre un software!) migliori in questo ambito, e poi è proprietario ( e costa un sacco di soldi).
Ciao,
Antonio
@spippolazione
ho letto il tuo post e anch’io ho fatto una cosa simile sempre con vmware-server, rimane il fatto che per ora vmware sta dando la versione server gratis (non libera) solo per poter entrare nelle aziende e vendere ESX, e che qualcuno mi smentisca se può. A noi rimane comodo che si possano virtualizzare servizi che richiederebbero hardware, speriamo solo che ci sia più apertura e che vmware rilasci “open” come con vmware-tools anche qualcosa di più corposo.
Ciao e grazie,
Antonio
[...] Antonio Doldo: “Server web virtuale con VirtualBox, port forwarding“ [...]