Laboratorio 2 Nicola Frignani nfrignani@arces.unibo.it A) Accesso alle workstation 1. Riavviare la macchina e selezionare l'opzione linux al boot. 2. Per accedere alle macchine usare: userid: numero di matricola password: il relativo pin del badge L'accesso alle workstation in modalita' utente non consente l'esecuzione di comandi avanzati per la gestione delle interfaccie di rete e per il monitoraggio delle stesse. La tecnica migliore, finalizzata alla formazione, per ottenere questi diritti e' la creazione di macchine virtuali attraverso le quali ottenere privilegi da superuser senza intaccare la struttura e la stabilita' della macchina ospitante. L'esecuzione di tale macchina virtuale avverra' attraverso uno strumento tuttora in fase di sviluppo chiamato User Mode Linux (http://www.usermodelinux.org) Da qui in poi definiremo con: real # una shell sulla macchina reale uml # una shell sulla macchina virtuale B) Avvio della macchina virtuale 1. nella cartella /bin e' presente il comando uml_start, il quale non e' altro che un batch che esegue una sequenza di comandi. 2. Per avviare la uml digitare: real $ uml_start 3. se tutto funziona come dovrebbe il risultato finale e' la produzione di una shell di login alla quale vedremo poi come accedere. 4. nel caso in cui la macchina non venga avviata correttamente e' necessario eliminare i file pc0*.cow contenuti nella propria home utente: real $ rm pc0*.cow C) Login sulla macchina virtuale uid: root pwd: piripicchio D) Instradamento dei datagrammi IP Routing: scelta del percorso su cui inviare i dati; i router formano una struttura interconnessa e cooperante: i datagrammi passano dall uno all'altro finche' raggiungono quello che puo' consegnarli direttamente al destinatario Direct delivery : il destinatario del datagramma e' sulla stessa rete fisica di chi trasmette, quindi si spedisce il datagramma direttamente al destinatario Indirect delivery : il destinatario non e' sulla stessa rete di chi trasmette, quindi il datagramma è inviato ad un router intermedio ESERCIZI 10 minuti identificate nei due disegni il metodo di routing adotato:
E) Comandi base: ifconfig Il comando ifconfig consente di visualizzare a video le informazioni relative le interfaccie di rete presenti sulla macchina. Le schede di rete ethernet sono identificate dal codice eth seguito da un numero che parte da 0. Se sono presenti due interfaccie di rete, una sara' eth0 e l'altra eth1. Nel caso in cui il PC possegga piu' di un'interfaccia di rete oltre la lo, si definisce multihomed host. l'interfaccia lo e' quella di loopback che identifica la loop back interface, quella per capirci che possiede l'indirizzo 127.0.0.1 ESERCIZI 30 minuti eseguiamo ifconfig e vediamo un po' che succede. eth0 Link encap:ethernet HWaddr 00:04:75:D4:29:25 inet addr:192.168.143.109 Bcast:192.168.143.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:52834876 errors:0 dropped:0 overruns:0 frame:0 TX packets:73354892 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1425128764 (1359.1 Mb) TX bytes:1474606909 (1406.2 Mb) Interrupt:10 Base address:0xec00 lo Link encap:local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2282 errors:0 dropped:0 overruns:0 frame:0 TX packets:2282 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:240208 (234.5 Kb) TX bytes:240208 (234.5 Kb) Immagino che sia tutto molto chiaro!... NO? Si vede che non avete letto con attenzione cio' che il sistema operativo vi ha detto. Provate a leggere con attenzione ciascuna riga e identificate i campi di informazione... sono sicuro che avete gia' sentito parlare di ciascuno di essi... GIUSTO?? Indovinate un po' cosa facciamo ora... man ifocnfig scriviamo in un foglio l'indirzzo ip del nostro vicino e cerchiamo di raggiungerlo con un ping uml # ping ind.iri.zzo.ip certamente se vi ha fornito l'ip lo riuscirete a raggiungere, grazie al fatto che siete tutti collegati tramite un'unico enorme switch virtuale. Essendo le macchine avviate attraverso un sistema diskless non e' mai una buona idea disattivare le interfaccie di rete, ma visto che voi siete dentro una macchina virtuale e se cambiate indirizzo non lo fate certamente sulla macchina reale, possiamo stare tranquilli. TUTTO CHIARO VERO?? disattiviamo l'interfaccia di rete uml # ifconfig eth0 down eseguite ora ifconfig provate a pingare il vicino chissa come mai non va piu'? Se non vi e' chiaro il perche' provate a leggere il man e capire meglio il significato dei comandi che avete usato poco fa. va bene ora cambiamo tutti indirizzo ip alla nostra scheda di rete col seguente algoritmo: parte fissa 172.16. parte variabile funzione della matricola partendo dal fondo del numero di matricola prendete le ultime quattro cifre xxxx e separatele a meta' xx.xx ora applicatele al vostro indirizzo ip costruendone uno fatto cosi': 172.16.xx.xx speriamo che la statistica ci venga incontro e che nessuno di voi abbia le ultime 4 cifre identiche, altrimenti potrebbe succedere un bel guaio! Cosa potrebbe succedere?? due macchine avrenbbero lo stesso indirizzo IP e quindi nascerebbe un conflitto... provate a ragionare sul motivo per cui questa eventaulita' costituirebbe un problema. Cosa accade a livello dello switch in un caso del genere??? F) Netmask Un indirizzo IP è diviso in due parti Network-ID che identifica la rete Host-ID che identifica l host all interno della rete La suddivisione e' indicata dalla netmask, una sequenza di 4 byte associata all indirizzo, in cui i bit a 1 corrispondono ai bit dedicati al Network-ID i bit a 0 corrispondono ai bit dedicati all Host-ID Notazioni: dotted decimal: 255.248.0.0
CIDR: /13 (è il numero di bit = 1) Una rete IP e' individuata dall indirizzo di rete, che e' quello con i bit dell Host-ID tutti a zero: 192.168.8.0/24 10.0.0.4/30 Tutti gli indirizzi che hanno lo stesso Network-ID appartengono alla stessa rete IP comunicano tra loro tramite direct delivery comunicano con gli altri tramite indirect delivery attraverso un gateway L indirizzo di broadcast, che serve per raggiungere tutti gli host di una rete IP, è quello con i bit dell Host-ID tutti a uno: 192.168.8.255/24 10.0.0.7/30 In genere l indirizzo immediatamente prima del broadcast è assegnato al gateway di default usato per le indirect delivery 192.168.8.254/24 10.0.0.6/30 G) comandi di rete: arp Cosa fa arp?? saprete certamente che e' l'acronimo di Address Request Protocol, per cui serve a conoscere gli indirizzi di rete. ESERCIZI 30 minuti L'esercizio precedente ha fatto si che la rete sulla quale si trovano le vostre macchine si sia estesa ad una di classe B, quindi quanti indirizzi di rete supporta? Pensate di riuscire ad indovinare un indirizzo di rete, che appartenga ad una
macchina, diverso dal vostro nella nuova LAN? Diciamo che se ci riuscite siete molto fortunati. Ora come facciamo a sapere quali sono tutti gli indrizzi presenti sulla nostra rete?? interroghiamo tutti con un broadcast! uml # ping -c 2 -b 172.16.255.255 Ora eseguite arp -a e ridirezionate l'output su un file arp.txt che utilizzeremo piu' tardi Cosa viene prodotto nel file?? e a video?? Avete notato che ci sono anche i mac address... ma allora ARP funziona proprio come vi avevano spiegato. Perche' ho eseguito un ping prima dell'arp???? aspettate qualche secondo ed eseguite nuovamente arp, cosa c'e' di diverso?? a cosa serve -c 2, chiedetelo al man. Perche' l'ho usato? Per favore un po' di immaginazione! H) Comandi base: route mostra la tabella di routing Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.143.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo 0.0.0.0 192.168.143.254 0.0.0.0 UG 0 0 0 eth0 ESERCIZI 15 minuti Cosa fa una tabella di routing?? Come dovrebbe essere costruita quella di un vero e proprio router?? Provate anche le altre opzioni del comando. Identificate il ruolo di ciascuna colonna nell'output del comando in funzione di cio' che avete studiato. In particolare quando eseguite route -e cosa identificano i campi MMS e Window secondo voi?? I) IP Aliasing La stessa interfaccia di rete puo' avere piu' di un indrizzo IP, le interfacce aggiuntive vengono dette alias e consentono allo stesso host di avere piu' di un indirizzo IP. ESERCIZI 15 minuti Sfruttando l'ormai inseparabile man cercate di capire come si fa ad aggiungere un'interfaccia di rete. Se riuscite, applicate all'interfaccia virtuale un indirizzo IP costruito come segue: 10. parte fissa 6 cifre finali del numero di matricola separate come segue: xx.xx.xx che netmask viene impostata?? cosa produce ifconfig?? come e' stata modificata la tabella di routing?? cosa vi aspettavate di diverso?? per cosa possono essere utilizzate le interfaccie virtuali??
quale e' il vincolo nella gestione delle interfaccie virtuali?? J) DNS Doamin Name System: dig e nslookup Saprete certamente che compito ricopre un server DNS. In funzione di cio' certamente vi chiederete come fa il sistema operativo a sapere quale server interrogare per risolvere da un nome di dominio un indirizzo IP. Giunti a questo punto, soprattutto in funzione di quanto avete imparato durante la prima sessione di laboratorio, vi dovrebbe essere chiaro dove si trovano le informazioni relative la configurazione del sistema. Assunto che voi sappiate di quale cartella sto parlando, vi propongo un sistema per mettere in pratica quanto appreso la volta scorsa. ESERCIZI 30 minuti Lo scopo dell'esercizio e' scovare il file di configurazione che regola le richieste di risoluzione degli indirizzi ip in funzione del nome. Il file che contiene tali informazioni sicuramente contiene almeno un parametro di nome nameserver. Suppongo abbiate gia' intuito che per trovare questo file dovrete utilizzare un comando che osserva il contenuto dei file ed estrapola le informazioni che avete chiesto. In bocca al lupo? Se avete trovato il file avete applicato cio' che avete imparato la lezione scorsa. Questo semplice esercizio, serve a farvi capire che le informazioni apprese la lezione precedente, non sono inutili, bensi' gli strumenti base a cui un buon sistemista si appoggia per trovare all'interno del complesso albero del sistema operativo le informazioni di cui necessita. man dig man nslookup che differenze esistono tra i due comandi? Cerchiamo di interrogare il nostro server dns sull'indirizzo IP assegnato a determinati host, per esempio: www.deis.unibo.it www.deisnet.unibo.it ecc... J) Comandi base: ping L'ICMP e' il protocollo che svolge funzioni di controllo per conto di IP Type definisce il tipo di messaggio ICMP messaggi di errore
messaggi di richiesta di informazioni Code descrive il tipo di errore e ulteriori dettagli Checksum controlla i bit errati nel messaggio ICMP Add. Fields dipendono dal tipo di messaggio ICMP Data intestazione e parte dei dati del datagramma che ha generato l errore Messaggi di errore Destination Unreachable (Type = 3) generato da un gateway quando la sottorete o l host non sono raggiungibili, oppure da un host quando si presenta un errore sull indirizzo dell entità di livello superiore a cui trasferire il datagramma Codici errore di Destination Unreachable 0 = sottorete non raggiungibile 1 = host non raggiungibile 2 = protocollo non disponibile 3 = porta non disponibile 4 = frammentazione necessaria ma bit don t fragment settato Time Exceeded (Type = 11) generato da un router quando il Time-to-Live di un datagramma si azzera ed il datagramma viene distrutto (Code = 0) generato da un host quando un timer si azzera in attesa dei frammenti per riassemblare un datagramma ricevuto in parte (Code = 1) Redirect (Type = 5) generato da un router per indicare all host sorgente un altra strada più conveniente per raggiungere l host destinazione Messaggi di richiesta di informazioni Echo (Type = 8) Echo Reply (Type = 0) l host sorgente invia la richiesta ad un altro host o ad un gateway la destinazione deve rispondere immediatamente metodo usato per determinare lo stato di una rete e dei suoi host, la loro raggiungibilità e il tempo di transito nella rete Additional Fields: Identifier: identifica l insieme degli echo appartenenti allo stesso test Sequence Number: identifica ciascun echo nell insieme Optional Data: usato per inserire eventuali dati di verifica Il comando ping DESTINAZIONE permette di controllare se DESTINAZIONE e' o meno raggiungibile dall'host da quale stiamo eseguendo il comando. Il nostro host invia un pacchetto a DESTINAZIONE di tipo ICMP echo, se il destinatario e' raggiungibile rispondera' inviando un pacchetto di tipo echo reply. L'output di questo comando fornisce: la dimensione del pacchetto echo reply l indirizzo IP di DEST il numero di sequenza della risposta il time-to-live (TTL) il round-trip time (RTT) alcuni risultati statistici: N pacchetti persi, MIN, MAX e media del RTT ESERCIZI 10 minuti sfruttando la tabella che ci siamo costruiti ridirezionando l'output del comando arp, cerchiamo di pingare qualche host appartenente alla nostra rete. Per interrompere il processo di ping e' sufficiente premere la combianzione di
tasti CRTL C. Questo comando interrompe il processo in esecuzione che blocca la shell: infatti mentre il ping e' in esecuzione voi non avete piu' accesso alla vostra shell fino a quando il programma non viene terminato. Leggendo il man cercate l'opzione che vi consente di inviare un numero finito di pacchetti, ad esempio 10. osservate anche l'opzione che abbiamo utilizzato al punto F) per l'invio di pacchetti di broadcast. K) Comandi base: traceroute # traceroute DESTINAZIONE Permette di conoscere il percorso seguito dai pacchetti inviati da SORG e diretti verso DEST SORG invia a DEST una serie di pacchetti UDP (oppure ICMP di tipo echo ) con un TIME-TO-LIVE (TTL) progressivo da 1 a 30 (per default) Ciascun nodo intermedio decrementa TTL Il nodo che rileva TTL = 0 invia a SORG un pacchetto ICMP di tipo TIME EXCEEDED SORG costruisce una lista dei nodi attraversati fino a DEST L output mostra il TTL, il nome DNS e l indirizzo IP dei nodi intermedi ed il ROUND-TRIP TIME (RTT) ESERCIZI 10 minuti innanzitutto man traceroute eseguite il traceroute verso un pc della vostra rete e verificate l'output eseguendo lo stesso comando verso deisnet.deis.unibo.it che differenze notate? L) Applichiamo qualche concetto Posto che vi sia chiaro il concetto di gateway, cerchiamo di fare agire il nostro sistema operativo come router tra due reti. Ciascun gruppo dovrebbe avere configurato la propria macchina con due indirizzi ip, uno associato all'interfaccia virtuale e facente parte della rete 172.16.0.0/16 ed uno facente parte della rete 10.0.0.0/8 Sebbene ogni macchina abbia associate entrambe le reti, possiamo comunque supporre che esistano due reti separate. Ogni workstation puo' colloquiare con entrambe le interfaccie di rete di tutti gli altri host, ma puo' farlo attraverso un altro host sfruttando il routing delivery. Assunto che un host generico e' rappresentato da un riquadro, la vostra macchina puo', quindi, ricomprire un qualunque ruolo rappresentato nel disegno sotto riportato.
10.0.0.0/8 host n' 172.16.0.0/16 Se i nostri host non fossero dotati dell'interfaccia virtuale, l'unico modo che avrebbero per comunicare con l'altra rete sarebbe attraverso un gateway, che dispone di entrambe le interfacce e indirizzi. Per garantire questa feature il kernel della macchina eletta al ruolo di gateway deve essere abilitato ad eseguire il forward dei pacchetti IP. Questo puo' essere visto eseguendo il comando: uml # cat /proc/sys/net/ipv4/ip_forward se il risultato e' 0, e' possibile effettuare ip forwarding ma attualmente e' disabilitato, se e' a 1, e' abilitato. Per modificare questa caratteristica e' sufficiente sostituire allo 0 un 1 col comando: uml # echo 1 > /proc/sys/net/ipv4/ip_forward La ricerca nella tabella avviene utilizzando l indirizzo IP di destinazione del datagramma l indirizzo di destinazione e la netmask specificati in ciascuna riga della tabella Procedura: si esegue un operazione di AND bit per bit tra l indirizzo di destinazione del datagramma e la netmask di ciascuna riga il risultato viene confrontato con la destinazione specificata nella riga stessa: se coincidono, la riga è quella giusta il controllo viene effettuato a partire dalla riga che presenta una netmask con un numero maggiore di bit a uno: priorità alle route più specifiche (prima host, poi reti piccole, poi reti grandi -longest-prefix match) una volta trovata la riga corrispondente, il lookup si ferma e il datagramma viene instradato secondo la modalità specificata se nessuna riga corrisponde, si usa il default gateway ESERCIZI 30 minuti per svolgere correttamente l'esercizio dobbaimo collaborare con un gruppo vicino a noi innanzitutto eliminate le configurazioni delle interfaccie di rete che avete inserito in precedenza e verificate col comando ifconfig che nessuna interfaccia e' installata. scegliete chi identificare come gruppo A e chi come gruppo B ad ogni gruppo sara' associato un host iniziamo facendo diventare l'host A il router A# ifconfig eth0 172.16.xx.xx netmask 255.255.0.0 A# ifconfig eth0:1 10.xx.xx.xx netmask 255.0.0.0 A# echo 1 > /proc/sys/net/ipv4/ip_forward B# ifconfig eth0 172.16.yy.yy netmask 255.255.0.0 B# route add -net default gw 172.16.yy.yy
il gruppo B puo' verificare la propria tabella di routing eseguendo il comando route e lo stesso puo' fare il gruppo A se il gruppo B esegue un traceroute verso un indrizzo della rete 10.0.0.0/8 dovrebbe poter facilmente verificare che il comprtamento e' molto diverso rispetto quello visto in precedenza. Perche'? Ora invertiamo i ruoli dei due gruppi e ripetiamo l'esercizio da capo. Buon Lavoro