Sei sulla pagina 1di 28

Lezione 9.

Introduzione alle reti e al


TCP/IP
La funzionalit pi importante di un sistema Unix la possibilit di comunicare attraverso la rete.
GNU/Linux, offrendo tutte le caratteristiche di un sistema Unix ben dotato, un'ottima risposta ai problemi
legati alla gestione di una rete.
Prima di iniziare a vedere le particolarit delle reti TCP/IP, tipiche degli ambienti Unix, conviene introdurre
alcuni concetti generali.

9.1 Concetti elementari

Il termine rete si riferisce idealmente a una maglia di collegamenti. In pratica indica un insieme di
componenti collegati tra loro in qualche modo a formare un sistema. Questo concetto si riferisce alla
teoria dei grafi.
Ogni nodo di questa rete corrisponde generalmente a un elaboratore, che spesso viene definito host
(elaboratore host), o anche stazione; i collegamenti tra questi nodi consentono il passaggio di dati in
forma di pacchetti.

9.1.1 Estensione
Una rete pu essere pi o meno estesa; in tal senso si usano degli acronimi standard:
LAN, Local Area Network, rete locale
quando la rete contenuta nell'ambito di un edificio, o di un piccolo gruppo di edifici adiacenti;
1.
MAN, Metropolitan Area Network, rete metropolitana
quando la rete composta dall'unione di pi LAN nell'ambito della stessa area metropolitana, in
altri termini si tratta di una rete estesa sul territorio di una citt;
2.
WAN, Wide Area Network, rete geografica
quando la rete composta dall'unione di pi MAN ed eventualmente anche di LAN, estendendosi
geograficamente oltre l'ambito di una citt singola.
Evidentemente, Internet una rete WAN.

0.

9.1.2 Topologia
Le strutture fondamentali delle reti (si parla in questo caso di topologia di rete) sono di tre tipi:
stella;
anello;
bus.
Si ha una rete a stella quando tutti i nodi periferici sono connessi a un nodo principale in modo
indipendente dagli altri. Cos, tutte le comunicazioni passano per il nodo centrale e in pratica sono gestite
completamente da quest'ultimo. Rientra in questa categoria il collegamento punto-punto, o point-to-point,
in cui sono collegati solo due nodi.
Si ha una rete ad anello quando tutti i nodi sono connessi tra loro in sequenza, in modo da formare un
anello ideale, e ognuno ha un contatto diretto solo con il precedente e il successivo. In questo modo, la
comunicazione avviene (almeno in teoria) a senso unico, e ogni nodo ritrasmette al successivo i dati che
non sono destinati allo stesso.
Si ha una rete a bus quando la connessione dei nodi condivisa da tutti, per cui i dati trasmessi da un
nodo sono intercettabili da tutti gli altri. In questa situazione la trasmissione simultanea da parte di due
nodi genera un collisione e la perdita del messaggio trasmesso.

3.
4.
5.

9.1.3 Pacchetto
I dati viaggiano nella rete in forma di pacchetti. Il termine appropriato perch si tratta di una sorta di
confezionamento delle informazioni attraverso cui si definisce il mittente e il destinatario dei dati
trasmessi.
Il confezionamento e le dimensioni dei pacchetti dipendono dal tipo di rete fisica utilizzata.
I dati sono un materiale duttile che pu essere suddiviso e aggregato in vari modi. Ci significa che,
durante il loro tragitto, i dati possono essere scomposti e ricomposti pi volte e in modi differenti. Per
esempio, per attraversare un segmento di una rete particolare, potrebbe essere necessario suddividere
dei pacchetti troppo grandi in pacchetti pi piccoli, oppure potrebbe essere utile il contrario.

In particolare, si parla di incapsulamento quando i pacchetti vengono inseriti all'interno di altri pacchetti,
e di tunnel quando questa tecnica viene usata in modo sistematico tra due punti.
A questo punto, dovrebbe essere evidente che il significato del termine pacchetto pu avere valore solo in
riferimento a un contesto preciso. Sui documenti che trattano delle reti in modo pi approfondito, si parla
anche di trama e di PDU (Protocol Data Unit), ma in generale, se non c' la necessit di distinguere
sfumature particolari di questo problema, meglio evitare di usare termini che potrebbero creare
confusione.
Il termine datagramma, rappresenta il pacchetto di un protocollo non connesso; per questo non va inteso
come sinonimo di pacchetto in senso generale.

9.1.4 Protocollo

I pacchetti di dati vengono trasmessi e ricevuti in base a delle regole definite da un protocollo di
comunicazione.
A qualunque livello della nostra esistenza necessario un protocollo per comunicare: in un colloquio tra
due persone, chi parla invia un messaggio all'altra che, per riceverlo, deve ascoltare. Volendo proseguire
con questo esempio, si pu anche considerare il problema dell'inizio e della conclusione della
comunicazione: la persona con cui si vuole comunicare oralmente deve essere raggiunta e si deve
ottenere la sua attenzione, per esempio con un saluto; alla fine della comunicazione occorre un modo per
definire che il contatto terminato, con una qualche forma di commiato.
Quanto appena visto solo una delle tante situazioni possibili. Si pu immaginare cosa accada in
un'assemblea o in una classe durante una lezione.
La distinzione pi importante tra i protocolli quella che li divide in connessi e non connessi. Il protocollo
non connesso, o datagramma, funziona in modo simile all'invio di una cartolina, o di una lettera, che
contiene l'indicazione del destinatario ma non il mittente. In tal caso, il protocollo non fornisce il mezzo per
determinare se il messaggio giunto o meno a destinazione. Il protocollo connesso prevede la conferma
dell'invio di un messaggio, la ritrasmissione in caso di errore, e la ricomposizione dell'ordine dei pacchetti.

9.2 Modello OSI/ISO

La gestione della comunicazione in una rete un problema complesso; in passato, questo stato alla
base delle maggiori incompatibilit tra i vari sistemi, a cominciare dalle differenze legate all'hardware.
Il modello OSI (Open System Interconnection), diventato parte degli standard ISO, scompone la gestione
della rete in livelli, o strati (layer). Questo modello non definisce uno standard tecnologico, ma un
riferimento comune ai concetti che riguardano le reti.
I livelli del modello OSI/ISO sono sette e, per tradizione, vanno visti nel modo indicato nell'elenco
seguente, dove il primo livello quello pi basso ed a contatto del supporto fisico di trasmissione,
mentre l'ultimo quello pi alto ed a contatto delle applicazioni utilizzate dall'utente.
6.
Livello 7 Applicazione
Interfaccia di comunicazione con i programmi (Application Program Interface).
7.
Livello 6 Presentazione
Formattazione e trasformazione dei dati a vario titolo, compresa la cifratura e decifratura.
8.
Livello 5 Sessione
Instaurazione, mantenimento e conclusione delle sessioni di comunicazione.
9.
Livello 4 Trasporto
Invio e ricezione di dati in modo da controllare e, possibilmente, correggere gli errori.
10.
Livello 3 Rete
Definizione delle trame (frame), dell'indirizzamento e dell'instradamento in modo astratto rispetto
al tipo fisico di comunicazione.
11.
Livello 2 Collegamento dati (data link)
Definizione dei pacchetti e dell'indirizzamento in funzione del tipo fisico di comunicazione.
12.
Livello 1 Fisico
Trasmissione dei dati lungo il supporto fisico di comunicazione.

9.2.1 Comunicazione tra i livelli e imbustamento

I dati da trasmettere attraverso la rete, vengono prodotti al livello pi alto del modello, quindi, con una
serie di trasformazioni e aggiungendo le informazioni necessarie, vengono passati di livello in livello fino a

raggiungere il primo, quello del collegamento fisico. Nello stesso modo, quando i dati vengono ricevuti dal
livello fisico, vengono passati e trasformati da un livello al successivo, fino a raggiungere l'ultimo.
In questo modo, si pu dire che a ogni passaggio verso il basso i pacchetti vengano imbustati in pacchetti
(pi grandi) del livello inferiore, mentre, a ogni passaggio verso l'alto, i pacchetti vengono estratti dalla
busta di livello inferiore. In questa circostanza, si parla preferibilmente di PDU di livello n (Protocol Data
Unit) per identificare il pacchetto realizzato a un certo livello del modello ISO/OSI.
Nel passaggio da un livello a quello inferiore, l'imbustamento implica un aumento delle dimensioni del
pacchetto, ovvero del PDU. A certi livelli, pu essere introdotta la frammentazione e la ricomposizione dei
pacchetti, a seconda delle esigenze di questi.

9.3 Interconnesione tra le reti

In precedenza sono stati visti i tipi elementari di topologia di rete. Quando si vogliono unire due reti per
formare una sola pi grande, si devono utilizzare dei nodi speciali connessi simultaneamente a entrambe
le reti da collegare. A seconda del livello su cui intervengono per effettuare questo collegamento, si parla
di bridge, router o gateway.

9.3.1 Bridge

Il bridge mette in connessione due (o pi) reti limitandosi a intervenire nei primi due livelli del modello
OSI/ISO. Di conseguenza, il bridge in grado di connettere tra loro solo reti fisiche dello stesso tipo.
In altri termini, si pu dire che il bridge sia in grado di connettere reti separate che hanno uno schema di
indirizzamento compatibile.
Il bridge pi semplice duplica ogni pacchetto, del secondo livello OSI/ISO, nelle altre reti a cui connesso;
il bridge pi sofisticato in grado di determinare gli indirizzi dei nodi connessi nelle varie reti, in modo da
trasferire solo i pacchetti che necessitano questo attraversamento.
Dal momento che il bridge opera al secondo livello OSI/ISO, non in grado di distinguere i pacchetti in
base ai protocolli di rete del terzo livello (TCP/IP, IPX/SPX, ecc.) e quindi trasferisce indifferentemente tali
pacchetti.
Teoricamente, possono esistere bridge in grado di gestire connessioni con collegamenti ridondanti, in
modo da determinare automaticamente l'itinerario migliore per i pacchetti e da bilanciare il carico di
utilizzo tra diverse connessioni alternative. Tuttavia, questo compito viene svolto preferibilmente dai
router.

9.3.2 Router
Il router mette in connessione due (o pi) reti intervenendo al terzo livello del modello OSI/ISO. Di
conseguenza, il router in grado di trasferire solo i pacchetti di un determinato tipo di protocollo di rete
(TCP/IP, IPX/SPX, ecc.), indipendentemente dal tipo di reti fisiche connesse effettivamente.
In altri termini, si pu dire che il router sia in grado di connettere reti separate che hanno schemi di
indirizzamento differenti, ma che utilizzano lo stesso tipo di protocollo di rete al terzo livello OSI/ISO.
L'instradamento dei pacchetti attraverso le reti connesse al router avviene in base a una tabella di
instradamento che pu anche essere determinata in modo dinamico, in presenza di connessioni
ridondanti, come gi accennato per il caso dei bridge.

9.3.3 Gateway
Il gateway mette in connessione due (o pi) reti intervenendo all'ultimo livello, il settimo, del modello
OSI/ISO. In questo senso, il suo scopo non tanto quello di connettere delle reti differenti, ma di mettere
in connessione i servizi di due o pi ambienti che altrimenti sarebbero incompatibili.
Spesso, negli ambienti Unix, il termine gateway viene utilizzato impropriamente come sinonimo di router,
ma sarebbe bene, quando possibile, fare attenzione a queste definizioni.

