Tutoriel Linux

Caché DNS en Linux: cómo borrarla sin reiniciar todo el equipo.

Débutant6 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Modificas una entrada DNS, reinicias un servicio, pruebas una conexión y tu máquina Linux sigue resolviendo el resultado anterior. En este caso, reiniciar todo el servidor rara vez es la solución adecuada. A menudo, la caché DNS local se puede vaciar correctamente sin apagar la máquina.

Lo importante es saber quien guarda el cachéDependiendo de la distribución, es posible que te encuentres con systemd-resueltoAdministrador de red con un complemento DNS, nscd, A dnsmasq local, o simplemente no hay una caché DNS local realmente activa.

Sugiero un método sencillo: identifique el servidor DNS, borre la caché correspondiente y, a continuación, compruebe que no está confundiendo la caché local, el DNS público y la caché de la aplicación.

Tux limpia la caché DNS de Linux que contiene servidores y símbolos de red abstractos.
Antes de reiniciar un servidor, identifique el resolvedor DNS local y borre únicamente la caché correspondiente.

Comience por identificar el resolvedor utilizado.

Antes de ejecutar comandos aleatorios, compruebe cómo resuelve nombres su máquina. La primera comprobación se realiza con /etc/resolv.conf :

ls -l /etc/resolv.conf
readlink -f /etc/resolv.conf
cat /etc/resolv.conf

Si el archivo apunta a una ruta de systemd como /run/systemd/resolve/stub-resolv.confTienes una buena probabilidad de usar systemd-resueltoConfirmar con:

systemctl está activo systemd resuelto
estado de resolución

En algunos equipos, NetworkManager también gestiona el DNS. Compruebe su estado:

systemctl está activo NetworkManager
estado general de nmcli

Si está administrando un servidor antiguo, compruebe también si nscd O dnsmasq vueltas:

systemctl está activo nscd
systemctl está activo dnsmasq

Este paso evita un error común: borrar la caché de systemd-resuelto Si la máquina no está utilizando este servicio, entonces crea que Linux está ignorando su comando.

Borre la caché systemd-resolved con resolvectl.

En las distribuciones recientes, el comando más limpio suele ser resolverctlComience por examinar las estadísticas del solucionador:

estadísticas de resolución

A continuación, puede borrar la caché DNS local:

sudo resolvectl flush-caches

la documentacion de resolverctl indica claramente que cachés de vaciado Esto borra los registros DNS que el servicio mantiene localmente. No se trata de un reinicio de la red, y ese es precisamente el objetivo del comando.

Para verificarlo correctamente, puede restablecer los contadores, ejecutar una resolución y luego revisar las estadísticas:

sudo resolvectl reset-statistics
Consulta resolvectl www.linuxencaja.net
estadísticas de resolución

Si resolverctl No existe, prueba con el nombre anterior en algunas distribuciones:

systemd-resolve --estadísticas
sudo systemd-resolve --flush-caches

todavía prefiero resolverctl cuando esté disponible. Este es el orden actual alrededor systemd-resuelto.

Si NetworkManager gestiona el DNS

En una máquina o servidor Linux con NetworkManager, la caché puede estar vinculada al complemento DNS utilizado. Si ha modificado una configuración DNS administrada por NetworkManager, primero solicite una recarga de DNS:

sudo nmcli general recarga dns-completa

la referencia nmcli describir dns-completo como reiniciar el complemento DNS. Esto es útil, por ejemplo, si NetworkManager utiliza un complemento dnsmasq con archivos bajo /etc/NetworkManager/dnsmasq.d/.

A continuación, verifique que la resolución se esté realizando correctamente a través de los servidores esperados:

nmcli device show | grep -E 'DNS|DOMAIN'
estado de resolución

Evite reiniciar NetworkManager sin antes revisarlo en una máquina remota. systemctl restart NetworkManager Esto puede interrumpir la conexión de red. Si está conectado mediante SSH, mantenga una consola de respaldo o una sesión abierta. Se aplica la misma lógica que para un servicio del sistema: verifique antes de actuar, especialmente en un servidor.

