Indirizzi IP in Linux: interfacce, percorsi e IP pubblico

In Linux potete vedere gli indirizzi IP (Internet Protocol) delle interfacce con ip address. Per sapere quale indirizzo di origine il kernel sceglierebbe verso una destinazione, controllate src in ip route get; l'indirizzo visto da un servizio Internet può essere diverso per effetto di NAT, proxy o VPN.

ip -brief address
ip route get 1.1.1.1

Un server può avere contemporaneamente indirizzi di loopback, IPv4 privati o pubblici e più indirizzi IPv6. Prima di scegliere un indirizzo, definite lo scopo: accesso da un altro dispositivo, uscita verso una destinazione oppure verifica dell'indirizzo visibile dall'esterno. I comandi mostrati interrogano la configurazione; non modificano indirizzi, interfacce o regole di instradamento.

Controllare rapidamente gli indirizzi IP

Elencare le interfacce in forma compatta

ip -brief address

-brief riassume nome, stato e indirizzi di ciascuna interfaccia. lo è l'interfaccia di loopback; 127.0.0.1 e ::1 servono per comunicare con il sistema stesso, non per raggiungerlo da un altro dispositivo. Il comando ip fa parte di iproute2: se manca, verificate il pacchetto previsto dalla distribuzione.

Visualizzare soltanto IPv4

ip -4 address show

Per limitare l'elenco agli indirizzi IPv4 con ambito global:

ip -4 address show scope global

scope global non significa automaticamente “IP pubblico”. Anche un IPv4 privato, per esempio 10.1.2.3, può avere questo ambito in Linux. Il filtro riguarda l'ambito dell'indirizzo nella configurazione, non la sua raggiungibilità da Internet.

Visualizzare soltanto IPv6

ip -6 address show

Esaminate ambito e attributi: scope link indica un indirizzo valido sul collegamento, mentre scope global ha un ambito più ampio. Possono comparire indirizzi temporary e dynamic, con durate differenti. Nemmeno l'ambito globale di IPv6 garantisce accesso da Internet: gli indirizzi ULA (Unique Local Address), definiti nella RFC 4193, sono destinati a reti locali e non all'instradamento Internet globale.

Interpretare l'output di ip address

Per vedere gli indirizzi e le proprietà dettagliate delle interfacce eseguite:

ip address show
Campo Significato Come interpretarlo
UP Interfaccia attivata amministrativamente Non prova che il collegamento o un servizio remoto funzionino.
LOWER_UP Collegamento del livello inferiore attivo È un indizio sullo stato del cavo o del collegamento virtuale, non un test Internet.
inet Indirizzo IPv4 e lunghezza del prefisso Per esempio 192.0.2.10/24: indirizzo riservato agli esempi con prefisso di 24 bit.
inet6 Indirizzo IPv6 e lunghezza del prefisso Distinguete indirizzi link-local, ULA e altri indirizzi con ambito globale.
scope Ambito dell'indirizzo host, link o global; quest'ultimo non certifica un IP pubblico.
valid_lft Durata di validità residua Un valore finito indica una scadenza; forever non prevede una scadenza temporale.

La documentazione degli stati operativi del kernel distingue attivazione amministrativa e stato del collegamento. La pagina di manuale ip-address descrive campi e attributi. Una durata può essere rinnovata; una configurazione dinamica può quindi cambiare nel tempo. Per IPv6 considerate anche eventuali indicazioni tentative, dadfailed o deprecated prima di scegliere un indirizzo per una nuova connessione.

Controllare una specifica interfaccia

Individuare il nome reale

ip -brief link

I nomi possono essere, per esempio, eth0, ens3, enp1s0 o wlan0. Usate quello presente sul sistema, senza dedurlo da una guida. Se un nome non compare, verificate anche se state lavorando nell'host o in un container.

Leggere gli indirizzi dell'interfaccia scelta

ip address show dev ens3

Sostituite ens3 con il nome appena verificato. Per selezionare anche famiglia IPv4 e ambito globale:

ip -4 address show dev ens3 scope global