9.4 TCP/IP e il modello OSI/ISO

Il nome TCP/IP rappresenta un sistema di protocolli di comunicazione basati su IP e si tratta di quanto


utilizzato normalmente negli ambienti Unix. In pratica, il protocollo IP si colloca al terzo livello ISO/OSI,
mentre TCP si colloca al di sopra di questo e utilizza IP al livello inferiore. In realt, il TCP/IP annovera
anche un altro protocollo importante: UDP.
I vari aspetti del sistema di protocolli TCP/IP si possono apprendere mano a mano che si studiano gli

indirizzamenti e i servizi di rete che vengono resi disponibili. In questa fase conviene rivedere il modello
OSI/ISO in abbinamento al TCP/IP.
Livello
Definizione
Descrizione
7
Applicazione
Applicazioni.
6
Presentazione
Definizione standard del formato dei dati utilizzati.
5
Sessione
Protocolli dei servizi (FTP, HTTP, SMTP, RPC, ecc.).
4
Trasporto
Protocolli TCP e UDP.
3
Rete
Protocollo IP.
2
Collegamento dati
Trasmissione e ricezione dati dipendente dal tipo di hardware.
1
Fisico
Hardware.
Tabella . Modello OSI/ISO di suddivisione delle competenze di un sistema TCP/IP.

9.6 Indirizzi IPv4

Come stato visto nelle sezioni precedenti, al di sopra dei primi due livelli strettamente fisici di
comunicazione, si inserisce la rete dal punto di vista di Unix: un insieme di nodi, spesso definiti host,
identificati da un indirizzo IP. Di questi ne esistono almeno due versioni: IPv4 e IPv6. Il primo quello
ancora ufficialmente in uso, ma a causa del rapido esaurimento degli indirizzi disponibili nella comunit
Internet, in corso di introduzione il secondo.
Gli indirizzi IP versione 4, cio quelli tradizionali, sono composti da una sequenza di 32 bit, suddivisi
convenzionalmente in quattro gruppetti di 8 bit, e rappresentati in modo decimale separati da un punto.
Questo tipo di rappresentazione definito come: notazione decimale puntata. Per esempio,
00000001.00000010.00000011.00000100
corrisponde al codice 1.2.3.4.
All'interno di un indirizzo del genere si distinguono due parti: l'indirizzo di rete e l'indirizzo del nodo
particolare. Il meccanismo simile a quello del numero telefonico in cui la prima parte del numero, il
prefisso, definisce la zona ovvero il distretto telefonico, mentre il resto identifica l'apparecchio telefonico
specifico di quella zona. In pratica, quando viene richiesto un indirizzo IP, si ottiene un indirizzo di rete in
funzione della quantit di nodi che si devono connettere. In questo indirizzo una certa quantit di bit nella
parte finale sono azzerati: ci significa che quella parte finale pu essere utilizzata per gli indirizzi specifici
dei nodi. Per esempio, l'indirizzo di rete potrebbe essere:
00000001.00000010.00000011.00000000
e in tal caso, si potrebbero utilizzare gli ultimi 8 bit per gli indirizzi dei vari nodi.
L'indirizzo di rete, non pu identificare un nodo. Quindi, tornando all'esempio, l'indirizzo

00000001.00000010.00000011.00000000
non pu essere usato per identificare anche un nodo. Inoltre, un indirizzo in cui i bit finali lasciati per
identificare i nodi siano tutti a uno,
00000001.00000010.00000011.11111111
identifica un indirizzo broadcast, cio un indirizzo per la trasmissione a tutti i nodi di quella rete. In
pratica, rappresenta simultaneamente tutti gli indirizzi che iniziano con 00000001.00000010. Di
conseguenza, un indirizzo broadcast non pu essere utilizzato per identificare un nodo.
Naturalmente, i bit che seguono l'indirizzo di rete possono anche essere utilizzati per suddividere la rete in
sottoreti. Nel caso di prima, volendo creare due sottoreti utilizzando i primi 2 bit che seguono l'indirizzo di
rete originario:
13.
xxxxxxxx.xxxxxxxx.xxxxxxxx.00000000
indirizzo di rete;
14.
xxxxxxxx.xxxxxxxx.xxxxxxxx.01000000
indirizzo della prima sottorete;
15.
xxxxxxxx.xxxxxxxx.xxxxxxxx.10000000
indirizzo della seconda sottorete;
16.
xxxxxxxx.xxxxxxxx.xxxxxxxx.11111111
indirizzo broadcast.
In questo esempio, per ogni sottorete, resterebbero 6 bit a disposizione per identificare i nodi: da
a 1111102.
Il meccanismo utilizzato per distinguere la parte dell'indirizzo che identifica la rete quello della
maschera di rete o netmask. La maschera di rete un indirizzo che viene abbinato all'indirizzo da
analizzare con l'operatore booleano AND, per filtrare la parte di bit che interessano. Una maschera di rete
che consenta di classificare i primi 24 bit come indirizzo di rete sar:
11111111.11111111.11111111.00000000
cosa che coincide con il ben pi noto codice seguente:
255.255.255.0
Utilizzando l'esempio visto in precedenza, abbinando questa maschera di rete si ottiene l'indirizzo di rete:
00000001.00000010.00000011.00000100 nodo (1.2.3.4)
11111111.11111111.11111111.00000000 maschera di rete (255.255.255.0)
00000001.00000010.00000011.00000000 indirizzo di rete (1.2.3.0).
L'indirizzo che si ottiene abbinando l'indirizzo di un nodo e la sua maschera di rete invertita con l'operatore
AND l'indirizzo del nodo relativo alla propria rete. Esempio:
00000001.00000010.00000011.00000100 nodo (1.2.3.4)
00000000.00000000.00000000.11111111 maschera di rete invertita (0.0.0.255)
00000000.00000000.00000000.00000100 indirizzo relativo (0.0.0.4).

9.6.1 Classi di indirizzi


Gli indirizzi IP sono stati classificati in cinque gruppi, a partire dalla lettera A fino alla lettera E.

Classe A
Gli indirizzi di classe A hanno il primo bit a zero, utilizzano i sette bit successivi per identificare
l'indirizzo di rete e lasciano i restanti 24 bit per identificare i nodi.
0rrrrrrr.hhhhhhhh.hhhhhhhh.hhhhhhhh
All'interno di questa classe si possono usare indirizzi che vanno da:
00000001.________.________.________
a
01111110.________.________.________.
In pratica, appartengono a questa classe gli indirizzi compresi tra 1.___.___.___ e 126.___.___.___.
Classe B
Gli indirizzi di classe B hanno il primo bit a uno e il secondo a zero, utilizzano i 14 bit successivi per
identificare l'indirizzo di rete e lasciano i restanti 16 bit per identificare i nodi.
10rrrrrr.rrrrrrrr.hhhhhhhh.hhhhhhhh

All'interno di questa classe si possono usare indirizzi che vanno da:


10000000.00000001.________.________
a
10111111.11111110.________.________.
In pratica, appartengono a questa classe gli indirizzi compresi tra 128.1.___.___ e 191.254.___.___.
Classe C
Gli indirizzi di classe C hanno il primo e il secondo bit a uno e il terzo bit a zero, utilizzano i 21 bit
successivi per identificare l'indirizzo di rete e lasciano i restanti 8 bit per identificare i nodi.
110rrrrr.rrrrrrrr.rrrrrrrr.hhhhhhhh
All'interno di questa classe si possono usare indirizzi che vanno da:
11000000.00000000.00000000.________
a
11011111.11111111.11111110.________.
In pratica, appartengono a questa classe gli indirizzi compresi tra 192.0.1.___ e 223.255.254.___.
Classe D
Gli indirizzi di classe D hanno i primi tre bit a uno e il quarto a zero. Si tratta di una classe destinata a
usi speciali.
1110____.________.________.________
Classe E
Gli indirizzi di classe E hanno i primi quattro bit a uno e il quinto a zero. Si tratta di una classe
destinata a usi speciali.
11110___.________.________.________

9.6.2 Indirizzi speciali


Lo spazio lasciato libero tra la classe A e la classe B, ovvero gli indirizzi 127.*, sono riservati per
identificare una rete immaginaria interna al nodo stesso. All'interno di questa rete si trova normalmente
un'interfaccia di rete immaginaria connessa su questa rete, corrispondente all'indirizzo 127.0.0.1, mentre
gli altri indirizzi di questo gruppo non vengono mai utilizzati.
Per identificare questi indirizzi si parla di loopback, anche se questo termine viene usato ancora in altri
contesti con significati differenti.
All'interno di ogni nodo, quindi, l'indirizzo 127.0.0.1 corrisponde a se stesso. Serve in particolare per non
disturbare la rete quando un programma (che usa la rete) deve fare riferimento a se stesso.
L'indirizzo speciale 0.0.0.0, conosciuto come default route il percorso, o la strada predefinita per
l'instradamento dei pacchetti. Si usa spesso la parola chiave defaultroute per fare riferimento
automaticamente a questo indirizzo particolare.

9.6.3 Indirizzi riservati per le reti private

Se non si ha la necessit di rendere accessibili i nodi della propria rete locale alla rete globale Internet, si
possono utilizzare alcuni gruppi di indirizzi che sono stati riservati a questo scopo e che non
corrispondono a nessun nodo raggiungibile attraverso Internet.
Nella classe A stato riservato l'intervallo da
00001010.00000000.00000000.00000000 = 10.0.0.0
a
00001010.11111111.11111111.11111111 = 10.255.255.255.
Nella classe B stato riservato l'intervallo da
10101100.00010000.00000000.00000000 = 172.16.0.0
a
10101100.00010000.11111111.11111111 = 172.31.255.255.
Nella classe C stato riservato l'intervallo da
11000000.10101000.00000000.00000000 = 192.168.0.0

a
11000000.10101000.11111111.11111111 = 192.168.255.255.

9.6.4 Sottoreti e instradamento


Quando si scompone la propria rete locale in sottoreti, di solito lo si fa per non intasarla. Infatti probabile
che si possano raggruppare i nodi in base alle attivit che essi condividono. Le sottoreti possono essere
immaginate come raggruppamenti di nodi separati che di tanto in tanto hanno la necessit di accedere a
nodi situati al di fuori del loro gruppo. Per collegare due sottoreti occorre un nodo con due interfacce di
rete, ognuno connesso con una delle due reti, configurato in modo da lasciare passare i pacchetti
destinati all'altra rete. Questo un router, chiamato abitualmente gateway, che in pratica svolge l'attivit di
instradamento dei pacchetti.

9.6.5 Maschere IP e maschere di rete


