VirtualBox: creazione di una rete virtuale: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
 
(23 versioni intermedie di 9 utenti non mostrate)
Riga 1: Riga 1:
{{Virtualbox}}
== Introduzione ==
== 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.  
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.<br/>
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.  
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.<br/>
I due client sono dotati di interfacce di rete singole collegate alla seconda interfaccia del server.
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, [[Un server DNS e DHCP su Debian Etch | DHCP, DNS]], [[Samba e OpenLDAP: creare un controller di dominio con Debian Lenny | LDAP]], [[Condivisione risorse con Samba | condivisioni samba]] e quant'altro.
Una volta realizzata la struttura, sarà possibile provare a creare server proxy, [[Un server DNS e DHCP su Debian | DHCP, DNS]], [[Samba e OpenLDAP: creare un controller di dominio con Debian Lenny | LDAP]], [[Samba: guida estesa | condivisioni samba]] e quant'altro.
 
{{Box|Nota|In alternativa, utilizzando le ultime versioni di Virtualbox, è possibile sfruttare il supporto nativo per VDE (Virtual Distributed Ethernet) che consente di creare reti virtuali più complesse, reti ibride (reali+virtuali), reti condivise tra diversi software di virtualizzazione (kvm, qemu, umlinux, bochs, etc.). Per maggiori informazioni sul supporto nativo VDE: [http://wiki.v2.cs.unibo.it/wiki/index.php/VDE_native_support_for_VirtualBox sul wiki del progetto Virtualsquare] (in inglese).}}


== Requisiti ==
== Requisiti ==
Il software utilizzato è [http://www.virtualbox.org 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.
Il software utilizzato è [http://www.virtualbox.org 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.


E' inoltre necessario installare il pacchetto [http://packages.debian.org/lenny/bridge-utils bridge-utils] presente nei repository standard di Debian.
Per la configurazione dei [[repository]] di VirtualBox e per l'installazione del software si seguano le guide [[VirtualBox: installazione]], [[VirtualBox: configurazione]] e [[VirtualBox: amministrazione da terminale]].
 
È inoltre necessario installare i pacchetti [https://packages.debian.org/jessie/bridge-utils bridge-utils] (per il comando brctl) ed [https://packages.debian.org/jessie/uml-utilities uml-utilities] (per il comando tunctl), entrambi presenti nei repository standard di Debian.


== Installazione delle macchine virtuali ==
== 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.
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 ==
== 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 [http://linux.die.net/man/8/brctl brctl] e [http://linux.die.net/man/8/tunctl tunctl]. Il primo permette di gestire [http://it.wikipedia.org/wiki/Bridge_(informatica) bridge virtuali], ossia dispositivi in grado di collegare più interfacce fra loro in maniera simile a quanto fatto da un [http://it.wikipedia.org/wiki/Hub_(informatica) hub]. Il secondo permette di gestire [http://it.wikipedia.org/wiki/TUN/TAP interfacce ethernet virtuali] le quali saranno poi collegate ai bridge opportuni.
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 [http://linux.die.net/man/8/brctl brctl] e [http://linux.die.net/man/8/tunctl tunctl]. Il primo permette di gestire [http://it.wikipedia.org/wiki/Bridge_(informatica) bridge virtuali], ossia dispositivi in grado di collegare più interfacce fra loro in maniera simile a quanto fatto da un [http://it.wikipedia.org/wiki/Hub_(informatica) hub]. Il secondo permette di gestire [http://it.wikipedia.org/wiki/TUN/TAP 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.
Supponendo che l'IP del router fisico al quale siamo collegati sia <code>192.168.1.1</code>, e per evitare eventuali conflitti nel routing dei pacchetti, vengono create le seguenti due sottoreti: <code>10.1.1.0/24</code> e <code>10.1.2.0/24</code>. Il primo bridge <code>''br0''</code> con indirizzo <code>10.1.1.1</code>, il secondo <code>''br1''</code> <code>10.1.2.1</code>.


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.
Una volta creati i bridge si procede alla creazione delle interfacce virtuali <code>''tap0 tap1 tap2''</code> e <code>''tap3''</code>. <code>''tap0''</code> e <code>''tap1''</code> appartengono al server, <code>''tap2''</code> al primo client e <code>''tap3''</code> al secondo. <code>''tap0''</code> è collegato a <code>''br0''</code>, e attraverso di questo potrà comunicare con l'host (e con la rete esterna). <code>''tap1''</code>, <code>''tap2''</code> e <code>''tap3''</code> sono collegate a <code>''br1''</code> 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.
Di seguito un'immagine chiarificatrice sullo schema in oggetto.


Riga 25: Riga 30:




I seguenti comandi vanno impartiti da utente ''root''.
I seguenti comandi vanno impartiti da utente [[root]].




Creazione di un'interfaccia virtuale chiamata ''tap0'' disponibile solo per nomeUtente:
Creazione di un'interfaccia virtuale chiamata <code>''tap0''</code> disponibile solo per nomeUtente:
<pre>
<pre>
tunctl -t tap0 -u nomeUtente
# tunctl -t tap0 -u nomeUtente
</pre>
</pre>




Attivazione dell'interfaccia ''tap0'':
Attivazione dell'interfaccia <code>''tap0''</code>:
<pre>
<pre>
ip link set up dev tap0
# ip link set up dev tap0
</pre>
</pre>




Creazione di un bridge virtuale chiamato ''br0'':
Creazione di un bridge virtuale chiamato <code>''br0''</code>:
<pre>
<pre>
brctl addbr br0
# brctl addbr br0
</pre>
</pre>




Aggiunta di ''tap0'' a ''br0'':
Aggiunta di <code>''tap0''</code> a <code>''br0''</code>:
<pre>
<pre>
brctl addif br0 tap0
# brctl addif br0 tap0
</pre>
</pre>




Attivazione del bridge ''br0'':
Attivazione del bridge <code>''br0''</code>:
<pre>
<pre>
ip link set up dev br0
# ip link set up dev br0
</pre>
</pre>




Assegnazione dell'indirizzo 10.1.1.1 con netmask 255.255.255.0 a ''br0'':
Assegnazione dell'indirizzo <code>10.1.1.1</code> con netmask <code>255.255.255.0</code> a <code>''br0''</code>:
<pre>
<pre>
ip addr add 10.1.1.1/24 dev br0
# ip addr add 10.1.1.1/24 dev br0
</pre>
</pre>


 
Instradamento dei pacchetti diretti a <code>10.1.1.0</code> su <code>''br0''</code>:
Instradamento dei pacchetti diretti a 10.1.1.0 su ''br0'':
<pre>
<pre>
ip route add 10.1.1.0/24 dev br0
# ip route add 10.1.1.0/24 dev br0
</pre>
</pre>


Riga 72: Riga 76:


<pre>
<pre>
tunctl -t tap1 -u nomeUtente
# tunctl -t tap1 -u nomeUtente
tunctl -t tap2 -u nomeUtente
# tunctl -t tap2 -u nomeUtente
tunctl -t tap3 -u nomeUtente
# tunctl -t tap3 -u nomeUtente
ip link set up dev tap1
# ip link set up dev tap1
ip link set up dev tap2
# ip link set up dev tap2
ip link set up dev tap3
# ip link set up dev tap3
brctl addbr br1
# brctl addbr br1
brctl addif br1 tap1
# brctl addif br1 tap1
brctl addif br1 tap2
# brctl addif br1 tap2
brctl addif br1 tap3
# brctl addif br1 tap3
ip link set up dev br1
# ip link set up dev br1
ip addr add 10.1.2.1/24 dev br1
# ip addr add 10.1.2.1/24 dev br1
</pre>
</pre>


== Configurazione delle macchine virtuali ==
== Configurazione delle macchine virtuali ==
 
Si utilizzi la GUI di Virtualbox per assegnare <code>''tap0''</code> e <code>''tap1''</code> al server, <code>''tap2''</code> al primo client e <code>''tap3''</code> al secondo. Si rimanda alla documentazione di Virtualbox per la configurazione delle interfacce di rete delle macchine guest come [http://www.virtualbox.org/manual/UserManual.html#id2513808 Schede con bridge].
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 [http://www.virtualbox.org/manual/UserManual.html#id2513808 Schede con bridge].
 


Una volta avviate le tre macchine virtuali è necessario configurarle come segue.
Una volta avviate le tre macchine virtuali è necessario configurarle come segue.
Riga 157: Riga 159:
nameserver 10.1.2.2 # Il server sarà poi configurato per fornire il servizio DNS
nameserver 10.1.2.2 # Il server sarà poi configurato per fornire il servizio DNS
</pre>
</pre>


Dopo aver modificato la configurazione della rete, si impartisca su ogni macchina il comando:
Dopo aver modificato la configurazione della rete, si impartisca su ogni macchina il comando:


<pre>
<pre>
/etc/init.d/networking restart
# /etc/init.d/networking restart
</pre>
</pre>


== Abilitare la comunicazione verso l'esterno ==
== 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.
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.


<pre>
<pre>
echo 1 > /proc/sys/net/ipv4/ip_forward
# echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
# iptables -F
iptables -A FORWARD -i eth0 -o br0 -j ACCEPT
# iptables -A FORWARD -i eth0 -o br0 -j ACCEPT
iptables -A FORWARD -i br0 -o eth0 -j ACCEPT
# iptables -A FORWARD -i br0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
</pre>
</pre>


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.
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 ==
== Test della rete ==
Per verificare il corretto funzionamento della rete è sufficiente controllare di ottenere risposta ai seguenti comandi:
Per verificare il corretto funzionamento della rete è sufficiente controllare di ottenere risposta ai seguenti comandi:


=== Server ===
=== Server ===
<pre>
<pre>
ping 192.168.1.1
$ ping 192.168.1.1
ping 10.1.1.1
$ ping 10.1.1.1
ping 10.1.2.1
$ ping 10.1.2.1
ping 10.1.2.3
$ ping 10.1.2.3
ping 10.1.2.4
$ ping 10.1.2.4
</pre>
</pre>


=== Client 1 ===
=== Client 1 ===
<pre>
<pre>
ping 10.1.2.1
$ ping 10.1.2.1
ping 10.1.2.2
$ ping 10.1.2.2
ping 10.1.2.4
$ ping 10.1.2.4
</pre>
</pre>


=== Client 2 ===
=== Client 2 ===
<pre>
<pre>
ping 10.1.2.1
$ ping 10.1.2.1
ping 10.1.2.2
$ ping 10.1.2.2
ping 10.1.2.3
$ ping 10.1.2.3
</pre>
</pre>


== Ripristinare la situazione iniziale ==
== Ripristinare la situazione iniziale ==
 
Una volta spente le macchine virtuali, per eliminare le interfacce virtuali è sufficiente digitare:
Una volta spente le macchine virtuali, per eliminare le interfacce virtuali è sufficiente digitare


<pre>
<pre>
echo 0 > /proc/sys/net/ipv4/ip_forward
# echo 0 > /proc/sys/net/ipv4/ip_forward
ip link set down dev tap0
# ip link set down dev tap0
ip link set down dev tap1
# ip link set down dev tap1
ip link set down dev tap2
# ip link set down dev tap2
ip link set down dev tap3
# ip link set down dev tap3
brctl delif br0 tap0
# brctl delif br0 tap0
brctl delif br1 tap1
# brctl delif br1 tap1
brctl delif br1 tap2
# brctl delif br1 tap2
brctl delif br1 tap3
# brctl delif br1 tap3
ip link set down dev br0
# ip link set down dev br0
ip link set down dev br1
# ip link set down dev br1
brctl delbr br0
# brctl delbr br0
brctl delbr br1
# brctl delbr br1
</pre>
</pre>


== Gestire le interfacce tramite Script ==
== 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]].
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 <code>''initmachines.sh''</code> e si copi all'interno il seguente codice:
Si crei dunque un file di nome ''initmachines.sh'' e si copi all'interno il seguente codice:


<pre>
<pre>
Riga 298: Riga 291:


<pre>
<pre>
sh /pathDelloScript/initmachines.sh start
# sh /pathDelloScript/initmachines.sh start
</pre>
</pre>


Riga 305: Riga 298:


<pre>
<pre>
sh /pathDelloScript/initmachines.sh stop
# sh /pathDelloScript/initmachines.sh stop
</pre>
</pre>
[[Categoria:Networking]]
 
[[Categoria:Server]]
[[Categoria:Virtualizzazione]] [[Categoria:Non-Free]]

Versione attuale delle 08:03, 21 mag 2016

VirtualBox

Sommario

Installazione e configurazione
Amministrazione
Altro

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.

Info.png Nota
In alternativa, utilizzando le ultime versioni di Virtualbox, è possibile sfruttare il supporto nativo per VDE (Virtual Distributed Ethernet) che consente di creare reti virtuali più complesse, reti ibride (reali+virtuali), reti condivise tra diversi software di virtualizzazione (kvm, qemu, umlinux, bochs, etc.). Per maggiori informazioni sul supporto nativo VDE: sul wiki del progetto Virtualsquare (in inglese).


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 seguano le guide VirtualBox: installazione, VirtualBox: configurazione e VirtualBox: amministrazione da terminale.

È inoltre necessario installare i pacchetti bridge-utils (per il comando brctl) ed uml-utilities (per il comando tunctl), entrambi presenti 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.

Schema laboratorio virtuale


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