Come posso cancellare la cache DNS?


191

Ho appena aggiornato il record DNS ( ns1, ns2, ns3.myhostingcompany.com) per un sito che ho ospitato, ma ho ancora la pagina di parcheggio registrar di domini.

Mi piacerebbe vedere se il problema riguarda i record DNS nella cache di Ubuntu. C'è un modo per cancellare la cache DNS di Ubuntu? (se esiste una cosa del genere?)


1
Inoltre, controlla /etc/hosts. Sono appena stato sicuro che il vecchio indirizzo IP del mio dominio fosse stato memorizzato nella cache, ma strace ping example.comho solo rivelato che avevo dimenticato di rimuovere il /etc/hostsrecord che avevo aggiunto tempo fa a causa della mancanza di pazienza per la propagazione del DNS.
Ulidtko,

2
molte di queste risposte suggeriscono che la memorizzazione nella cache sia disabilitata per impostazione predefinita, ma fanno anche riferimento a versioni precedenti. Sembra certamente essere
attivo

Risposte:


64

Per 18.04 e versioni successive

Guarda la risposta di Mike Shultz .

Per l'11.10 e sotto

Ubuntu non memorizza nella cache i record DNS per impostazione predefinita, quindi se non hai installato una cache DNS non c'è nulla da cancellare.

I record DNS sono probabilmente memorizzati nella cache dai server DNS del tuo provider, quindi se vuoi verificare se le modifiche DNS che hai apportato hanno avuto successo puoi interrogare un server DNS dal tuo servizio di hosting del dominio con dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Si desidera che Ubuntu inizi a memorizzare nella cache DNS che consiglio di installare pdnsdinsieme resolvconf. nscdè difettoso e non consigliabile.


14
Qualche riferimento sul perché nscd è difettoso? È ancora buggy oggi (2012-10)?
jjmontes,

3
Puoi aggiornare la tua risposta - ATM sembra che le versioni Ubuntu 11.10 e successive registrino nella cache i record DNS.
Martin Konecny,

71

Ubuntu 17.04 e versioni successive (18.04)

Da Ubuntu 17.04 e successivi, systemd-resolve viene utilizzato per DNS. Puoi svuotare le cache di systemd in questo modo:

sudo systemd-resolve --flush-caches

2
OMG, mi vuoi sposare? Risolto il mio problema con il 18.04 anche \ o /
NiKo

5
Questo non ha funzionato per me su 16.04 LTS - ma è stato utile vedere un altro modo in cui avrebbe potuto essere memorizzato nella cache:sudo systemd-resolve --statistics
Phil

hai salvato la giornata
Danilo Gomes il

1
Non funziona il 18.04
LnxSlck

1
Per me, systemctl restart systemd-resolved.serviceha funzionato anche il 18.04.
Justin Sane,

69

12.04

Ubuntu 12.04 usa quello dnsmasqche è integrato network-manager, ma non memorizza nella cache DNS quindi non è necessario scaricarlo. Ecco una linea di esempio dalla mia syslogper dimostrare questo punto:

dnsmasq[2980]: started, version 2.59 cache disabled

Non è inoltre necessaria alcuna configurazione di dnsmasq. Se si esegue con le impostazioni di stock, non sarà memorizzato nella cache DNS, per farlo, è necessario configurarlo esplicitamente come descritto in questo articolo di Ubuntu .

Se si desidera aggiornare le impostazioni è possibile disabilitare e quindi abilitare la rete o eseguire

sudo service network-manager restart

Questo riavvia dnsmasqperché è incorporato in network-manager; controlla le tue syslogprove per questo.

Se si utilizza una connessione cablata con dhcp network manager, le impostazioni verranno prese direttamente dal router e la connessione verrà stabilita automaticamente quando si accede a Ubuntu. È possibile verificare che le impostazioni siano corrette nel router se è possibile accedervi tramite l'interfaccia Web e, se necessario, riavviarlo. Se si tratta di un problema generale con DNS, potresti provare a utilizzare Google DNS anziché il tuo isp DNS, e maggiori informazioni su questo sono dettagliate qui .