Si necesita verificar los servicios activos antes de realizar cualquier cambio en la red, el artículo sobre systemctl y la lista de servicios de Linux Este paso se ha completado con éxito.

Borra nscd o dnsmasq si son ellos los que lo están ocultando.

nscd No se utiliza únicamente para DNS. Puede almacenar en caché varias bases de datos NSS, incluidas anfitrionesSi el servicio está activo, solo puede invalidar la caché del host:

sudo nscd -i hosts

la pagina nscd(8) Esta opción de invalidación está documentada. Si tiene alguna duda sobre el estado del servicio:

systemctl status nscd --no-pager
journalctl -u nscd -b --no-pager

Para dnsmasqEl caso depende de su configuración. En un servidor que inicia un servicio real dnsmasqReiniciar el servicio borra su caché:

sudo systemctl restart dnsmasq
systemctl status dnsmasq --no-pager

Si dnsmasq Solo se utiliza como complemento por NetworkManager; utilice el otro método en su lugar. nmcli recarga general dns-fullReiniciar el servicio incorrecto puede no cambiar nada, o simplemente puede hacerle perder el tiempo en el piso equivocado.

Verifica que, efectivamente, el problema residía en la caché local.

Tras borrar la caché, compruebe la resolución en el sistema:

Los servidores getent alojan www.linuxencaja.net
Consulta resolvectl www.linuxencaja.net

si tienes excavar O perforarCompárelo también con un resolvedor público. En Debian o Ubuntu, excavar normalmente viene del paquete dnsutils :

dig www.linuxencaja.net
excavar @1.1.1.1 www.linuxencaja.net

Si el servidor DNS público sigue devolviendo la antigua dirección IP, probablemente el problema no sea tu máquina Linux. Podría deberse al TTL del DNS, a la caché del proveedor de servicios de Internet o a una propagación incompleta. Borrar la caché local no obliga a toda Internet a olvidar una respuesta antigua.

Considere también las aplicaciones. Un navegador, proxy, entorno de ejecución o contenedor puede mantener su propia caché o resolución. Si un rizo Si el shell funciona pero el navegador sigue fallando, el problema ya no está necesariamente en el nivel de systemd-resuelto.

Consulta los registros si la resolución DNS sigue siendo extraña.

Cuando la resolución siga siendo inconsistente, revise los registros del servicio que se está utilizando. Para systemd-resuelto :

journalctl -u systemd-resolved -b --no-pager

Para el administrador de red:

journalctl -u NetworkManager -b --no-pager

Compruebe también el estado general de la red. Una ruta incorrecta, un servidor DNS inaccesible o un cortafuegos demasiado estricto pueden dar la impresión de que la caché está bloqueada.

ruta IP
resolvectl dns
dominio resolverctl
ss -lntup

Si quieres comprobar qué está escuchando realmente en la máquina, puedes complementarlo con la guía en Abrir puertos en Linux usando ss y netstatPara un problema después de un cambio de dirección, consulte el artículo sobre Dirección IP estática en Debian También puede ayudar a reconstruir adecuadamente los cimientos de la red.

Mi secuencia de limpieza antes de reiniciar cualquier cosa

En una máquina Linux típica, suelo seguir esta secuencia:

  • leer /etc/resolv.conf e identificar el solucionador;
  • controlar systemd-resueltoadministrador de red, nscd O dnsmasq ;
  • borrar únicamente la caché pertinente;
  • prueba con anfitriones getent, consulta resolvectl O excavar ;
  • Lea los registros antes de reiniciar un servicio de red;
  • Reinicie NetworkManager o la máquina completa solo como último recurso.

Si está en un servidor remoto, tenga aún más cuidado. Borrar una caché DNS local es una operación sencilla. Reiniciar un servicio de red es mucho más complejo. Mantenga una sesión abierta y revise los registros con diarioctlLuego, valida la resolución desde la consola antes de tocar cualquier otra cosa.

sudo apt update && sudo apt upgrade