Il modo normale di rappresentare una maschera degli schemi di indirizzamento di IPv4 quello della
notazione decimale puntata a ottetti, come visto fino a questo punto. Tuttavia, considerato che le
maschere servono prevalentemente per definire dei gruppi di indirizzi IP, cio delle reti (o sottoreti), tali
maschere hanno una forma piuttosto semplice: una serie continua di bit a uno e la parte restante di bit a
zero. Pertanto, quando si tratta di definire una maschera di rete, potrebbe essere conveniente indicare
semplicemente il numero di bit da porre a uno. Per esempio, la classica maschera di rete di classe C,
255.255.255.0, equivale a dire che i primi 24 bit devono essere posti a uno.
La possibilit di rappresentare le maschere di rete in questo modo apparsa solo in tempi recenti per
quanto riguarda IPv4. Quindi, dipende dai programmi di servizio utilizzati effettivamente, il fatto che si
possa usare o meno questa forma. In ogni caso, il modo normale di esprimerla quello di indicare il
numero IP seguito da una barra obliqua normale e dal numero di bit a uno della maschera, come per
esempio 192.168.1.1/24.

9.7 Nomi di dominio

La gestione diretta degli indirizzi IP piuttosto faticosa dal punto di vista umano. Per questo motivo si
preferisce associare un nome agli indirizzi numerici. Il sistema utilizzato attualmente il DNS (Domain
Name System), ovvero il sistema dei nomi di dominio. Gli indirizzi della rete Internet sono organizzati ad
albero in domini, sottodomini (altri sottodomini di livello inferiore, ecc.), fino ad arrivare a identificare il
nodo desiderato.
Non esiste una regola per stabilire quante debbano essere le suddivisioni, di conseguenza, di fronte a un
nome del genere non si pu sapere a priori se si tratta di un indirizzo finale, riferito a un nodo singolo, o a
un gruppo di questi.
Con il termine nome di dominio, si pu fare riferimento sia al nome completo di un nodo particolare, che
a una parte di questo: quella iniziale. Dipende dal contesto stabilire cosa si intende veramente. Per fare
un esempio che dovrebbe essere pi comprensibile, come parlare di un percorso all'interno di un file
system: pu trattarsi di una directory, oppure pu essere il percorso assoluto che identifica precisamente
un file.
Spesso, all'interno della propria rete locale, possibile identificare un nodo attraverso il solo nome
iniziale, senza la parte restante del dominio di appartenenza. Per esempio, se la rete in cui si opera
corrisponde al dominio brot.dg, il nodo roggen verr inteso essere roggen.brot.dg. Quando un nome di
dominio contiene tutti gli elementi necessari a identificare un nodo, si parla precisamente di FQDN o Fully
Qualified Domain Name, quindi, roggen.brot.dg dell'esempio precedente un FQDN.
Quando si realizza una rete locale con indirizzi IP non raggiungibili attraverso Internet, opportuno
abbinare nomi di dominio sicuramente inesistenti. Ci aiuta anche a comprendere immediatamente che
non si tratta di un dominio accessibile dall'esterno.

9.7.1 Servizio di risoluzione dei nomi di dominio


In un sistema di nomi di dominio (DNS), il problema pi grande quello di organizzare i name server
ovvero i servizi di risoluzione dei nomi (servizi DNS). Ci attuato da nodi che si occupano di risolvere,
ovvero trasformare, gli indirizzi mnemonici dei nomi di dominio in indirizzi numerici IP e viceversa. A livello
del dominio principale (root), si trovano alcuni serventi che si occupano di fornire gli indirizzi per
raggiungere i domini successivi, cio com, edu, org, net, it,... A livello di questi domini ci saranno alcuni
serventi (ogni dominio ha i suoi) che si occupano di fornire gli indirizzi per raggiungere i domini inferiori, e

cos via, fino a raggiungere il nodo finale. Di conseguenza, un servizio di risoluzione dei nomi, per poter
ottenere l'indirizzo di un nodo che si trova in un dominio al di fuori della sua portata, deve interpellare
quelli del livello principale e mano a mano quelli di livello inferiore, fino a ottenere l'indirizzo cercato. Per
determinare l'indirizzo IP di un nodo si rischia di dover accedere a una quantit di servizi di risoluzione dei
nomi. Per ridurre questo traffico di richieste, ognuno di questi in grado di conservare autonomamente
una certa quantit di indirizzi che sono stati richiesti nell'ultimo periodo.
In pratica, per poter utilizzare la notazione degli indirizzi suddivisa in domini, necessario che il sistema
locale sul quale si opera possa accedere al suo servizio di risoluzione dei nomi pi vicino, oppure gestisca
questo servizio per conto suo. In una rete locale privata composta da nodi che non sono raggiungibili dalla
rete esterna (Internet), non dovrebbe essere necessario predisporre un servizio di risoluzione dei nomi; in
questi casi comunque indispensabile almeno il file /etc/hosts () compilato correttamente con gli indirizzi
associati ai nomi completi dei vari nodi della rete locale.

9.8 Kernel, configurazione per la rete

Per poter utilizzare i servizi di rete necessario avere previsto questa gestione durante la configurazione
del kernel. Per quanto riguarda GNU/Linux, si tratta principalmente di attivare la gestione della rete in
generale e di attivare le particolari funzionalit necessarie per le attivit che si intendono svolgere. Ci
corrisponde alla configurazione delle opzioni di rete che si trovano sotto la voce Networking options ().
Oltre alla gestione della rete, occorre anche pensare al tipo di hardware a disposizione; per questo si
deve configurare la parte riguardante i dispositivi di rete, sotto la voce Network device support ().

9.9 Riferimenti
17.
18.
19.

Olaf Kirch, NAG, The Linux Network Administrators' Guide


Terry Dawson, Linux NET-3-HOWTO
S. Gai, P. L. Montessoro, P. Nicoletti, Reti locali: dal cablaggio all'internetworking

Lezione 9a. IPv4: configurazione, instradamento


e verifiche

La connessione in una rete basata su IP necessita inizialmente dell'assegnazione di indirizzi IP e quindi di


un instradamento per determinare quale strada, o itinerario, devono prendere i pacchetti per raggiungere
la destinazione.
Nome
Descrizione
ifconfig
Configurazione delle interfacce di rete.
route
Definizione degli instradamenti.
ping
Richiesta di echo da un nodo.
traceroute
Tracciamento del percorso verso una destinazione.
ipchains
Amministrazione delle funzionalit di filtro di pacchetto del kernel Linux.

Tabella . Riepilogo dei programmi e dei file descritti in questo Lezione per la gestione degli instradamenti.
Generalmente, ma non necessariamente, valgono queste regole:
0.
ogni interfaccia di rete ha un proprio indirizzo IP;

1.
un'interfaccia di rete di un elaboratore pu comunicare con un'interfaccia di un altro elaboratore
solo se queste sono fisicamente connesse alla stessa rete;
2.
un'interfaccia di rete di un elaboratore pu comunicare con un'interfaccia di un altro elaboratore
solo se gli indirizzi di queste interfacce appartengono alla stessa rete.

9a.1 Kernel per la rete


Per poter gestire una connessione in rete di qualunque tipo, occorre un kernel predisposto in modo da
attivarne la gestione.
3.
Networking support () Y
4.
TCP/IP networking () Y
necessario anche provvedere alla gestione delle interfacce di rete particolari che si utilizzano. Ci pu
essere fatto sia attraverso la realizzazione di un kernel monolitico, sia modulare. Per quanto riguarda la
gestione specifica di ogni singola scheda, si punta preferibilmente all'utilizzo di moduli.

9a.2 Configurazione delle interfacce di rete


La configurazione di un'interfaccia implica essenzialmente l'attribuzione di un indirizzo IP. Normalmente,
molte altre caratteristiche vengono ignorate perch i valori predefiniti sono solitamente sufficienti a
ottenere un funzionamento corretto.
Di norma, la configurazione di un'interfaccia di rete avviene attraverso il programma ifconfig (InterFace
CONFIGuration).

9a.2.1 # ifconfig
ifconfig [interfaccia]
ifconfig [interfaccia... [famiglia_indirizzamento] [indirizzo] opzioni]
ifconfig viene utilizzato per attivare e mantenere il sistema delle interfacce di rete residente nel kernel.
Viene utilizzato al momento dell'avvio per configurare la maggior parte di questo sistema in modo da
portarlo a un livello di funzionamento. Dopo, viene utilizzato di solito solo a scopo diagnostico o quando
sono necessarie delle regolazioni. Se non vengono forniti argomenti, oppure se vengono indicate solo
delle interfacce, ifconfig visualizza semplicemente lo stato delle interfacce specificate, oppure di tutte se
non sono state indicate.
Interfacce
L'interfaccia da configurare viene identificata attraverso il suo nome. Contrariamente a quanto si fa di
solito nei sistemi Unix, non si utilizza un file di dispositivo contenuto nella directory /dev/. Alcuni nomi
di interfaccia di rete sono elencati nella tabella .
Famiglie di indirizzamento
Il primo argomento successivo al nome di interfaccia pu essere la sigla identificativa di una famiglia
di indirizzamento, ovvero di un sistema di protocolli di comunicazione particolare. A seconda del tipo
di questo, cambia il modo di definire gli indirizzi che si attribuiscono alle interfacce. Se questo non
viene specificato, come si fa di solito, si intende fare riferimento al sistema di protocolli che si basano
su IPv4.
Le sigle utilizzabili sono quelle seguenti.
5.

inet -- IPv4 (predefinito);

6.

inet6 -- IPv6;

7.

ax25 -- AMPR Packet Radio;

8.

ddp -- AppleTalk Phase 2;

9.

ipx -- Novell IPX;

10.

netrom -- AMPR Packet Radio.

Indirizzo
L'indirizzo il modo con cui l'interfaccia viene riconosciuta all'interno del tipo di protocollo particolare
che si utilizza. Nel caso di IP, pu essere indicato l'indirizzo IP numerico o il nome di dominio, che in
questo caso sar convertito automaticamente (sempre che ci sia possibile) nell'indirizzo numerico
corretto.

Opzioni
up | down
L'opzione up attiva l'interfaccia. Quando all'interfaccia viene attribuito un nuovo indirizzo, questa viene
attivata implicitamente. L'opzione down disattiva l'interfaccia.
arp | -arp
Abilita o disabilita l'uso del protocollo ARP per questa interfaccia.
trailers | -trailers
Abilita o disabilita l'uso di trailer sui frame Ethernet. Questa funzionalit non usata all'interno
dell'attuale sistema di gestione della rete.
allmulti | -allmulti
Abilita o disabilita la modalit promiscua dell'interfaccia. Ci permette di fare un monitoraggio della
rete attraverso applicazioni specifiche che cos possono analizzare ogni pacchetto che vi transita,
anche se non diretto a quella interfaccia.
metric n
Permette di specificare la metrica dell'interfaccia. Al momento non viene utilizzata questa
informazione.
mtu n
Permette di specificare l'unit massima di trasferimento (MTU o Max Transfer Unit) dell'interfaccia.
Per le schede Ethernet, questo valore pu variare in un intervallo di 1 000-2 000 (il valore predefinito
1 500). Per il protocollo SLIP si possono utilizzare valori compresi tra 200 e 4 096. da notare per
che attualmente non possibile gestire la frammentazione IP, di conseguenza, meglio utilizzare un
MTU sufficientemente grande.
pointopoint [indirizzo_di_destinazione] | -pointopoint
Abilita o disabilita la modalit punto-punto per questa interfaccia. La connessione punto-punto
quella che avviene tra due elaboratori soltanto. Se viene indicato l'indirizzo, si tratta di quello dell'altro
nodo.
netmask indirizzo_di_netmask
Stabilsce l'indirizzo IP della maschera di rete per questa interfaccia. L'indicazione della maschera di
rete pu essere omessa, in tal caso, viene utilizzato il valore predefinito che determinato in base
alla classe a cui appartiene l'indirizzo (A, B o C). Naturalmente, se si usa una sottorete, il valore della
maschera di rete non pu coincidere con quello predefinito.
irq numero_di_irq
Alcune interfacce permettono di definire il numero di IRQ in questo modo. Nella maggior parte dei
casi, ci non possibile.
broadcast [indirizzo] | -broadcast
Abilita o disabilita la modalit broadcast per questa interfaccia. Se abilitandola, viene indicato
l'indirizzo, si specifica l'indirizzo broadcast di questa interfaccia.
hw classe_hardware indirizzo_hardware
Solitamente, il nome di interfaccia utilizzato determina anche il tipo di hardware a cui appartiene
l'interfaccia fisica. Se il driver di interfaccia (cio il nome usato per identificarla) predisposto per
diversi tipi di hardware, attraverso questa opzione possibile specificare per quale tipo deve operare.
I nomi delle classi hardware possono essere quelli indicati di seguito.
11.

