#acl GiovambattistaIanni:read,write,revert,admin,delete FrancescoPacenza:read,write,revert,admin,delete All:read = 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 === * (Problemi di estrema lentezza nell'avvio delle macchine netkit, macchine che non si autoconfigurano correttamente al primissimo avvio, ma funzionano al successivo). Scompattate nella cartella di netkit questo '''[[https://www.mat.unical.it/ianni/netkit-filesystem-i386-F5.1.patch3.tar.bz2|file]]''' (Versione 3 - 10 Marzo 2011) al posto di quello [[http://wiki.netkit.org/download/netkit-filesystem/netkit-filesystem-i386-F5.1.tar.bz2|ufficiale]]. 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 --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 [[http://tunctl.sourceforge.net/|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 [[https://www.mat.unical.it/ianni/netkit-filesystem-patched-F5.1.patch3.tar.bz2|file]] al posto del filesystem ufficiale. ---- '''Qual'è la sintassi di uso esatta di {{{iperf}}}?''' * Sulla macchina server: {{{iperf -s -p numeroporta &}}} * Sulla macchina client: {{{iperf -c numeroIpDaContattare -p numeroporta &}}} ---- '''Esiste qualche tool alternativo a {{{iperf}}}?''' <
> Potete usare netcat, che di solito è presente nella distribuzione di netkit. Uso: * Lato server: {{{nc -l -p NUMEROPORTA}}}. Mette in ascolto netcat sulla porta {{{NUMEROPORTA}}}. * Lato client: {{{nc NOMEHOST NUMEROPORTA}}}. 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}}}. * assicurarsi che su {{{host}}} esista la cartella {{{/dev/net}}} altrimenti crearla * configurare {{{lab.conf}}} con la riga * {{{gate[eth0]=tap,indirizzoIPhost,indirizzoIPgate}}} * attenzione, alcune versioni di netkit consentono in alternativa la riga * {{{gate[0]=tap,indirizzoIPhost,indirizzoIPgate}}} * La riga di cui sopra va introdotta SENZA SPAZI. * La scheda di rete da menzionare deve essere preferenzialmente {{{eth0}}}. * mettere nel file {{{gate/etc/network/interfaces}}} le opportune direttive * digitare su una shell di {{{host}}} il comando * {{{ sudo route add -net sottoretevirtuale/maschera gw indirizzoIPgate }}} ---- '''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 [[http://list.dia.uniroma3.it/pipermail/netkit.users/attachments/20080202/f21faaa6/tap-not-first.obj|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}}}?''' * creare il file {{{miolab/pc/etc/resolv.conf}}} * tale file deve contenere al suo interno la riga {{{nameserver indirizzoIPDNS}}} * I valori di {{{indirizzoIPDNS}}} devono essere quelli di un DNS Server reale e raggiungibile dal punto in cui simulate la rete virtuale: potete usare il DNS pubblico di Google: 8.8.8.8 ---- '''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?''' * Nel file system virtuale di {{{pc}}} modificare {{{/etc/network/interfaces}}} aggiungendo un certo numero di linee {{{post-up}}} 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-*-*-*-*-*-*-*}}}. 1. Cambiate il {{{18}}} di cui sopra con la dimensione di carattere che preferite (attenzione, non tutti i valori sono ammessi). 1. '''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 }}}