Il routing è il modo in cui i computer comunicano su una rete locale o su Internet. Per comunicare su una rete, i computer devono sapere quale gateway inviare il traffico. Un gateway potrebbe essere un router nella tua rete.
Il comando route viene utilizzato in Linux per mostrare e modificare la tabella di routing IP.
In questo tutorial spiegherò come utilizzare il comando route per aggiungere percorsi statici tramite gateway per inviare traffico.
1) Mostra la tabella di instradamento
Prima di modificare la tabella di routing, è bene vedere la tabella di default con le route esistenti sul tuo kernel Linux.
Usa il comando route con -n
opzione per visualizzare la tabella di routing IP del kernel corrente. Questo comando aiuta a identificare le reti connesse localmente con il relativo percorso.
Il comando seguente mostra la tabella di instradamento:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Puoi anche usare netstat -nr
comando per stampare connessioni di rete, tabelle di routing, statistiche dell'interfaccia, connessioni mascherate e appartenenze multicast.
Visualizza la tabella di routing con il comando netstat:
$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Ora abbiamo il comando ip per mostrare i percorsi
$ ip route show
2) Aggiungi un nuovo percorso
Come abbiamo detto sopra, per manipolare la tabella di routing, utilizziamo route add
comando (add è l'opzione) per indicare manualmente un percorso statico che i pacchetti utilizzeranno attraverso la rete. Serve per assegnare un percorso statico temporaneo che cambierà solo se l'amministratore modifica manualmente i valori del nuovo percorso.
Ci sono molte possibilità per usare l'aggiunta del percorso comando.
Dovremmo indicare la rete di destinazione, la subnet mask della rete e il gateway da utilizzare.
route add -net <network_address> gw <gateway> <interface_name>
In alternativa, ora puoi utilizzare ip route
comando, sintassi come segue:
ip route add <network_address> via <gateway> dev <interface_name>
Ad esempio, aggiungiamo una nuova rete di route 10.0.0.0/8 e tramite l'indirizzo IP del gateway 192.168.1.1:
# route add -net 10.0.0.0/8 gw 192.168.1.1 eno1
Ora possiamo visualizzare la tabella di instradamento usando route -n
:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.0 192.168.1.1 255.0.0.0 UG 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Puoi aggiungere netmask
opzione se si desidera aggiungere il valore della maschera di rete. Se non fornito, il comando route trova automaticamente il valore di netmask.
# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.100 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 192.168.1.100 255.255.255.0 UG 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
10.0.0.0 192.168.1.254 255.0.0.0 UG 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Per aggiungere un percorso a un host specifico, usa -host
opzione. Dobbiamo solo indicare il gateway da utilizzare.
route add -host <host_IP_address> gw <gateway>
Ad esempio, aggiungiamo un host specifico '10.0.0.10' e quindi visualizziamo la tabella di routing
# route add -host 10.0.0.10 gw 192.168.1.1 eno1
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.0 192.168.1.1 255.0.0.0 UG 0 0 0 eno1
10.0.0.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Negli esempi precedenti, la colonna flag ha valori diversi e ciò può essere incomprensibile.
I possibili flag e la sua definizione:
U
- il percorso è terminato
H
- il target è un host
G
- utilizzare il gateway
R
- ripristinare il percorso per l'instradamento dinamico
D
- installato dinamicamente da demone o reindirizzamento
M
- modificato dal demone di routing o reindirizzamento
A
- installato da addrconf
C
- immissione nella cache
!
- rifiuta percorso
3) Rifiuta ed Elimina un percorso
Possiamo manipolare la tabella di routing non solo per aggiungere percorsi statici, ma anche per eliminare o rifiutare un percorso che inseriamo in anticipo.
Per eliminare una rete di destinazione dalla tabella di instradamento, utilizzare route del
virgola:
route del -net <network_address> gw <gateway> <interface_name>
Ad esempio per eliminare il percorso verso la nostra rete 10.0.0.0/8:
# route del -net 10.0.0.0/8 gw 192.168.1.1 eno1
Uscita
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Per vietare un indirizzo IP ma è ancora nella tabella di routing. Nota che utilizziamo ancora il parametro add option ma alla fine del comando, dobbiamo usare reject
opzione. Possiamo conservare o meno il nostro gateway, ma non citiamo l'interfaccia di output.
route add -host <host_IP_address> reject
Nel seguente comando rifiuteremo il nostro host '10.0.0.10':
# route add -host 10.0.0.10 reject
Visualizza la tabella di instradamento dopo le modifiche:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.10 - 255.255.255.255 !H 0 - 0 -
10.0.0.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
I percorsi aggiunti utilizzando i comandi precedenti non sono persistenti al riavvio, quindi abbiamo aggiunto percorsi statici al file di configurazione per mantenerlo permanente.
Per aggiungere route statiche persistenti per qualsiasi distribuzione Linux, puoi utilizzare il file generico /etc/rc.local.
Per Ubuntu e Debian usa il file chiamato '/etc/network/interfaces' e su RHEL/CentOS usa '/etc/sysconfig/network-scripts/route-ethX'.
Conclusione
In questo tutorial, abbiamo imparato come aggiungere percorsi statici in Linux usando il comando route add. Dobbiamo notare che con quel metodo, il percorso non cambierà a meno che non lo modifichi. È importante eliminare i percorsi che non ci servono.
Related Read: How to Permanently add Static Route in Linux