Las búsquedas de DNS no suelen ser algo de lo que deba preocuparse. A veces sí debería

Si el ISP de su casa u oficina tiene servidores de nombres lentos o su servidor realiza muchas búsquedas, entonces necesita un servidor DNS de caché local.

¿Cómo me ayudará un servidor DNS de caché?

Un servidor DNS de caché funciona realizando todas las consultas DNS que hace su sistema y luego guardando, o almacenando en caché, los resultados en la memoria. Una vez que los resultados se almacenan en la memoria caché, cada vez que realice una solicitud duplicada para un dominio, el resultado se servirá casi instantáneamente desde la memoria.

Esto puede no parecer demasiado importante, pero si los servidores DNS de su ISP se toman su tiempo para responder, ralentizarán considerablemente su navegación por Internet. Por ejemplo, la página de inicio del canal de noticias estadounidense MSNBC necesita contactar con más de 100 nombres de dominio únicos para cargarse correctamente. Si los servidores de nombres de su ISP están tardando incluso una décima de segundo más de lo normal en responder, eso significa que la página tardará 10 segundos más en terminar de cargarse.

Un servidor DNS de caché local no sólo le ayudará en su casa u oficina, sino también en su servidor. Si tiene una aplicación que realiza muchas búsquedas de DNS, por ejemplo, un servidor de correo electrónico ocupado que ejecuta software antispam, recibirá un aumento de velocidad de un servidor DNS de caché local.

Por último, systemd-resolved es compatible con los últimos estándares de DNS seguro DNSSEC y DNSoverTLS o DoT. Estos le ayudan a mantenerse seguro y a conservar su privacidad en línea.

¿Qué DNS de caché local utilizaremos?

El servidor DNS de caché local que habilitaremos y configuraremos en esta guía es systemd-resolved. Esta herramienta forma parte del conjunto de herramientas de gestión del sistema systemd. Si su sistema utiliza systemd, y casi todas las principales distribuciones de Linux lo hacen, entonces ya tendrá systemd-resolved instalado pero no en ejecución. La mayoría de las distribuciones no utilizan systemd-resolved aunque esté presente.

systemd-resolved funciona ejecutando un pequeño servidor DNS de caché local que configuraremos para que se inicie al arrancar. A continuación, reconfiguraremos el resto del sistema para que dirija sus consultas DNS al DNS local en caché systemd-resolved.

¿Cómo comprobar si ya está utilizando systemd-resolved?

Algunas distribuciones de Linux ya utilizan systemd-resolved por defecto, como Ubuntu 19.04.

Si ya está ejecutando systemd-resolved entonces no necesita habilitarlo o configurar su sistema para utilizarlo. Sin embargo, puede que necesite asegurarse de que las herramientas de gestión de red como NetworkManager están configuradas correctamente ya que pueden ignorar la configuración de red del sistema.

Antes de pasar a la siguiente sección ejecute el siguiente comando para comprobar si ya está ejecutando systemd-resolved:

$ resolvectl status

Si obtiene el mensaje

$ resolvectl status
Fallo al obtener datos globales: Unidad dbus-org.freedesktop.resolve1.service no encontrada.

No está ejecutando systemd-resolved y debería pasar a la siguiente sección. Si, en cambio, ve una salida que comienza con algo como lo siguiente

Global
       Configuración LLMNR: sí
Configuración de MulticastDNS: sí
  Configuración DNSOverTLS: oportunista
      Configuración DNSSEC: allow-downgrade
    DNSSEC compatible: no
  Servidor DNS actual: 1.1.1.1
         Servidores DNS: 1.1.1.1
                      1.0.0.1

Entonces ya está ejecutando systemd-resolved y no necesita habilitarlo.

Habilitación y configuración de systemd-resolved

No necesitamos instalar systemd-resolved puesto que ya forma parte de systemd. Todo lo que necesitamos hacer es iniciarlo para que el servidor de caché DNS se ejecute y luego habilitarlo para que se inicie en el arranque.

