welcome: please sign in

Cerca

Link Dipartimentali

Link Esterni

Netkit FAQ

Domande frequenti sul progetto standard da fare con Netkit (Esame di Sistemi Operativi e Reti, Esame di Reti di Calcolatori)

Patch da installare su netkit

Raccomandiamo di usare Netkit 2.8 insieme alla patch1 qui sotto.

Patch 1

Applicando la correzione di cui sopra, il file /etc/network/interfaces viene correttamente letto anche al primo avvio della macchina virtuale. Sono inoltre migliorati i tempi di avvio delle macchine virtuali stesse.

RICORDATE CHE TUTTI I FILE DI INSTALLAZIONE DI NETKIT VANNO SCOMPATTATI SU UN FILE SYSTEM CHE NON SIA FAT32 e COME FILE SPARSI usando il comand tar nel seguente modo

tar xvfS fileNetkit.tar.bz2

Altre situazioni note

La mia interfaccia nk_tap_utente non sparisce quando fermo un laboratorio, per cui non riesco poi a farlo ripartire per due volte

Problema riscontrato su alcune versioni di Linux Fedora. Impartire i comandi

   sudo killall uml_switch
   sudo ip link delete nk_tap_utente

Ricordarsi che utente va sostituito con il proprio nome utente.

Che password devo inserire quando avviando il laboratorio me ne viene chiesta una?

Sistema Host che usa sudo per avere i privilegi di amministratore (Ubuntu, Debian): la password dell'utente che impersoni quotidianamente, purchè questo utente abbia i privilegi di sudo-ing (devi appartenere al gruppo sudo).

Sistema Host che usa su per avere i privilegi di amministratore (Mint, Red Hat, Debian minimal ecc.): la password dell'utente root. Se non hai mai impostato questa password devi procedere a farlo.

Ho perso i miei file *.disk. Giorni e giorni di configurazione gettati nel vento...

Ricordarsi che se si arresta una singola macchina con vcrash o un intero laboratorio con lcrash, i dischi vengono sempre CANCELLATI di default. Se non si vuole questo comportamento, è necessario arrestare i laboratori usando lhalt oppure lcrash -F. lhalt è il modo più pulito di arrestare un laboratorio. L'esecuzione di lhalt può essere velocizzata con lhalt -q.

Mi piacerebbe avere un terminale migliore come gnome-terminal, e magari due console per ogni macchina

Individuare questa sezione nel proprio file $NETKIT_HOME/netkit/netkit.conf

VM_CON0=xterm                   # Virtual machine primary consoles use XTerms.
VM_CON1=none                    # Virtual machine secondary consoles are disabled.
                                # Allowed values for VM_CON0 and VM_CON1 are:
                                # none, xterm, this, pty, port:port_number
CON0_PORTHELPER=no              # Bypass port-helper (debugging option)
TERM_TYPE=xterm                 # Virtual machine consoles will use this terminal
                                # emulator. Allowed values for TERM_TYPE are:
                                # xterm, konsole, konsole-tab, gnome

assegnare VM_CON1=xterm e impostare TERM_TYPE=gnome, e salvare le modifiche. Assicurarsi inoltre che il binario port-helper sia raggiungibile nel PATH di default. Nel caso impostare

sudo ln -s $NETKIT_HOME/bin/uml_tools/port-helper /usr/bin/port-helper

Le macchine virtuali netkit si avviano per poi spegnersi subito dopo con un messaggio di errore tipo "kernel panic: unable to mount..."

Cancellare tutti i file *.disk del proprio progetto. Assicurarsi inoltre di aver scompattato da linea di comando i file di installazione di netkit con l'opzione S come nel seguente comando:

tar xvfS fileNetkit.tar.bz2


Lo script check_configuration.sh riporta che il mio file system non supporta i file sparsi

Se state tendando di usare netkit con un filesystem che non supporta i file sparsi (ad es. FAT e sue varianti), questo script segnala correttamente il problema. Tuttavia potrebbero esserci dei falsi positivi: per essere sicuri di avere il supporto ai file sparsi, digitate

stat -f . | grep -w -P "(Type|Tipo)"