Se l'elenco è vuoto, il filtro potrebbe non trovare indirizzi adatti: confrontate l'elenco completo, controllate IPv6 e leggete eventuali messaggi di errore. Non assegnate o rimuovete un indirizzo soltanto per far comparire un risultato.

Verificare la scelta del percorso e dell'origine

Leggere src per una destinazione precisa

Un server con più interfacce o una VPN può scegliere percorsi diversi secondo la destinazione. Interrogate il kernel per l'indirizzo che interessa realmente:

ip route get 1.1.1.1

1.1.1.1 è solo una destinazione d'esempio. Nel risultato, dev indica l'interfaccia scelta, via l'eventuale gateway e src l'origine proposta per quella ricerca. ip route get non invia pacchetti alla destinazione e non dimostra che il server remoto risponda.

La scelta vale per il contesto della ricerca. Un'applicazione può specificare un'altra origine o usare regole dipendenti da utente, marcatura, interfaccia o spazio dei nomi. Non presentate quindi quel risultato come prova di ogni connessione futura. Il manuale di ip-route descrive i selettori disponibili.

Controllare le rotte predefinite

ip route show default

Una rotta predefinita può contenere un gateway, ma non tutti i collegamenti ne mostrano uno nello stesso modo. Con più rotte, metrica e regole di instradamento possono influire sulla scelta; la sola prima riga dell'elenco non stabilisce il percorso di ogni destinazione. Confrontate il risultato della ricerca mirata.

Interrogare una rotta IPv6

ip -6 route get 2606:4700:4700::1111

Il comando cerca il percorso verso un IPv6 letterale, quindi non richiede una risoluzione DNS. Per una connessione effettiva servono un percorso e un'origine adatti, il supporto dell'applicazione e regole di rete che la consentano. Il DNS entra in gioco quando usate un nome. Un errore di rete non raggiungibile va distinto dall'assenza di risposta di un servizio remoto.

Usare hostname -I come riepilogo

Alcune implementazioni Linux di hostname supportano l'opzione seguente:

hostname -I

Nell'implementazione documentata da hostname per Debian, -I enumera gli indirizzi configurati separandoli con spazi, omette loopback e IPv6 link-local e non garantisce un ordine. Non mostra interfaccia, prefisso, ambito o rotta.

hostname -i, con la lettera minuscola, riguarda invece la risoluzione del nome dell'host ed è influenzato dal resolver, da /etc/hosts e dal DNS. Non equivale all'inventario delle interfacce. Se l'opzione maiuscola manca sul vostro sistema, usate ip address; non scegliete automaticamente il primo indirizzo restituito.

Distinguere indirizzo locale e indirizzo visibile su Internet

Riconoscere gli IPv4 privati

ip address mostra gli indirizzi delle interfacce nello spazio dei nomi di rete corrente. Le reti IPv4 private definite dalla RFC 1918 sono 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16. La presenza di un indirizzo esterno a questi tre blocchi, da sola, non prova che sia pubblico e raggiungibile: esistono anche altri intervalli speciali.

Verificare l'indirizzo osservato dall'esterno

NAT (Network Address Translation) può cambiare l'origine di una comunicazione. Una VPN (Virtual Private Network) o un proxy può far apparire all'esterno l'indirizzo del proprio punto di uscita. Consultate le associazioni e le rotte nel router o nella console cloud, considerando anche l'eventuale NAT del fornitore a monte.

Un servizio esterno di controllo IP può mostrare l'origine vista da quella specifica richiesta; riceve però l'indirizzo e l'orario della richiesta. Scegliete un servizio fidato e distinguete IPv4 e IPv6, percorso VPN, proxy e destinazione. Il risultato non identifica necessariamente un unico indirizzo per tutto il traffico del server. Considerate disponibilità del servizio e dipendenze prima di usarlo in uno script.

Separare l'indirizzo dalla raggiungibilità del servizio

Conoscere un IP pubblico non dimostra che un servizio sia accessibile. Controllate indirizzo e porta di ascolto, instradamento, eventuale inoltro delle porte NAT, firewall e gruppi di sicurezza cloud. Il comando seguente mostra socket TCP in ascolto e socket UDP secondo le opzioni selezionate:

ss -lntup

Per vedere tutti i dettagli dei processi possono servire privilegi amministrativi. Un socket presente non dimostra che un client esterno possa raggiungerlo: la prova va eseguita dal percorso previsto. Prima di esporre un servizio controllate autenticazione, cifratura, aggiornamenti e origine dei client consentiti.

Trattare gli indirizzi negli script

Preferire un output strutturato

Quando serve elaborare l'inventario, l'output JSON (JavaScript Object Notation) evita di dipendere dalle colonne di testo:

ip -j -4 address show scope global

Il risultato è un elenco di interfacce, con gli indirizzi nell'array addr_info. Considerate per ogni indirizzo famiglia, valore locale, prefisso e ambito; un'interfaccia può averne più di uno. Gestite anche un elenco vuoto e un comando fallito come casi distinti. Versioni vecchie di iproute2 possono non offrire le stesse opzioni o gli stessi campi: controllate ip -Version e provate sulla distribuzione destinataria. Il manuale del comando ip documenta -json e -brief.

Definire il criterio prima di scegliere un indirizzo

Con più collegamenti, VPN, container o IPv6 temporanei, il primo elemento non è necessariamente quello utile. Specificate destinazione, famiglia, interfaccia e ambito. Il JSON degli indirizzi descrive la configurazione, non sostituisce la ricerca della rotta né una prova applicativa.

Considerare container e spazi dei nomi di rete

Uno spazio dei nomi di rete, o network namespace, isola interfacce, indirizzi, tabelle di instradamento e altre risorse. Dentro un container vedete normalmente il suo contesto di rete; se il container condivide quello dell'host, la situazione è diversa. La documentazione dei network namespace descrive l'isolamento.

Host, container, Pod Kubernetes, Service, Ingress e bilanciatori esterni possono usare indirizzi differenti o condivisi. Durante una diagnosi annotate dove avete eseguito il comando e quale tratto della comunicazione state verificando. Non confondete l'indirizzo del Pod con quello pubblicato da un servizio o da un bilanciatore.

Usare ancora ifconfig?

ifconfig compare spesso nelle guide meno recenti e può non essere installato. Per i nuovi controlli preferite gli strumenti iproute2, che permettono di interrogare separatamente indirizzi, collegamenti e rotte. Se una procedura esistente dipende da ifconfig, confrontate opzioni e output prima di sostituirla: non cambiate la configurazione della rete durante una semplice verifica dell'IP.

Domande frequenti

127.0.0.1 è un indirizzo del server?

È il suo loopback IPv4. Un altro dispositivo che usa 127.0.0.1 si rivolge a sé stesso, non al vostro server; lo stesso principio vale per ::1 in IPv6.

Quale indirizzo devo usare quando ne vedo diversi?

Dipende da chi deve collegarsi e dal percorso disponibile. Per l'accesso interno scegliete un indirizzo raggiungibile dal client; per l'origine proposta verso una destinazione controllate src in ip route get, tenendo conto del contesto dell'applicazione.

Perché ip address non mostra l'IP pubblico?

L'indirizzo visibile all'esterno può appartenere a un NAT, a un proxy o all'uscita VPN anziché a un'interfaccia del server. Controllate la configurazione di rete e le associazioni esterne; un bilanciatore può inoltre avere un indirizzo d'ingresso distinto da quello d'uscita.

Basta conoscere l'indirizzo per collegarsi via SSH?

No. Servono un server SSH in ascolto sull'indirizzo e sulla porta corretti, un percorso consentito da NAT e firewall e un metodo di autenticazione valido.

Riepilogo

Usate ip -brief address per l'inventario, ip -4 address o ip -6 address per i dettagli e ip route get per una ricerca verso una destinazione. Interpretate sempre famiglia, ambito, spazio dei nomi e punto di osservazione: un indirizzo locale, un'origine proposta e l'IP visto su Internet rispondono a domande diverse.