Introduzione
Il comando ip
è un potente strumento per configurare le interfacce di rete di un sistema Linux che ogni amministratore di sistema dovrebbe conoscere. Può essere utilizzato per mandare online e offline alcune interfacce di rete, assegnare e rimuovere indirizzi e rotte, gestire la cache ARP e molto altro.
Come usare il Comando ip
L'utility ip è parte del pacchetto iproute2 che è già installato di default su ogni distribuzione Linux moderna.
La sintassi per il comando ip è la seguente:
ip [ opzioni ] oggetto { comando || help }
Nella sintassi, la parola oggetto rappresenta il tipo di oggetto che desideriamo gestire. Gli oggetti (o sottocomandi) più utilizzati sono:
- link (l) - visualizzare e modificare interfacce di rete;
- address (a) - visualizzare e modificare Indirizzi IP;
- route (r) - visualizzare e modificare la tabella di routing;
- neigh (n) - visualizzare e manipolare oggetti vicini (tabella ARP).
Il comando può essere indicato nella forma estesa o abbreviata (indicata tra parentesi). Per visualizzare una lista di tutti i comandi con i parametri per ogni oggetto si può usare:
ip OGGETTO help
Quando si va a configurare delle interfacce di rete, è necessario eseguire il comando come utente root o con privilegi sudo, altrimenti l'output del comando sarà il seguente:
RTNETLINK answers: Operation not permitted.
I cambiamenti alla configurazione che vengono effettuati con il comando ip non sono persistenti, il che significa che dopo un riavvio di sistema saranno persi. Per rendere i cambiamenti permanenti è necessario andare a modificare i file di configurazione specifici della distribuzione in uso o aggiungere i comando ad uno script eseguito in fase di avvio.
Visualizzare e Modificare Indirizzi IP
Quando si lavora con l'oggetto addr
i comandi seguono la seguente sintassi di base:
ip addr [ COMMAND ] ADDRESS dev IFNAME
I comandi più utilizzati con l'oggetto addr
sono show
, add
e del
.
Visualizzare l'Indirizzo IP
Per visualizzare un elenco di tutte le interfacce di rete e i relativi indirizzi IP ad esse associati, eseguiamo il seguente comando:
ip addr show
L'output sarà simile al seguente:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:8c:62:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.121.241/24 brd 192.168.121.255 scope global dynamic eth0
valid_lft 2900sec preferred_lft 2900sec
inet6 fe80::5054:ff:fe8c:6244/64 scope link
valid_lft forever preferred_lft forever
Potremmo ottenere le stesse informazioni omettendo la parola show
dal comando ed eseguendo solamente ip addr
.
Se vogliamo visualizzare solamente l'IPv4 o l'IPv6 possiamo utilizzare rispettivamente ip -4 addr
oppure ip -6 addr
.
Visualizzare le informazioni su un'Interfaccia di Rete
Per visualizzare tutte le informazioni su un'interfaccia di rete specifica possiamo utilizzare il comando ip addr show dev
seguito dal nome del dispositivo. Per esempio, per la scheda eth0
il comando sarà:
ip addr show dev eth0
Assegnare un Indirizzo IP a un'Interfaccia di Rete
Per assegnare un Indirizzo IP a un'interfaccia di rete, possiamo utilizzare la seguente sintassi:
ip addr add INDIRIZZO dev NOME_INTERFACCIA
In questa sintassi INDIRIZZO
rappresenta l'Indirizzo IP che desideriamo assegnare alla scheda, mentre NOME_INTERFACCIA
è il nome della scheda di rete a cui vogliamo assegnare l'IP.
Per esempio, per aggiungere l'indirizzo 192.168.5.38
con maschera di rete 24
all'interfaccia eth0
, useremo il comando:
sudo ip address add 192.168.5.38/24 dev eth0
Se il comando va a buon fine nessun output viene stampato in console. In caso contrario, se l'interfaccia non viene trovata, vedremo il seguente errroe:
Cannot find device "eth0".
Assegnare più Indirizzi IP alla stessa Interfaccia di Rete
Con il comando ip possiamo anche assegnare più di un Indirizzo IP ad una stessa interfaccia di rete. Per esempio:
sudo ip address add 192.168.5.38/24 dev eth0
sudo ip address add 192.168.5.56/24 dev eth0
Per confermare che entrambe gli Indirizzi IP siano stati assegnati possiamo eseguire il comando ip -4 addr show dev eth0
oppure ip -4 a show dev eth0
.
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.5.38/24 brd 192.168.5.255 scope global dynamic eth0
valid_lft 3515sec preferred_lft 3515sec
inet 192.168.5.56/24 scope global secondary eth0
valid_lft forever preferred_lft forever
Rimuovere un Indirizzo IP da un'Interfaccia di Rete
La sintassi per rimuovere un Indirizzo IP da un'interfaccia di rete è la seguente:
ip addr dev INDIRIZZO dev NOME_INTERFACCIA
In questa sintassi INDIRIZZO
è l'Indirizzo IP che desideriamo rimuovere dall'interfaccia il cui nome è indicato al posto di NOME_INTERFACCIA
.
Ipotizzando di voler rimuovere l'indirizzo IP 192.168.5.38
dall'interfaccia di rete eth0
, eseguiremo il seguente comando:
sudo ip address del 192.168.4.38/24 dev eth0
Visualizzare e Modificare le Interfacce di Rete
Per gestire e visualizzare lo stato delle interfacce di rete puoi usare l'oggetto link
.
Quando si lavora con l'oggetto link
, i comandi più utilizzati sono show
, set
, add
e del
.
Visualizzare le informazioni su un'Interfaccia di Rete
Per visualizzare una lista di tutte le schede di rete, possiamo scrivere il seguente comando:
ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:8c:62:44 brd ff:ff:ff:ff:ff:ff
A differenza di ip addr show
, il comando ip link show
non andrà a visualizzare le informazioni sull'Indirizzo IP associato al dispositivo.
Per ottenere le informazioni su un'interfaccia di rete specifica, possiamo utilizzare ip link show dev
, seguito dal nome del dispositivo. Nel seguente esempio andremo a visualizzare le informazioni di eth0
:
ip link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:8c:62:44 brd ff:ff:ff:ff:ff:ff
Modificare lo Stato di un'Interfaccia (UP/DOWN)
Per rendere online oppure offline un'interfaccia di rete possiamo utilizzare ip link set dev
seguito dal nome del dispositivo e dallo stato a cui vogliamo impostarlo:
ip link set dev {DEVICE} {up|down}
Per esempio, per mandare online l'interfaccia eth0
il comando sarà:
ip link set eth0 up
Per mandarla offline invece andremo ad utilizzare:
ip link set eth0 down
Visualizzare e Modificare la Tabella di Routing
Per visualizzare e modificare la tabella di routing del kernel possiamo utilizzare l'oggetto route
. I comandi più utilizzati con questo oggetto sono list
, add
e del
.
Visualizzare la Tabella di Routing
Per ottenere un elenco di tutte le rotte del kernel, possiamo utilizzare uno dei seguenti comandi:
ip route
ip route list
ip route list SELETTORE
Se utilizziamo il comando senza un selettore, verranno stampate tutte le rotte nel kernel. L'output di ip route list
apparirà così:
default via 192.168.121.1 dev eth0 proto dhcp src 192.168.121.241 metric 100
192.168.121.0/24 dev eth0 proto kernel scope link src 192.168.121.241
192.168.121.1 dev eth0 proto dhcp scope link src 192.168.121.241 metric 100
Per visualizzare solamente le rotte di una rete specifica, per esempio, 172.17.0.0/16, possiamo usare il comando in questo modo:
ip r list 172.17.0.0/16
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
Aggiungere una Nuova Rotta
Per aggiungere una nuova rotta alla tabella di routing possiamo utilizzare il comando route add
seguito dalla rete o dal nome del dispositivo.
Nel seguente esempio andremo ad aggiungere una rotta verso 192.168.121.0/24
attraverso il gateway 192.168.121.1
:
ip route add 192.168.121.0/24 via 192.168.121.1
Ora proviamo ad aggiungere una rotta verso 192.168.121.0/24
che può essere raggiunta attraverso il dispositivo eth0
:
ip route add 192.168.121.0/24 dev eth0
Per aggiungere una rotta predefinita utilizziamo la parola default
. Il seguente comando andrà ad aggiungere la rotta predefinita attraverso il gateway locale 192.168.121.1
che può essere raggiunta sul dispositivo eth0
:
ip route add default via 192.168.121.1 dev eth0
Eliminare una Rotta
Per eliminare una rotta dalla tabella di routing possiamo utilizzare il comando route del
, seguendo la stessa sintassi utilizzata anche per aggiungere le rotte.
Con il seguente comando andremo ad eliminare al rotta predefinita:
ip route del default
Per aggiungere un ulteriore esempio, andremo ad eliminare la rotta per 192.168.121.0/24 attraverso il gateway a 192.168.121.1:
ip route add 192.168.121.0/24 via 192.168.121.1
Conclusione
Con questa breve guida abbiamo imparato come funziona il comando ip dei sistemi Linux. Per ulteriori informazioni su tutte le altre cose che possono essere fatte con il comando ip, puoi consultare la pagina del comando su man o digitare man ip
nel tuo terminale.