La tabella di routing

Spread the love

Se siete arrivati direttamente qui fore è più conveniente per voi che leggiate le puntate precedenti, a partire dalla Prima puntata degli Appunti di Reti.

Tutti i dispositivi di rete che usano il protocollo TCP/IP hanno una tabella di indirizzamento o, come si dice comunemente, di routing. Quindi la tabella di routing è qualcosa che ha a che fare con l’interfaccia di rete. Ogni interfaccia di rete (per esempio possiamo avere un’interfaccia ethernet, un’interfaccia Wireless e una interfaccia virtuale, attraverso alla quale, per esempio, ci colleghiamo ad una VPN). TUTTI i dispositivi di rete usano la propria tabella di routing per determinare dove devono inviare i pacchetti. Senza tabella di routing il tuo PC o il tuo smartphone non sarebbe in grado di comunicare con i dispositivi che si trovano sulla stessa rete. Questa che segue è la tabella di routing del mio pc; il comando Linux per ottenerla è

marcob@jsbach[14:27:47]:~$ route -n
 Tabella di routing IP del kernel
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         10.1.23.254     0.0.0.0         UG    100    0        0 enp1s0
 10.1.23.0       0.0.0.0         255.255.255.0   U     100    0        0 enp1s0
 169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 virbr0
 192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

Le informazioni fondamentali che possiamo leggere sono le seguenti:

Le prime due righe riguardano l’interfaccia ethernet (fisica) a bordo del mio pc; le ultime due invece un’interfaccia virtuale con la quale sono connesso ad una VPN di un cliente.

Occorre leggere gli indirizzi associandoli alla netmask. La combinazione 0.0.0.0 + 0.0.0.0 significa TUTTI GLI INDIRIZZI IP e in corrispondenza a questa c’è il gateway 10.1.23.254. Ciò vuol dire che quale che sia l’indirizzo a cui dobbiamo spedire il pacchetto (ad esempio www.google.com) il router da contattare è in ogni caso il gateway 10.1.23.254. Il gateway è un router particolare con il quale la mia sottorete 10.1.23.0 si connette ad una sottorete più ampia, porebbe anche essere Internet (ma non lo è direttamente in questo caso). La metrica associata a questa scheda di rete è 100, ma in questo caso è irrilevante, sono obbligato a passare per il gateway. Il mio indirizzo IP (quello della mia scheda di rete ethernet) lo leggo con il comando ifconfig:

marcob@jsbach[14:31:47]:~$ ifconfig 
 enp1s0: flags=4163  mtu 1500
         inet 10.1.23.228  netmask 255.255.255.0  broadcast 10.1.23.255
         inet6 fe80::f152:defa:9f22:1355  prefixlen 64  scopeid 0x20

         ether dc:4a:3e:db:c2:e9  txqueuelen 1000  (Ethernet)
         RX packets 235336  bytes 224613534 (224.6 MB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 134235  bytes 25449628 (25.4 MB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 lo: flags=73  mtu 65536
         inet 127.0.0.1  netmask 255.0.0.0
         inet6 ::1  prefixlen 128  scopeid 0x10
         loop  txqueuelen 1000  (Loopback locale)
         RX packets 16184  bytes 1488762 (1.4 MB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 16184  bytes 1488762 (1.4 MB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 virbr0: flags=4099  mtu 1500
         inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
         ether 52:54:00:21:b0:39  txqueuelen 1000  (Ethernet)
         RX packets 0  bytes 0 (0.0 B)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 0  bytes 0 (0.0 B)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Qui ho tre interfacce: ethernet (enp1s0), loopback (lo) e la VPN (vribr0); le infomazioni più importanti che ricavo da questo comando sono: l’indirizzo IP (10.1.23.228) e la subnet mask (255.255.255.0).

Per il funzionamento delle maschere di rete c’è una sezione apposita.

Torniamo alla tabella. La seconda riga (sempre dell’interfaccia ethernet) ha la riga

10.1.23.0       0.0.0.0         255.255.255.0   U     100    0        0 enp1s0 

Questa riga ci dice che per tutti gli indirizzi della mia sottorete non ho router, cioè il sistema operativo spedisce il pacchetto direttamente al dispositivo, formando semplicemente nel Destination IP il numero del dispositivo locale (potrebbe essere un altro PC, il DNS -es. 10.1.23.101-, un NAS o una stampante -es. 10.1.23.45- ). Se non ci fosse questa riga dovrei invocare sempre il gateway che però è lì solo per smistare i pacchetti su un’altra sottorete.

Ci sono poi in questo caso gli indirizzi per connettersi alla VPN, si noti come per contattare la sottorete 196.254.*.* non venga utilizzato il gateway a questo traffico sia considerato come locale, e lo stesso per la sottorete 192.168.122.*

i risultati del comando route -n si possono ottenere anche con netstat -rn e adesso vediamo in dettaglio le colonne della tabella:

  • Destination: la sottorete o l’host di destinazione;
  • Gateway: il router da usare per raggiungere la destinazione;
  • Genmask: net mask (vedi sezione dedicata);
  • Flags: descrive certune caratterstiche della rete. Possibili valori sono U (la rotta è stabilita e operativa), H (la rotta punta ad un host – in generale le rotte portano non a host ma a subnet), G (la rotta punta ad un gateway)
  • Metric: l’indice di convenienza di una rotta;
  • Ref: quante volte la rotta è stata usata;
  • Use: quanti pacchetti sono stati spediti su quella rotta;
  • Iface: l’identificativo dell’interfaccia