sudo service network-manager restartha fatto il trucco per me con Debian
Pierre de LESPINAY il

61

Nota che Ubuntu utilizza la risoluzione di systemd dalla 17.04 in poi, quindi questa risposta non si applica più alle versioni recenti di Ubuntu. Vedi " Svuota la cache DNS in Ubuntu 17.04 e successive (18.04) "

Per impostazione predefinita, DNS non è memorizzato nella cache in Ubuntu <17.04 (ma potrebbe essere memorizzato nella cache della rete o dell'applicazione)

Per confermare in un modo o nell'altro se la dnsmasqmemorizzazione nella cache, esegui ps ax | grep dnsmasqe osserva il comando di esecuzione. Ecco una ripartizione della mia macchina 13.10 predefinita:

/ usr / sbin / dnsmasq \
  --no-resolv \
  --keep-in-primo piano \
  --no-hosts \
  --bind-interfaces \
  --pid-file = / var / run / NetworkManager / dnsmasq.pid \
  --listen-address = 127.0.1.1 \
  --conf-file = / var / run / NetworkManager / dnsmasq.conf \
  --cache-size = 0 \
  --proxy-dnssec \
  --enable-dbus = org.freedesktop.NetworkManager.dnsmasq \
  --conf-dir = / etc / NetworkManager / dnsmasq.d

/etc/NetworkManager/dnsmasq.dè vuoto per impostazione predefinita. Quindi non ci sono override in arrivo e solo per verificare --cache-size=0significa cosa pensiamo significhi (anziché una cache illimitata ), man dnsmasqmostra:

-c, --cache-size=<cachesize>
  Set the size of dnsmasq's cache. The default is 150 names. 
  Setting the cache size to zero disables caching.

Quindi, sebbene dnsmasq possa memorizzare nella cache DNS, non è possibile memorizzare nella cache. Puoi controllare la tua macchina e varie directory di configurazione per verificare di essere sulla stessa pagina.

Se riscontri problemi di cache, è probabile che ciò accada in uno dei seguenti punti:

  • A monte del tuo computer. Cache di alcuni router. Molte reti aziendali memorizzeranno nella cache DNS. Molti server DNS gestiti dall'ISP e useranno le loro cache. L'unico modo per garantire contro una cache di rete è utilizzare una cache che è possibile aggiornare manualmente. Ecco perché mi piace OpenDNS.
  • Nell'applicazione client (in particolare i browser). Le applicazioni possono eseguire qualsiasi tipo di cache su cui Ubuntu non ha alcun effetto. Come Firefox memorizza nella cache DNS . Come cancellare la cache DNS di Chrome . Altri browser (e applicazioni) potrebbero avere i propri meccanismi.
  • Sto raschiando la canna qui, ma forse hai installato un server DNS non standard in Ubuntu invece di attivare la cache dnsmasq. Ci sono molti: nscd, DJBDNS dnscache(aka tinydns), pdns, pdnsd, Bind9 (e le sue varianti), e più non posso nemmeno ricordare. Questi saranno probabilmente evidenziati in /etc/resolv.conf(con config in / etc / resolvconf / `per autogen quel file). Di seguito viene mostrata una query DNS intercettata localmente:

    $ nslookup askubuntu.com
    Server:     127.0.1.1
    Address:    127.0.1.1#53
    
    Non-authoritative answer:
    Name:   askubuntu.com
    Address: 198.252.206.24
    

    Se non stai colpendo 8.8.8.8 (o qualunque cosa ti aspetti dal tuo server DNS), controlla invece cosa stai colpendo. Nel mio caso, vedo che questo è solo dnsmasqimpostato per rispecchiare le query DNS per LXC, ma nel tuo caso potrebbe fare cose cattive nella cache.

    Se hai eseguito la memorizzazione delle cache elencate, il processo per cancellare ciascuna varia:

    sudo /etc/init.d/nscd reload    # nscd
    sudo /etc/init.d/named restart  # bind9
    

In una nota leggermente correlata, vedere questo per abilitare la memorizzazione nella cachednsmasq .


1
Il mio output da ps aux | grep è uguale al tuo, eppure qualcosa sta sicuramente memorizzando nella cache i DNS sul mio computer. Se non è dnsmasq è qualcos'altro. Dimostrazione: ho creato un sottodominio sul mio server, ma non sono riuscito a eseguirne il ping, l'host non è raggiungibile. Ho controllato su downforeveryoneorjustme.com ed era attivo, quindi il problema di propagazione è stato scartato. Non il mio router, né il mio ISP, perché utilizzo il DNS di Google 8.8.8.8. Quindi ho riavviato il computer (e NON il router) e sono riuscito a raggiungere il dominio. Ho provato di nuovo una dozzina di volte prima di riavviare senza fortuna. Primo tentativo dopo il riavvio ha raggiunto l'host.
matteo,

E questa non era la prima volta che provavo la stessa cosa, comunque. Mesi fa lo stesso è accaduto e l'unico modo per raggiungere il dominio era riavviare il computer, ma poi avevo una versione precedente di Ubuntu.
Matteo

@matteo Il browser?
Oli

no, come ho detto, ho provato con il ping, non (solo) i browser.
Matteo

@matteo Ne ho aggiunti altri ma sto finendo le idee. Semplicemente non ci sono molti altri posti in cui qualcuno potrebbe mettere in cache DNS :)
Oli

39

Per 12.04:

Ubuntu 12.04 memorizza nella cache DNS usando dnsmasq (vedi man dnsmasq). Utilizzare quanto segue per cancellare la cache:

sudo kill -HUP $(pgrep dnsmasq)

Grazie! Sei il primo che ho visto menzionare qualcosa sulla cache predefinita di 12.04!
Tarka,

6
12.04 non memorizza nella cache DNS per impostazione predefinita: controlla il syslog dopo aver riavviato il gestore della rete; avrà una voce che mostra che dnsmasq inizia con cache disabilitata.

1
Non so se la cache è abilitata per impostazione predefinita, ma questa risposta ha funzionato per me.
jeyk,

Perché non solo sudo killall -HUP dnsmasq?
James Haigh,

1
usare al pkillposto di killepgrep
Robert Siemer il


11

Personalmente, userei OpenDNS e userei la loro funzione Cache Check per forzare un aggiornamento solo per assicurarmi che le modifiche funzionassero, ma non puoi garantire che si aggiorneranno per i tuoi utenti entro 48 ore.

Il DNS è una bestia lenta. La pazienza ti manterrà sano di mente.


+1 Uso OpenDNS e cancellare la cache è molto utile.
Mark Davidson,

Sono sospettoso di OpenDNS. All'inizio ero contento, ma poi ho iniziato a diventare sospettoso; anche se immagino che sia una scelta tra ISP e OpenDNS, sto meglio con OpenDNS, giusto?
Jono,

2
Direi che OpenDNS è il male minore. Vorrebbero monetizzare il tuo traffico ma solo su hit di dominio non validi.
Oli

@Oli Il link non è attivo. Se lo usi ancora, potresti aggiornare i link?
Shayan

7

Se stai usando nscd:

sudo /etc/init.d/nscd restart

Vale la pena ricordare che potrebbe non essere il sistema operativo che lo sta memorizzando nella cache. A tutti piace memorizzare nella cache DNS ... Alcuni test:

Controlla se è il nuovo o il vecchio IP. La maggior parte dei browser memorizza anche nella cache DNS, quindi se non hai riavviato Chromium o qualsiasi altra cosa potresti non vedere le ultime novità.

ping yourdomain.com

Passa il tuo nameserver locale in /etc/resolv.conf a un altro provider, google o livello, esempi:

nameserver 8.8.8.8
nameserver 4.2.2.2

E poi esegui nuovamente il ping.

Verificare che il router non stia memorizzando nella cache DNS in alcun modo. (Varia in base al router / firmware / ecc.)

Finalmente pazienza. Il DNS può impiegare un po 'di tempo a propagarsi su Internet.


2
Se si utilizza NetworkManager e DHCP /etc/resolve.conf verrà scaricato alla scadenza del lease DHCP, quindi sarà necessario impostare un IP statico in NetworkManager per farlo funzionare più a lungo.
LassePoulsen,

+1 Non mi ero reso conto che Firefox stesse memorizzando nella cache DNS, questo mi ha aiutato molto.
onda

+1 per il passaggio del nameserver locale a google ha funzionato
Bibek Sharma il

5

Tutte le risposte sopra hanno dimenticato una cosa importante nella risoluzione dei nomi: generalmente i server DNS a cui si richiede la risoluzione dei nomi non sono quelli che detengono i record stessi (il server autorevole). Poiché ogni record DNS viene fornito con un valore Time To Live che obbliga ciascun server DNS nella catena di risoluzione a eseguire la memorizzazione nella cache per la quantità di secondi indicata da questo valore. Quindi non solo puoi memorizzare nella cache della tua macchina, ma Certamente il risultato della ricerca del nome verrà memorizzato nella cache da qualche parte su un server che non controlli.

L'unica soluzione per ricevere immediatamente una notifica di una modifica del record del nome è utilizzare un valore TTL pari a 0 quando si crea / aggiorna la voce nel server dei nomi autorevole. Ciò significa che per ogni risoluzione dei nomi verrà colpito il server, in genere ciò non è consentito dai registrar. Ad esempio, possono fornire un elenco di valori TTL predefiniti in cui è possibile scegliere.

Gestisco nomi di dominio diversi e per essere sicuro che la modifica sia ben applicata nei server dei nomi autorevoli, sto usando uno strumento chiamato dnstracerche può mostrare il risultato della ricerca su ciascun server dalla radice DNS.

In conclusione, anche senza alcuna soluzione di memorizzazione nella cache DNS, ci sarà ancora un ritardo tra il momento in cui cambi i record DNS e la modifica viene visualizzata su un PC. Questo ritardo dipende in larga misura dal TTL dei record e dal numero di server DNS tra il PC e il server dei nomi autorevole.


Certo, ma se questo era il problema, il riavvio del computer non lo avrebbe risolto.
Matteo

2

Per Ubuntu 14.04, raccomando questo comando:

sudo service dns-clean

Non installato sul server predefinito. Funziona solo su 14.04 e precedenti.
RJ

1

Ho usato il seguente comando per svuotare la cache DNS sulla mia casella Ubuntu 12.10 e ha funzionato alla grande.

sudo kill -HUP $(pgrep dnsmasq)

Un altro segnale utile è il SIGUSR1 che scarica un po 'di statistica su syslog o come si nota da man dnsmasq:

In modalità --no-daemon o quando è abilitata la registrazione completa (-q), viene eseguito un dump completo del contenuto della cache.


usare al pkillposto di killepgrep
Robert Siemer il

1

Su Ubuntu 16.04, non riuscivo a cancellare la cache a meno che non facessi:

sudo service dnsmasq restart

0

Ho anche trovato delle contraddizioni, ma questo: https://superuser.com/a/521562 mi sveglia (Ubuntu 13.10 con gli ultimi aggiornamenti, nessun pacchetto di rete speciale installato).
In breve, usa questo
sudo /etc/init.d/dns-clean


0

Raccomando openDNS specialmente nei server Ubuntu remoti, allevia molto dolore ...

Come farlo? Bene...

cd /etc/dhcp
sudo nano dhclient.conf

inserire questo PRIMA della riga "richiesta maschera di sottorete ..."

supersede domain-name-servers 208.67.222.222,208.67.220.220;

questo riavvierà l'interfaccia così velocemente che non dovresti nemmeno perdere la connessione SSH

sudo ifdown eth0 && sudo ifup eth0

controlla questo per vedere se il tuo nuovissimo openDNS è installato correttamente

cat /etc/resolv.conf

Questa non è sicuramente una risposta alla domanda.
Blafasel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.