Come controllare l'indirizzo IP in Linux: ip addr e hostname -I
- 30 ottobre 2026
- 09:00
- Di Adrien Roche
- Rete

Controllare il proprio indirizzo IP in Linux con ip addr
Il comando che risponde alla domanda "qual e il mio indirizzo IP" su qualsiasi distribuzione Linux attuale e ip, del pacchetto iproute2. E installato di serie su tutte le distribuzioni principali, funziona senza root ed e cio che gli altri comandi di questa guida incapsulano o da cui sono stati sostituiti. La forma base elenca ogni interfaccia con tutti i suoi indirizzi:
ip addr show
ip a # same thing, shorterSu un server con una sola scheda di rete l'output ha questo aspetto (le righe di durata valid_lft sono state tagliate):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 203.0.113.25/24 brd 203.0.113.255 scope global eth0
inet6 2001:db8:1::25/64 scope global
inet6 fe80::5054:ff:fe12:3456/64 scope linkCome leggerlo:
- Nome dell'interfaccia.
loe il loopback, sempre127.0.0.1, raggiungibile solo dalla macchina stessa. Qui la scheda reale eeth0; con i nomi di interfaccia prevedibili compare comeens3,enp0s3oeno1, mentre le schede wireless iniziano conwl. inete l'indirizzo IPv4,inet6quello IPv6. Il suffisso/24e la lunghezza del prefisso in notazione CIDR, la scrittura moderna della netmask255.255.255.0.scope globalsignifica instradabile oltre questo host;scope link(la rigafe80::) e valido solo sul segmento di rete collegato;scope hoste il loopback.state UPconLOWER_UPsignifica che l'interfaccia e attiva e ha il collegamento.state DOWNoNO-CARRIERe il motivo abituale per cui un'interfaccia non ha alcun indirizzo.
Varianti utili:
ip -4 addr # IPv4 only
ip -6 addr # IPv6 only
ip -br -4 addr # one line per interface
ip -4 addr show dev eth0 # a single interfaceLa forma sintetica (-br) e il modo piu rapido per controllare un indirizzo IP in Linux quando esistono piu interfacce, situazione normale su un VPS che esegue Docker:
$ ip -br -4 addr
lo UNKNOWN 127.0.0.1/8
eth0 UP 203.0.113.25/24
docker0 DOWN 172.17.0.1/16hostname -I: solo gli indirizzi
Quando ti servono soltanto gli indirizzi, hostname -I (I maiuscola) stampa ogni indirizzo configurato su una sola riga, separati da spazi, esclusi loopback e IPv6 link-local:
$ hostname -I
203.0.113.25 2001:db8:1::25Due avvertenze. La versione minuscola hostname -i e un comando diverso: risolve il nome host della macchina tramite /etc/hosts e DNS, cosa che su Debian e Ubuntu di solito produce 127.0.1.1. Inoltre hostname -I stampa gli indirizzi senza alcun ordine garantito, bridge virtuali come docker0 inclusi, quindi hostname -I | awk '{print $1}' e una scorciatoia per gli umani, non un "IP principale" affidabile per gli script. L'opzione non e POSIX: Debian, Ubuntu, Fedora e RHEL ce l'hanno, mentre le immagini minimali basate su BusyBox come Alpine potrebbero non averla.
ifconfig, nmcli e networkctl
ifconfig (deprecato, net-tools)
ifconfig e quello che mostrano i tutorial piu datati. Appartiene a net-tools, deprecato da anni a favore di iproute2 e non piu incluso nell'installazione predefinita delle versioni attuali di Ubuntu, Debian e Fedora/RHEL. Se restituisce command not found, passa a ip oppure installa il pacchetto:
sudo apt install net-tools # Debian / Ubuntu
sudo dnf install net-tools # Fedora / RHEL / Rocky / Alma$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 203.0.113.25 netmask 255.255.255.0 broadcast 203.0.113.255
inet6 fe80::5054:ff:fe12:3456 prefixlen 64 scopeid 0x20<link>Leggibile, ma con un limite concreto: ifconfig mostra un solo indirizzo IPv4 per interfaccia. Gli indirizzi secondari aggiunti con ip addr add, frequenti su un VPS con piu IP pubblici, per lui sono invisibili.
nmcli e networkctl
I desktop e i server della famiglia Fedora/RHEL gestiscono la rete con NetworkManager; Ubuntu Server usa netplan sopra systemd-networkd, e molte immagini VPS seguono lo stesso modello. Ognuno dispone di uno strumento di stato che mostra indirizzo, gateway e DNS in un unico blocco:
nmcli device show eth0
nmcli -g IP4.ADDRESS device show eth0 # NetworkManager: just the address field
networkctl status eth0 # systemd-networkdL'opzione -g (--get-values) stampa il valore nudo di un solo campo, lunghezza del prefisso inclusa, comodo per gli script. Se non sai quale stack usa la tua macchina, o nemmeno quale distribuzione e versione sia, identifica prima la versione del sistema operativo dalla riga di comando; la risposta decide quale strumento e presente.
Trovare il proprio indirizzo IP pubblico con curl
Tutto quanto sopra riporta l'indirizzo configurato sull'interfaccia. Sulla maggior parte dei VPS l'IPv4 pubblico e assegnato direttamente all'interfaccia, quindi e anche quello che vede internet. A casa, in ufficio o su alcuni cloud, l'interfaccia porta un indirizzo privato degli intervalli RFC 1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) e un router o un NAT 1:1 lo traduce in uscita. L'unico modo affidabile per vedere il lato pubblico e interrogare un servizio esterno:
curl -4 icanhazip.com
curl -4 ifconfig.me/ip
curl -4 https://api.ipify.org
curl -6 icanhazip.com # public IPv6, if the host has oneLe opzioni -4 e -6 forzano la famiglia di indirizzi, cosa che conta sugli host dual-stack: senza di esse curl puo preferire IPv6 e restituire un indirizzo inatteso. icanhazip.com e gestito da Cloudflare dal 2021 e restituisce testo semplice. Leggi la risposta come "l'indirizzo da cui esce il mio traffico": dietro una VPN o un proxy e l'indirizzo del nodo di uscita, non quello del tuo provider.
IPv6: globale contro link-local
Quasi ogni interfaccia Linux mostra almeno una riga inet6, spesso scambiata per un indirizzo IPv6 pubblico. La riga che inizia con fe80:: e contrassegnata scope link e link-local: ogni interfaccia ne genera una automaticamente, e valida solo sulla rete collegata e non e mai raggiungibile da internet. Un indirizzo IPv6 pubblico e contrassegnato scope global e inizia con 2 o 3, poiche lo spazio unicast globale e 2000::/3.
ip -6 addr show scope global
ip -6 route show defaultSe il primo comando non stampa nulla, la macchina non ha un IPv6 instradabile e curl -6 fallira. Gli indirizzi globali aggiuntivi contrassegnati temporary su un desktop derivano dalle privacy extension; i server le tengono disattivate cosi l'indirizzo resta stabile per DNS e regole del firewall.
Gateway predefinito, rotte e DNS
Un indirizzo da solo non dice se la macchina puo raggiungere qualcosa. Lo dice la tabella di routing, che ip route (forma breve ip r) stampa:
$ ip route
default via 203.0.113.1 dev eth0 proto static
203.0.113.0/24 dev eth0 proto kernel scope link src 203.0.113.25La riga default via e il gateway predefinito, il router usato da ogni pacchetto quando nessuna rotta piu specifica corrisponde. La seconda riga e stata aggiunta dal kernel quando l'indirizzo e stato configurato; il suo campo src e l'indirizzo che l'host preferisce come sorgente su quella rete. Il trucco piu utile parte proprio da qui: chiedere al kernel quale indirizzo userebbe per una destinazione data.
$ ip route get 1.1.1.1
1.1.1.1 via 203.0.113.1 dev eth0 src 203.0.113.25 uid 1000
cacheQuel valore src e, per definizione, l'indirizzo in uscita della macchina verso internet, qualunque interfaccia, bridge o tunnel esista. Per il DNS, /etc/resolv.conf resta il file da guardare, ma sui sistemi con systemd-resolved (Ubuntu dalla 18.04, Fedora recenti) contiene solo lo stub locale 127.0.0.53; i veri resolver upstream sono mostrati da resolvectl status, oppure dai campi IP4.DNS di nmcli device show sugli host con NetworkManager.
Scripting: mettere l'indirizzo IP in una variabile
L'output interattivo e pensato per le persone; a uno script serve un solo indirizzo, senza nulla attorno. Questi schemi reggono, dal piu semplice al piu robusto:
# One interface, IPv4, prefix length stripped
IP=$(ip -4 -o addr show dev eth0 | awk '{print $4}' | cut -d/ -f1)
# Robust: the source address used to reach the internet
IP=$(ip route get 1.1.1.1 | awk '{for (i=1; i<=NF; i++) if ($i == "src") {print $(i+1); exit}}')
# Same thing with JSON output and jq
IP=$(ip -j route get 1.1.1.1 | jq -r '.[0].prefsrc')
# Public IP, with a timeout so the script never hangs offline
PUBLIC_IP=$(curl -4 -s --max-time 5 https://icanhazip.com)L'opzione -o fa stampare a ip un indirizzo per riga, il che mantiene sicure le posizioni dei campi per awk; aggiungi head -n 1 se l'interfaccia porta piu indirizzi IPv4. L'opzione -j passa ip all'output JSON e jq seleziona poi i campi per nome. Preferisci quella forma in tutto cio che gira su piu di una macchina: i nomi delle interfacce cambiano da host a host, i nomi dei campi no.
| Comando | Cosa mostra | Ideale per |
|---|---|---|
ip addr / ip -br -4 addr | Ogni interfaccia, tutti gli indirizzi, lo stato | Uso quotidiano, il quadro completo |
hostname -I | Tutti gli indirizzi su una riga | Un colpo d'occhio rapido |
ip route get 1.1.1.1 | Indirizzo sorgente usato verso internet | Script, host con piu interfacce |
ifconfig | Un solo IPv4 per interfaccia (deprecato) | Sistemi legacy, vecchi tutorial |
curl -4 icanhazip.com | IPv4 pubblico come lo vede internet | NAT, VPN, conferma dell'indirizzo di un VPS |
Cosa cambia su un VPS
Su un VPS con IPv4 dedicato, ip -4 addr, hostname -I e curl -4 icanhazip.com devono restituire tutti lo stesso indirizzo, perche l'IP pubblico e configurato direttamente sull'interfaccia senza NAT di mezzo. Quando non concordano, qualcosa si e messo in mezzo: un NAT lato provider, un client VPN dimenticato o un bridge Docker che ha occupato il primo posto in hostname -I.
Una volta confermato l'indirizzo, verifica due cose. Primo, se sia davvero raggiungibile e su quali porte, domanda diversa dal semplice fatto che sia configurato: controlla le porte aperte del tuo server Linux dall'interno con ss -tulpn e dall'esterno con nmap. Secondo, il reverse DNS. Interroga il record PTR del tuo indirizzo:
dig -x 203.0.113.25 +shortUn VPS appena creato di solito risponde con un nome generico del provider, oppure con nulla. Se il server invia posta o espone un servizio pubblico, imposta il nome host e il reverse DNS in modo che coincidano; la posta in uscita in particolare viene regolarmente rifiutata quando il record PTR e il nome HELO non concordano.
Questi comandi diventano riflessi piu in fretta su un server il cui indirizzo e solo tuo e non cambia. Un VPS Linux di rdp.monster include un IPv4 dedicato, accesso root completo, CPU e RAM dedicate, banda illimitata (fair-use) e nessun KYC, con pagamenti in criptovaluta accettati, da $8.99/mese. Il server e online circa 10 secondi dopo la conferma del pagamento, quindi il primo ip -br -4 addr che ci eseguirai e a un passo.
Domande frequenti
Perche hostname -I mostra piu di un indirizzo IP?
hostname -I stampa tutti gli indirizzi di tutte le interfacce tranne loopback e IPv6 link-local, quindi una macchina con Docker, libvirt, un client VPN o una seconda scheda di rete ne mostra diversi. docker0 aggiunge 172.17.0.1, virbr0 di solito 192.168.122.1, e un host dual-stack aggiunge il suo indirizzo IPv6 globale. L'ordine non e garantito. Quando ti serve l'indirizzo da cui esce davvero il tuo traffico, esegui invece ip route get 1.1.1.1 e leggi il suo campo src.Perche ifconfig risponde command not found su Ubuntu?
ifconfig fa parte del pacchetto net-tools, deprecato a favore di iproute2 e assente dall'installazione predefinita delle versioni attuali di Ubuntu, Debian e Fedora/RHEL. Il sostituto e ip addr, disponibile ovunque. Se uno script o una vecchia abitudine lo richiedono davvero, installa il pacchetto con sudo apt install net-tools o sudo dnf install net-tools, tenendo presente che ifconfig mostra un solo IPv4 per interfaccia e nasconde gli indirizzi secondari aggiunti con ip addr add.Perche hostname -i restituisce 127.0.1.1?
hostname -i non ispeziona affatto la rete: risolve il nome host del sistema come farebbe qualsiasi applicazione, tramite /etc/hosts e poi DNS. Gli installer di Debian e Ubuntu aggiungono una riga che mappa il nome host su 127.0.1.1 in modo che la macchina possa risolvere il proprio nome senza rete, ed e quella riga a tornare indietro. Usa la forma con la I maiuscola, hostname -I, che legge gli indirizzi reali delle interfacce, oppure ip -4 addr per il dettaglio completo.Come trovo gli indirizzi IP degli altri dispositivi sulla mia rete?
ip neigh show (o arp -a se net-tools e installato). Per un quadro completo, esegui un ping sweep della sottorete: nmap -sn 192.168.1.0/24 elenca ogni host che risponde, con i nomi quando il reverse DNS li fornisce. Sostituisci la tua rete, che puoi leggere dalla rotta scope link in ip route. Su un VPS questo serve raramente, e scansionare gli indirizzi vicini puo violare i termini del tuo provider.Adrien Roche, Editor infrastruttura e hosting
Ingegnere di sistemi con oltre 10 anni di esperienza su parchi server Windows Server e Linux. Adrien cura la documentazione dell'infrastruttura di rdp.monster e scrive le nostre guide su RDP, hosting VPS, amministrazione server, networking e strumenti per la privacy.




