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.

vboxextra6

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:

9 Responses to “Server web virtuale con VirtualBox, port forwarding”

  1. 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.

  2. PS: per queste cose, VirtualBox mi sembra ancora piuttosto giocattolosa, o sbaglio ?

  3. @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

  4. @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 8)
    saluti,
    A.

  5. 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’ :D

  6. 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/

  7. @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

  8. @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

  9. [...] Antonio Doldo: “Server web virtuale con VirtualBox, port forwarding“ [...]

Leave a Reply

  • Firma per “Linux nelle Scuole”

    Firma la petizione “Linux nella Scuole”
  • Statistiche del Blog

    • 329,714 hits
  • RSS VirtualBox® Images

  •  

    Aprile 2008
    L M M G V S D
    « Mar   Mag »
     123456
    78910111213
    14151617181920
    21222324252627
    282930  
  • Archivi