Domande? Problemi?

Iscriviti al Google group:

Laboratori virtuali netkit

Qui presento alcune esperienze che utilizzano netkit per creare dei setup perfettamente funzionanti simulati. Netkit è sviluppato all’università Roma3.

Le esperienze

le esperienze pronte ad ora sono:

Ogni esperienza ha un suo file di spegazione, ed un suo setup. Alcune condividono lo stesso setup ma hanno differenti file di configurazione (es.: firewall-base, routing-base)

Installazione

Ho creato i pacchetti debian di netkit ed ho fixato alcuni problemi bloccanti, quindi vi invito ad aggiungere sulla vostra macchina l’url dove scaricare per debian/ubuntu:

deb http://apt.reteisi.org lenny main

che va ovviamente aggiunto nel file /etc/apt/sources.list o messo come sapete meglio di me via interfaccia grafica. Poi installate:

apt-get update
apt-get install isi-netkit

che in cascata installerà:

  • netkit: i comandi base
  • netkit-kernel: come dice la parola, kernel e moduli del pacchetto netkit

Attenzione

in tutto verranno occupati circa 1.2 GB di spazio. Se non avete spazio sufficiente nella / potete creare prima di installare un link simbolico da una partizione dove avere spazio a /usr/share/netkit, in modo che l’installazione metta i file nella partizione corretta:

sudo ln -s /home/netkit /usr/share/netkit
sudo apt-get install isi-netkit

default

nella ipotesi che la maggior parte di voi usino ubuntu ho messo come terminale di default gnome. Chi usa kde, dopo avere installato deve andare nel file /etc/netkit.conf a decommentare una delle due opzioni ‘konsole’

I comandi base

Ogni comando è corredato da dettagliata pagina di manuale (in inglese) I principali comandi che avete a disposizione sono:

vstart:

fa partire una macchina virtuale: vstart nome_macchina per fare partire una macchina etch occorre specificare: vstart -m etch nome_macchina, per un pdc -m etch-pdc.

vcrash:

modo brutale di spegnere una macchina, con l’opzione -r non lascia tracce (il disco, vedi oltre)

vclean:

elimina device tap inutilizzato e macchine rimaste accese

lstart:

fa partre un laboratorio intero

L’opzione -d directory a me non funziona (segmentation fault), quindi per fare partire un laboratorio raccomando di entrare nella cartella del laboratorio e da lì usare lstart

lcrash:

lo interrompe brutalmente (perdete le modifiche fatte da voi)

lhalt:

interrompe il laboratorio “gentilmente”. A me succede che invece li riavvia, quindi uso preferibilmente halt dall’interno della macchina o lcrash dall’esterno

Principi

Netkit è basato su UML (User Mode Linux), un kernel linux che gira in spazio utente come singolo processo. Con Netkit è possibile simulare una rete di pc e quindi fare esercitazioni sulle reti in modo estremamente efficace.

Anzitutto un po’ di documentazione:

I principi base di netkit sono veramente interessanti. Come ho detto poco sopra il kernel linux gira come singolo processo utente (il kernel è lievemente modificato) ed è possibile in modo molto semplice aggiungere interfacce di rete

i dischi

Quando viene fatto partire un kernel UML occorre passare come argomento il file nel quale si trova il filesystem che userà la macchina (la tecnica è usata anche per altre macchine virtuali e credo cha l’abbiate già incontrata quando avete visto i file dei dischi vmware o virtualbox o qemu).

UML permette anche di passare un secondo file - che può anche essere vuoto - per suddividere lettura e scrittura su file differenti. Questo permette di usare in lettura lo stesso file condiviso fra svariate macchine (normalmente un file di grosse dimensioni: 300MB-1GB) e di usare per la scrittura un file molto più piccolo (solo apprentemente grande come il precedente). Questo usa la tecnica COW (Copy On Write) usata ad esempio per fare gli snapshot in alcuni software di virtualizzazione.

Nella esperienza delle vpn ci servono due firewall e due client, per lo scopo nostro vanno bene tutte macchine uguali e quindi tutte condivideranno la stessa immagine modello (quella di un firewall base argo) mentre usano un file separato per la scrittura.