ether Ethernet;

12.

ax25 AMPR AX.25;

13.

ARCnet AMPR Net;

14.

netrom AMPR Rom.

L'indirizzo hardware deve essere indicato secondo il suo equivalente ASCII che poi la forma usata
comunemente in tutte le documentazioni.
multicast

Questa opzione permette di attivare esplicitamente la modalit multicast, anche se normalmente ci


viene determinato automaticamente in base al tipo di interfaccia utilizzato.
Esempi

# ifconfig lo 127.0.0.1
Attiva l'interfaccia lo corrispondente al loopback con il noto indirizzo IP 127.0.0.1.

# ifconfig eth0 192.168.1.1 netmask 255.255.255.0


Attiva l'interfaccia eth0 corrispondente alla prima scheda Ethernet, con l'indirizzo IP 192.168.1.1 e la
maschera di rete 255.255.255.0.

$ ifconfig eth0
Emette la situazione dell'interfaccia eth0 corrispondente alla prima scheda Ethernet.

$ ifconfig
Emette la situazione di tutte le interfacce di rete attivate.

9a.3 Indirizzi
Un indirizzo IP di un'interfaccia vale in quanto inserito in una rete logica, identificata da un proprio indirizzo
IP. Per questo motivo, quando si assegna un indirizzo a un'interfaccia, occorre anche stabilire la rete a cui
questo appartiene. Per questo si utilizza la maschera di rete, con la quale, il risultato di
indirizzo_di_interfaccia AND maschera_di_rete genera l'indirizzo della rete.
Quando si vuole utilizzare ifconfig per definire questi indirizzi, si pu usare la sintassi semplificata
seguente:
ifconfig interfaccia indirizzo_di_interfaccia [netmask maschera_di_rete]
Come si vede, l'indicazione della maschera di rete facoltativa. Dal momento che gli indirizzi IP sono stati
classificati, e per ogni classe definita una maschera di rete, se questa indicazione manca, si fa
riferimento ai valori predefiniti in base alla classe di appartenenza dell'indirizzo utilizzato.
L'attribuzione di un indirizzo definisce il recapito di quell'interfaccia, cio si intende stabilire per quale
indirizzo IP quella interfaccia debba rispondere. Il fatto di avere stabilito l'indirizzo, non determina
automaticamente il modo con cui quella interfaccia particolare possa essere raggiunta.
ifconfig consente anche di controllare la configurazione delle interfacce di rete. Per questo si utilizza la
sintassi seguente:
ifconfig [interfaccia]
Se non viene specificato il nome di un'interfaccia, si ottiene la situazione di tutte quelle presenti e attive.

9a.3.1 Loopback

Un elaboratore connesso o meno a una rete fisica vera e propria, deve avere una connessione virtuale a
una rete immaginaria interna allo stesso elaboratore. A questa rete virtuale inesistente si accede per
mezzo di un'interfaccia immaginaria, denominata lo, e l'indirizzo utilizzato sempre lo stesso, 127.0.0.1,
ma ugualmente deve essere indicato esplicitamente.
# ifconfig lo 127.0.0.1
La maschera di rete pu essere tranquillamente omessa, in ogni caso 255.0.0.0. Il risultato dell'esempio
appena visto dovrebbe generare la configurazione seguente:
$ ifconfig lo[Invio]
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
...
indispensabile che sia presente l'interfaccia lo per il buon funzionamento del sistema, soprattutto
quando l'elaboratore ha gi una connessione a una rete reale. Infatti, si potrebbe essere tentati di non
definire tale interfaccia, oppure di non attivare l'instradamento relativo, quando sono presenti altre
interfacce fisiche reali. Ci potrebbe provocare un malfunzionamento intermittente della rete.

9a.3.2 Ethernet
La configurazione degli indirizzi di una scheda di rete Ethernet la cosa pi comune: si tratta

semplicemente di abbinare all'interfaccia il suo indirizzo stabilendo il proprio ambito di competenza,


attraverso la maschera di rete. Per esempio,
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0
assegna l'indirizzo 192.168.1.1 all'interfaccia eth0, cio la prima scheda Ethernet, che appartiene alla rete
192.168.1.0. Infatti, 192.168.1.1 AND 255.255.255.0 = 192.168.1.0.
In questo caso, dal momento che l'indirizzo 192.168.1.1 appartiene alla classe C, la maschera di rete
predefinita sarebbe stata la stessa di quella che stata indicata esplicitamente.
Il risultato dell'esempio appena visto dovrebbe generare la configurazione seguente:
$ ifconfig eth0[Invio]
eth0
Link encap:10Mbps Ethernet HWaddr 00:4F:56:00:11:87
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

9a.4 Instradamento

In una rete elementare, in cui ogni elaboratore ha una sola scheda di rete e tutte le schede sono
connesse con lo stesso cavo, potrebbe sembrare strana la necessit di dover stabilire un percorso per
l'instradamento dei dati sulla rete.
In una rete IPv4 non cos: per qualunque connessione possibile necessario stabilire il percorso, anche
quando si tratta di connettersi con l'interfaccia immaginaria loopback.
Ogni elaboratore che utilizza la rete ha una sola necessit: quella di sapere quali percorsi di partenza
siano possibili, in funzione degli indirizzi utilizzati. Gli eventuali percorsi successivi, vengono definiti da
altri elaboratori nella rete. Si tratta di costruire la cosiddetta tabella di instradamento, attraverso la quale,
ogni elaboratore sa quale strada deve prendere un pacchetto a partire da quella posizione.
Gli instradamenti, cio la compilazione di questa tabella di instradamento, vengono stabiliti attraverso il
programma route.

9a.4.1 # route
route [opzioni]
route permette di gestire la tabella di instradamento del kernel. In particolare, permette di definire gli
instradamenti statici a nodi specifici, o a reti, attraverso un'interfaccia (attivata precedentemente con
ifconfig).
La sintassi di route pu articolarsi in diversi modi a seconda del tipo di azione da compiere.
Analisi della tabella di instradamento
route [-v] [-n] [-e | -ee]
Con questa sintassi possibile visualizzare (attraverso lo standard output) la tabella di instradamento.
Generalmente, per questo scopo, l'uso normale proprio quello di route senza argomenti.
Aggiunta di un nuovo instradamento
route [-v] add [-net|-host] destinazione [netmask maschera_di_rete] [gw router] [metric valore_metrico]
[mss dimensione] [window dimensione] [irtt durata] [reject] [mod] [dyn] [reinstate] [[dev] interfaccia]
L'inserimento di una nuova voce nella tabella di instradamento avviene per mezzo dell'opzione add e
dell'indicazione della destinazione da raggiungere. L'indicazione dell'interfaccia facoltativa.
Eliminazione di un instradamento
route [-v] del [-net|-host] destinazione [netmask maschera_di_rete] [gw router] [metric valore_metrico]
[[dev] interfaccia]
L'eliminazione di una voce della tabella di instradamento avviene per mezzo dell'opzione del e
dell'indicazione della destinazione che prima veniva raggiunta. L'indicazione dell'interfaccia
facoltativa.
Opzioni
-v
Dettagliato.
-n
Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodi e delle reti.
Questo tipo di approccio potrebbe essere utile specialmente quando si hanno difficolt ad accedere a

un servizio di risoluzione dei nomi, o comunque quando si vuole avere la situazione completamente
sotto controllo.
-e
Utilizza netstat per visualizzare la tabella di instradamento.
-ee
Funziona come l'opzione -e, ma il risultato pi dettagliato e si distribuisce in un numero di colonne
maggiore.
-net destinazione
L'indirizzo indicato nella destinazione fa riferimento a una rete. L'indirizzo pu essere indicato in forma
numerica o attraverso un nome di dominio, e in quest'ultimo caso, la traduzione avviene in base al
contenuto del file /etc/networks.
-host destinazione
L'indirizzo indicato nella destinazione fa riferimento a un nodo. L'indirizzo pu essere indicato in forma
numerica o attraverso un nome di dominio.
netmask maschera_di_rete
Permette di specificare la maschera di rete quando si sta facendo riferimento a un indirizzo di rete.
Quando si inserisce una voce riferita a un nodo singolo, questa indicazione non ha senso. Quando la
maschera di rete un dato richiesto, se non viene inserito si assume il valore predefinito che dipende
dalla classe a cui appartiene l'indirizzo indicato.
gw router
Fa in modo che i pacchetti destinati alla rete o al nodo per il quale si sta indicando l'instradamento,
passino per il router specificato. Per questo, occorre che l'instradamento verso l'elaboratore che funge
da router sia gi stato definito precedentemente e in modo statico.
Normalmente, l'indirizzo utilizzato come router riguarda un'interfaccia collocata in un altro nodo.
Eventualmente, per mantenere la compatibilit con Unix BSD, possibile specificare un'interfaccia
locale, intendendo cos che il traffico per l'indirizzo di destinazione deve avvenire utilizzando quella
interfaccia.
metric valore_metrico
Permette di definire il valore metrico dell'instradamento e viene utilizzato dai demoni che si occupano
dell'instradamento dinamico per determinare il costo di una strada, o meglio per poter decidere il
percorso migliore.
mss dimensione
Maximum Segment Size. Permette di definire la dimensione massima, in byte, di un segmento per
una connessione TCP attraverso quell'instradamento. Viene usato solo per una regolazione fine della
configurazione dell'instradamento. Il valore predefinito 536.
window dimensione
Permette di definire la dimensione della finestra per le connessioni TCP attraverso l'instradamento
specificato. Viene usato quasi esclusivamente nelle reti AX.25.
irtt durata
Initial Round Trip Time. Permette di definire la durata del round trip iniziale per le connessioni TCP
sull'instradamento specificato. Questa informazione viene utilizzata solitamente solo nelle reti AX.25.
Il valore viene espresso in millisecondi con un intervallo possibile di 1-12 000. Se viene omesso, il
valore predefinito di 300 ms.
reject
Permette di impedire l'utilizzo di un instradamento.
mod
dyn
reinstate
Queste opzioni permettono di installare un instradamento dinamico o modificato. In pratica, vengono
utilizzati solo da un demone per l'instradamento. Lo scopo di queste opzioni esclusivamente
diagnostico.
[dev] interfaccia

