Inicio » [SOLUCIONADO] Fallo de DNS en Linux: 'Could not resolve host' / systemd-resolved
Sistemas y Servidores

[SOLUCIONADO] Fallo de DNS en Linux: 'Could not resolve host' / systemd-resolved

✨ Respuesta Rápida

El fallo generalizado Temporary failure in name resolution, Could not resolve host: google.com o Failed to start Network Name Resolution en Linux ocurre cuando el subsistema de resolución DNS local (systemd-resolved o el archivo /etc/resolv.conf) pierde la configuración de servidores de nombres, bloqueando todas las conexiones a internet que utilicen nombres de dominio.

El Diagnóstico Rápido

Causa
Enlace simbólico roto en /etc/resolv.conf apuntando a un stub de systemd-resolved inactivo
Solución
Recrear el enlace simbólico a /run/systemd/resolve/stub-resolv.conf o restaurar archivo estático
Causa
Daemon systemd-resolved caído con estado failed (status=failed)
Solución
Reiniciar el servicio con sudo systemctl restart systemd-resolved y configurar DNS públicos

El fallo generalizado Temporary failure in name resolution, Could not resolve host: google.com o Failed to start Network Name Resolution en Linux ocurre cuando el subsistema de resolución DNS local (systemd-resolved o el archivo /etc/resolv.conf) pierde la configuración de servidores de nombres, bloqueando todas las conexiones a internet que utilicen nombres de dominio.

La Solución Paso a Paso

  1. 1

    Paso 1: Restablecer temporalmente la conectividad mediante nameservers estáticos

    Si tu servidor no puede descargar paquetes por falta de DNS, añade manualmente un resolvedor temporal:

    BASH
    # Configurar DNS públicos directos de Cloudflare y Google
    echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" | sudo tee /etc/resolv.conf
    

    Comprueba de inmediato si puedes resolver dominios:

    BASH
    ping -c 3 google.com
    
  2. 2

    Paso 2: Reparar el enlace simbólico oficial de systemd-resolved

    En Ubuntu y distribuciones modernas con systemd, /etc/resolv.conf debe ser un enlace simbólico al stub del resolvedor:

    BASH
    # 1. Eliminar el archivo o enlace roto anterior
    sudo rm -f /etc/resolv.conf
    
    # 2. Crear el enlace simbólico correcto
    sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
    
    # 3. Reiniciar y habilitar el servicio de resolución
    sudo systemctl restart systemd-resolved
    sudo systemctl enable systemd-resolved
    
  3. 3

    Paso 3: Configurar servidores DNS estables en resolved.conf

    Abre el archivo de configuración principal de resolución (/etc/systemd/resolved.conf):

    INI
    [Resolve]
    DNS=1.1.1.1 8.8.8.8
    FallbackDNS=1.0.0.1 8.8.4.4
    Domains=~.
    DNSSEC=allow-downgrade
    

    Aplica los cambios reiniciando el servicio:

    BASH
    sudo systemctl restart systemd-resolved
    
  4. 4

    Paso 4: Validar el estado con resolvectl

    Comprueba que el resolvedor tiene asignados servidores DNS en cada interfaz de red activa:

    BASH
    # Comprobar el estado global de DNS
    resolvectl status
    

❓ Preguntas Frecuentes (FAQ)

¿Por qué ping 8.8.8.8 funciona pero ping google.com falla?

Porque la conectividad IP a nivel de enrutamiento funciona correctamente, pero el subsistema de traducción de nombres (DNS) está caído.

¿Qué diferencia hay entre /run/systemd/resolve/stub-resolv.conf y resolv.conf normal?

El stub redirige las peticiones locales a la IP 127.0.0.53 gestionada por el daemon de systemd-resolved para permitir almacenamiento en caché y validación DNSSEC.

Consejo de Prevención

Prácticas de seguridad recomendadas:

  • Evita que gestores de red sobreescriban /etc/resolv.conf: Si utilizas NetworkManager, asegúrate de que esté configurado para colaborar con systemd-resolved (dns=systemd-resolved en /etc/NetworkManager/NetworkManager.conf).
  • Bloquea el archivo si experimentas sobreescrituras no deseadas: Puedes aplicar el atributo inmutable en caso de emergencia: sudo chattr +i /etc/resolv.conf.