Capitolo successivo Capitolo precedente Indice

46. Configurazione e instradamento

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 percorso, devono prendere i pacchetti per raggiungere la destinazione.

Generalmente valgono queste regole:

46.1 Configurazione delle interfaccie di rete

La configurazione di un'interfaccia implica essenzialmente l'attribuzione di un indirizzo IP. Molte altre caratteristiche vengono normalmente ignorate perché i valori predefiniti sono solitamente sufficienti a ottenere un corretto funzionamento.

Di norma, la configurazione di una interfaccia di rete avviene attraverso il programma ifconfig (InterFace CONFIGuration).

# ifconfig

ifconfig [<interfaccia>]

ifconfig [<interfaccia>... [<famiglia-indirizzamento>] [<indirizzo>] <opzioni>]

ifconfig viene utilizzato per attivare e mantenere il sistema delle interfaccie di rete residente nel kernel. Viene utilizzato al momento del boot 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 interfaccie, ifconfig visualizza semplicemente lo stato delle interfaccie specificate, oppure di tutte se non sono state indicate.

Interfaccie

L'interfaccia da configurare viene identificata attraverso il suo nome. Contrariamente a quanto si fa di solito nei sistemi Unix, non si fa riferimento a un file di dispositivo contenuto nella directory /dev/. Alcuni nomi di interfaccia di rete sono elencati nella tabella (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 particolare tipo di protocollo di comunicazione. A seconda del tipo di protocollo che si intende utilizzare cambia il tipo di indirizzi che si attribuiscono alle interfaccie. Se questo non viene specificato, come si fa di solito, si intende fare riferimento al protocollo TCP/IP.

Le sigle utilizzabili sono quelle seguenti.

Indirizzo

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

Opzioni

up | down

L'opzione up attiva l'interfaccia. Quando all'interfaccia viene attribuito un nuovo indirizzo, questa viene implicitamente attivata. 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ò significa che tutti i frame vengono inviati al layer di rete del kernel di sistema, permettendo il monitoraggio della rete.

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 1000-2000 (il valore predefinito è 1500). Per il protocollo SLIP si possono utilizzare valori compresi tra 200 e 4096. È da notare però che l'attuale implementazione non è in grado di gestire la frammentazione IP, di conseguenza, è meglio utilizzare un MTU sufficientemente grande.

pointopoint [<indirizzo-di-destinazione>] | -pointopoint

Abilita o disabilita la modalità Point-to-Point per questa interfaccia. Il termine Point-to-Point identifica una connessione diretta tra due computer soltanto. Se viene indicato l'indirizzo, si specifica l'indirizzo IP dell'altra parte del filo.

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 interfaccie permettono di definire in questo modo il numero di IRQ in questo modo. Nella maggior parte dei casi questo 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 è 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.

L'indirizzo hardware deve essere indicato secondo il suo equivalente ASCII che è poi la forma comunemente usata 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 interfaccie di rete attivate.

46.2 Indirizzi

Un indirizzo IP di una interfaccia vale in quanto inserito in una rete logica, identificata da un proprio indirizzo IP. Per questo motivo, quando si assegna un indirizzo a una interfaccia, occorre anche stabilire la rete a cui questo appartiene. Per questo si utilizza la maschera di rete, per cui 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 aver stabilito l'indirizzo, non determina automaticamente il modo con cui quella particolare interfaccia possa essere raggiunta.

ifconfig consente anche di controllare la configurazione delle interfaccie 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 le interfaccie presenti.

Loopback

Un computer connesso o meno a una rete fisica vera e propria, deve avere una connessione ``virtuale'' a una rete immaginaria interna allo stesso computer. A questa rete virtuale inesistente si accede per mezzo di una interfaccia immaginaria: 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
          ...

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 suo 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
          ...

PLIP