Permette di definire esplicitamente l'interfaccia da utilizzare per un certo instradamento. Solitamente,


questa informazione non necessaria perch il kernel riesce a determinare l'interfaccia in base alla
configurazione delle stesse.
importante che questa indicazione appaia alla fine della riga di comando, in questo modo, il
parametro dev, che precede il nome dell'interfaccia, solo facoltativo.
Esempi

# route add -host 127.0.0.1


Attiva l'instradamento verso l'interfaccia locale loopback.

# route add -net 192.168.1.0 netmask 255.255.255.0


Attiva l'instradamento della rete 192.168.1.0 che utilizza la maschera di rete 255.255.255.0.

# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0


Esattamente come nell'esempio precedente, ma in pi, viene indicato esplicitamente il nome
dell'interfaccia.

# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254


Attiva l'instradamento della rete 192.168.2.0 che utilizza la maschera di rete 255.255.255.0, attraverso
il router 192.168.1.254 per il quale era gi stato definito un instradamento precedentemente.

# route add default gw 192.168.1.254


Attiva l'instradamento predefinito (nel caso che non siano disponibili altre possibilit) attraverso il
router 192.168.1.254. La parola default fa automaticamente riferimento all'indirizzo IP 0.0.0.0.

# route add 10.0.0.0 netmask 255.0.0.0 reject


Definisce un instradamento il cui accesso deve essere impedito.

$ route
Mostra la tabella di instradamento attuale.

9a.5 Verifica di un instradamento

La definizione degli instradamenti, serve per stabilire un collegamento con le interfacce di altri elaboratori.
Quando anche le tabelle di instradamento degli altri elaboratori sono corrette, si pu verificare che le
comunicazioni siano possibili attraverso il programma ping.
ping permette di inviare una richiesta di eco a un indirizzo determinato, ovvero, a un'interfaccia
determinata. Si riesce a ottenere l'eco solo se l'instradamento verso quell'indirizzo funzionante e, nello
stesso modo, se attivo quello di ritorno gestito a partire dall'indirizzo di destinazione.
ping permette l'utilizzo di molte opzioni, anche se di solito si indica semplicemente l'indirizzo di
destinazione.
Normalmente si procede controllando prima l'indirizzo della propria interfaccia locale, quindi, via via si
tenta di raggiungere indirizzi pi lontani.

9a.5.1 $ ping

ping [opzioni] indirizzo


ping permette di inviare una richiesta di eco a un indirizzo, utilizzando il protocollo ICMP, verificando di
ricevere tale eco in modo corretto. ping viene usato quasi sempre senza opzioni, in modo da ottenere una
richiesta di eco continuo, a intervalli di un secondo, che pu essere interrotta attraverso la tastiera con la
combinazione [Ctrl+c]. Tuttavia, dal momento che ping serve a scoprire dei problemi negli instradamenti e
nel sistema di trasporto generale, pu essere conveniente intervenire sulla dimensione dei pacchetti
trasmessi e sul loro contenuto.
Alcune opzioni
-c quantit
Conclude i funzionamento di ping dopo aver ricevuto il numero indicato di risposte.
-f
Invia la maggior quantit possibile di pacchetti di richiesta, limitandosi a segnalare graficamente la

quantit di quelli che risultano persi, cio per i quali non si ottiene l'eco di risposta. Serve per
analizzare pesantemente un tratto di rete, e questa possibilit va usata con prudenza.
Proprio a causa della pericolosit di tale opzione, questa pu essere richiesta solo dall'utente root.
-i n_secondi_pausa
Permette di stabilire una pausa, espressa in secondi, tra l'invio di una richiesta di eco e la successiva.
Se non viene utilizzata l'opzione -f, il valore predefinito di questa di un secondo.
-p stringa_di_riempimento
Permette di aggiungere un massimo di 16 byte ai pacchetti utilizzati da ping, specificandone il
contenuto in esadecimale. Ci pu essere utile per verificare il passaggio di pacchetti che hanno
contenuti particolari, e che per qualche ragione possono avere delle difficolt.
-s dimensione
Permette di definire la dimensione dei pacchetti utilizzati, a cui si aggiunge l'intestazione ICMP. Il
valore predefinito di 56 byte a cui si aggiungono 8 byte di intestazione (64 in tutto).
Esempi

$ ping 192.168.1.1
Invia una richiesta di eco all'indirizzo 192.168.1.1, a intervalli regolari di un secondo, fino a che riceve
un segnale di interruzione.

$ ping -c 1 192.168.1.1
Invia una richiesta di eco all'indirizzo 192.168.1.1 e termina di funzionare quando riceve la prima
risposta di eco.

$ ping -p ffffffff 192.168.1.1


Invia una richiesta di eco all'indirizzo 192.168.1.1, utilizzando pacchetti contenenti una serie di 32 bit a
uno (FFFFFFFF16).

$ ping -s 30000 192.168.1.1


Invia una richiesta di eco all'indirizzo 192.168.1.1, utilizzando pacchetti lunghi 30 000 byte, oltre
all'intestazione ICMP.

9a.6 Instradamento attraverso un'interfaccia


Quando si configura un'interfaccia di rete e gli si attribuisce l'indirizzo IP, dal momento che esiste una
maschera di rete indicata espressamente o predefinita, sembrerebbe implicito che tutte le comunicazioni
dirette a quella rete debbano passare automaticamente per quell'interfaccia. In effetti, le cose sono, o
dovrebbero essere cos. Ma il percorso deve essere indicato ugualmente in modo esplicito.
In realt, quando si utilizza route, non necessario fare riferimento direttamente a delle interfacce,
bastano gli indirizzi e successivamente vale il ragionamento precedente: il kernel, in base agli indirizzi
utilizzati, determina l'interfaccia in grado di comunicare con questi. Naturalmente, questo ragionamento
non funziona sempre, e quando ci si accorge che le cose non vanno come si vuole, basta aggiungere il
nome dell'interfaccia.

9a.6.1 Loopback
La definizione dell'instradamento per gli indirizzi locali di loopback obbligatoria. Si utilizza
semplicemente il comando seguente:
# route add -net 127.0.0.0
La tabella di instradamento che si ottiene viene descritta di seguito.
$ route -n[Invio]
Kernel IP routing table
Destination Gateway
Genmask
Flags Metric Ref Use Iface
127.0.0.0
*
255.0.0.0
U 0
0
2 lo
Dal momento che in precedenza era stato assegnato all'interfaccia lo (loopback) l'indirizzo 127.0.0.1 e la
maschera di rete era 255.0.0.0 (nell'esempio visto in precedenza, la maschera di rete veniva attribuita in
modo predefinito), route determina da solo che tutto il traffico per la rete 127.0.0.0 deve passare per
questa interfaccia, e di conseguenza aggiorna la tabella di instradamento.

Di solito la rete 127.0.0.0 serve a raggiungere solo l'indirizzo 127.0.0.1, quindi, spesso si preferisce
inserire solo quest'ultimo nella tabella di instradamento. In pratica si utilizza il comando route add
127.0.0.1.
La verifica dell'instradamento semplice, basta provare a richiedere un eco all'interfaccia lo.
$ ping 127.0.0.1[Invio]
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.4 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.3 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.3 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.3 ms
[Ctrl+c]
--- 127.0.0.1 ping statistics --4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.3/0.3/0.4 ms

9a.6.2 Ethernet
Le schede di rete Ethernet sono usate per la connessione a una rete locale e per questo sono
potenzialmente in grado di offrire un collegamento con tutti gli indirizzi che ricadono all'interno della rete
logica di cui fanno parte.
Quando si stabilisce un instradamento che utilizza questo tipo di interfaccia, preferibile l'indicazione
dell'intera rete logica a cui appartiene.
Seguendo l'esempio visto in precedenza nella sezione che riguardava la configurazione di una scheda
Ethernet, dal momento che questa si trovava a operare nella rete 192.168.1.0, l'instradamento corretto si
ottiene con il comando seguente:
# route add -net 192.168.1.0
La tabella di instradamento che ne deriva viene descritta di seguito.
$ route -n[Invio]
Kernel IP routing table
Destination Gateway
Genmask
Flags Metric Ref Use Iface
192.168.1.0 *
255.255.255.0 U 0
0
1 eth0
Vale lo stesso discorso fatto nel caso dell'interfaccia di loopback: in base alla maschera di rete attribuita
(esplicitamente o in modo predefinito) all'interfaccia eth0, route determina da solo che tutto il traffico per la
rete 192.168.1.0 deve passare per questa interfaccia, e di conseguenza aggiorna la tabella di
instradamento.
Volendo possibile indicare un instradamento specifico per ogni destinazione. Nell'esempio seguente si
aggiunge l'instradamento per alcuni elaboratori: si deve utilizzare route pi volte.
# route add -host 192.168.1.1
# route add -host 192.168.1.2
# route add -host 192.168.1.3
# route add -host 192.168.1.4
Si ottiene una tabella di instradamento simile a quella seguente:
Kernel IP routing table
Destination Gateway
Genmask
Flags Metric Ref Use Iface
192.168.1.1 *
255.255.255.255 UH 0
0
0 eth0
192.168.1.2 *
255.255.255.255 UH 0
0
0 eth0
192.168.1.3 *
255.255.255.255 UH 0
0
0 eth0
192.168.1.4 *
255.255.255.255 UH 0
0
0 eth0
Anche l'indirizzo dell'interfaccia locale, quella del proprio elaboratore, raggiungibile solo se stato
specificato un instradamento. Quando si indicava un instradamento della rete, questa veniva inclusa
automaticamente nel gruppo; nel caso si voglia indicare dettagliatamente ogni indirizzo da raggiungere,
se si vuole accedere anche alla propria interfaccia, occorre inserirla nella tabella di instradamento.
Nell'esempio visto sopra, viene aggiunto anche l'indirizzo 192.168.1.1 per questo scopo.
La verifica dell'instradamento deve essere fatta inizialmente controllando l'interfaccia locale, quindi
tentando di raggiungere l'indirizzo di un altro elaboratore sulla rete. Naturalmente, occorre che
quell'elaboratore abbia una tabella di instradamento corretta.

$ ping 192.168.1.1[Invio]
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.5 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.4 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.4 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.4 ms
[Ctrl+c]
--- 192.168.1.1 ping statistics --4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.5 ms
$ ping 192.168.1.2[Invio]
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=1.1 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=1.1 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=1.1 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=1.1 ms
[Ctrl+c]
--- 192.168.1.2 ping statistics --4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.1/1.1/1.1 ms

9a.6.4 Indicazione precisa dell'interfaccia