Ejecute el siguiente comando desde un intérprete de comandos como sudo habilitado un usuario no root para iniciar systemd-resolved:

$ sudo systemctl start systemd-resolved.service

A continuación, ejecute el siguiente comando para iniciar systemd-resolved en el arranque del sistema:

$ sudo systemctl enable systemd-resolved.service

El último elemento de configuración que queda es establecer los servidores DNS que systemd-resolved consultará para resolver los dominios. Aquí hay muchas opciones, pero cualquiera de los siguientes pares es gratuito, rápido y ambos soportan DNSSEC y DoT:

DNS público de Google

  • 8.8.8.8
  • 8.8.4.4

DNS público de Cloudflare

  • 1.1.1.1
  • 1.0.0.1

Abra el archivo principal de configuración systemd-resolved con su editor de texto favorito, aquí he utilizado nano:

$ sudo nano /etc/systemd/resolved.conf

Edite la línea que comienza

#DNS=

Para que aparezcan un par de direcciones IP. Aquí se muestran los servidores DNS de Cloudflare:

DNS=1.1.1.1 1.0.0.1

Guarde y salga del editor de texto. Ahora necesitamos reiniciar systemd-resolved para que empiece a utilizar los servidores de nombres:

$ sudo systemctl restart systemd-resolved.service

systemd-resolved está ahora en ejecución y listo para empezar a acelerar y asegurar las consultas DNS tan pronto como configuremos el sistema para empezar a utilizarlo.

Configuración del sistema para utilizar systemd-resolved

Su sistema puede configurarse de varias formas para utilizar systemd-resolved, pero veremos dos configuraciones que cubren la mayoría de los casos de uso. La primera es la configuración recomendada, y la segunda es la configuración de compatibilidad. La diferencia entre ambas es cómo se gestiona el archivo /etc/resolv.conf.

El archivo /etc/resolv.conf contiene las direcciones IP de los servidores de nombres que los programas del sistema deben consultar. Los programas que necesiten realizar consultas DNS consultarán este archivo para saber con qué servidores deben ponerse en contacto para realizar dichas consultas.

Los dos modos de systemd-resolved se centran en cómo se gestiona el contenido de este archivo. En el modo recomendado, /etc/resolv.conf se convierte en un enlace simbólico a /run/systemd/resolve/stub-resolv.conf. Este archivo es gestionado por systemd-resolved y, por tanto, systemd-resolved gestiona la información de configuración DNS para todos los demás programas del sistema.

Esto puede causar problemas cuando otros programas intentan gestionar el contenido de /etc/resolv.conf. El modo de compatibilidad deja /etc/resolv.conf en su lugar permitiendo que otros programas lo gestionen mientras systemd-resolved utiliza esa información DNS. En este modo, los otros programas que gestionen /etc/resolv.conf deben estar configurados para establecer 127.0.0.53 como servidor de nombres del sistema en /etc/resolv.conf.

Configuración del modo recomendado

Cuando configuremos este modo, systemd-resolved gestionará /etc/resolv. conf convirtiéndolo en un enlace simbólico a /run/systemd/resolve/stub-resolv.conf. Tendremos que hacer esto a mano ya que no se configura automáticamente.

En primer lugar, borre o renombre el archivo /etc/resolv.conf existente. Renombrarlo es mejor opción que borrarlo ya que tendrá el mismo efecto pero siempre podrá consultar el original si necesita la información que contiene. Aquí, renombramos /etc/resolv.conf utilizando el comando mv:

$ sudo mv /etc/resolv.conf /etc/resolv.conf.original

A continuación, cree el enlace simbólico:

$ sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Por último, reinicie systemd-resolved:

$ sudo systemctl restart systemd-resolved.service

Configuración del modo de compatibilidad

