¿Cómo borro el caché de DNS?

191

Acabo de actualizar el registro DNS ( ns1, ns2, ns3.myhostingcompany.com) para un sitio que tengo alojado, pero sigo teniendo la página de registro de dominios de estacionamiento.

Me gustaría ver si el problema son los registros DNS en caché de Ubuntu. ¿Hay alguna manera de borrar el caché DNS de Ubuntu? (si tal cosa existe?)

Jono
fuente
1
Además, verifique /etc/hosts. Acabo de estar seguro de que la antigua dirección IP de mi dominio se estaba almacenando en caché, pero solo strace ping example.comrevelé que olvidé eliminar el /etc/hostsregistro que agregué hace un tiempo debido a la falta de paciencia para la propagación de DNS.
ulidtko
2
Muchas de estas respuestas sugieren que el almacenamiento en caché está deshabilitado de forma predeterminada, pero también hacen referencia a versiones anteriores. Ciertamente parece estar
activado

Respuestas:

64

Para 18.04 y superior

Mira la respuesta de Mike Shultz .

Para 11.10 y menos

Ubuntu no almacena en caché los registros de DNS de forma predeterminada, por lo que a menos que haya instalado un caché de DNS, no hay nada que borrar.

Es probable que los servidores DNS de su proveedor almacenen en caché los registros DNS, por lo que si desea verificar si los cambios DNS que realizó fueron exitosos, puede interrogar a un servidor DNS desde su servicio de alojamiento de dominios con dig:

dig -t a ns1.myhostingcompany.com @domain_registrar_dns_server

Si desea que Ubuntu comience a almacenar en caché dns, recomiendo instalarlo pdnsdjunto con resolvconf. nscdTiene errores y no es aconsejable.

Li Lo
fuente
14
¿Alguna referencia de por qué nscd tiene errores? ¿Sigue teniendo errores hoy (2012-10)?
jjmontes
3
¿Puede actualizar su respuesta? ATM parece que las versiones de Ubuntu 11.10+ hacen registros DNS de caché.
Martin Konecny
71

Ubuntu 17.04 y superior (18.04)

Desde Ubuntu 17.04 en adelante, systemd-resolve se usa para DNS. Puede vaciar las cachés de systemd de esta manera:

sudo systemd-resolve --flush-caches
Mike Shultz
fuente
2
Dios mío, ¿te casarás conmigo? También resolvió mi problema con 18.04 \ n /
NiKo
55
Esto no funcionó para mí en 16.04 LTS, pero fue útil para ver otra forma en que podría haber estado almacenando en caché:sudo systemd-resolve --statistics
Phil
salvaste el día
Danilo Gomes
1
No funciona el 18.04
LnxSlck
1
Para mí, systemctl restart systemd-resolved.servicetambién funcionó el 18.04.
Justin Sane
69

12.04

Ubuntu 12.04 usa el dnsmasqque está integrado network-manager, pero no almacena en caché dns, por lo que no hay necesidad de vaciarlo. Aquí hay una línea de muestra de mi syslogpara probar ese punto:

dnsmasq[2980]: started, version 2.59 cache disabled

Tampoco hay necesidad de ninguna configuración de dnsmasq. Si está ejecutando con la configuración de stock, no almacenará en caché dns, por lo que debe hacerlo explícitamente como se describe en este artículo de Ubuntu .

Si desea actualizar su configuración, puede deshabilitar y luego habilitar la red o ejecutar

sudo service network-manager restart

Esto se reinicia dnsmasqporque está integrado en network-manager; compruebe su syslogevidencia para esto.

Si está utilizando una conexión por cable con dhcp network manager, tomará la configuración directamente desde su enrutador y su conexión se establecerá automáticamente cuando inicie sesión en Ubuntu. Puede verificar que la configuración sea correcta en su enrutador si puede acceder a ella a través de la interfaz web, y quizás reiniciarla si es necesario. Si se trata de un problema general con dns, puede intentar usar dns de Google en lugar de su dns isp, y aquí se detalla más información al respecto .

fossfreedom
fuente
sudo service network-manager restarthizo el truco para mí con Debian
Pierre de LESPINAY
61

Tenga en cuenta que Ubuntu usa systemd-resolve desde 17.04 en adelante, por lo que esta respuesta ya no se aplica a las versiones recientes de Ubuntu. Consulte " Vaciar caché DNS en Ubuntu 17.04 y superior (18.04) "

De manera predeterminada, el DNS no se almacena en caché en Ubuntu <17.04 (pero puede almacenarse en caché en la red o aplicación)

Para confirmar de una forma u otra si se dnsmasqestá almacenando en caché, ejecute ps ax | grep dnsmasqy mire el comando en ejecución. Aquí hay un desglose de mi máquina predeterminada 13.10:

/ usr / sbin / dnsmasq \
  --no-resolv \
  - mantener en primer plano \
  --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.destá vacío por defecto. Por lo tanto, no hay anulaciones allí y solo para verificar --cache-size=0significa lo que creemos que significa (en lugar de un caché ilimitado ), man dnsmasqmuestra:

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