Nelle sezioni precedenti sono state viste solo situazioni normali, in cui non esiste la necessit di indicare
espressamente l'interfaccia attraverso la quale deve passare il traffico per un certo indirizzo.
Potrebbe per capitare che due o pi interfacce si trovino a essere collegate a reti fisiche differenti, ma
aventi lo stesso indirizzo, o per le quali si possa fare confusione. Si pu analizzare il caso seguente:
Un elaboratore viene utilizzato per una connessione in una rete locale Ethernet il cui indirizzo sia
192.168.1.0 e contemporaneamente per una connessione PLIP con un portatile. Per l'interfaccia Ethernet
si vuole utilizzare l'indirizzo 192.168.1.1. Per la connessione PLIP si vogliono usare indirizzi appartenenti
alla stessa rete appena vista, e precisamente 192.168.1.2 per l'interfaccia locale e 192.168.1.3 per quella
dell'elaboratore portatile all'altro capo.
Le interfacce vengono configurate nel modo seguente:
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0
# ifconfig plip1 192.168.1.2 pointopoint 192.168.1.3
Nel momento in cui si vogliono definire gli instradamenti, conviene fare esplicitamente riferimento alle
interfacce.
# route add -net 192.168.1.0 dev eth0
# route add -host 192.168.1.3 dev plip1
il risultato che si ottiene il seguente:
# route -n
Kernel IP routing table
Destination Gateway
Genmask
Flags Metric Ref Use Iface
192.168.1.3 *
255.255.255.255 UH 0
0
0 plip1
192.168.1.0 *
255.255.255.0 U 0
0
0 eth0
Si osservi il fatto che l'instradamento verso l'indirizzo 192.168.1.3 appare per primo nella tabella degli
instradamenti. per questo che i pacchetti diretti a quell'indirizzo prendono la strada giusta attraverso
l'interfaccia plip1.

9a.10 Router

Un elaboratore che debba fungere da router richiede alcune caratteristiche particolari:


15.
un kernel compilato in modo da consentire l'inoltro di pacchetti da un'interfaccia a un'altra (nelle
versioni vecchie del kernel Linux era necessario abilitare l'opzione IP: forwarding/gatewaying );
16.
due o pi interfacce di rete connesse ad altrettante reti fisiche differenti;
17.
la configurazione corretta di ogni interfaccia di rete;
18.
una tabella di instradamento in grado di permettere l'accesso a tutte le reti che si diramano
dalle interfacce di rete installate.
Quando il kernel dispone della funzionalit di forwarding/gatewaying (nei kernel recenti implicita), questa

pu essere controllata attraverso un file del file system virtuale /proc/. Per motivi di sicurezza, alcune
distribuzioni GNU/Linux sono predisposte in modo da disattivare questa funzionalit attraverso uno dei
comandi inseriti nella procedura di inizializzazione del sistema. Per riattivare il forwarding/gatewaying, si
pu agire nel modo seguente:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Il firewall permette a una rete locale che utilizza indirizzi IP riservati alle reti private (cio esclusi dalla rete
Internet, e come tali irraggiungibili) di accedere all'esterno. In effetti, tutto il traffico con la rete esterna
viene intrattenuto (apparentemente) dal firewall che si occupa di inoltrare le risposte all'interno della rete
locale. Ci significa che all'esterno appare sempre solo un elaboratore, il firewall, mentre dall'esterno non
c' modo di accedere agli elaboratori della rete locale perch questi non hanno un indirizzo accessibile.

Lezione 9b. PPP per l'accesso a Internet


attraverso un ISP
Il primo contatto con il protocollo PPP si ha quando si vuole accedere a Internet attraverso un ISP, ovvero
un fornitore di accesso a Internet.
In questi casi si tende a parlare di cliente PPP, anche se ci non corretto formalmente, dato che si
interferisce con la terminologia utilizzata per il sistema di autenticazione, perch si vede il nodo dell'ISP
come quello che offre un servizio, e quindi lo si considera un servente.

9b.1 Organizzazione del proprio ISP

Un servizio PPP di un fornitore di accesso a Internet pu essere organizzato in tanti modi differenti, e la
cosa che deve essere conosciuta quando ci si vuole collegare il modo con cui viene consentita
l'autenticazione. In pratica, il protocollo PPP standard, ma per usarlo occorre accordarsi sul modo in cui
il nodo che accede al servizio dovr (o potr) identificarsi.
Tutte le informazioni necessarie dovrebbe darle il fornitore stesso, ma nella maggior parte dei casi, le
persone con cui si hanno contatti non sono a conoscenza dei dettagli necessari, e spesso ritengano che
la loro procedura sia standard...
Fondamentalmente si pu distinguere tra un'autenticazione tradizionale, dove si interviene come se si
fosse davanti a un terminale a digitare il nominativo-utente e la password, oppure attraverso il PPP
stesso, con i protocolli PAP o CHAP.

9b.1.1 Autenticazione tradizionale


L'autenticazione di tipo tradizionale prevede che il protocollo PPP sia attivato dopo il riconoscimento
dell'utente che richiede l'accesso. In pratica, si tratta di una connessione remota attraverso un terminale
(o meglio, attraverso un programma di emulazione come Minicom o altro); si ottiene la classica richiesta
login: e password:, alla quale si risponde e al termine si ottiene l'attivazione del PPP dalla parte remota.
L'attivazione del protocollo PPP potrebbe avvenire subito dopo il riconoscimento, oppure potrebbe essere
necessario inviare un ritorno a carrello aggiuntivo, o avviare un comando apposito (indicato dal fornitore di
accesso).
In questa situazione, quando ci si accorge che il nodo remoto ha attivato il PPP (si vedono apparire una
serie di caratteri senza senso sullo schermo del terminale), si deve chiudere il programma con cui stata
fatta la connessione, senza reinizializzare il modem, e quindi si deve attivare la gestione locale del PPP,
in modo da utilizzare quella linea particolare.
Volendo provare quanto descritto, si potrebbe utilizzare Minicom. Per questo bisogna ricordare di fare
riferimento al dispositivo seriale giusto, cio quello a cui connesso il modem, e poi si deve verificare che
le impostazioni della linea seriale siano quelle desiderate. Supponendo che il modem disponga di una
configurazione di fabbrica sufficientemente corretta, la si pu richiamare con il comando AT&F.
AT&F[Invio]
OK
Dovendo utilizzare le linee italiane si impartisce il comando ATX3, in modo che venga ignorata l'assenza
del tono di chiamata.
ATX3[Invio]
OK

Infine si pu passare alla composizione (il numero di telefono indicato di pura fantasia).
ATDT0987654321[Invio]
In tal modo dovrebbe avvenire la composizione del numero e il modem remoto dovrebbe rispondere.
CONNECT 9600
In presenza di un sistema di autenticazione tradizionale, potrebbe apparire un messaggio di benvenuto e
quindi la richiesta di introdurre il proprio nominativo.
Se non dovesse apparire nulla, potrebbe essere necessario inviare un carattere qualunque, o un semplice
ritorno a carrello. necessario provare per stabilire cosa bisogna fare per iniziare il colloquio con il nodo
remoto.
Benvenuto presso il servizio della Societ ...
login:
In tal caso si introduce il proprio nominativo-utente (in altri termini si esegue il login) e si conferma con
[Invio].
login: tizio[Invio]
password:
Subito dopo si ottiene la richiesta di inserimento della password, alla quale si risponde nel modo solito,
come di fronte a un terminale Unix classico.
password: tazza[Invio]
Ammesso che il sistema remoto riconosca l'utente, cio la coppia utente-password, questo potrebbe
attivare immediatamente il PPP, oppure potrebbe attendere che l'utente faccia qualcosa di specifico prima
di iniziare.
Nel caso peggiore si ottiene l'invito di una shell, attraverso la quale si pu interagire e fare qualcosa con il
proprio accesso remoto, per esempio attivare il programma pppd personalmente. In alternativa potrebbe
essere necessario fare una scelta in base a un men di opzioni che viene proposto, oppure potrebbe
essere necessario premere un [Invio] in pi. In pratica, bisogna provare. Quando si vedono apparire dei
simboli strani, come quanto mostrato sotto, significa che il PPP stato attivato dalla parte remota.
~y}#!}!}!} }.}%}&k`q1}'}"}(}">~~y}#!}!}!} }.}%}&k`q1}'}"}(}">~~y}
A questo punto, basterebbe concludere il funzionamento di Minicom, ma senza reinizializzare il modem (si
usa il comando [Ctrl+a][q]), e subito dopo avviare pppd con le opzioni opportune, in modo da sfruttare il
collegamento seriale corrispondente alla connessione instaurata.
Comunque, lo scopo di utilizzare Minicom solo quello di scoprire la procedura corretta per instaurare
una connessione PPP con il nodo remoto. Quando le operazioni da farsi saranno chiare, si potr
predisporre un sistema automatico, attraverso chat.
importante osservare che, quando la connessione PPP preceduta da un'autenticazione tradizionale, il
PPP non dovrebbe richiedere a sua volta altre forme di autenticazione, ma questo non pu essere
escluso. In pratica, questo significa che potrebbe essere necessario predisporre i file /etc/ppp/pap-secrets
e /etc/ppp/chap-secrets.

9b.1.2 Autenticazione attraverso il PPP


L'autenticazione attraverso il PPP salta qualunque fase introduttiva, lasciando al protocollo PAP o a quello
CHAP di verificare l'identit di chi accede. Per accertarsene si pu usare lo stesso sistema gi visto nella
sezione precedente: si utilizza Minicom per iniziare la connessione, anche attraverso la composizione del
numero telefonico, e quindi, senza fare nulla, oppure provando a premere qualche tasto, si ottengono solo
i caratteri tipici di un protocollo PPP.
~y}#!}!}!} }.}%}&k`q1}'}"}(}">~~y}#!}!}!} }.}%}&k`q1}'}"}(}">~~y}
In tal caso, si costretti a predisporre i file /etc/ppp/pap-secrets e /etc/ppp/chap-secrets. Eventualmente,
per quest'ultimo, potrebbe essere necessario conoscere il nome con cui si presenta il nodo remoto.

9b.2 Cliente PPP che utilizza


identificazione tradizionale

un

sistema

di

stato mostrato il procedimento di accesso a un sistema che utilizza un metodo di identificazione degli
utenti di tipo tradizionale. Attraverso Minicom o un altro programma simile si possono dare i comandi
necessari al modem, comporre il numero ed eseguire l'accesso. Al termine, una volta avviato il PPP dalla

parte remota, si pu chiudere il funzionamento del programma senza reinizializzare il modem (con
Minicom si usa la sequenza [Ctrl+a][q]).
A questo punto bisognerebbe avviare la gestione locale del PPP, in modo rapido, altrimenti il nodo remoto
chiude la connessione. Per farlo si potrebbe realizzare uno script che avvii pppd indicando tutte le opzioni
necessarie (si vuole ignorare volutamente il file /etc/ppp/options per non confondere il lettore con troppe
cose).
#!/bin/bash
/usr/sbin/pppd \
crtscts \
modem \
defaultroute \
0.0.0.0:0.0.0.0 \
/dev/ttyS1 \
57600
L'esempio mostra l'utilizzo della seconda porta seriale, /dev/ttyS1, e si indica esplicitamente che si
attende dalla parte remota l'indicazione del numero IP locale e di quello remoto.
Se il nodo remoto dovesse pretendere anche un'autenticazione PAP, o CHAP, allora si devono
predisporre i file /etc/ppp/pap-secrets e /etc/ppp/chap-secrets.
Naturalmente, non molto pratico questo sistema di connessione attraverso l'uso di Minicom. Per
automatizzare il procedimento di identificazione si pu inserire un programma specifico: chat.
Prima di proseguire, si tenga presente che per chiudere il funzionamento di pppd, sufficiente inviargli un
segnale di interruzione (SIGINT).

9b.2.1 # chat

chat [opzioni] [script]


Il programma chat permette di definire una comunicazione tra l'elaboratore e il modem. Il suo scopo
principale quello di stabilire una connessione tra il demone pppd locale e quello di un elaboratore
remoto, quando prima necessario procedere a un'autenticazione di tipo tradizionale.

Opzioni
-f chat_file
Con questa indicazione, chat legge lo script di colloquio (chat script) dal file indicato. L'uso di questa
opzione esclude l'indicazione dei comandi di script dalla riga di comando. Il file pu contenere pi
righe, le stringhe possono essere separate utilizzando spazi o caratteri di tabulazione.
-t timeout
Fissa il valore del timeout, cio del tempo massimo di attesa per la ricezione di una stringa.
-r report_file
Definisce il nome del file per contenere il rapporto quando viene utilizzata la parola chiave REPORT.
Se non si specifica questo file viene utilizzato lo standard error.
-v
Attiva la modalit dettagliata per cui viene utilizzato il registro del sistema per annotare i messaggi di
chat.
-V
Attiva la modalit dettagliata utilizzando lo standard error. In tal modo possono essere visualizzati
immediatamente i messaggi che intercorrono tra chat e il modem. Questa opzione non funzioner
come previsto se lo standard error ridiretto altrove, per esempio quando chat viene eseguito da
pppd in modalit detached.
script
Se non viene specificato un file di script attraverso l'opzione -f questo deve essere fornito nella riga di
comando, molto probabilmente racchiudendolo tra virgolette per permettere l'inserimento di spazi.

Codici di uscita
0 Conclusione normale: lo script stato eseguito senza problemi.
1 Almeno uno dei parametri non valido.

2 Errore durante l'esecuzione: potrebbe trattarsi di un errore di lettura di un file, o la ricezione di un


segnale di SIGINT.
3 Errore di timeout.
4 stata ricevuta la prima delle stringhe indicata come condizione di interruzione (ABORT).
5 stata ricevuta la seconda delle stringhe indicata come condizione di interruzione (ABORT).
6 stata ricevuta la terza delle stringhe indicata come condizione di interruzione (ABORT).
7 stata ricevuta la quarta delle stringhe indicata come condizione di interruzione (ABORT).
...

9b.2.2 Script di chat


