[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 251.   IPv4: instradamento locale

L'instradamento definisce la strada che devono prendere i pacchetti di livello 3 (rete), secondo il modello ISO-OSI, a partire dal nodo a cui si fa riferimento. In questo capitolo, viene preso in considerazione l'instradamento locale, inteso come quello che non si serve di router.

251.1   Rete locale

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. Ma in una rete IPv4 non è così: per qualunque connessione possibile è necessario stabilire il percorso, anche quando si tratta di connettersi con l'interfaccia locale 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.

esempio di configurazione delle interfacce di rete

Riprendendo l'esempio già mostrato a proposito della configurazione delle interfacce di rete, si potrebbero definire le tabelle di instradamento seguenti, che si riferiscono rispettivamente al nodo A e al nodo B dello schema:

Destinazione Maschera di rete Router Interfaccia di rete
192.168.1.0 255.255.255.0 -- eth0
192.168.7.1 255.255.255.255 -- plip1
192.168.7.2 255.255.255.255 -- plip1
127.0.0.0 255.0.0.0 -- lo
Destinazione Maschera di rete Router Interfaccia di rete
192.168.7.1 255.255.255.255 -- plip1
192.168.7.2 255.255.255.255 -- plip1
127.0.0.0 255.0.0.0 -- lo

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, potrebbe essere lo stesso programma di configurazione dell'interfaccia che si occupa di definirne l'instradamento nella rete locale; a ogni modo, rimane la necessità di definirlo.

Per la spiegazione di questi instradamenti vengono mostrati nelle sezioni seguenti degli esempi ottenuti con un sistema GNU/Linux, attraverso il programma Route, (1) a cui corrisponde l'eseguibile route. Tuttavia, il concetto rimane tale per gli altri sistemi operativi, anche se la modalità per definire gli instradamenti può essere differente.

251.1.1   Loopback

La definizione dell'instradamento per gli indirizzi locali di loopback è obbligatoria:

Destinazione Maschera di rete Router Interfaccia di rete
127.0.0.0 255.0.0.0 -- lo

Con un sistema GNU/Linux dovrebbe essere lo stesso programma Ifconfig che prepara l'instradamento corretto all'atto dell'impostazione dell'interfaccia lo; tuttavia, usando Route si potrebbe intervenire nel modo seguente:

route add -net 127.0.0.0 netmask 255.0.0.0 dev lo[Invio](2)

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       0.0.0.0         255.0.0.0       U     0      0        2 lo

Di solito la rete 127.0.0.0 serve a raggiungere solo l'indirizzo 127.0.0.1, quindi, spesso si preferisce inserire solo questo nella tabella di instradamento. In pratica si utilizza il comando:

route add -host 127.0.0.1 dev lo[Invio]

In questo caso non si indica la maschera di rete perché deve essere necessariamente 255.255.255.255, essendo riferita a un nodo singolo.

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

251.1.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.(3) Quando si stabilisce un instradamento che utilizza questo tipo di interfaccia, è preferibile l'indicazione dell'intera rete logica a cui appartiene.(4)

Seguendo l'esempio visto in precedenza nella sezione che riguarda la configurazione di una scheda Ethernet, dal momento che questa si trova a operare nella rete 192.168.1.0, l'instradamento corretto corrisponde allo schema seguente:

Destinazione Maschera di rete Router Interfaccia di rete
192.168.1.0 255.255.255.0 -- eth0

Con un sistema GNU/Linux, se Ifconfig non ha già provveduto da solo, si può usare Route nel modo seguente:

route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0[Invio]

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     0.0.0.0         255.255.255.0   U     0      0        1 eth0

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 dev eth0[Invio]

route add -host 192.168.1.2 dev eth0[Invio]

route add -host 192.168.1.3 dev eth0[Invio]

route add -host 192.168.1.4 dev eth0[Invio]

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     0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.1.2     0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.1.3     0.0.0.0         255.255.255.255 UH    0      0        0 eth0
192.168.1.4     0.0.0.0         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

251.1.3   Connessioni punto-punto

Con le connessioni di tipo punto-punto, dal momento che riguardano esclusivamente due elaboratori, sono tali per cui un instradamento verso una rete non sia sensato, benché possibile. In generale, è necessario aggiungere semplicemente un instradamento verso l'indirizzo all'altro capo, ma è utile aggiungere comunque l'instradamento anche all'indirizzo locale.

Seguendo l'esempio già visto in precedenza, vengono riepilogati gli instradamenti di due nodi che utilizzano l'interfaccia plip1 per la connessione, che in questo caso sono identici:

Destinazione Maschera di rete Router Interfaccia di rete
192.168.7.1 255.255.255.255 -- plip1
192.168.7.2 255.255.255.255 -- plip1

Con un sistema GNU/Linux, supponendo di usare una connessione PLIP, attraverso le porte parallele, se Ifconfig non ha già provveduto da solo, si può usare Route nel modo seguente (in entrambi i nodi, nello stesso modo, dato che il nome dell'interfaccia è lo stesso):

route add -host 192.168.7.1 dev plip1[Invio]

route add -host 192.168.7.2 dev plip1[Invio]

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
192.168.7.1     0.0.0.0         255.255.255.255 UH    0      0        1 plip1
192.168.7.2     0.0.0.0         255.255.255.255 UH    0      0        1 plip1

Per verificare gli instradamenti, si può provare come al solito con ping:

ping 192.168.7.1[Invio]

Oppure:

ping 192.168.7.2[Invio]

251.1.4   L'ordine delle voci nella tabella degli instradamenti

L'ordine in cui appaiono le voci nella tabella degli instradamenti è significativo, ma solitamente viene determinato in modo automatico dal sistema operativo. Si osservi lo schema seguente che rappresenta una variante dell'esempio già mostrato in precedenza:

esempio di configurazione delle interfacce di rete

Per quanto riguarda il nodo A, come si può intuire, l'instradamento della connessione punto-punto potrebbe entrare in conflitto con quello della rete locale 192.168.1.0. In pratica, se si definiscono correttamente tutti gli instradamenti, le voci della connessione punto-punto appaiono prima nell'elenco, pertanto, l'instradamento verso un indirizzo diverso da quello della connessione punto-punto, verrebbe preso in considerazione in un momento successivo:

Destinazione Maschera di rete Router Interfaccia di rete
127.0.0.0 255.0.0.0 -- lo
192.168.1.2 255.255.255.255 -- plip1
192.168.1.3 255.255.255.255 -- plip1
192.168.1.0 255.255.255.0 -- eth0

Eventualmente, il problema di una configurazione del genere si pone se si vuole consentire agli elaboratori della rete 192.168.1.0 di raggiungere in qualche modo il nodo B. In tal caso, gli elaboratori in questione dovrebbero disporre di una voce specifica per l'instradamento, dal momento che il nodo B si può raggiungere solo attraverso il nodo A (che dovrebbe fungere da router).

251.2   Definizione degli instradamenti nelle reti locali e verifiche con un sistema GNU/Linux

In un sistema GNU/Linux, gli instradamenti, cioè la compilazione della tabella di instradamento, vengono stabiliti attraverso Route, (5) a cui corrisponde in pratica l'eseguibile route.

Di solito, già Ifconfig definisce automaticamente gli instradamenti elementari, riferiti alle reti cui sono connesse le interfacce di rete. Pertanto, prima di definire un instradamento, conviene verificare la situazione già esistente dopo la configurazione delle interfacce.

251.2.1   Utilizzo di «route»

La sintassi di route può articolarsi in diversi modi a seconda del tipo di azione da compiere.

route [opzioni]

In particolare, conviene distinguere fra tre situazioni diverse, come descritto nel riepilogo seguente:

Modello Descrizione
route [-v] [-n] [-e | -ee]
l'analisi della tabella di instradamento;
route [-v] add [-net|-host] destinazione \
  \[netmask maschera_di_rete] [gw router] \
  \[altre_opzioni] [[dev] interfaccia]
l'aggiunta di un nuovo instradamento;
route [-v] del [-net|-host] destinazione \
  \[netmask maschera_di_rete] [gw router] \
  \[altre_opzioni] [[dev] interfaccia]
l'eliminazione di un instradamento preesistente.

In pratica, nel primo caso è possibile visualizzare (attraverso lo standard output) la tabella di instradamento. Generalmente, per questo scopo, l'uso normale è proprio quello di route senza argomenti.

Nel secondo caso, 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, se può essere determinata in modo predefinito.

Nel terzo caso, l'eliminazione di una voce della tabella di instradamento avviene per mezzo dell'opzione del e dell'indicazione della destinazione che prima veniva raggiunta. Anche in questo caso, l'indicazione dell'interfaccia è facoltativa, se può essere determinata in modo predefinito.

Quando si visualizza la tabella degli instradamenti, il programma tenta di risolvere gli indirizzi in nomi. Spesso, questo fatto può essere inopportuno, pertanto è comune l'uso dell'opzione -n con cui si evita tale conversione e non si perde tempo nel tentativo di risolvere indirizzi che non hanno un nome.

Si osservi che, solitamente, la risoluzione di un indirizzo relativo a una rete, non ha un nome offerto dal servizio DNS, pertanto occorre predisporre il file /etc/networks, per consentire tale trasformazione.

Tabella 251.20. Alcune opzioni.

Opzione Descrizione
-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 ha difficoltà ad accedere a un servizio di risoluzione dei nomi, o comunque quando si vuole avere la situazione completamente sotto controllo.
-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; in questo 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.
reject
Permette di impedire l'utilizzo di un instradamento.
[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.

251.2.2   Utilizzo di Route

Quando si interroga la tabella degli instradamenti, si ottiene una struttura composta da diverse colonne, in cui, quelle principali sono descritte nella tabella 251.21.

Tabella 251.21. Intestazioni della tabella di instradamento.

Nome Descrizione
Destination La rete o il nodo di destinazione.
Gateway Il router. Se appare un asterisco (*) o l'indirizzo 0.0.0.0 significa che non si tratta di un instradamento attraverso un router.
Genmask In linea di massima corrisponde alla maschera di rete; in particolare, se è un instradamento verso un nodo appare 255.255.255.255, se invece è l'instradamento predefinito appare 0.0.0.0 (default).
Flags Indica diversi tipi di informazioni utilizzando lettere o simboli.
Metric La distanza o il costo della strada. Rappresenta la distanza (espressa solitamente in hop o salti) per raggiungere la destinazione.
Ref Il numero di riferimenti all'instradamento. Questa informazione non viene utilizzata dal kernel Linux e, di conseguenza, l'informazione appare sempre azzerata.
Use Conteggio del numero di volte in cui la voce è stata visionata.
Iface Il nome dell'interfaccia da cui partono i pacchetti IP.

I tipi di informazioni che possono essere rappresentati nella colonna Flags sono elencati nella tabella 251.22.

Tabella 251.22. Significato delle lettere e dei simboli utilizzati nella colonna Flags della tabella di instradamento.

Simbolo Descrizione
U
L'instradamento è attivo.
H
L'indirizzo indicato fa riferimento a un nodo.
G
Viene utilizzato un router.
R
Instradamento reintegrato (instradamento dinamico).
D
Instradamento installato dinamicamente da un demone o attraverso ridirezione.
M
Instradamento modificato da un demone o attraverso ridirezione.
!
Instradamento impedito (opzione reject).

Seguono alcuni esempi di utilizzo.

251.3   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 sono possibili attraverso il programma ping.

Il programma 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 pong

Normalmente si procede controllando prima l'indirizzo della propria interfaccia locale, quindi, via via si tenta di raggiungere indirizzi più lontani.

251.3.1   Utilizzo di «ping»

Il programma ping (6) permette di inviare una richiesta di eco a un indirizzo, utilizzando il protocollo ICMP, verificando di ricevere tale eco in modo corretto. Questo programma 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 virtuale <Control_c> (che di solito coincide proprio con la combinazione reale [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.

ping [opzioni] indirizzo

Tabella 251.24. Alcune opzioni.

Opzione Descrizione
-c quantità
Conclude il 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, tenendo conto che 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).

Segue la descrizione di alcuni esempi.

251.4   ARP

Nel capitolo introduttivo alle reti TCP/IP (246), si accenna al protocollo ARP, con il quale si ottengono le corrispondenze tra indirizzi di livello 2 (collegamento dati) e indirizzi di livello 3 (rete), ovvero IP nel nostro caso. In particolare si fa riferimento a una tabella ARP che viene aggiornata automaticamente da ogni nodo durante il suo funzionamento.

Potrebbe essere interessante ispezionare ed eventualmente modificare il contenuto di questa tabella ARP, cosa che si fa con il programma arp. (7)

Ci sono situazioni in cui il protocollo ARP non può funzionare e in quei casi è possibile predisporre una tabella ARP preconfezionata attraverso la configurazione di un file: /etc/ethers.

251.4.1   Utilizzo di «arp»

Il programma arp permette di ispezionare e di modificare la tabella ARP del sistema.

arp opzioni

Tabella 251.25. Alcune opzioni.

Opzione Descrizione
-n
--numeric
Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodi.
-a [nodo]
--display [nodo]
Mostra le voci corrispondenti a un nodo particolare, oppure tutti gli abbinamenti conosciuti.
-d nodo
--delete nodo
Elimina le voci riferite al nodo indicato.
-s nodo indirizzo_fisico
Crea una voce nella tabella ARP, abbinando l'indirizzo di un nodo a un indirizzo fisico (generalmente si tratta di un indirizzo Ethernet).
-f file
--file file
Indica un file da utilizzare per caricare delle voci nella tabella ARP. Generalmente, quando le interfacce sono di tipo Ethernet, questo file è rappresentato da /etc/ethers.

Segue la descrizione di alcuni esempi.

251.4.2   File «/etc/ethers»

Il file /etc/ethers può essere usato per configurare a priori l'abbinamento tra indirizzi Ethernet (livello 2 del modello ISO-OSI) e indirizzi IP. Questo file può contenere esclusivamente delle righe composte da due elementi: l'indirizzo IP (o il nome) corrispondente a un'interfaccia e a fianco l'indirizzo Ethernet corrispondente. Si osservi l'esempio seguente:

192.168.1.2 00:01:02:03:04:05
192.168.1.3 00:14:02:23:07:1c
192.168.1.4 00:00:03:2d:00:0b

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) net-tools   GNU GPL

2) In caso di difficoltà si può optare per l'instradamento del nodo 127.0.0.1 soltanto, come mostrato nel seguito.

3) Si parla di connessione broadcast.

4) Teoricamente sarebbe possibile indicare un instradamento per ogni elaboratore che si intende raggiungere, ma questo è decisamente poco conveniente dal punto di vista pratico.

5) net-tools   GNU GPL

6) ping   UCB BSD

7) net-tools   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome ipv4_instradamento_locale.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!