Allo spegnimento (halt) della macchina tutte le differenze dall’originale restano in questo secondo file che quindi è strettamente legato al primo. La dimensione restituita da ls -l per questi file non corrisponde a quella effettivamente occupata sul disco.

Spegnendo la macchina con vcrash -r il disco in scrittura verrà cancellato

singola macchina

Per fare partire una singola macchina si usa il comando vstart (leggete la pagina di manuale relativa per le opzioni ammesse).

laboratorio

Un laboratorio è modo di fare partire contemporaneamente svariate macchine, per ciascuna delle quali è possibile dire:

  • quanta memoria
  • che modello (default, etch, pdc)
  • quante interfacce di rete
  • in quali domini di collisione deve essere conneso (a quali switch)

configurazioni

è anche possibile indicare alcuni file specifici che verranno copiati in fase di boot e che quindi permetto di configurare la macchina come vogliamo durante la creazioen dell’esperimento.

Questo è ottenuto in fase di boot perché è possibile montare il filesystem della vostra macchina e copiare nel filesystem locale (vedete se interessati la script /etc/init.d/netkit-phase1).

Ecco ad esempio come appare (un pezzo di) un esperimento fw-base relativo alla macchina fw:

fw-base/
|-- README.rst
|-- fw
|   `-- etc
|       |-- argo
|       |   `-- fw.conf
|       `-- network
|           `-- interfaces
`-- lab.conf

i file /etc/argo/fw.conf ed /etc/network/interfaces saranno copiati dal ramo fw nella cartella nella macchina fw.

Ogni laoratorio permette anche di definire una configurazione condivisa fra tutti i laboratori, scrivendola in una cartella shared (ad esempio potrebbe essere un dns da usarsi per tutte le macchina).

da ultimo è possible definire per ogni macchina una script nome_macchina.startup che verrà eseguita alla fine del processo di boot

Nota

runlevel.conf

il file /etc/runlevel.conf dove sono scritti tutti i servizi che devono partire al boot nella distribuzione Argo etch (usa il pacchetto file-rc), viene letto prima che netkit-phase1 abbia sovrascritto eventuali file nella cartella /etc della macchina nell’esperienza. Occorre quindi che ogni eventuale servizio nuovo da attivare sia attivato tramite la script nome_macchina.startup (vedi pagina di manuale di lstart)

lab.conf

nel file lab.conf la maccina fw è definita così:

fw[eth0]=tap,172.16.0.1,172.16.0.2
fw[1]="switch1"
fw[model-fs]=etch.img
fw[mem]=32

che imposta due schede ethernet, una collegata al device tap sul vostro pc e che permette la connessione ad internet ed una legata ad uno switch dal fantasioso nome switch1 (che sarà automaticamente creato per voi da netkit con il comando uml_switch). il modello del filesystem è etch e la memoria 32 MB.

Modus operandi

I pacchetto isi-netkit mette a disposizione alcune esperienza in /usr/share/netkit/labs, dovere copiarle in una posizione dove avete diritto di scrittura e farle partire:

$ cp -av /usr/share/netkit/labs .
$ cd labs/fw-base
$ lstart

per ogni macchina dell’esperimento verrà aperto un terminale corrispondente alla console. Se ne volete un altro potete arrivare via ssh o cambiando il file di configurazione.

Seguite le indicazioni che scrivo per ogni esperimento ma non dimenticate di... provare ogni cosa che vi viene in mente!

Scambio file

E` molto facile scambiare file la macchina virtuale, la vostra cartella sulla macchina reale viene automaticamente montta in /hosthome della machina virtuale.

Connessione ad internet

La connessione ad internet delle macchine virtuali è ottenuta tramite un device sulla macchina host per create il quale serve la password di root: vi verrà chiesta quando lanciate i laboratori (spesso con ubuntu non esiste, impostatela con sudo passwd).

Dopo averla creata, anche se eliminate la macchina virtuale resta il device tap con nome nk_tap_user potete eliminarlo con il comando vclean -T