La connessione PLIP, che si ottiene collegando due computer con un apposito cavo attraverso le porte parallele, è di tipo Point-to-Point, cioè si possono collegare solo due punti alla volta. In questo caso si deve aggiungere l'indicazione dell'indirizzo utilizzato all'altro capo della connessione.

Per esempio,

# ifconfig plip1 192.168.7.1 pointopoint 192.168.7.2 netmask 255.255.255.0

assegna l'indirizzo 192.168.7.1 all'interfaccia parallela plip1 locale e stabilisce l'indirizzo 192.168.7.2 per l'altro capo della comunicazione.

<!>   Ovviamente, all'altro capo si fa l'operazione opposta.

Il risultato dell'esempio appena visto dovrebbe generare la configurazione seguente.

$ ifconfig plip1 [Invio]

plip1     Link encap:10Mbps Ethernet  HWaddr FC:FC:C0:A8:64:84
          inet addr:192.168.7.1  Bcast:192.168.7.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          ...

<!>   La connessione PLIP non ha niente a che fare con le interfaccie Ethernet, tuttavia il programma ifconfig fa apparire le interfaccie PLIP come se fossero Ethernet, con la differenza di una connessione da punto a punto.

46.3 Instradamento

In una rete elementare, in cui ogni computer 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 IP, non è così: per qualunque connessione possibile, è necessario stabilire il percorso; anche quando si tratta di connettersi con l'interfaccia immaginaria loopback.

Ogni computer che utilizza la rete, ha una sola necessità: quella di sapere quali percorsi di partenza sono possibili, in funzione degli indirizzi utilizzati. Gli eventuali percorsi successivi, vengono definiti da altri computer nella rete. Si tratta di costruire la cosiddetta ``tabella di instradamento'', attraverso la quale, ogni computer 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.

# route

route [<opzioni>]