dalla cartella in cui si trovano i vostri file .disk. Nessun problema se l'output del comando è un valore tra ext2,ext3,ext4,ntfs,ntfs-3g,fuse,reiser,jfs,xfs. Se l'output del comando è vuoto, probabilmente avete una versione Linux localizzata che non è nè inglese nè italiana, per cui il grep contenuto nel comando fallisce. Si noti che il file system encrypt-fs non supporta i file sparsi.


Le mie macchine virtuali non partono.

Come prima cosa, provare a lanciare una singola macchina con vstart -v <NomeMacchina> --con0=this e leggere attentamente i messaggi di errore. Nel caso in cui il sistema operativo Linux sia in versione a 64bit, l'avvio di una macchina virtuale si blocca senza dare particolari messaggi di errore. In questo caso è necessario installare le librerie ia32-libs che consentono l'esecuzione di file binari a 32 bit (incluso netkit). Nel caso di Ubuntu/Debian a 64 bit per l'installazione è sufficiente digitare sudo apt-get install ia32-libs

Update 2014: per una distribuzione Ubuntu 14.04 è necessario invece:

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 libreadline6:i386

Non riesco a far funzionare il tap con Ubuntu 10.10 (o successive)

Ci sono delle incompatibilità note tra Netkit e Ubuntu 10.10, se si usa un interfaccia con dominio tap. E' necessario installare il package uml-utilities, e se non funziona, provate a scaricare direttamente il tool tunctl da qui rimpiazzandolo nella cartella bin di Netkit. (si ringrazia Francesco Cauteruccio per le utili info).


Se non specificato, qual'è la politica di default di un firewall da mettere nel progetto?

DROP.


Se nel progetto le specifiche dei firewall sono ambigue, come debbo regolarmi?

In caso di ambiguità, le regole successive hanno priorità e sovrascrivono in tutto o in parte le regole precedenti. Ad esempio, se si dice

1. Le reti A4 e A2 deve poter accedere alle reti A1 e A3 2. La rete A2 deve poter accedere esclusivamente alla rete A3

Allora A4 deve poter accedere ad A1 e A3, mentre A2 deve accedere solo ad A3.


Come posso installare iperf su una macchina virtuale?

Da quest'anno, iperf è automaticamente incluso nel filesystem netkit purchè installiate questo file al posto del filesystem ufficiale.


Qual'è la sintassi di uso esatta di iperf?


Esiste qualche tool alternativo a iperf?
Potete usare netcat, che di solito è presente nella distribuzione di netkit. Uso:

Una volta stabilita la connessione è possibile digitare del testo da console (sia sul client che sul server). Alla pressione del tasto invio la stringa digitata dovrebbe apparire sulla console dell'altro interlocutore. ATTENZIONE: La terminazione di netcat dal lato client provoca la chiusura anche dal lato server (netcat non gestisce connessioni multiple).


Come si configura esattamente il dominio tap?

chiamamo gate la macchina virtuale che vogliamo dotare di una scheda di rete collegata al dominio tap e host la macchina reale. Supponiamo di voler collegare eth0 di gate sul dominio tap.


Il dominio TAP non funziona con lstart, ottengo errori del tipo "error while configuring 10.0.0.". Dov'è finito il numeretto finale?
Molto probabilmente i vostri file di configurazione sono in formato DOS. Potete convertirli in formato Linux con l'utility dos2unix, oppure con fromdos. Quest'ultima (Ubuntu 10.10 e successive) è presente nel pacchetto tofrodos di Debian/Ubuntu.


Quando cerco di fare partire una macchina virtuale agganciata al dominio TAP ottengo l'errore TUNSETIFF error, device or resource busy
Se si sta lavorando con Netkit 2.6, è necessario scaricare e installare la seguente patch.

Istruzioni: salvare il file nella cartella su cui è configurata la vostra $NETKIT_HOME. Dall'interno di questa cartella digitare patch -p1 < nome_file_patch. ATTENZIONE IL COMANDO E' PATCH -p1 (Pi UNO) e non patch -pl (Pi ELLE)


Quante schede di rete si possono configurare per macchina virtuale? Al massimo 4 (da eth0 a eth3)


Come si configura il DNS di default su una macchina virtuale pc?


