Come si cancella la cache DNS?

150

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

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

    
posta Jono 13.08.2010 - 23:23

13 risposte

50

Per 11,1 e sotto

Ubuntu non memorizza nella cache i record dns per impostazione predefinita, quindi, a meno che tu non abbia installato una cache dns, non c'è nulla da cancellare.

I record DNS sono probabilmente memorizzati nella cache dei server DNS del tuo provider, quindi se vuoi controllare se le modifiche al 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

Se vuoi che Ubuntu inizi a memorizzare nella cache dns ti consiglio di installare pdnsd insieme a resolvconf . nscd è bacato e non consigliabile.

    
risposta data Li Lo 14.08.2010 - 02:13
68

12.04

Ubuntu 12.04 utilizza dnsmasq che è incorporato in network-manager , ma non cache dns quindi non è necessario svuotarlo. Ecco una linea di esempio dal mio syslog per provare quel punto:

dnsmasq[2980]: started, version 2.59 cache disabled

Non è inoltre necessaria alcuna configurazione di dnsmasq . Se stai utilizzando le impostazioni di stock, non sarà in cache di DNS, poiché per farlo devi impostarlo esplicitamente come L'articolo di Ubuntu descrive.

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

sudo service network-manager restart

Questo riavvia dnsmasq perché è incorporato in network-manager ; controlla il syslog per la prova per questo.

Se stai usando una connessione cablata con dhcp network manager prenderà le impostazioni direttamente dal tuo router e la connessione verrà stabilita automaticamente quando effettui il login su Ubuntu. È possibile verificare che le impostazioni siano corrette nel router se è possibile accedervi tramite l'interfaccia Web e, eventualmente, riavviarla.  Se si tratta di un problema generale con dns, puoi provare a utilizzare Google dns invece di isp dns, e ulteriori informazioni su questo sono dettagliato qui .

    
risposta data user76204 14.09.2012 - 22:39
58

Per impostazione predefinita, il DNS non è memorizzato nella cache in Ubuntu (ma potrebbe essere memorizzato nella cache nella rete o nell'applicazione)

Per confermare in un modo o nell'altro se dnsmasq è in cache, esegui ps ax | grep dnsmasq e controlla il comando in esecuzione. Ecco una ripartizione della mia macchina 13.10 predefinita:

/usr/sbin/dnsmasq \
  --no-resolv \
  --keep-in-foreground \
  --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 controllare --cache-size=0 significa cosa pensiamo significhi (invece di una cache illimitata ), man dnsmasq mostra:

-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 mentre dnsmasq può cache DNS, non sta memorizzando nella cache la casella. Puoi controllare la tua macchina e varie directory di configurazione per verificare di essere sulla stessa pagina.

Se visualizzi problemi con la cache, è probabile che ciò avvenga in uno dei pochi luoghi:

  • A monte del tuo computer. Alcuni router si nascondono. Molte reti aziendali nascondono il DNS. Molti server DNS gestiti da ISP utilizzano le proprie cache. L'unico modo per garantire contro una cache di rete è utilizzare una cache che è possibile aggiornare manualmente. Questo è il motivo per cui mi piace OpenDNS.
  • Nell'applicazione client (in particolare i browser). Le applicazioni possono fare ogni sorta di caching personale su cui Ubuntu non ha alcun effetto. Come Firefox nasconde il DNS . Come cancellare la cache DNS di Chrome . Altri browser (e applicazioni) potrebbero avere i loro meccanismi.
  • Sto raschiando il barile qui, ma forse hai installato un server DNS non standard in Ubuntu invece di attivare il caching in dnsmasq . Ce ne sono molti: nscd , DJBDNS dnscache (aka TinyDNS), pdns , pdnsd , Bind9 (e le sue varianti), e altro ancora non ricordo. Questi probabilmente saranno evidenziati in /etc/resolv.conf (con config in / etc / resolvconf / 'per autogenare quel file). Quanto segue mostra 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 posso vedere che questo è solo dnsmasq impostato per rispecchiare le query DNS per LXC, ma nel tuo caso potrebbe fare cose cattive in cache.

    Se hai fatto delle cache elencate, il processo di cancellazione di ciascuna varia:

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

Su una nota leggermente correlata, vedi questo per abilitare il caching in dnsmasq .

    
risposta data Oli 17.03.2014 - 11:40
39

Per 12.04:

Ubuntu 12.04 fa cache DNS usando dnsmasq (vedi man dnsmasq ). Utilizza quanto segue per svuotare la cache:

sudo kill -HUP $(pgrep dnsmasq)
    
risposta data zechariah 21.07.2012 - 23:32
14

sudo /etc/init.d/nscd restart

link

Inoltre, come nota puoi controllare e vedere se le tue modifiche al DNS si sono propagate usando dig e guardando contro qualcun altro oltre ai tuoi server DNS predefiniti. In questo caso google DNS.

dig @8.8.8.8 example.com

    
risposta data Mark Davidson 13.08.2010 - 23:25
11

Personalmente, vorrei utilizzare OpenDNS e utilizzare i loro Funzione Cache Check per forzare un refresh solo per assicurarsi che le modifiche funzionino ma non puoi garantire che aggiorneranno per il tuo utenti entro 48 ore.

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

    
risposta data Oli 13.08.2010 - 23:26
9

Non sono sicuro di quale versione di Ubuntu abbia effetto, ma con Ubuntu 17.04, il mio problema era con systemd-resolve . Puoi svuotare le cache di systemd in questo modo:

sudo systemd-resolve --flush-caches
    
risposta data Mike Shultz 27.06.2017 - 06:09
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 cache anche il DNS, quindi se non hai riavviato Chromium o quello che potresti non vedere più tardi.

ping yourdomain.com

Cambia il tuo server dei nomi locale in /etc/resolv.conf con un altro provider, google o livello, esempi:

nameserver 8.8.8.8
nameserver 4.2.2.2

E poi esegui nuovamente il ping.

Assicurati che il tuo router non memorizzi nella cache il DNS in nessuna forma. (Varia in base al router / firmware / ecc.)

Finalmente, pazienza. Il DNS può richiedere un po 'di tempo per propagarsi su Internet.

    
risposta data bikesandcode 13.08.2010 - 23:33
5

Tutte le risposte di cui sopra hanno dimenticato una cosa importante nella risoluzione del nome: generalmente i server DNS a cui si richiede la risoluzione del nome non sono quelli che gestiscono i record stessi (il server autorevole). Poiché ogni record DNS viene fornito con un valore Time To Live che obbliga ogni server DNS nella catena di risoluzione a fare il caching durante il numero di secondi menzionati da questo valore. Pertanto, non solo è possibile memorizzare nella cache la macchina, ma DIMENTICAMENTE il risultato della ricerca del nome verrà memorizzato nella cache da qualche parte su un server che non controlli.

L'unica soluzione da notificare immediatamente di una modifica del record del nome consiste nell'utilizzare un valore TTL pari a 0 quando si crea / aggiorna la voce nel server dei nomi autorevole. Ma questo significa che per ogni risoluzione del nome, il server verrà colpito, di solito questo non è consentito dai registrar. Ad esempio, possono fornire un elenco di valori TTL predefiniti che puoi scegliere.

Gestisco nomi di domini diversi e per assicurarmi che le modifiche siano ben applicate nei server dei nomi autorevoli, sto utilizzando uno strumento chiamato dnstracer che può mostrare il risultato della ricerca su ciascun server dalla radice DNS.

In conclusione, anche senza una soluzione di caching DNS in atto, ci sarà comunque un ritardo tra il momento in cui cambi i record DNS e il cambiamento viene visto su un PC. Questo ritardo dipende molto dal TTL dei record e dal numero di server DNS tra il tuo PC e il server dei nomi autorevole.

    
risposta data Benoit 18.03.2014 - 11:07
2

Per ubuntu 14.04+, raccomando questo comando:

sudo service dns-clean
    
risposta data alphayax 02.06.2016 - 16:33
1

Ho usato il seguente comando per svuotare la cache dns sulla mia casella di Ubuntu 12.10 e ha funzionato fantastico.

sudo kill -HUP $(pgrep dnsmasq)

Un altro segnale utile è SIGUSR1 che scarica una piccola statistica su syslog o come è nota da man dnsmasq :

  

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

    
risposta data j0inty 25.02.2013 - 22:41
0

Ho anche trovato delle contraddizioni, ma questo: link woks for me (Ubuntu 13.10 con gli ultimi aggiornamenti, nessun pacchetto speciale di rete installato).
In breve, basta usare questo
sudo /etc/init.d/dns-clean

    
risposta data Nitz 23.03.2014 - 10:39
0

Raccomando openDNS specialmente nei server Ubuntu remoti, facilita molto il dolore ...

Come si fa? Beh ...

cd /etc/dhcp
sudo nano dhclient.conf

inserisci questo PRIMA la riga "request subnet-mask ..."

supersede domain-name-servers 208.67.222.222,208.67.220.220;

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

sudo ifdown eth0 && sudo ifup eth0

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

cat /etc/resolv.conf
    
risposta data D.Snap 23.03.2016 - 20:49

Leggi altre domande sui tag