VirtualBox: creazione di una rete virtuale: differenze tra le versioni
S3v (discussione | contributi) Nessun oggetto della modifica |
S3v (discussione | contributi) Nessun oggetto della modifica |
||
Riga 310: | Riga 310: | ||
</pre> | </pre> | ||
---- | ---- | ||
[[Categoria: | [[Categoria:Virtualizzazione]] | ||
Versione delle 19:06, 9 apr 2010
Versioni Compatibili ERRORE: valore non valido ( Debian Etch 4.0 Debian Lenny 5.0 Debian Squeeze Debian Sid )! Vedi qui. |
Introduzione
Scopo di questa guida è illustrare i passi necessari ad ottenere un semplice laboratorio virtuale a scopo di studio così strutturato: tre macchine virtuali, una con funzioni di server e le altre due con funzioni di client. Il server è dotato di due interfacce di rete, una verso l'host, attraverso il quale verrà garantita la navigazione in internet, e l'altra verso una rete interna visibile solamente ai client. I due client sono dotati di interfacce di rete singole collegate alla seconda interfaccia del server.
Una volta realizzata la struttura, sarà possibile provare a creare server proxy, DHCP, DNS, LDAP, condivisioni samba e quant'altro.
Requisiti
Il software utilizzato è VirtualBox, installato dai repository degli sviluppatori ed al momento della stesura della guida alla versione 3.0.8. Nonostante la versione 3.0 offra la possibilità di fare quanto segue in maniera automatica, si sceglie comunque di procedere manualmente per meglio comprendere quanto accade.
Per la configurazione dei repository di VirtualBox e per l'installazione del software si segua ad esempio questa guida: Installare Virtualbox su un server Debian senza X
È inoltre necessario installare il pacchetto bridge-utils presente nei repository standard di Debian.
Installazione delle macchine virtuali
Per la creazione delle tre macchine virtuali (ovviamente Debian-powered!) si rimanda ad altre guide, il procedimento è piuttosto semplice e non richiede spiegazioni aggiuntiva. Si abbia solo l'accortezza di configurare le reti delle macchine virtuali come NAT, in questo modo non ci saranno problemi durante l'installazione. Questa configurazione sarà poi modificata più avanti.
Realizzazione delle interfacce virtuali
Verosimilmente la macchina host è dotata di un solo dispositivo, supponiamo eth0. Per i nostri scopi abbiamo bisogno di aggiungere altre quattro interfacce. Per far questo ci vengono in aiuto i comandi brctl e tunctl. Il primo permette di gestire bridge virtuali, ossia dispositivi in grado di collegare più interfacce fra loro in maniera simile a quanto fatto da un hub. Il secondo permette di gestire interfacce ethernet virtuali le quali saranno poi collegate ai bridge opportuni.
Supponendo che l'IP del router fisico al quale siamo collegati sia 192.168.1.1
, e per evitare eventuali conflitti nel routing dei pacchetti, vengono create le seguenti due sottoreti: 10.1.1.0/24
e 10.1.2.0/24
. Il primo bridge br0
con indirizzo 10.1.1.1
, il secondo br1
10.1.2.1
.
Una volta creati i bridge si procede alla creazione delle interfacce virtuali tap0 tap1 tap2
e tap3
. tap0
e tap1
appartengono al server, tap2
al primo client e tap3
al secondo. tap0
è collegato a br0
, e attraverso di questo potrà comunicare con l'host (e con la rete esterna). tap1
, tap2
e tap3
sono collegate a br1
attraverso il quale viene garantita la connessione fra i client ed il server. Gli indirizzi IP dei dispositivi TAP saranno poi configurati all'interno delle macchine virtuali.
Di seguito un'immagine chiarificatrice sullo schema in oggetto.
I seguenti comandi vanno impartiti da utente root.
Creazione di un'interfaccia virtuale chiamata tap0
disponibile solo per nomeUtente:
# tunctl -t tap0 -u nomeUtente
Attivazione dell'interfaccia tap0
:
# ip link set up dev tap0
Creazione di un bridge virtuale chiamato br0
:
# brctl addbr br0
Aggiunta di tap0
a br0
:
# brctl addif br0 tap0
Attivazione del bridge br0
:
# ip link set up dev br0
Assegnazione dell'indirizzo 10.1.1.1
con netmask 255.255.255.0
a br0
:
# ip addr add 10.1.1.1/24 dev br0
Instradamento dei pacchetti diretti a 10.1.1.0
su br0
:
# ip route add 10.1.1.0/24 dev br0
Similmente:
# tunctl -t tap1 -u nomeUtente # tunctl -t tap2 -u nomeUtente # tunctl -t tap3 -u nomeUtente # ip link set up dev tap1 # ip link set up dev tap2 # ip link set up dev tap3 # brctl addbr br1 # brctl addif br1 tap1 # brctl addif br1 tap2 # brctl addif br1 tap3 # ip link set up dev br1 # ip addr add 10.1.2.1/24 dev br1
Configurazione delle macchine virtuali
Si utilizzi la GUI di Virtualbox per assegnare tap0
e tap1
al server, tap2
al primo client e tap3
al secondo. Si rimanda alla documentazione di Virtualbox per la configurazione delle interfacce di rete delle macchine guest come Schede con bridge.
Una volta avviate le tre macchine virtuali è necessario configurarle come segue.
Server
# cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.1.1.2 netmask 255.255.255.0 up route add default gw 10.1.1.1 dev eth0 auto eth1 iface eth1 inet static address 10.1.2.2 netmask 255.255.255.0 # cat /etc/resolv.conf domain search nameserver 192.168.1.1 # Il servizio DNS è demandato al router fisico
Client 1
# cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.1.2.3 netmask 255.255.255.0 up route add default gw 10.1.2.2 dev eth0 #La comunicazione verso l'esterno deve passare dal server # cat /etc/resolv.conf domain search nameserver 10.1.2.2 # Il server sarà poi configurato per fornire il servizio DNS
Client 2
# cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.1.2.4 netmask 255.255.255.0 up route add default gw 10.1.2.2 dev eth0 #La comunicazione verso l'esterno deve passare dal server # cat /etc/resolv.conf domain search nameserver 10.1.2.2 # Il server sarà poi configurato per fornire il servizio DNS
Dopo aver modificato la configurazione della rete, si impartisca su ogni macchina il comando:
/etc/init.d/networking restart
Abilitare la comunicazione verso l'esterno
La comunicazione verso l'esterno (host ed internet) è inibita. Per permettere al server di comunicare con l'host è necessario modificare le regole di iptables nel modo seguente.
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -A FORWARD -i eth0 -o br0 -j ACCEPT iptables -A FORWARD -i br0 -o eth0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Si noti che per quanto fatto finora l'unica macchina in grado di accedere all'esterno è il server. Sarà poi compito del server stesso fornire l'accesso ai suoi client.
Test della rete
Per verificare il corretto funzionamento della rete è sufficiente controllare di ottenere risposta ai seguenti comandi:
Server
ping 192.168.1.1 ping 10.1.1.1 ping 10.1.2.1 ping 10.1.2.3 ping 10.1.2.4
Client 1
ping 10.1.2.1 ping 10.1.2.2 ping 10.1.2.4
Client 2
ping 10.1.2.1 ping 10.1.2.2 ping 10.1.2.3
Ripristinare la situazione iniziale
Una volta spente le macchine virtuali, per eliminare le interfacce virtuali è sufficiente digitare:
echo 0 > /proc/sys/net/ipv4/ip_forward ip link set down dev tap0 ip link set down dev tap1 ip link set down dev tap2 ip link set down dev tap3 brctl delif br0 tap0 brctl delif br1 tap1 brctl delif br1 tap2 brctl delif br1 tap3 ip link set down dev br0 ip link set down dev br1 brctl delbr br0 brctl delbr br1
Gestire le interfacce tramite Script
Per evitare di digitare ogni volta i comandi di creazione e eliminazione delle interfacce virtuali è possibile realizzare un semplice script bash.
Si crei dunque un file di nome initmachines.sh
e si copi all'interno il seguente codice:
#!/bin/sh PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" case "$1" in start) tunctl -t tap0 -u nomeUtente ip link set up dev tap0 brctl addbr br0 brctl addif br0 tap0 ip link set up dev br0 ip addr add 10.1.1.1/24 dev br0 ip route add 10.1.1.0/24 dev br0 tunctl -t tap1 -u nomeUtente tunctl -t tap2 -u nomeUtente tunctl -t tap3 -u nomeUtente ip link set up dev tap1 ip link set up dev tap2 ip link set up dev tap3 brctl addbr br1 brctl addif br1 tap1 brctl addif br1 tap2 brctl addif br1 tap3 ip link set up dev br1 ip addr add 10.1.2.1/24 dev br1 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -A FORWARD -i eth0 -o br0 -j ACCEPT iptables -A FORWARD -i br0 -o eth0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ;; stop) echo 0 > /proc/sys/net/ipv4/ip_forward ip link set down dev tap0 ip link set down dev tap1 ip link set down dev tap2 ip link set down dev tap3 brctl delif br0 tap0 brctl delif br1 tap1 brctl delif br1 tap2 brctl delif br1 tap3 ip link set down dev br0 ip link set down dev br1 brctl delbr br0 brctl delbr br1 ;; *) echo "Usage: initmachines {start|stop}" exit 1 ;; esac exit 0
Per avviare le interfacce sarà sufficiente digitare (come root):
# sh /pathDelloScript/initmachines.sh start
Per ripristinare la situazione iniziale:
# sh /pathDelloScript/initmachines.sh stop