route permette di gestire la tabella di instradamento del kernel. In particolare, permette di definire gli instradamenti statici a computer host specifici, o a reti, attraverso una interfaccia (precedentemente attivata 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. In questo caso, 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 computer host. Questo tipo di approccio potrebbe essere utile specialmente quando si hanno difficoltà ad accedere a un name server, 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 computer host. 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 singolo host, 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 computer host per il quale si sta indicando l'instradamento, passino per il router specificato. Per questo, occorre che l'instradamento verso il computer che funge da router sia già stato definito precedentemente e in modo statico.

Normalmente, l'indirizzo utilizzato come router riguarda una interfaccia collocata in un altro computer. Eventualmente, per mantenere la compatibilità con Unix BSD, è possibile specificare una 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 daemon 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-12000. Se viene omesso, il valore predefinito è quello di 300ms.

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 daemon 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.

Analisi del risultato

La tabella di instradamento che si ottiene è strutturata in diverse colonne il cui significato viene descritto nella tabella (seguente).


Nome Descrizione
Destination La rete o il computer host di destinazione.
Gateway Il router.
Genmask In linea di massima corrisponde alla maschera di rete.
Flags Indica diversi tipi di informazioni utilizzando lettere o simboli.
Metric La distanza o il ``costo'' della strada.
Ref Il numero di riferimenti all'instradamento.
Use Conteggio del numero di volte in cui la voce è stata ``visionata''.
Iface Il nome dell'interfaccia da cui partono i pacchetti IP.
MSS Maximum Segment Size per le connessioni TCP.
Window Dimensione della finestra per le connessioni TCP.
irtt Initial Round Trip Time.
Intestazioni della tabella di instradamento.

In particolare, meritano attenzione le colonne seguenti:

I tipi di informazioni che possono essere rappresentati nella colonna Flags sono elencati nella tabella (seguente).


Simbolo Descrizione
U L'instradamento è attivo.
H L'indirizzo indicato fa riferimento a un host.
G Viene utilizzato un router.
R Strada reintegrata per un instradamento dinamico.
D Strada installata dinamicamente da un daemon o attraverso ridirezione.
M Strada modificata da un daemon o attraverso ridirezione.
! Strada impedita (reject).
Significato delle lettere e dei simboli utilizzati nella colonna Flags della tabella di instradamento.

Esempi

# route add -host 127.0.0.1

Attiva l'instradamento verso l'interfaccia di 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.

46.4 Verifica di un instradamento

La definizione degli instradamenti, serve per stabilire un collegamento con le interfaccie di altri computer. Quando anche le tabelle di instradamento degli altri computer sono corrette, si può verificare che le comunicazioni siano possibili attraverso il programma ping.

ping permette di inviare una richiesta di ``eco'' a un determinato indirizzo, ovvero, a una determinata interfaccia. Si riesce a ottenere l'eco solo se l'instradamento verso quell'indirizzo è funzionante e se, nello stesso modo, è attivo quello di ritorno gestito a partire dall'indirizzo di destinazione.

ping permette l'utilizzo di molte opzioni, ma normalmente 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.

46.5 Instradamento attraverso una interfaccia

Quando si configura una 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 automaticamente passare per quell'interfaccia.

In effetti, le cose sono, o dovrebbero, essere così. Ma il percorso deve essere ugualmente indicato in modo esplicito.

In realtà, quando si utilizza route, non è necessario fare riferimento direttamente a delle interfaccie, 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.

Loopback

La definizione dell'instradamento per gli indirizzi 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 [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 quest'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

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.

Si parla di connessione broadcast.

Quando si stabilisce un instradamento che utilizza questo tipo di interfaccia, è preferibile l'indicazione dell'intera rete logica a cui appartiene.

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

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 si ottiene viene descritta di seguito.

$ route [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 della interfaccia di loopback: in base alla maschera di rete attribuita (esplicitamente o in modo predefinito) alla interfaccia eth0, route determina da solo che tutto il traffico per la rete 192.168.1.0 deve passare per quest'interfaccia, e di conseguenza aggiorna la tabella di instradamento.

Volendo è possibile indicare un instradamento specifico per ogni possibile destinazione. Nell'esempio seguente si aggiunge l'instradamento per alcuni computer: 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 computer, è raggiungibile solo se è stato specificato un instradamento. Quando si indicava un instradamento della rete, questa veniva automaticamente inclusa 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 fatto prima controllando l'interfaccia locale, e quindi tentando di raggiungere l'indirizzo di un altro computer sulla rete. Naturalmente, occorre che quel computer 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

PLIP

La connessione PLIP, essendo di tipo Point-to-Point ammette la presenza di due soli computer. In questo senso, l'indicazione di un instradamento verso una rete non è sensato. È necessario semplicemente aggiungere un instradamento verso l'indirizzo all'altro capo.

Seguendo l'esempio già visto, in cui l'indirizzo dell'interfaccia PLIP locale era 192.168.1.1 e quello dell'altro capo era 192.168.1.2, si può utilizzare il comando seguente.

# route add -host 192.168.1.2

La tabella di instradamento che si ottiene viene descritta di seguito.

$ route [Invio]

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.2     *               255.255.255.255 UH    0      0        1 plip1

L'inserimento dell'indirizzo della interfaccia PLIP locale nella tabella di instradamento potrebbe non riuscire. Ciò tuttavia non è necessario per permettere la connessione. Per verificare basta provare come al solito con ping.

$ ping 192.168.1.2

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ù interfaccie 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 computer 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 del computer portatile all'altro capo.

Le interfaccie 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 interfaccie.

# route add -net 192.168.1.0 dev eth0

# route add -net 192.168.1.3 dev plip1

il risultato che si ottiene è il seguente.

# route

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

46.6 Instradamento attraverso un router

Quando si ha la necessità di raggiungere una destinazione che non si trova a essere connessa con la rete fisica a cui si accede, c'è bisogno di un ``intermediario'', ovvero un computer connesso alla stessa rete fisica a cui accede il computer locale, che sia in grado di inoltrare i pacchetti alle destinazioni richieste. Questo computer è il router, anche se nel linguaggio corrente si usa prevalentemente il termine gateway che però non è esatto.


Il router consente di raggiungere destinazioni al di fuori della rete fisica su cui si è connessi.

Per poter definire un instradamento attraverso un router bisogna che prima, il computer che svolge questa funzione, sia raggiungibile attraverso una rete locale, e per mezzo di instradamenti già definiti.

La verifica di un instradamento che fa uso di un router è più delicata: si comincia con un ping verso la propria interfaccia locale, quindi verso il router, e quindi si tenta di raggiungere qualcosa che si trova oltre il router.

Router per accedere ad altre reti

Una rete locale potrebbe essere articolata in sottoreti in modo da evitare di sovraffollare di traffico una unica rete. Per fare in modo che le sottoreti possano comunicare tra loro in caso di necessità, si devono utilizzare i router che funzionano come ponti tra una sottorete ed un'altra.

In questo modo, quando si indica un instradamento che fa riferimento a un router, lo si definisce per una particolare rete logica, quella a cui il router è in grado di accedere.

Nell'esempio seguente, il router 192.168.1.254 viene utilizzato per accedere alla rete 192.168.7.0.

È importante considerare il fatto che il router viene visto con questo indirizzo da questa parte, ovvero, sulla rete locale 192.168.1.0. L'interfaccia del router connessa con l'altra rete locale avrà un indirizzo diverso, confacente con l'indirizzo di quella rete.

# route add -net 192.168.7.0 gw 192.168.1.254

L'instradamento verso la rete locale 192.168.1.0 era già stato definito, in modo da poter raggiungere il router.

$ route [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
192.168.7.0     192.168.1.254   255.255.255.0   UG    0      0        0 eth0

Se il router è in grado di raggiungere anche altre reti, non si fa altro che inserire gli instradamenti relativi nel modo appena visto.

# route add -net 192.168.77.0 gw 192.168.1.254 [Invio]

$ route [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
192.168.7.0     192.168.1.254   255.255.255.0   UG    0      0        0 eth0
192.168.77.0    192.168.1.254   255.255.255.0   UG    0      0        0 eth0

46.7 Instradamento predefinito

Quando si vuole fare riferimento a tutti gli indirizzi possibili, si utilizza il numero IP 0.0.0.0, corrispondente al nome simbolico default. Per indicare un instradamento che permette di raggiungere tutti gli indirizzi che non sono stati specificati diversamente, si utilizza questo indirizzo simbolico.

Da un punto di vista puramente logico, l'indirizzo 0.0.0.0 corrisponde effettivamente alla rete che comprende tutti gli indirizzi possibili, quindi un instradamento che fa riferimento alla rete 0.0.0.0, è quello per tutti gli indirizzi.

Teoricamente, è possibile utilizzare l'instradamento predefinita per accedere alla rete locale, ma questo è comunque un approccio sconsigliabile. Nell'esempio seguente si utilizza il nome simbolico default per indicare l'indirizzo di rete 0.0.0.0 e l'interfaccia viene definita esplicitamente.

# route add -net default dev eth0

Anche se la maschera di rete attribuita a quell'interfaccia era quella normale della classe ``C'', e quindi 255.255.255.0, questa dichiarazione permette di inoltrare attraverso di essa qualsiasi tipo di indirizzo. La presenza di questa maschera di rete costringe invece a indicare esplicitamente l'interfaccia di rete, altrimenti il kernel non sa a chi assegnare l'instradamento.

$ route [Invio]

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        1 eth0

L'approccio più comune consiste invece nel definire l'instradamento default come passante per un router: potrebbe trattarsi di un router che permette di accedere a tutte le altre sottoreti esistenti.

# route add -net default gw 192.168.1.254

L'instradamento verso la rete locale 192.168.1.0 era già stato definito, in modo da poter raggiungere il router.

$ route [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
default         192.168.1.254   0.0.0.0         UG    0      0        0 eth0

46.8 Router

Un computer che debba fungere da router richiede delle caratteristiche che ormai dovrebbero essere già state comprese intuitivamente:

Router unico per tutte le reti

La situazione più comune in una piccola rete è quella in cui tutte le reti sono connesse ad un unico router. Negli esempi che seguono si fa riferimento alla situazione seguente.


Schema dell'esempio di un router connesso su due reti e a un portatile attraverso un cavo PLIP.

All'interno del router si dovranno configurare le interfaccie di rete nel modo seguente.

# ifconfig eth0 192.168.1.254 netmask 255.255.255.0

# ifconfig eth1 192.168.2.254 netmask 255.255.255.0

# ifconfig plip1 192.168.3.254 pointopoint 192.168.3.1

Successivamente si devono definire gli instradamenti.

# route add -net 192.168.1.0 netmask 255.255.255.0

# route add -net 192.168.2.0 netmask 255.255.255.0

# route add -host 192.168.3.1

Dal punto di vista del router è tutto finito. Gli altri computer dovranno definire degli instradamenti opportuni in modo da utilizzare il router quando necessario. In particolare, i computer connessi alla rete ``A'' (192.168.1.0), per poter accedere agli altri computer della propria rete locale e delle altre due raggiungibili tramite il router, dovranno inserire gli instradamenti seguenti.

# route add -net 192.168.1.0 netmask 255.255.255.0

# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254

# route add -host 192.168.3.1 gw 192.168.1.254

Dal momento però che non si può accedere ad alcun altra rete, si può utilizzare la rete default. Sempre dal punto di vista dei computer della rete ``A'', si possono definire gli instradamenti nel modo seguente.

# route add -net 192.168.1.0 netmask 255.255.255.0

# route add -net default gw 192.168.1.254

Il caso del computer portatile connesso attraverso la porta parallela con un cavo PLIP, è un po' particolare: è evidente che tutto il traffico debba essere filtrato dal router, a parte quello diretto proprio al router stesso. Dal punto di vista del portatile si devono definire gli instradamenti seguenti.

# route add -host 192.168.3.254

# route add -net default gw 192.168.3.254

Router verso un altro router

Quando la rete diventa complicata, ci può essere la necessità di utilizzare più router per collegare insieme le diverse sottoreti. In tal caso, evidentemente, la tabella di instradamento dei router si troverà a contenere instradamenti che a loro volta utilizzano altri router.

Negli esempi che seguono si fa riferimento alla situazione seguente.


Schema dell'esempio di due router connessi tra loro da una ``dorsale''.

Il router ``A'' deve poter raggiungere tutte e tre le reti: sulla rete ``A'' e ``G'' è connesso direttamente, mentre per la rete ``B'' deve fare affidamento sul router ``B''.

# route add -net 192.168.1.0 netmask 255.255.255.0

# route add -net 192.168.254.0 netmask 255.255.255.0

# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.254.2

Il router ``B'' deve agire in modo analogo.

# route add -net 192.168.2.0 netmask 255.255.255.0

# route add -net 192.168.254.0 netmask 255.255.255.0

# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.254.1

Individuazione delle schede di rete

Quando di predispone un router si ha la necessità di utilizzare più schede di rete contemporaneamente. A parte il problema legato alla configurazione hardware delle schede, si pone poi il problema del riconoscimento di queste da parte del kernel durante l'avvio del sistema. In effetti, il kernel è normalmente in grado di riconoscere automaticamente solo una scheda di rete. Oltre a questo, anche se fosse in grado di riconoscerle tutte in modo automatico, cosa garantirebbe che i nomi di interfaccia siano quelli previsti?

In pratica, quando si utilizzano più schede Ethernet si deve utilizzare una opportuna istruzione da inviare al kernel all'avvio. Questo problema è già stato visto nel capitolo dedicato all'hardware di rete (capitolo `Hardware di rete') e in particolare, nel caso delle schede Ethernet NE2000 ( `NE2000').

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice