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.