Come si configurano le route di pc in maniera tale che siano attive allo startup di ciascuna macchina? Come faccio ad eseguire automaticamente qualsiasi comando mi serva impartire nel momento in cui si avviano le interfacce di rete?

Esempio:

auto eth1
iface eth1 inet static
        address 1.0.0.1
        network 1.0.0.0
        netmask 255.255.255.0
        broadcast 1.0.0.255
        gateway 1.0.0.254
        dns-nameservers 8.8.8.8
        post-up route add -net 2.0.0.0/24 dev eth1 gw 1.0.0.2

l'ultimo comando route viene eseguito non appena l'interfaccia eth1 viene messa in stato up (subito dopo il comando ifconfig eth1 up). La riga gateway 1.0.0.254 è equivalente a post-up route add default gw 1.0.0.254 dev eth1.

La direttiva post-up può essere usata per lanciare qualsiasi comando si voglia effettuare dopo l'attivazione di una certa scheda di rete, ad esempio uno script di inizializzazione del proprio firewall.. Esempio: metto i comandi di avvio per iptables in uno script che chiamero firewall.sh, e aggiungo post-up /percorso.../firewall.sh opportunamente.


Non mi funziona il firewall. Le macchine tra loro non si "pingano". Non ci capisco niente

Avrete notato che quando si avvia il laboratorio escono diverse scritte. Quelle scritte, pur se in inglese dicono delle cose. Come prima cosa leggete i messaggi di diagnostica che vengono riportati all'avvio. Attenzione dovete leggere non solo i messaggi di diagnostica che compaiono nella finestra principale, ma anche i messaggi che compaiono in ogni singola finestra di terminale. Se non riuscite a capire cosa c'è che non va, rimuovete i file .startup e digitate a mano i comandi di avvio per ogni singolo PC all'interno della corrispondente console. Spesso il problema è un banale errore di sintassi, o un comando formulato male.


Non sono sicuro che il forwarding dei pacchetti sia abilitato su una certa macchina

Assicuratevi che nel file /proc/sys/net/ipv4/ip_forward, nel file system della macchina malfunzionante, compaia il valore 1.


I terminali di netkit hanno i caratteri troppo piccoli E' in teoria possibile lanciare una macchina virtuale usando gnome-terminal. Tuttavia un baco attualmente non risolto (netkit versione 2.7), causa l'errata configurazione dei link di rete quando si usa un terminale diverso da x-term. Per mitigare il problema potete configurare xterm:

  1. Aggiungete nel file /home/vostronomeutente/.Xdefaults-nomevostramacchina (filesystem della macchina ospitante netkit) il rigo xterm*font: -*-lucidatypewriter-*-*-*-*-18-*-*-*-*-*-*-*.

  2. Cambiate il 18 di cui sopra con la dimensione di carattere che preferite (attenzione, non tutti i valori sono ammessi).

  3. Attenzione: il file di configurazione di xterm potrebbe avere nome e path diverso. Per sapere quale è il vostro, digitate strace xterm 2>&1 | grep open | grep "\.X". L'output di questo comando dovrebbe contenere il nome del file di configurazione che dovete cambiare al punto 1.

Salve prof, ho un problema con netkit: quando avvio un laboratorio, nessuna delle macchine che ne fanno parte legge il file interfaces, che però si trova nel path corretto. Netkit è stato installato ed è configurato correttamente, e ho scaricato la patch sul sito del corso piuttosto che il file originale. Quale potrebbe essere il problema?

Il file interfaces viene letto dall'esterno solo *la primissima* volta che lanci il lab. Dal momento in cui vengono creati i file *.disk con le immagini dei filesystem delle singole macchine virtuali, questi non verranno più alterati dall'esterno. In soldoni, se vuoi re-iniettare di nuovo i file interfaces esterni, cancella i *.disk, tenendo presente che ovviamente ne perderai tutto il contenuto.

Come faccio a rendere permanente la configurazione di netkit? Queste 3 righe, opportunamente modificate per riflettere il TUO albero di cartelle, devono essere messe in coda al file /home/mioutente/.bashrc

export NETKIT_HOME=/pathdinetkit/netkit
export PATH=$PATH:$NETKIT_HOME/bin
export MANPATH=:$NETKIT_HOME/man