RDP Monster

Come controllare l'indirizzo IP in Linux: ip addr e hostname -I

Come controllare l'indirizzo IP in Linux: ip addr e hostname -I

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, shorter

Su 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 link

Come leggerlo:

  • Nome dell'interfaccia. lo e il loopback, sempre 127.0.0.1, raggiungibile solo dalla macchina stessa. Qui la scheda reale e eth0; con i nomi di interfaccia prevedibili compare come ens3, enp0s3 o eno1, mentre le schede wireless iniziano con wl.
  • inet e l'indirizzo IPv4, inet6 quello IPv6. Il suffisso /24 e la lunghezza del prefisso in notazione CIDR, la scrittura moderna della netmask 255.255.255.0.
  • scope global significa instradabile oltre questo host; scope link (la riga fe80::) e valido solo sul segmento di rete collegato; scope host e il loopback.
  • state UP con LOWER_UP significa che l'interfaccia e attiva e ha il collegamento. state DOWN o NO-CARRIER e 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 interface

La 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/16

hostname -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::25

Due 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-networkd

L'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 one

Le 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 default

Se 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.25

La 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
    cache

Quel 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.

ComandoCosa mostraIdeale per
ip addr / ip -br -4 addrOgni interfaccia, tutti gli indirizzi, lo statoUso quotidiano, il quadro completo
hostname -ITutti gli indirizzi su una rigaUn colpo d'occhio rapido
ip route get 1.1.1.1Indirizzo sorgente usato verso internetScript, host con piu interfacce
ifconfigUn solo IPv4 per interfaccia (deprecato)Sistemi legacy, vecchi tutorial
curl -4 icanhazip.comIPv4 pubblico come lo vede internetNAT, 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 +short

Un 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?

Elenca ogni indirizzo configurato su ogni interfaccia, bridge virtuali inclusi.
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 appartiene a net-tools, che le distribuzioni attuali non installano piu di default.
Il comando 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?

La -i minuscola risolve il nome host tramite /etc/hosts, dove i sistemi basati su Debian lo mappano su 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?

Leggi la tabella dei vicini con ip neigh, oppure scansiona la sottorete con nmap -sn.
I dispositivi con cui la tua macchina ha scambiato pacchetti di recente sono nella cache ARP/dei vicini, mostrata da 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.

Iscriviti al nostro programma rivenditori

I tuoi dati

Se hai domande, contattaci cliccando qui !
Nome completo(Obbligatorio)
Inserisci la tua email: ti serve un account su dashboard.rdp.monster !

La tua azienda

Inserisci l'indirizzo del tuo sito web, se ne hai uno
Spiegaci in due righe come venderai i servizi ai tuoi clienti. Per esempio, parlandone sui forum.

Anche i mostri adorano i cookie!

Usiamo i cookie per migliorare la tua navigazione, mostrarti annunci o contenuti personalizzati e analizzare il nostro traffico. Cliccando su «Accetta» acconsenti all'uso dei cookie.