Lo script di colloquio, ovvero lo script di chat, definisce la comunicazione. Lo script consiste di una o pi
coppie di stringhe di attesa e invio separate da spazi, con una coppia opzionale di stringhe di
subinvio, separate da un trattino. Per esempio:
ogin:-BREAK-ogin: tizio ssword: tazza
indica che chat si aspetta di ricevere la stringa ogin:. Se ci non avviene entro il tempo massimo stabilito
(timeout), invia un break al sistema remoto e quindi attende di nuovo la stringa ogin:. Se la stringa ogin:
viene ricevuta gi la prima volta, la sequenza di interruzione non viene generata. Se fallisce anche la
seconda volta l'attesa, chat termina l'esecuzione. Quando chat ha ricevuto la stringa ogin: invia la stringa
tizio e quindi si mette in attesa di ricevere la stringa ssword:. Quando la riceve invia la stringa tazza. Alla
fine di ogni stringa trasmessa da chat viene aggiunto un ritorno a carrello (<CR>). Al contrario, per
indicare che si attende un codice di ritorno a carrello, si utilizza la sequenza \r.
Il motivo per il quale si indica solo la parte finale delle stringhe di identificazione che in questo modo si
possono ignorare le parti di stringa superflue che potrebbero anche essere giunte alterate. Un esempio
molto simile al precedente potrebbe essere:
ogin:--ogin: tizio ssword: tazza
In questo caso, se non si riceve la stringa ogin: al primo tentativo, chat invia un semplice ritorno a carrello
e quindi attende ancora una volta.
chat in grado di riconoscere una serie di stringhe speciali che vengono descritte di seguito.
0.
ABORT, stringhe di interruzione
Le stringhe di interruzione permettono di interrompere la comunicazione quando il modem restituisce una
parola chiave particolare. Per esempio:
ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT123456 CONNECT
questa sequenza non attende nulla (i due apostrofi delimitano una stringa nulla ed quel nulla
che si attende), e quindi invia la stringa ATZ. La risposta attesa la stringa OK. Quindi invia
ATDT123456 e attende CONNECT. Quando viene ricevuta anche questa ultima stringa, lo script
prosegue. Se per, in qualunque momento, il modem restituisce una delle stringhe BUSY o NO
CARRIER, l'esecuzione dello script viene interrotta.
1.
REPORT, stringhe di rapporto
Le stringhe di rapporto permettono di registrare nel file di rapporto (si veda l'opzione -r) gli eventi
specificati. Si osservi l'esempio.
REPORT CONNECT ABORT BUSY '' ATZ OK ATDT123456 CONNECT
Questa sequenza non attende nulla (i due apostrofi delimitano una stringa nulla ed quel nulla
che si attende), e quindi invia la stringa ATZ. La risposta attesa la stringa OK. Quindi invia
ATDT123456 e attende CONNECT. Quando viene ricevuta anche questa ultima stringa, lo script
prosegue, e in pi viene scritto all'interno del file di rapporto la parola CONNECT seguita da tutto
quello che il modem ha inviato insieme fino al raggiungimento del carattere di ritorno a carrello.
2.
TIMEOUT, tempo massimo
Il timeout iniziale di 45 secondi e pu essere cambiato utilizzando il parametro -t oppure durante
l'esecuzione dello script. Si osservi l'esempio (che appare spezzato su due righe per motivi
tipografici).
'' ATZ OK ATDT123456 CONNECT TIMEOUT 10
ogin:--ogin: tizio TIMEOUT 5 ssword: tazza
Prima di attendere l'invito a inserire il nominativo-utente viene cambiato il tempo massimo di
attesa (il timeout) a 10 secondi, e prima di attendere l'invito a inserire la password viene cambiato

a cinque secondi. Quando viene cambiato il valore del timeout, questo resta cos fino al prossimo
cambiamento.
3.
EOT, invio del codice di fine testo
Il simbolo di EOT pu essere rappresentato con ^D. Quando si invia questo carattere non viene
aggiunto il ritorno a carrello, al contrario del solito.
4.
BREAK, interruzione
La stringa speciale BREAK rappresenta un segnale speciale nella trasmissione. L'azione normale
del modem ricevente questo segnale quello di cambiare la velocit di trasmissione. La
sequenza di interruzione pu essere incorporata all'interno di una stringa utilizzando la sequenza
\K.
All'interno di uno script di colloquio, si possono inserire dei simboli speciali, rappresentati prevalentemente
attraverso delle sequenze di escape del tipo \x. Segue l'elenco di quelle pi importanti per chat.
5.
'' ""
Una coppia di apici singoli o di apici doppi rappresenta la stringa vuota. Se viene inviata una stringa
vuota, in pratica si invia solo un ritorno a carrello.
6.
\b
Backspace.
7.
\c
Elimina il carattere di ritorno a carrello alla fine di una riga da trasmettere. l'unico modo per riuscire a
trasmettere una stringa che non termini con il solito ritorno a carrello. Si utilizza alla fine della stringa da
trasmettere e non vale per le stringhe da ricevere.
8.
\d
Attende per un secondo. Vale solo per le stringhe da trasmettere.
9.
\K
Inserisce un carattere break. Vale solo per le stringhe da trasmettere.
10.
\n
Rappresenta un carattere line feed o <LF>.
11.
\N
Invia un carattere <NUL>. Vale solo per le stringhe da trasmettere.
12.
\p
Esegue una pausa di 1/10 di secondo. Vale solo per le stringhe da trasmettere.
13.
\q
Sopprime la scrittura della stringa nel registro del sistema. Al suo posto appariranno alcuni punti
interrogativi. Vale solo per le stringhe da trasmettere.
14.
\r
Invia o attende un ritorno a carrello.
15.
\s
Rappresenta uno spazio e pu essere usato quando non si vuole usare la tecnica delle virgolette per
racchiudere una stringa che contiene spazi.
16.
\t
Invia o attende un carattere di tabulazione.
17.
\\
Invia o attende un carattere \
18.
\ooo
Rappresenta un carattere in notazione ottale. Alcuni simboli non possono essere ricevuti (attesi).
19.
^x
Rappresenta una sequenza del tipo ^A, ^B, ^C,... Per esempio, ^Q rappresenta il codice <DC1> pari a 17
in decimale. Alcuni simboli non possono essere ricevuti (attesi).

9b.2.3 pppd e chat per la connessione


Per automatizzare la creazione di un collegamento PPP attraverso la linea telefonica, quando il nodo
remoto utilizza un sistema di autenticazione tradizionale, si pu combinare l'uso di pppd e di chat. Per la
precisione, si utilizza pppd con l'opzione connect, attraverso la quale si avvia chat allo scopo di
inizializzare il modem, comporre il numero ed eseguire il procedimento di autenticazione.
La prima cosa da fare quella di creare uno script per chat, adatto alle esigenze del proprio modem, e
soprattutto, in grado di eseguire l'accesso presso la macchina remota. Si osservi l'esempio seguente, che
fa riferimento al file /etc/ppp/chatscript.

TIMEOUT
3
ABORT
BUSY
ABORT
'NO CARRIER'
''
\dAT&F
OK
\dAT
OK
\dATX3
OK
\dAT
OK
'\dATDT 0987654321'
TIMEOUT
30
CONNECT
''
ogin:--ogin: tizio
word:
tazza
''
''
Se si osserva l'esempio, si noter che se la stringa ogin: non viene ricevuta entro 30 secondi, viene
inviato un ritorno a carrello e quindi la si attende nuovamente. Inoltre, alla fine, anche se non detto che
sia strettamente necessario, viene inviato un ritorno a carrello senza attendere nulla.
In questa situazione, si potrebbe predisporre un altro script (questa volta uno script di shell), per avviare
pppd con tutte le opzioni necessarie, e soprattutto con l'uso di connect per incorporare chat.
#!/bin/bash
/usr/sbin/pppd \
connect "/usr/sbin/chat -v -f /etc/ppp/chatscript" \
crtscts \
modem \
defaultroute \
0.0.0.0:0.0.0.0 \
/dev/ttyS1 \
57600
Come in altri esempi, viene utilizzata la seconda porta seriale, e si lascia che sia la controparte a definire
gli indirizzi IP di entrambi i nodi.
Ricapitolando, in questo modo: pppd apre la linea seriale; avvia chat che si occupa di inizializzare il
modem, di comporre il numero telefonico e di eseguire l'accesso, fino a fare partire il PPP dall'altra parte;
quindi pppd riprende il controllo ed pronto per comunicare con l'altro lato della comunicazione.
Volendo, si pu incorporare tutto lo script di colloquio nello script di shell che serve ad avviare pppd. Cos
facendo, diventa tutto un po' confuso da leggere, ma pu essere un modo per tenere le informazioni sul
proprio accesso remoto lontane da occhi indiscreti.
Quello che segue uno script completo che prima di avviare pppd verifica che non ci sia gi un'interfaccia
di rete denominata ppp0.
#!/bin/bash
#======================================================================
# ~/ppp-connetti
#
# Attiva la connessione al proprio ISP attraverso pppd e chat.
#
# Questo script molto semplificato rispetto a quelli standard.
# Il problema sta nel fatto che molto dipende da come si
# comporta l'elaboratore dell'ISP.
# In questo esempio, in particolare, alla fine dello script di
# chat viene inviato un ritorno a carrello senza il quale la
# connessione non avviene.
#
# Si presume che la connessione avvenga utilizzando l'interfaccia
# ppp0.
#
# Perch possa essere utilizzato da un utente comune, occorre che
# quest'ultimo possa accedere alla porta seriale del modem e che il
# programma pppd sia SUID-root.

#
# Questo script non utilizza alcun argomento dalla riga di comando.
#======================================================================
#======================================================================
# Variabili.
#======================================================================
#-----------------------------------------------------------------# Indirizzo dell'ISP.
# In teoria non necessario indicare l'indirizzo IP
# dell'elaboratore remoto. Tuttavia, se non dovesse funzionare,
# c' sempre la possibilit di inserirlo qui.
#-----------------------------------------------------------------IP_ISP="0.0.0.0"
#-----------------------------------------------------------------# Indirizzo del proprio elaboratore.
# L'indirizzo IP del proprio elaboratore non deve essere indicato,
# a meno che non sia stato deciso diversamente con il proprio ISP.
# Infatti, di solito viene assegnato l'indirizzo locale in
# maniera dinamica.
#-----------------------------------------------------------------IP_LOCALE="0.0.0.0"
#-----------------------------------------------------------------# La porta di comunicazione utilizzata per il modem.
# In questo caso la seconda porta seriale.
#-----------------------------------------------------------------DISPOSITIVO="/dev/ttyS1"
#-----------------------------------------------------------------# Velocit massima di trasmissione.
#-----------------------------------------------------------------VELOCITA="57600"
#-----------------------------------------------------------------# Il numero di telefono dell'ISP.
#-----------------------------------------------------------------TELEFONO="0987654321"
#-----------------------------------------------------------------# Il nome utente utilizzato per accedere all'elaboratore dell'ISP.
#-----------------------------------------------------------------PPP_ACCOUNT="tizio"
#-----------------------------------------------------------------# La password per accedere.
#-----------------------------------------------------------------PPP_PASSWORD="tazza"
#======================================================================
# Inizio.
#======================================================================
#-----------------------------------------------------------------# Prima di iniziare si controlla che non sia gi attiva una
# connessione con l'interfaccia di rete ppp0, ovvero quella di
# una connessione PPP (precisamente la prima).
# da notare che ifconfig potrebbe non trovarsi nel percorso
# di ricerca degli eseguibili della variabile PATH, per cui
# necessario indicare il percorso assoluto.
#------------------------------------------------------------------

if `/sbin/ifconfig | grep "ppp0" > /dev/null`


then
#-------------------------------------------------------------# Esiste gi una connessione con ppp0, quindi non si pu
# procedere (si interrompe lo script).
#-------------------------------------------------------------echo " gi attiva una connessione con ppp0"
exit 1
fi
#-----------------------------------------------------------------# Viene attivato pppd con l'aiuto di chat.
# In particolare, chat esegue le operazioni seguenti:
# - imposta il tempo di attesa a 3 secondi;
# - interrompe in caso di messaggio ABORT
# - interrompe in caso di messaggio NO CARRIER;
# - senza attendere, richiede il prelievo della configurazione
# di fabbrica del modem;
# - dopo l'OK invia un comando AT nullo (serve per i modem lenti);
# - dopo l'OK invia il comando ATX3 in modo che venga ignorato il
# tono di chiamata;
# - dopo l'OK invia un comando AT nullo (serve per i modem lenti);
# - dopo l'OK invia la richiesta di composizione del numero
# telefonico;
# - cambia il tempo di attesa portandolo a 30 secondi;
# - attende CONNECT e quindi invia un ritorno a carrello;
# - attende la richiesta di login e invia il nome dell'utente;
# - attende la richiesta della password e invia la password;
# - senza attendere invia un ritorno a carrello.
#-----------------------------------------------------------------/usr/sbin/pppd \
connect "/usr/sbin/chat -v \
TIMEOUT
3\
ABORT
BUSY \
ABORT
'NO CARRIER' \
''
\\dAT\&F \
OK
\\dAT \
OK
\\dATX3 \
OK
\\dAT \
OK
'\\dATDT $TELEFONO' \
TIMEOUT
30 \
CONNECT
'' \
ogin:--ogin: $PPP_ACCOUNT \
word:
$PPP_PASSWORD \
''
'' " \
crtscts \
modem \
defaultroute \
$IP_LOCALE:$IP_ISP \
$DISPOSITIVO \
$VELOCITA
#======================================================================
# Fine.
#======================================================================
Per semplificare la chiusura del PPP, si pu preparare anche lo script seguente:
#!/bin/sh
#======================================================================

# ~/ppp-chiudi
#
# Chiude la connessione inviando un segnale di SIGINT a "ppp0".
#
# Questo script non utilizza alcun argomento dalla riga di comando.
#======================================================================
#======================================================================
# Inizio.
#======================================================================
kill -INT `cat /var/run/ppp0.pid`
#======================================================================
# Fine.
#======================================================================
Prima di poter eseguire uno script importante ricordare di attribuirgli i permessi di esecuzione necessari.
chmod +x nome_del_file
Se si vuole permettere anche agli utenti comuni di effettuare la connessione, occorre fare in modo che
pppd sia SUID-root. In pratica, si verifica, e se necessario si modificano i permessi di pppd.
# ls -l /usr/sbin/pppd[Invio]
-rwxr-xr-x 1 root root
69084 Mar 25 1997 /usr/bin/pppd*
Dal momento che manca la modalit SUID, occorre attribuirgliela.
# chmod u+s /usr/sbin/pppd[Invio]
Si verifica nuovamente per sicurezza.
# ls -l /usr/sbin/pppd[Invio]
-rwsr-xr-x 1 root root
69084 Mar 25 1997 /usr/bin/pppd*
La lettera s minuscola segnala l'attivazione della modalit SUID e del permesso di esecuzione per l'utente
proprietario.

9b.3 Cliente PPP che fornisce


un'identificazione PAP o CHAP

esclusivamente

Se si usa esclusivamente il protocollo PPP per ottenere l'autenticazione di chi accede, la configurazione
del cliente diventa pi semplice. La differenza rispetto a quanto mostrato nel caso di autenticazione
tradizionale, sta nel fatto che non occorre pi accedere in quel modo; tuttavia resta il problema di dover
inizializzare il modem e di comporre il numero telefonico.
In pratica, il procedimento simile a quanto gi stato mostrato, nel senso che pppd viene usato ancora
assieme a chat, solo che lo script di colloquio si limita a comandare il modem.
TIMEOUT
3
ABORT
BUSY
ABORT
'NO CARRIER'
''
\dAT&F
OK
\dAT
OK
\dATX3
OK
\dAT
OK
'\dATDT 0987654321'
Quello che si vede potrebbe essere il nuovo script di colloquio di chat. Per il resto, l'uso di pppd non
cambia, a parte il fatto di dover intervenire sui file /etc/ppp/pap-secrets e /etc/ppp/chat-secrets. Quello che
segue l'esempio di /etc/ppp/pap-secrets; nel caso di /etc/ppp/chat-secrets potrebbe essere necessario
indicare espressamente il nome del servente, ovvero del nodo remoto.
# /etc/ppp/pap-secrets
#
# Segreti per l'autenticazione PAP
#
# cliente
servente
segreto
indirizzi IP ammissibili
tizio
*
tazza
*

A questo punto, specialmente nel caso che il nodo remoto richieda l'autenticazione PAP, necessario
aggiungere al comando pppd l'opzione user, in modo da selezionare la voce corretta nel file
secrets.
#!/bin/bash
/usr/sbin/pppd \
connect "/usr/sbin/chat -v -f /etc/ppp/chatscript" \
user tizio \
crtscts \
modem \
defaultroute \
0.0.0.0:0.0.0.0 \
/dev/ttyS1 \
57600

9b.4 Problemi collegati

Dal momento che la connessione a Internet una delle prime cose che si fa quando ci si avvicina a
qualunque sistema operativo che lo consenta, il caso di ricordare un paio di particolari che non sono
correlati direttamente al protocollo PPP.

9b.4.1 Gli indirizzi locali


Se il proprio elaboratore collegato a una rete locale, si devono utilizzare indirizzi IP che non vadano in
conflitto con quelli della rete esterna, cio Internet.
Per questo, di solito si usano gli indirizzi della classe C riservati appositamente alle reti locali i cui
elaboratori non devono essere accessibili da parte della rete Internet: da 192.168.0.0 a 192.168.255.255.

9b.4.2 DNS
Dovendo accedere alla rete esterna Internet, un problema importante costituito dalla risoluzione dei
nomi di dominio. Se si utilizza il proprio elaboratore per accedere a Internet, molto probabile che non si
disponga di un servizio di risoluzione dei nomi locale (servente DNS), al massimo si utilizza il file
/etc/hosts con l'elenco degli elaboratori locali. Per non perdere la possibilit di comunicare con la propria
rete locale, pur potendo accedere a Internet, occorre configurare il file /etc/host.conf () in modo da
utilizzare prima il file /etc/hosts e quindi i serventi DNS.
order hosts,bind
multi on
Successivamente occorre preparare il file /etc/resolv.conf () in modo da utilizzare i servente DNS indicati
dal proprio ISP. Segue un esempio con indirizzi immaginari.
nameserver 195.345.145.15
nameserver 194.145.123.77
Il protocollo PPP pu fornire a un cliente l'indicazione degli indirizzi IP dei serventi DNS da utilizzare, ma
questo riguarda in pratica solo i clienti MS-Windows.

9b.4.3 Il sistema di posta elettronica

Quando si utilizza un ISP per accedere a Internet, di solito si ottiene un indirizzo di posta elettronica
riferito a un elaboratore dell'ISP, e per acquisire la posta da quell'elaboratore si pu utilizzare Popclient ()
o Fetchmail () per trasferirla nel proprio sistema di posta locale.
Per l'invio della posta elettronica, se si alle prime armi, meglio utilizzare un programma MUA in grado
di utilizzare un servente SMTP differente da quello locale, e precisamente in grado di sfruttare quello
offerto del fornitore di accesso a Internet. Ci d il vantaggio di lasciare a quel servente il compito di
inoltrare i messaggi e di ritentare l'invio nel caso le destinazioni non siano immediatamente raggiungibili.
Se invece si pretende di gestire la posta attraverso il servente locale, magari perch si vuole servire la
propria rete locale, allora le cose si complicano e occorre conoscere bene la configurazione del proprio
servente SMTP.

9b.5 Riferimenti
20. Robert Hart, PPP HOWTO

21.

Egil Kvaleberg, ISP-Hookup HOWTO

La scelta della collocazione e del nome di questo script personale. In questo caso stato messo nella
directory /etc/ppp/, anche se ci potrebbe essere discutibile. Dal momento che contiene informazioni
riservate, e precisamente ci che necessario per accedere presso il servente remoto a cui ci si
connette, pu darsi che sia meglio nasconderlo in qualche modo.