Skip to main content
  1. Comandi/

ip - show / manipulate routing and interfaces

·8 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Gestisce e mostra interfacce di rete, indirizzi IP, tabella di routing e tunnel. Sostituisce i comandi deprecati ifconfig e route. Su Linux moderno e' il punto di riferimento per qualsiasi configurazione o diagnostica di rete.

Sintassi
#

ip [opzioni] oggetto [comando]

Gli oggetti principali: address (o addr o a), route (o r), link (o l), neighbor (o n)

Comandi essenziali
#

ComandoFlagSignificato flagCosa fa
ip address showMostra tutte le interfacce con IP assegnati
ip aAbbreviazione di ip address show
ip a show eth0Solo l'interfaccia eth0
ip route showMostra la tabella di routing
ip rAbbreviazione di ip route show
ip link showStato delle interfacce (UP/DOWN) senza IP
ip neighbor showTabella ARP — MAC degli host vicini
ip nAbbreviazione di ip neighbor show

Leggere ip address show
#

ip a
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
#    inet 127.0.0.1/8 scope host lo
#
# 2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
#    inet 192.168.64.3/24 brd 192.168.64.255 scope global enp0s1
#    ^    ^               ^
#    |    IP address      broadcast address
#    inet = IPv4 (inet6 = IPv6)

Cosa cercare:

  • state UP — interfaccia attiva
  • inet — indirizzo IPv4 assegnato
  • Assenza di inet — DHCP non funziona o interfaccia non configurata

Nomi delle interfacce:

