20.6 La gestione delle routing table

Quando un sistema deve inviare sulla rete un pacchetto, deve sapere a chi inoltrarlo, ovvero deve individuare l’interfaccia connessa fisicamente allo stesso link di cui fa parte il sistema in questione: il next-hop. Le indicazioni che permettono al sistema di individuare l’appropriato next-hop a cui inviare il pacchetto sono delle “regole” inserite sotto forma di righe all’interno di tabelle, dette appunto routing table. Tali regole prendono il nome di route.

GNU/Linux ha la possibilità di gestire più ruoting table, sulla base delle quali gestisce il routing dei pacchetti. Ogni routing table è identificata da un valore numerico da 1 a 255, che equivale ad un nome elencato nel file /etc/iproute2/rt_tables.

Generalmente le route vengono inserite nella routing table 254 (main) che è quella che viene usata dal kernel per il calcolo degli instradmenti dei pacchetti.

Per default esiste almeno un’altra routing table, la 255 (local), adibita a contenere le route relative agli indirizzi locali e di broadcast. Tale routing table viene gestita automaticamente dal kernel e non c’è bisogno di amministrarla manualmente.

Quando un pacchetto deve essere inoltrato sulla rete, vengono eseguite, nell’ordine indicato, le seguenti operazioni per determinare il next-hop a cui inviarlo:

  1. Vengono considerate soltanto le route il cui prefisso coincide con quello dell’indirizzo di destinazione del pacchetto e di queste vengono prese quelle che hanno il prefisso più lungo.
  2. Vengono considerate le route con lo stesso TOS di quello del pacchetto. Nel caso non esista nessuna riga con lo stesso TOS del pacchetto, viene considerata quella con TOS=0.
  3. Vengono considerate le route con il miglior valore di metrica (preferenza).
  4. In caso vi siano più route che soddisfano i criteri precedenti, viene considerata soltanto la prima di queste.

Quindi, In generale, una route è identificata univocamente dalla terna <prefix, TOS, metric>, eccezion fatta per quelle relative agli instradamenti di default: possono cioè esistere più route relative all’instradamento di default sulle macchine che non eseguono il forwarding di pacchetti.

Esistono vari tipi di route:

[da completare ...]

Le routing table local e main possono essere gestite con il comando route (man page route(8)).

____________________________________________________________________

Comando: route
Path: /sbin/route

SINTASSI  
# route [option] [operation]  
DESCRIZIONE

____________________________________________________________________

La routing table è comunque accessibile attraverso i file /proc/net/route, /proc/net/ipv6_route e /proc/net/rt_cache.

[da completare ...]

L’output di route è una essenzialmente una tabella contenente le varie route. Il significato dei vari campi è riportato di seguito

La gestione della routing table può esseere effettuata anche per mezzo del comando ip.

____________________________________________________________________

Comando: ip
Path: /sbin/ip

SINTASSI  
# ip route {add | a} [type] prefix [argument]
# ip route {change | chg} [type] prefix [argument]
# ip route {replace | repl} [type] prefix [argument]
# ip route {delete | del | d} [type] prefix [argument]  
DESCRIZIONE
Inserisce una nuova riga nella routing table.
Modifica una riga già esistente nella routing table.
Modifica o aggiunge una riga nella routing table.
Elimina una riga dalla routing table.

SINTASSI  
# ip route {flush | f} argument
# ip route {show | sh | list | ls | l} [argument]  
DESCRIZIONE
Elimina le righe presenti nella routing table.
Elenca le righe presenti nella routing table.

________________________________________________________________________

In genere la politica di routing utilizzata per l’instradamento dei pacchetti su Internet è basata soltanto sull’indirizzo di destinazione del pacchetto (ed in teoria anche sul TOS) come indicato dalla RFC 1812. È però possiblile utilizzare altre politiche di routing sulla base di altri campi del pacchetto (indirizzo del mittente, ...).

La gestione delle politiche di routing va sotto il nome di policy routing (da non confondere con routing policy) o cunning routing. Tale gestione è possibile per mezo di un RPBD (Routing Policy DataBase) che seleziona l’instradamento sulla base di un insieme di regole (rule). Ogni regola è sono associata ad un valore che ne determina la priorità. Al momento il RPDB di GNU/Linux permette di basare le regole per il calcolo dell’instradamento sui seguenti campi