systemd-resolved: configuración y diagnóstico
Introducción
En sistemas modernos con systemd (Ubuntu 18.04+, Debian 10+, Fedora, RHEL 9...), la resolución DNS la
gestiona systemd-resolved, un demonio que actúa como stub resolver local. Escucha en
127.0.0.53:53, mantiene su propia caché DNS y puede gestionar diferentes servidores DNS por
interfaz de red. Entender cómo interactúa con /etc/resolv.conf es clave para diagnosticar problemas
en estos sistemas.
Arquitectura: el stub resolver
Cuando systemd-resolved está activo, /etc/resolv.conf suele ser un enlace simbólico que apunta a uno
de estos ficheros:
# Comprobar el enlace actual
ls -la /etc/resolv.conf
# Modos posibles:
/run/systemd/resolve/stub-resolv.conf # apunta al stub (127.0.0.53) → lo normal
/run/systemd/resolve/resolv.conf # apunta directo a los DNS configurados
En el modo stub (el habitual en Ubuntu), todas las consultas van a
127.0.0.53 y systemd-resolved las gestiona, cachea y reenvía a los DNS reales. Esto explica por qué
cat /etc/resolv.conf muestra 127.0.0.53 como nameserver.
resolvectl — la herramienta de diagnóstico
# Ver el estado completo: DNS por interfaz, dominios de búsqueda, protocolo
resolvectl status
# Resolver un nombre (usa el resolver del sistema, con caché)
resolvectl query google.com
resolvectl query -t MX google.com
# Resolución inversa
resolvectl query 8.8.8.8
# Ver estadísticas de caché
resolvectl statistics
# Limpiar la caché DNS
resolvectl flush-caches
# Ver los servidores DNS activos para una interfaz
resolvectl dns eth0
resolvectl domain eth0
Configuración: /etc/systemd/resolved.conf
Configuración global del demonio. Los DNS por interfaz se configuran normalmente vía Netplan o NetworkManager.
# /etc/systemd/resolved.conf
[Resolve]
# Servidores DNS globales (fallback si la interfaz no tiene DNS propio)
DNS=8.8.8.8 1.1.1.1
# Servidores DNS de respaldo
FallbackDNS=9.9.9.9
# Dominios de búsqueda globales
Domains=empresa.com
# Activar DNSSEC (validación criptográfica de respuestas DNS)
# DNSSEC=yes # puede dar problemas en redes con DNS internos sin DNSSEC
# Caché DNS (yes/no/no-negative)
Cache=yes
# DNS sobre TLS (no/opportunistic/yes)
DNSOverTLS=no
# Aplicar cambios
systemctl restart systemd-resolved
# Ver el estado del servicio
systemctl status systemd-resolved
Interacción con Netplan y NetworkManager
En Ubuntu con Netplan, los servidores DNS se configuran en el fichero de Netplan y se pasan automáticamente a
systemd-resolved al hacer netplan apply:
# /etc/netplan/00-installer-config.yaml (fragmento)
network:
ethernets:
eth0:
dhcp4: false
addresses: [192.168.1.10/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
search: [empresa.com, local]
# Aplicar y verificar
netplan apply
resolvectl status eth0