Recentemente ho avuto la necessità di utilizzare Mininet e, per non pasticciare con il kernel e il sistema operativo del mio computer, ho preferito scaricare la macchina virtuale per VirtualBox, scaricabile qui.

Nel momento dell’utilizzo, però, ho riscontrato qualche inconveniente che, per qualcuno non molto esperto, potrebbe risultare difficile da risolvere.

Un punto di partenza per configurare l’ambiente virtuale è questa, anche se in alcuni punti non è completa e dettagliata. Questo non vuole essere un tutorial o una guida dettagliata, ma solo una raccolta di appunti raccolti durante la configurazione del mio sistema.

Tutti i comandi riportati, se non indicato diversamente, vanno digitati sulla shell della macchina virtuale (o su una connessione ssh nel caso sia stata configurata).

Layout di tastiera errato

Il primo problema è stato il layout della tastiera: di default viene caricato il formato internazionale. Per cambiarlo ed impostare quello preferito (italiano in questo caso), è sufficiente dare il comando

sudo loadkeys it

Questo caricherà il layout scelto nella finestra della macchina virtuale. Sarà necessario digitare questo comando ad ogni avvio della macchina virtuale, a meno che non ci si connetta in ssh.

Rete NAT e rete solo host

Per poter navigare su Internet dalla macchina virtuale e poter, allo stesso tempo, raggiungerla dalla macchina fisica, è necessario configurare due schede di rete virtuali.

Una delle due necessiterà di una rete “solo host”, che andrà configurata in VirtualBox.

File > Gestore di rete dell’host aprirà una finestra dove è possibile configurare queste reti. Creiamo una nuova rete vboxnet0. Impostare i tab Scheda  e server DHCP come segue:

Il valore Indirizzo/Maschera IPv6  non è significativo.

Quindi, nelle impostazioni della macchina virtuale, assegnare la prima scheda di rete a NAT  e la seconda a Scheda solo host.

DNS non risolti da parte della macchina virtuale

Seguendo uno dei tanti tutorial per l’utilizzo di Mininet, può capitare di dover scaricare materiale da Internet o mediante git. Nel momento in si prova a connettersi, potrebbe comparire un errore simile a

root@mininet-vm:/tmp# git clone https://github.com/onstutorial/onstutorial
Cloning into 'onstutorial'...
fatal: unable to access 'https://github.com/onstutorial/onstutorial/': Could not resolve host: github.com

Questo avviene in quanto la macchina virtuale non riesce a risolvere gli indirizzi, non avendo un server DNS al quale affidarsi. Per abilitare il server DNS integrato in VirtualBox, il quale si appoggia sul servizio di sistema già configurato per la propria rete, è necessario cambiare le impostazioni della macchina virtuale. Per fare questo, con la macchina virtuale spenta, è necessario dare il comando

VBoxManage modifyvm "Mininet-VM" --natdnshostresolver1 on

N.B. : Su Windows il comando funziona solo nel caso in cui sia eseguito all’interno della cartella di installazione di VirtualBox, che dovrebbe essere C:\Programs Files\Oracle\VirtualBox

In questo modo, al prossimo riavvio della macchina, gli indirizzi DNS verranno risolti automaticamente attraverso il servizio DNS della macchina virtuale.

Può essere verificato provando ad effettuare il ping di un sito qualsiasi:

ping girondi.net

Rete non raggiungibile oppure host non raggiungibile mediante ssh

Potrebbe succedere che, per qualche motivo, la macchina virtuale non riesca a ottenere la giusta configurazione di rete oppure non attivi entrambe le interfacce di rete (una per la connessione ssh e una per poter accedere a Internet mediante NAT). Controllare se gli indirizzi IP vengono assegnati nel modo corretto con  ip addr .

Il risultato deve essere qualcosa come:

root@mininet-vm:/tmp# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:c6:fa:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global eth0
    valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:f5:a8:6a brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth1
    valid_lft forever preferred_lft forever

Sia per la scheda eth0 che eth1 deve essere stato assegnato un indirizzo IP (linee 8 e 12). Se così non fosse, il colpevole potrebbe essere il file di gestione delle interfacce di rete /etc/network/interfaces. Dopo averlo aperto con un editor con i permessi di root, il file  dovrà risultare così:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
<strong>auto eth1</strong>
iface eth0 inet dhcp
<strong>iface eth1 inet dhcp</strong>

Le linee da aggiungere dovrebbero essere la 10 e 12.

Al riavvio, controllando con ip addr, dovrebbero risultare attive entrambe le interfacce con due IP assegnati.

È ora possibile utilizzare ssh per potersi connettere alla macchina virtuale, utilizzando l’IP assegnato alla scheda eth0 (normalmente), ovvero quello della forma 192.168.56.x.

IP statico per la scheda interna

Potrebbe accadere che l’IP assegnato alla scheda interna della macchina virtuale cambi durante il riavvio. Per evitare il problema, è possibile impostarlo come statico.

Dopo aver aperto il file di configurazione della rete /etc/network/interfaces, rimuovere la linea iface eth0 inet dhcp e sostituirla con:

iface eth0 inet static
address 192.168.56.101
netmask 255.255.255.0

Sostituendo nella riga address l’indirizzo assegnato in precedenza alla scheda eth0 (con il quale è stata fatta la connessione ssh). Nel caso la scheda di rete collegata alla rete interna sia eth1, sostituire la riga relativa a eth1, modificando di conseguenza il testo incollato.

Un terminale migliore

xterm, il terminale grafico integrato, non è molto intuitivo da utilizzare. Un emulatore di terminale migliore è gnome-terminal, installabile con

sudo apt-get install gnome-terminal

Nel caso in cui comparissero errori di certificati scaduti o messaggi simili durante l’installazione, provare a ripetere il comando indicato dopo aver aggiornato i repositories con

sudo apt-get update

La configurazione di default, però, mostra solo una schermata nera. Questo avviene a causa di un problema di configurazione del programma stesso.

Dopo averlo aperto, cliccare su Edit > Profile Preferences, il quale mostrerà la finestra di configurazione. Nel tab Colors , deselezionare  use colors from system theme  e selezionare un tema dalla lista.

Windows e X

Utilizzare le applicazioni grafiche di X attraverso ssh su Windows potrebbe essere un po’ complicato. Meglio installare all’interno della macchina virtuale un ambiente grafico completo ed eseguire tutto da lì.

Possiamo installare LXDE (o qualsiasi ambiente grafico a nostro piacimento) con

sudo apt-get install xinit lxde virtualbox-guest-dkms

Dando startx dovrebbe partire l’interfaccia grafica (potrebbe essere necessario un riavvio della macchina virtuale).

Un’altra soluzione è usare un sistema come MobaXterm.