lo        → loopback — interfaccia virtuale, parla con se stesso (127.0.0.1)
enp0s1    → Ethernet (en = ethernet, p0s1 = bus PCI)
eth0      → Ethernet (naming vecchio stile)
wlp2s0    → Wireless (wl = wireless)
vda       → Disco virtuale (non e' un'interfaccia di rete — e' lsblk)

Leggere ip route show
#

ip r
# default via 192.168.64.1 dev enp0s1 proto dhcp src 192.168.64.3 metric 100
# 169.254.0.0/16 dev enp0s1 scope link metric 1000
# 192.168.64.0/24 dev enp0s1 proto kernel scope link src 192.168.64.3 metric 100
default via 192.168.64.1   ← gateway di default — tutto il traffico non locale va qui
192.168.64.0/24            ← la tua LAN — raggiungibile direttamente senza gateway
169.254.0.0/16             ← APIPA — range fallback quando DHCP non funziona

169.254.0.0/16 — APIPA (Automatic Private IP Addressing). Assegnato automaticamente quando il DHCP non risponde. Se un host ha solo questo IP, il DHCP non funziona.

ifconfig vs ip — perche' ip e' meglio
#

ifconfig (deprecato)         ip (moderno)
─────────────────────        ──────────────────────────────
singolo comando              un comando per tutto
output meno strutturato      output piu' ricco e preciso
non mostra routing           ip route per il routing
non mostra ARP               ip neighbor per ARP
non installato di default    sempre disponibile su kernel moderno

Combinazioni utili
#

# Diagnostica rapida — tutto in una volta
ip a && ip r

# Verifica se una specifica interfaccia e' UP
ip link show enp0s1 | grep "state UP"

# Mostra solo IPv4 (esclude IPv6)
ip -4 a

# Mostra solo IPv6
ip -6 a

# Tabella ARP — trova i MAC dei dispositivi sulla LAN
ip neighbor show

# Verifica la route verso un IP specifico
ip route get 8.8.8.8
# 8.8.8.8 via 192.168.64.1 dev enp0s1 src 192.168.64.3
# mostra quale gateway userebbe per raggiungere quell'IP

ip route flush — attenzione alla differenza
#

# Svuota solo la route cache temporanea (ICMP Redirect, route dinamiche)
ip route flush cache
# Sicuro — le route statiche rimangono intatte

# Svuota TUTTA la routing table — incluse le route statiche
ip route flush all
# DISTRUTTIVO — la macchina perde la connessione di rete
# Non usare mai su sistemi in produzione o in remoto
ip route flush all su una macchina remota a cui accedi via SSH equivale a spegnerla — perdi immediatamente la connessione e non puoi recuperarla senza accesso fisico o console. La routing table viene svuotata e il sistema non sa piu' come instradare i pacchetti, nemmeno sulla LAN locale.

Output JSON con -j
#

# Qualsiasi sottocomando di ip accetta -j per output JSON
ip -j route
ip -j neighbor show
ip -j address show

# Utile per parsing con jq o in script Python
ip -j neighbor show | python3 -c "import sys,json; [print(e) for e in json.load(sys.stdin)]"

Nota: -j va PRIMA del sottocomando, non dopo. ip route -j → syntax error ip -j route → corretto


Diagnostica: default gateway mancante
#

Sintomo
#

ping -c 4 8.8.8.8
# connect: Network is unreachable
# oppure: nessuna risposta

Diagnosi
#

ip route
# 192.168.64.0/24 dev enp0s1 proto kernel scope link src 192.168.64.3
# ← manca la riga "default via X"

Se ip route non mostra una riga default via — il gateway manca. Il sistema sa parlare con la sua subnet locale ma non sa dove mandare il traffico verso internet.

Confronta con una macchina che funziona:

# Su Kali (funziona):
ip route
# default via 192.168.64.1 dev eth0   ← c'è il gateway
# 192.168.64.0/24 dev eth0

# Su Ubuntu (non funziona):
ip route
# 192.168.64.0/24 dev enp0s1          ← manca il gateway

Come identificare il gateway corretto
#

Il gateway è quasi sempre il primo IP della subnet — convenzione universale:

Subnet 192.168.64.0/24  →  gateway tipico: 192.168.64.1
Subnet 192.168.1.0/24   →  gateway tipico: 192.168.1.1
Subnet 10.0.0.0/24      →  gateway tipico: 10.0.0.1

Puoi verificarlo guardando la tabella ARP — il gateway è l'unico dispositivo REACHABLE fuori dalla tua subnet:

ip neighbor show
# 192.168.64.1 dev enp0s1 lladdr 72:8c:f2:1b:c8:64 REACHABLE
#      ^
#      questo è il gateway

Oppure confronta con un host della stessa rete che funziona:

# Su Kali — vedi il gateway nella sua routing table
ip route | grep default
# default via 192.168.64.1 dev eth0

Fix temporaneo (non sopravvive al riavvio)
#

sudo ip route add default via 192.168.64.1

Verifica:

ip route
# default via 192.168.64.1 dev enp0s1   ← aggiunto
# 192.168.64.0/24 dev enp0s1

ping -c 4 8.8.8.8   # deve funzionare ora

Fix permanente (netplan — Ubuntu Server)
#

Modifica il file netplan:

sudo nano /etc/netplan/50-cloud-init.yaml

Aggiungi la sezione routes:

network:
  version: 2
  ethernets:
    enp0s1:
      dhcp4: false
      addresses:
        - 192.168.64.3/24
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
      routes:
        - to: default
          via: 192.168.64.1
sudo netplan apply
ip route   # verifica

Perché succede
#

Su Ubuntu Server con IP statico configurato manualmente, il gateway non viene aggiunto automaticamente — va specificato esplicitamente nel file netplan.

Kali usa NetworkManager che lo aggiunge in automatico quando assegna un IP via DHCP.

Ubuntu vs Kali — configurazione rete a confronto
#

Due distribuzioni diverse, due approcci diversi alla configurazione di rete.

Ubuntu Server — Netplan
#

Ubuntu Server usa file YAML in /etc/netplan/. La configurazione e' statica e manuale — devi specificare tutto esplicitamente, incluso il gateway.

# Vedi il file di configurazione
cat /etc/netplan/50-cloud-init.yaml

# Applica le modifiche
sudo netplan apply

# Verifica
ip route

Configurazione completa con gateway:

network:
  version: 2
  ethernets:
    enp0s1:
      dhcp4: false
      addresses:
        - 192.168.64.3/24
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
      routes:
        - to: default
          via: 192.168.64.1   # ← gateway — va specificato esplicitamente

Se dimentichi la sezione routes, il gateway non viene aggiunto e il sistema non esce su internet.

Kali Linux — NetworkManager
#

Kali usa NetworkManager — gestisce tutto in automatico, incluso il gateway, quando ottiene un IP via DHCP.

# Vedi le connessioni attive
nmcli connection show

# Vedi i dettagli di una connessione specifica
nmcli connection show "Wired connection 1"

# File di configurazione (raramente modificato a mano)
cat /etc/network/interfaces

Non c'e' un file YAML da modificare — NetworkManager aggiunge il gateway automaticamente.

Confronto
#

                Ubuntu Server          Kali Linux
Gestore         Netplan                NetworkManager
Config file     /etc/netplan/*.yaml    gestito da nmcli/GUI
Gateway         va aggiunto a mano     aggiunto automaticamente da DHCP
IP statico      definito nel YAML      nmcli o GUI
Dopo riavvio    configurazione persiste persiste (gestita da NM)
Usato su        server, headless       desktop, penetration testing

Sintomo del gateway mancante
#

# Ubuntu — ip route mostra solo la subnet locale
ip route
# 192.168.64.0/24 dev enp0s1   ← solo LAN, nessun default

# Kali — ip route mostra anche il gateway
ip route
# default via 192.168.64.1 dev eth0   ← gateway presente
# 192.168.64.0/24 dev eth0

Se Ubuntu non esce su internet, la prima cosa da controllare e' sempre ip route — quasi certamente manca la riga default via.


Scenario Reale
#

# Incident response — mappa rapida della rete su un sistema sospetto
ip a          # quali IP ha questo sistema?
ip r          # dove manda il traffico?
ip n          # chi ha visto di recente sulla LAN? (tabella ARP)

# Un IP insolito nella tabella ARP puo' indicare
# un dispositivo non autorizzato sulla rete
ip neighbor show | grep -v REACHABLE

Dove l'ho usato
#

  • VM Ubuntu — ip a per verificare l'IP fisso dopo netplan
  • Lab UTM — diagnostica interfacce Host-Only

Note personali
#

Tip

ip r get 8.8.8.8 e' il modo piu' rapido per vedere quale interfaccia e' quale gateway userebbe il sistema per raggiungere un IP specifico — utile quando ci sono piu' interfacce attive.

Note

Le abbreviazioni funzionano tutte: ip a = ip addr = ip address. In produzione si usano quasi sempre le abbreviazioni — imparale.

Collegato a
#

  • system — categoria
  • netplan — configura le interfacce che ip mostra
  • traceroute — usa la routing table mostrata da ip route
  • ping — testa la connettivita' verso gli IP visti con ip a
  • ss — mostra le connessioni sulle interfacce viste con ip

Related