venerdì 24 dicembre 2010

Tabella di instradamento

route è il comando in grado di manipolare la tabella di instradamento del kernel (routing table). Cos'è una tabella di instradamento? Niente di complicato, si tratta di una tabella con indirizzi ip usata dall'interfaccia di rete per stabilire l'instradamento dei pacchetti.


Se usato senza opzioni, il comando route stampa sullo standard output la tabella di instradamento in uso. La colonna Destination indica un gruppo di indirizzi ip, quelli cioè che appartengono all'intervallo individuato dall'and logico con la maschera di rete, descritta nella colonna Genmask. La colonna Gateway indica all'interfaccia di rete dove instradare i pacchetti.
Vediamo con un esempio come viene usata la tabella di instradamento: supponiamo che una nostra applicazione generi un pacchetto la cui destinazione sia l'host all'indirizzo ip 93.238.238.124. La prima riga della tabella di instradamento dice che i pacchetti appartenenti all'intervallo 93.238.238.1-93.238.238.255 (ottenuto mediante and logico fra l'indirizzo Destination della tabella di instradamento, 93.238.238.1, e la maschera di rete Genmask, 255.255.255.0, il cui risultato è un qualunque indirizzo ip del tipo 93.238.238.*) non vanno instradati verso nessun gateway. In tal caso i pacchetti dovranno essere instradati all'interno della rete locale!
Supponiamo adesso che una nostra applicazione generi un pacchetto la cui destinazione sia l'host all'indirizzo ip 94.238.238.124. Questa volta il pacchetto non sembra rientrare nell'instradamento (locale) previsto dalla prima riga della tabella di instradamento. Analizziamo pertanto la seconda riga: qui nella colonna Destination non leggiamo nessun indirizzo ip da mettere in and logico con la maschera di rete Genmask, che in tal caso è 0.0.0.0. Il motivo è molto semplice, qualsiasi indirizzo ip messo in and logico con la maschera di rete 0.0.0.0 genera un indirizzo ip del tipo *.*.*.*, in altre parole qualsiasi indirizzo ip! Pertanto se il pacchetto da instradare non rientra nella prima regola (quella locale analizzata in precedenza) occorre instradare lo stesso pacchetto all'indirizzo presente nella colonna Gateway, il router della mia rete con ip 93.238.238.1.
La tabella di instradamento stampata da route, come potete vedere nell'immagine sopra, ci fornisce altre informazioni. Nella colonna Flags ci viene indicato lo stato e/o la tipologia della rotta. Ogni lettera, dunque, ha un suo significato: U, significa che quella rotta è attiva; H, significa che la rotta è verso un host; G, indica che la rotta usa il gateway; R, indica che la rotta per l'instradamento dinamico è stata ripristinata; D, indica che la rotta è stata aggiunta dinamicamente da qualche daemon; M, indica che la rotta è stata modificata dinamicamente da qualche daemon; A, indica che la rotta è stata aggiunta da addrconf; C, indica che la rotta è una voce della cache; !, indica che l'instradamento è respinto. La colonna Metric indica il numero di salti per i pacchetti, mentre la colonna Iface indica l'interfaccia di rete che usa quell'instradamento (le altre colonne non vengono utilizzate dal kernel).
Le opzioni add e del consentono (all'utente root), rispettivamente, di aggiungere e cancellare le rotte per l'instradamento dei pacchetti.
Quando aggiungiamo una nuova rotta dobbiamo fornire tutti i parametri necessari a popolare la riga della tabella di instradamento (se alcuni valori non saranno presenti il comando userà dei valori di default). Vi elenco le opzioni più comuni da usare con add:
  • netmask indirizzo: specifica la maschera di rete;
  • gw indirizzo: specifica l'indirizzo del gateway;
  • metric n: specifica il numero di salti (se conoscete questo valore inseritelo, potrebbe essere usato da qualche daemon che applica un algoritmo di instradamento ottimale);
  • dev nome_dispositivo: specifica il dispositivo che userà la rotta;
  • -net indirizzo: indica che l'obiettivo dell'instradamento è una rete;
  • -host indirizzo: indica che l'obiettivo dell'instradamento è un host;
Ad esempio, il comando sudo route add -host 93.238.238.124 netmask 255.255.255.0 dev wlan0 aggiunge l'instradamento locale, per l'interfaccia di rete wlan0, per tutti i pacchetti nell'intervallo di indirizzi 93.238.238.0-93.238.238.255 verso l'host con indirizzo ip 93.238.238.124. Per cancellare una rotta di instradamento fate seguire all'opzione del l'indirizzo Destination della riga da cancellare. Ad esempio, il comando sudo route del 93.238.238.124 cancella la rotta aggiunta in precedenza.

Nessun commento:

Posta un commento