Entonces, aunque dnsmasq puede almacenar en caché DNS, no está almacenando en caché la caja. Puede verificar su máquina y varios directorios de configuración para verificar que está en la misma página.

Si observa problemas de caché, es probable que esto ocurra en uno de los pocos lugares:

  • Upstream desde su computadora. Algunos enrutadores caché. Muchas redes corporativas almacenarán en caché DNS. Muchos servidores DNS ejecutados por ISP utilizarán sus propios cachés. La única forma de garantizar un caché de red es usar un caché que pueda actualizar manualmente. Por eso me gusta OpenDNS.
  • En la aplicación cliente (especialmente navegadores). Las aplicaciones pueden hacer todo tipo de almacenamiento en caché en el que Ubuntu no tiene ningún efecto. Cómo Firefox almacena en caché DNS . Cómo borrar el caché DNS de Chrome . Otros navegadores (y aplicaciones) pueden tener sus propios mecanismos.
  • Estoy raspando el barril aquí, pero tal vez haya instalado un servidor DNS no estándar en Ubuntu en lugar de activar el almacenamiento en caché dnsmasq. Hay muchos: nscd, djbdns dnscache(también conocido como TinyDNS), pdns, pdnsd, Bind9 (y sus variantes), y más que ni siquiera puede recordar. Esto probablemente se evidenciará en /etc/resolv.conf(con config en / etc / resolvconf / `para autogenificar ese archivo). A continuación se muestra una consulta DNS interceptada 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
    

    Si no está golpeando 8.8.8.8 (o lo que sea que espere que sea su servidor DNS), compruebe lo que está golpeando en su lugar. En mi caso, puedo ver que esto solo está dnsmasqconfigurado para reflejar las consultas DNS para LXC, pero en su caso podría estar haciendo cosas malas de caché.

    Si ha terminado con los cachés enumerados, el proceso para borrarlos varía:

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

En una nota ligeramente relacionada, vea esto para habilitar el almacenamiento en cachédnsmasq .

Oli
fuente
1
Mi salida de ps aux | grep es la misma que la suya, pero definitivamente algo es el almacenamiento en caché de DNS en mi máquina. Si no es dnsmasq, es otra cosa. Prueba: Creé un subdominio en mi servidor, pero no pude hacer ping, host inaccesible. Lo revisé en downforeveryoneorjustme.com y estaba activo, por lo que se descartó el problema de propagación. No es mi enrutador ni mi ISP, porque uso el DNS de Google 8.8.8.8. Luego reinicié la computadora (y NO el enrutador) y pude llegar al dominio. Había estado volviendo a intentarlo una docena de veces antes de reiniciar sin suerte. Primero intente después de reiniciar llegó al host.
matteo
Y esta no fue la primera vez que experimenté lo mismo, por cierto. Hace meses sucedió lo mismo y la única forma en que pude llegar al dominio fue reiniciando la computadora, pero luego tuve una versión anterior de Ubuntu.
matteo
@matteo El navegador?
Oli
no, como dije, probé con ping, no (solo) los navegadores.
matteo
@matteo He agregado más pero me estoy quedando sin ideas. Simplemente no hay muchos más lugares donde alguien pueda almacenar en caché DNS :)
Oli
39

Para el 12.04:

Ubuntu 12.04 almacena en caché DNS usando dnsmasq (ver man dnsmasq). Use lo siguiente para borrar el caché:

sudo kill -HUP $(pgrep dnsmasq)
Zacarías
fuente
¡Gracias! ¡Eres el primero que he visto mencionar algo sobre el almacenamiento en caché predeterminado de 12.04!
Tarka
66
12.04 no almacena en caché dns de forma predeterminada: compruebe su registro del sistema después de reiniciar el administrador de red; tendrá una entrada que muestra que dnsmasq está comenzando con caché deshabilitado.
1
No sé si el caché está habilitado de forma predeterminada, pero esta respuesta funcionó para mí.
jeyk
¿Por qué no solo sudo killall -HUP dnsmasq?
James Haigh
1
usar en pkilllugar de killypgrep
Robert Siemer
15

sudo /etc/init.d/nscd restart

http://www.ubuntugeek.com/howto-clearflush-dns-cache-in-ubuntu.html

También como nota, puede verificar y ver si sus cambios de DNS se han propagado usando dig y buscando contra otra persona que no sean sus servidores DNS predeterminados. En este caso google DNS.

dig @8.8.8.8 example.com

Mark Davidson
fuente
12
Vale la pena señalar que nscd no está instalado por defecto.
Scaine
11

Personalmente, usaría OpenDNS y su función de verificación de caché para forzar una actualización solo para asegurarme de que los cambios funcionen, pero no puede garantizar que se actualicen para sus usuarios dentro de las 48 horas.

DNS es una bestia lenta. La paciencia te mantendrá cuerdo.

Oli
fuente
+1 Utilizo OpenDNS y también clear cache es muy útil.
Mark Davidson el
Sospecho de OpenDNS. Al principio estaba contento con eso, pero luego comencé a sospechar; aunque supongo que si es una elección entre ISP y OpenDNS, estoy mejor con OpenDNS, ¿verdad?
Jono
2
Yo diría que OpenDNS es el mal menor. A ellos les gustaría monetizar su tráfico, pero solo en golpes de dominio malos.
Oli
@Oli El enlace está caído. Si aún lo usa, ¿podría actualizar los enlaces?
Shayan
7

Si está utilizando nscd:

sudo /etc/init.d/nscd restart

Vale la pena mencionar que podría no ser el sistema operativo el que lo está almacenando en caché. A todos les gusta almacenar en caché DNS ... Algunas pruebas:

Verifique si se trata de la IP nueva o antigua. La mayoría de los navegadores también almacenan en caché DNS, por lo que si no ha reiniciado Chromium o lo que sea, es posible que no vea lo último.

ping yourdomain.com

Cambie su servidor de nombres local en /etc/resolv.conf a otro proveedor, google o nivel, ejemplos:

nameserver 8.8.8.8
nameserver 4.2.2.2

Y luego haz ping nuevamente.

Verifique para asegurarse de que su enrutador no esté almacenando en caché DNS de ninguna forma. (Varía según el enrutador / firmware / etc.)

Finalmente paciencia. El DNS puede demorar un poco en propagarse por Internet.

bicicletas y código
fuente
2
Si usa NetworkManager y DHCP /etc/resolve.conf se enjuagará cuando caduque el arrendamiento de DHCP, por lo que deberá configurar una ip estática en NetworkManager para que esto funcione durante más tiempo.
LassePoulsen
+1 No me di cuenta de que Firefox estaba almacenando en caché DNS, esto ayudó mucho.
onda
+1 para cambiar el servidor de nombres local a google funcionó
Bibek Sharma
5

Todas las respuestas anteriores olvidaron una cosa importante en la resolución de nombres: en general, los servidores DNS a los que solicita la resolución de nombres no son los que tienen los registros en sí (el servidor autorizado). Como cada registro DNS viene con un valor de Tiempo de vida que obligará a cada servidor DNS en la cadena de resolución a almacenar en caché durante la cantidad de segundos mencionada por este valor. Por lo tanto, no solo puede almacenar en caché en su máquina, sino que CIERTAMENTE el resultado de la búsqueda de nombre se almacenará en caché en algún lugar de un servidor que no controle.

La única solución para recibir una notificación inmediata de un cambio de registro de nombre es usar un valor TTL de 0 al crear / actualizar la entrada en el servidor de nombres autorizado. Pero esto significa que para cada resolución de nombre, el servidor se verá afectado, generalmente los registradores no lo permiten. Por ejemplo, pueden proporcionar una lista de valores TTL predefinidos en los que puede elegir.

Administro diferentes nombres de dominio y para asegurarme de que el cambio se aplica bien en los servidores de nombres autorizados, estoy usando una herramienta llamada dnstracerque puede mostrar el resultado de búsqueda en cada servidor desde la raíz DNS.

En conclusión, incluso sin una solución de almacenamiento en caché de DNS, habrá un retraso entre el momento en que cambie los registros DNS y el cambio se vea en una PC. Este retraso depende en gran medida del TTL de los registros y del número de servidores DNS entre su PC y el servidor de nombres autorizado.

Benoit
fuente
Por supuesto, pero si ese fuera el problema, reiniciar la computadora no lo solucionaría.
matteo
2

Para ubuntu 14.04, recomiendo este comando:

sudo service dns-clean
alphayax
fuente
No en las instalaciones predeterminadas del servidor. Solo funciona en 14.04 y versiones inferiores.
RJ
1

Usé el siguiente comando para vaciar el caché dns en mi cuadro ubuntu 12.10 y funcionó fantástico.

sudo kill -HUP $(pgrep dnsmasq)

Otra señal útil es el SIGUSR1, que volca una pequeña estadística en syslog o como se nota en man dnsmasq:

En el modo --no-daemon o cuando el registro completo está habilitado (-q), se realiza un volcado completo del contenido de la memoria caché.

j0inty
fuente
utilizar en pkilllugar de killypgrep
Robert Siemer
1

En Ubuntu 16.04, no podía borrar el caché a menos que lo hiciera:

sudo service dnsmasq restart
Volomike
fuente
0

También encontré contradicciones, pero esto: https://superuser.com/a/521562 woks para mí (Ubuntu 13.10 con las últimas actualizaciones, no hay paquetes de red especiales instalados).
En resumen, solo use esto
sudo /etc/init.d/dns-clean

Nitz
fuente
0

Recomiendo openDNS especialmente en servidores remotos de Ubuntu, alivia mucho el dolor ...

¿Cómo hacerlo? Bien...

cd /etc/dhcp
sudo nano dhclient.conf

inserte esto ANTES de la línea "solicitar máscara de subred ..."

supersede domain-name-servers 208.67.222.222,208.67.220.220;

Esto reiniciará la interfaz tan rápido que ni siquiera debería perder su conexión SSH

sudo ifdown eth0 && sudo ifup eth0

verifique esto para ver si su nuevo openDNS está instalado correctamente

cat /etc/resolv.conf
D.Snap
fuente
Eso definitivamente no es una respuesta a la pregunta.
blafasel