En este modo, necesita asegurarse de que el servidor de nombres local que systemd-resolved ha iniciado es consultado por los servicios del sistema. Abra /etc/resolv.conf en un editor de texto, aquí se utiliza el editor nano:

$ sudo nano /etc/resolv.conf

Borre todas las líneas que encuentre que empiecen por «nameserver» y añada esta línea

nameserver 127.0.0.53

Esta edición puede ser modificada por cualquier otro programa que esté gestionando /etc/resolv.conf. Si este es el caso, tendrá que configurar esos programas para que utilicen este servidor de nombres para que la edición sea permanente.

Depuración de systemd-resolved

Descubrir exactamente cómo su sistema está realizando las consultas DNS después de haber realizado estos cambios puede resultar difícil. El método más eficaz para observar lo que ocurre es poner systemd-resolved en modo de depuración y observar el archivo de registro.

systemd-resolved es un servicio systemd, lo que significa que puede ponerse fácilmente en modo de depuración creando un archivo de servicio drop-in que contenga la configuración de depuración. El siguiente comando creará el archivo correcto en la ubicación correcta:

$ sudo systemctl edit systemd-resolved.service

Pegue las siguientes líneas en el editor y luego guarde y salga:

[Servicio]
Entorno=SYSTEMD_LOG_LEVEL=debug

El servicio systemd-resolved se recargará automáticamente al guardar y salir con éxito.

Abra un segundo terminal en el mismo servidor y siga el registro de journald para el servicio systemd-resolved:

$ sudo journalctl -f -u systemd-resolved

Una línea que empiece por «Usando servidor DNS», por ejemplo

Usando servidor DNS 1.1.1.1 para la transacción 19995.

Le indica exactamente qué servidor DNS se está utilizando para las consultas DNS. En este caso, se consultó al servidor DNS de Cloudflare en 1.1.1.1.

Las líneas que sean «Cache miss» indican que el nombre de dominio no ha sido almacenado en caché. Por ejemplo

Cache miss for ejemplo.com IN SOA

Las líneas que empiezan por «Positive cache hit», p. ej:

Acierto positivo de caché para ejemplo.com EN A

Indican que systemd-resolved ha consultado este dominio anteriormente y la respuesta se ha servido desde la caché de la memoria local.

Debe desactivar el modo de depuración cuando haya terminado de trabajar con systemd-resolved, ya que creará un archivo de registro muy grande en un sistema ocupado. Puede desactivar el registro de depuración ejecutando:

$ sudo systemctl edit systemd-resolved.service

y borrando las dos líneas que ha añadido a continuación, guardando y saliendo del editor.

Uso de consultas DNS seguras

systemd-resolved es uno de los pocos servidores DNS disponibles en la actualidad que soporta tanto DNSSEC como DNSoverTLS. Ambos ayudan a garantizar que está recibiendo información DNS genuina (DNSSEC) y que nadie puede fisgonear en su tráfico DNS mientras pasa por Internet. (DoT).

Estas opciones se activan fácilmente abriendo el archivo de configuración principal de systemd-resolved con un editor de texto:

$ sudo nano /etc/systemd/resolved.conf

Y editando el archivo de forma que se establezcan las dos líneas siguientes

DNSSEC=permitir-desactualización
DNSOverTLS=oportunista

Guarde y salga del editor y vuelva a cargar systemd-resolved:

$ sudo systemctl restart systemd-resolved.service

Mientras el servidor DNS que haya configurado soporte DNSSEC y DoT sus consultas DNS estarán protegidas. Los servidores DNS públicos de Google y Cloudflare soportan ambos estos protocolos.

Conclusión

Su sistema está ahora configurado para realizar consultas DNS de forma rápida y eficiente incluso cuando el servidor DNS de su ISP no responda tan rápido como debería. Además, su vida digital es más segura ya que está utilizando los protocolos DNS más recientes y seguros para proteger sus consultas DNS.

Si es usted un entusiasta de Linux y desea aprender más, consulte este fantástico curso en línea.