Linux no puede resolver DNS: causas y soluciones

Si en Linux parece que hay conexión a Internet, pero no se pueden abrir sitios web, o si se puede acceder por dirección IP pero no por nombre de dominio, es muy probable que exista un problema de resolución DNS. DNS se encarga de traducir nombres de dominio como example.com a direcciones IP reales. Si ese proceso falla, la red puede seguir activa, pero el uso normal de Internet se vuelve muy limitado.

Síntomas frecuentes

  • El navegador muestra que no se puede encontrar el servidor
  • ping 8.8.8.8 funciona, pero ping google.com falla
  • Fallan gestores de paquetes como apt, dnf, yum o pacman
  • Aparece el mensaje Temporary failure in name resolution

Lo primero que hay que comprobar

Antes de nada, conviene distinguir si el problema afecta a toda la red o solamente a DNS.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

Si 8.8.8.8 responde pero google.com no, el problema suele estar en la configuración DNS o en el servicio DNS local. Si tampoco funciona el acceso directo por IP, entonces la causa probablemente esté en Wi-Fi, la interfaz de red, la puerta de enlace o el enrutamiento.

Causas principales

1. Configuración incorrecta de /etc/resolv.conf

En muchos sistemas Linux, la información de los servidores DNS se guarda en /etc/resolv.conf. Si allí no hay un nameserver correcto, no será posible resolver nombres de dominio.

cat /etc/resolv.conf

Ejemplo:

nameserver 8.8.8.8
nameserver 1.1.1.1

Si el archivo está vacío o apunta a un DNS local erróneo, la resolución fallará. También hay que recordar que en sistemas Linux modernos este archivo suele ser gestionado automáticamente por NetworkManager o systemd-resolved, por lo que los cambios manuales pueden sobrescribirse.

2. Problemas con systemd-resolved

En distribuciones como Ubuntu, systemd-resolved suele encargarse de la resolución DNS y utiliza 127.0.0.53 como resolvedor local. Si ese servicio se detiene, la resolución de nombres puede dejar de funcionar.

systemctl status systemd-resolved
resolvectl status

Si hay problemas, puede reiniciarse:

sudo systemctl restart systemd-resolved

3. NetworkManager no aplica bien el DNS

En Linux de escritorio, NetworkManager suele obtener la información DNS mediante DHCP. Si el perfil de red está dañado o la reconexión falla, es posible que no se apliquen correctamente los servidores DNS.

nmcli dev show | grep DNS
nmcli connection show

Si hace falta, reinícielo:

sudo systemctl restart NetworkManager

4. Influencia de VPN, proxy o firewall

Una VPN puede desviar las consultas DNS por una ruta incorrecta, y un firewall puede bloquear el puerto 53. En esos casos, la red parece funcionar, pero la resolución de nombres falla.

5. Caché DNS dañada o desactualizada

Si la caché local está dañada o contiene datos antiguos, algunos dominios pueden dejar de resolverse. En entornos con systemd-resolved o nscd, vaciar la caché puede ayudar.

sudo resolvectl flush-caches

Pasos prácticos de solución

Paso 1: Consultar directamente a un DNS público

nslookup google.com 8.8.8.8
dig google.com @8.8.8.8

Si esto funciona, lo más probable es que el DNS externo esté bien y que el problema esté en la configuración local.

Paso 2: Configurar temporalmente un DNS público

sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'

Esto sirve como solución temporal. Tras reiniciar o reconectar la red, el archivo puede volver a cambiar. Para una solución permanente, hay que corregir la configuración de NetworkManager, netplan o systemd-resolved.

Paso 3: Revisar netplan en Ubuntu

sudo nano /etc/netplan/*.yaml

Ejemplo:

nameservers:
  addresses: [8.8.8.8,1.1.1.1]

Después, aplicar los cambios:

sudo netplan apply

Paso 4: Renovar la configuración DHCP

sudo dhclient -r
sudo dhclient

Si el servidor DHCP proporcionó datos DNS incorrectos, esto puede solucionarlo.

Comandos útiles para comprobar el estado

ping -c 4 8.8.8.8
ping -c 4 google.com
cat /etc/resolv.conf
systemctl status systemd-resolved
resolvectl status
nmcli dev show | grep DNS
nslookup google.com
dig google.com
journalctl -u systemd-resolved --no-pager | tail -n 50

Cómo evitar que vuelva a ocurrir

  • No limitarse a editar manualmente /etc/resolv.conf
  • Entender si DNS está siendo gestionado por DHCP, NetworkManager o systemd-resolved
  • Revisar la configuración DNS después de instalar o activar una VPN
  • En servidores, definir DNS fijos de forma explícita

Conclusión

Cuando Linux no puede resolver DNS, lo más importante es comprobar primero si hay conectividad por IP. Así se puede saber rápidamente si el problema está solo en DNS o en toda la red. Después conviene revisar /etc/resolv.conf, systemd-resolved, NetworkManager, DHCP y la configuración de la VPN. Más allá de una solución temporal, lo realmente importante es entender qué componente del sistema está administrando el DNS.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *