Come usare il Comando ip di Linux

Contenuto1 Introduzione2 Come usare il Comando ip3 Visualizzare e Modificare Indirizzi IP3.1 Visualizzare l’Indirizzo IP3.2 Visualizzare le informazioni su un’Interfaccia di Rete3.3 Assegnare un Indirizzo IP a un’Interfaccia di Rete3.4 […]

Avatar di gbfactory
gbfactory 22 Luglio 2022

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 }
Come usare il Comando ip di Linux stampato sul terminale

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.