Si modifica una voce DNS, si riavvia un servizio, si testa una connessione e la macchina Linux continua a risolvere il vecchio risultato. In questo caso, riavviare l’intero server raramente è la soluzione giusta. Spesso è possibile svuotare completamente la cache DNS locale, senza spegnere la macchina.
Il punto importante è sapere chi tiene la cacheA seconda della distribuzione, potresti imbatterti in systemd-risoltoNetworkManager con un plugin DNS, nscd, UN dnsmasq locale, o semplicemente nessuna cache DNS locale effettivamente attiva.
Suggerisco un metodo semplice: identifica il resolver, svuota la cache appropriata, quindi verifica di non confondere la cache locale, il DNS pubblico e la cache dell’applicazione.

Inizia identificando il resolver utilizzato
Prima di eseguire comandi casuali, controlla come la tua macchina risolve i nomi. Il primo controllo viene effettuato con /etc/resolv.conf :
ls -l /etc/resolv.conf
readlink -f /etc/resolv.conf
cat /etc/resolv.conf
Se il file punta a un percorso systemd come /run/systemd/resolve/stub-resolv.confHai una buona possibilità di usare systemd-risoltoConferma con:
systemctl è attivo systemd risolto
stato di risoluzionectl
Su alcuni computer, NetworkManager gestisce anche il DNS. Verificane lo stato:
systemctl is-active NetworkManager
stato generale di nmcli
Se stai amministrando un server più vecchio, controlla anche se nscd O dnsmasq giri:
systemctl is-active nscd
systemctl è attivo dnsmasq
Questo passaggio evita un errore comune: svuotare la cache di systemd-risolto Se la macchina non utilizza questo servizio, significa che Linux sta ignorando il tuo comando.
Cancella la cache systemd-resolved con resolvectl
Nelle distribuzioni recenti, il comando più pulito è solitamente risolverectlInizia esaminando le statistiche del risolutore:
statistiche di risoluzionectl
A questo punto è possibile cancellare la cache DNS locale:
sudo resolvectl svuota-cache
La documentazione di risolverectl lo indica chiaramente flush-cache Questo comando cancella i record DNS che il servizio gestisce localmente. Non si tratta di un riavvio della rete, ed è proprio questo lo scopo del comando.
Per una verifica corretta, è possibile reimpostare i contatori, eseguire una risoluzione e quindi esaminare le statistiche:
sudo resolvectl reset-statistics
resolvectl query www.linuxencaja.net
statistiche di risoluzionectl
Se risolverectl non esiste, prova il vecchio nome su alcune distribuzioni:
systemd-resolve --statistics
sudo systemd-resolve --flush-caches
Preferisco ancora risolverectl quando sarà disponibile. Questo è l’ordine attuale intorno systemd-risolto.
Se NetworkManager gestisce il DNS
Su una macchina o un server Linux con NetworkManager, la cache potrebbe essere collegata al plugin DNS utilizzato. Se hai modificato una configurazione DNS gestita da NetworkManager, richiedi prima un ricaricamento DNS:
sudo nmcli general reload dns-full
Il riferimento nmcli descrivere DNS pieno come riavviare il plugin DNS. Questo è utile, ad esempio, se NetworkManager utilizza un plugin dnsmasq con i file sotto /etc/NetworkManager/dnsmasq.d/.
Successivamente, verifica che la risoluzione stia effettivamente passando attraverso i server previsti:
nmcli device show | grep -E 'DNS|DOMAIN'
stato di risoluzionectl
Evitate di riavviare NetworkManager alla cieca su una macchina remota. systemctl restart NetworkManager Questo può interrompere la connessione di rete. Se sei connesso tramite SSH, mantieni una console di backup o una sessione già aperta. Vale la stessa logica che per un servizio di sistema: verifica prima di agire, soprattutto su un server.
Se è necessario controllare i servizi attivi prima di apportare modifiche alla rete, consultare l’articolo su systemctl e l’elenco dei servizi Linux Questa fase è stata completata con successo.
Se sono questi programmi a nasconderlo, cancellate i dati da nscd o dnsmasq.
nscd Non viene utilizzato esclusivamente per il DNS. Può memorizzare nella cache diversi database NSS, tra cui ospitiSe il servizio è attivo, è possibile invalidare solo la cache dell’host:
sudo nscd -i hosts
La pagina nscd(8) Questa opzione di invalidazione è documentata. In caso di dubbi sullo stato del servizio:
systemctl status nscd --no-pager
journalctl -u nscd -b --no-pager
Per dnsmasqIl caso dipende dalla tua configurazione. Su un server che avvia un servizio reale dnsmasqRiavviando il servizio, la cache viene svuotata:
sudo systemctl restart dnsmasq
systemctl status dnsmasq --no-pager
Se dnsmasq viene utilizzato solo come plugin da NetworkManager, utilizzare invece l’altro metodo nmcli general reload dns-fullRiavviare il servizio sbagliato potrebbe non risolvere il problema, oppure potrebbe semplicemente farti perdere tempo sul piano sbagliato.
Verifica che il problema risiedesse effettivamente nella cache locale.
Dopo aver svuotato la cache, verifica la risoluzione a livello di sistema:
getent hosts www.linuxencaja.net
resolvectl query www.linuxencaja.net
Se hai scavare O trapanoConfronta anche con un resolver pubblico. Su Debian o Ubuntu, scavare di solito proviene dalla confezione dnsutils :
visita www.linuxencaja.net
dig @1.1.1.1 www.linuxencaja.net
Se il resolver pubblico continua a restituire il vecchio indirizzo IP, probabilmente il problema non è dovuto al tuo sistema Linux. Potrebbero essere coinvolti il TTL del DNS, la cache del provider di servizi Internet o una propagazione incompleta. Svuotare la cache locale non obbliga l’intera Internet a dimenticare una vecchia risposta.
Considera anche le applicazioni. Un browser, un proxy, un runtime o un contenitore possono mantenere la propria cache o risoluzione. Se un arricciare Se la shell funziona ma il browser continua a non funzionare, il problema non è più necessariamente a livello di systemd-risolto.
Se la risoluzione DNS continua a presentare anomalie, consulta i log.
Quando la risoluzione rimane incoerente, controlla i log del servizio effettivamente utilizzato. Per systemd-risolto :
journalctl -u systemd-resolved -b --no-pager
Per Gestore di rete:
journalctl -u NetworkManager -b --no-pager
Verificate anche lo stato generale della rete. Un percorso errato, un server DNS inaccessibile o un firewall troppo restrittivo possono dare l’impressione di una cache bloccata:
percorso IP
resolvectl dns
dominio risolvectl
ss -lntup
Se vuoi controllare cosa sta realmente ascoltando la macchina, puoi integrarla con la guida su Aprire le porte in Linux utilizzando ss e netstatPer un problema dopo un cambio di indirizzo, consultare l’articolo su indirizzo IP statico su Debian può anche contribuire a ricostruire correttamente le fondamenta della rete.
La mia sequenza di pulizia prima di riavviare qualsiasi cosa
Su una tipica macchina Linux, di solito seguo questa sequenza:
- Leggere
/etc/resolv.confe identificare il resolver; - controllo
systemd-risoltoGestore di rete,nscdOdnsmasq; - svuota solo la cache pertinente;
- prova con
host getenti,query di risoluzionectlOscavare; - Leggere i log prima di riavviare un servizio di rete;
- Riavviare NetworkManager o l’intera macchina solo come ultima risorsa.
Se ti trovi su un server remoto, fai ancora più attenzione. Cancellare la cache DNS locale è un’operazione semplice. Riavviare un servizio di rete è molto più complesso. Mantieni una sessione aperta e controlla i log con journalctlQuindi, prima di fare qualsiasi altra cosa, verifica la risoluzione dalla shell.