Cómo configurar el almacenamiento en caché de DNS usando dnsmasq en Ubuntu

DNSmasq se puede usar para almacenar en caché las solicitudes de DNS para las distribuciones de Linux. sin embargo, puede ser un poco desafiante.

La caché de DNS funciona para acelerar el procedimiento de búsqueda de DNS que convierte el nombre de dominio de un sitio web en su dirección IP asociada. Cuando varios usuarios en su red visitan la misma dirección de sitio web, utilizar el servidor de caché DNS local puede reducir la cantidad de tiempo que tarda la web en cargarse.

Primero, veamos qué es el almacenamiento en caché de DNS.

¿Qué es el almacenamiento en caché de DNS?

Internet utiliza el DNS para realizar un seguimiento de todos los sitios en línea de acceso público y sus direcciones IP relacionadas. Puede compararse con una guía telefónica. El uso de DNS evita que tengamos que memorizar la IP de cada sitio, que es necesaria para que la infraestructura de red interactúe con los sitios de Internet.

Cada vez que solicita al motor de búsqueda que muestre una página web, esto es lo que realmente ocurre detrás de escena.

Aunque su sistema tiene acceso a una gran cantidad de servidores DNS externos, el problema es que tener una réplica central del DNS aún acelera la transmisión y la resolución. Aquí es cuando entra en juego el almacenamiento en caché de DNS.

Antes de enviar la solicitud a la web, el caché de DNS maneja la resolución de identidad para los dominios a los que se ha accedido recientemente y con frecuencia en un esfuerzo por agilizar mucho más el procedimiento.

Se accede al servidor DNS siempre que sea necesario para resolver una dirección IP en un nombre de dominio. Esto puede suponer una carga adicional para el servidor DNS, especialmente si el sitio web recibe muchas solicitudes simultáneamente.

Se utiliza una caché de DNS para disminuir las solicitudes de DNS y los tiempos de respuesta. Las direcciones IP resueltas junto con los detalles del host se guardan localmente. En lugar de iniciar una nueva consulta de DNS, el resultado se recupera de la memoria caché de DNS la próxima vez que se deba resolver la IP o el nombre de dominio.

¿Cómo ayuda el almacenamiento en caché de DNS a solucionar los problemas de resolución de DNS intermitentes en las instancias de Amazon EC2?

La mayoría de los sistemas Linux no utilizan una caché de DNS local. Esto implica que todas las solicitudes de DNS se envían directamente al solucionador de DNS autorizado proporcionado por Amazon, que tiene una limitación en la cantidad de solicitudes que puede procesar a la vez. Los problemas de resolución de DNS ocurren cuando hay muchas solicitudes.

La implementación de una caché de DNS local en el sistema lo ayudará a reducir la utilización de la CPU y la red al tiempo que evita errores de resolución de DNS. Una caché de DNS local responde a las consultas realizadas a recursos de DNS externos, como Amazon RDS y S3.

Las instancias de Amazon EC2 conectadas a Amazon VPC utilizan el protocolo DHCP durante el lanzamiento para solicitar una dirección de servidor DNS.

Cuando emplea Amazon VPC para construir una nube privada virtual, Route 53 DNS Resolver utiliza efectivamente un resolver en la VPC para responder a las solicitudes de DNS para instancias EC2 que se ejecutan bajo direcciones web locales de Amazon VPC y entradas en zonas administradas de forma privada. Resolver realiza búsquedas recurrentes en servidores DNS públicos para todas las direcciones web adicionales.

Una caché de DNS sirve como un registro transitorio de consultas de DNS anteriores que nuestro sistema puede examinar rápidamente al intentar acceder a un sitio web en línea. Mantiene un registro de cada sesión existente y posterior. Esta caché de DNS facilita la resolución del dominio y evita errores con las instancias de Amazon EC2 Linux.

Muchos usuarios suelen utilizar el servicio Route 53 de Amazon para DNS cuando acceden a AWS. Es muy fácil de usar y casi gratis. Pero hay una serie de razones que podrían influir en la decisión del usuario de utilizar un servidor DNS local.

Aunque bind9 sigue siendo una excelente opción para configurar un servidor de caché DNS local, dnsmasq es mucho más sencillo de instalar y configurar tanto en instancias EC2 como en una máquina local.

¿Qué es dnsmasq?

DNSmasq es una herramienta relacionada con Linux que admite el almacenamiento en caché de DNS, DHCP, TFTP y DNS. Está hecho para ser compacto y liviano, lo que lo hace ideal para redes y firewalls con menos restricciones de recursos.

Es increíblemente fácil de instalar y configurar. Para configurar DNS y DHCP para subredes, dnsmasq es una solución flexible y práctica.

Es posible configurar estos identificadores asignados por DHCP y las instrucciones asociadas para cada servidor o para un controlador subyacente. Las opciones de DHCP dinámico y estático son compatibles con dnsmasq. Es portátil y tiene la capacidad de administrar DNS y DHCP para al menos 1000 clientes.

Cuando se recibe una consulta DNS, dnsmasq responde desde un caché local o la transmite a un servidor DNS autorizado. Además de responder a las solicitudes de DNS para direcciones con configuración de DHCP, verifica el contenido del archivo /etc/hosts para identificar los nombres de host locales que no figuran en el DNS público.

El uso de la herramienta dnsmasq en lugar del caché de DNS incorporado del navegador mejora enormemente el rendimiento de la navegación por Internet. Es ideal para un entorno integrado con recursos limitados porque es muy sencillo de configurar y necesita muy poco espacio en disco.

Características de dnsmasq

  • Es simple integrar servidores DNS internos utilizando dnsmasq configurándolo para transmitir consultas de resolución de nombres de dominio particulares a servidores autorizados particulares.
  • La carga de trabajo del servidor se reduce y la confiabilidad se mejora utilizando el servidor DNS local configurado.
  • La configuración de DNS para puntos finales habilitados para cortafuegos es bastante fácil e independiente del DNS empleado por el ISP.
  • Si no se puede acceder al puerto vinculado a Internet mientras se realiza una verificación de DNS en la computadora, la operación de búsqueda se suspenderá instantáneamente.
  • A través de PPP (protocolo punto a punto) o consultas DHCP, dnsmasq realmente se puede configurar para recopilar datos periódicamente directamente desde el servidor de resolución de dominio subyacente.

Instalación

El servicio resuelto por systemd debe desactivarse antes de instalar y configurar la utilidad dnsmasq.

systemctl stop systemd-resolved

También puede ocultarlo usando el atributo de máscara para que no se inicie automáticamente cuando reinicie.

 systemctl mask systemd-resolved

Instalar dnsmasq es la acción inicial que debe realizar después de apagar systemd-resolved. DNSmasq viene preinstalado en casi todas las distribuciones de Linux. Si no, puede instalarlo manualmente. Inicie un terminal de comando y luego escriba el siguiente comando para hacerlo.

sudo apt-get install dnsmasq

Use el siguiente comando si es un usuario de yum:

sudo yum install -y dnsmasq

Este comando instala automáticamente la herramienta e inicia dnsmasq en segundo plano.

Después de una instalación exitosa, puede verificar el estado de dnsmasq usando el siguiente comando.

systemctl status dnsmasq

Si muestra su estado como «activo (en ejecución)», eso significa que la instalación se realizó y se configuró en el puerto 53. Si muestra su estado como «inactivo (muerto)», entonces debe reiniciar la máquina Ubuntu y dnsmasq nuevamente. Esto solucionará el error.

Configuración

Dnsmasq ahora está listo para configurarse en su máquina como el servidor DNS de almacenamiento en caché local. El archivo de configuración predeterminado se encuentra en /etc/dnsmasq.conf. Este archivo de configuración debe modificarse para configurar la utilidad dnsmasq en el sistema.

Use este comando para abrir y editar el archivo de configuración.

nano /etc/dnsmasq.conf

El archivo de configuración debe editarse solo con privilegios de root. Simplemente borre todo en el archivo, incluidos los comentarios, y simplemente copie y pegue y guarde esta configuración.

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1
expand-hosts
domain=geek-demo.com
cache-size=1000

Permítanme describir brevemente lo que significa cada uno de los parámetros.

  • Puerto: para especificar o vincular el puerto que utilizará Dnsmasq para recibir solicitudes de DNS.
  • domain-needed: transmite solo los nombres de dominio al servidor DNS ascendente.
  • bogus-priv: evita el reenvío de dominios y puertos
  • listen-address – Para definir la dirección del servidor de nombres. Por lo general, el host local se usa de forma predeterminada para configurar un servidor DNS local.
  • dominio: para configurar los dominios que dnsmasq agrega a los identificadores cortos.
  • tamaño de caché: el tamaño máximo de almacenamiento en caché de DNS permitido en el almacenamiento.

Después de realizar todos los cambios necesarios, guarde y cierre el archivo de configuración. Y el siguiente paso es editar el archivo /etc/resolv.conf para agregar la dirección de resolución del host local. Use el siguiente comando para abrir con el editor nano.

nano /etc/resolv.conf

Aquí puede encontrar todos los servidores de nombres que utiliza su sistema para la resolución de direcciones. En esa lista, agregue también la dirección de loopback. Agregue «nameserver 127.0.0.1» y manténgalo en la primera línea.

Guarde y salga del archivo de configuración. Para que la configuración actualizada surta efecto, reinicie la utilidad dnsmasq.

systemctl restart dnsmasq

Prueba del servidor de almacenamiento en caché de DNS local

Es fácil probar el servidor DNS local. Abra una línea de comando y use el comando dig para verificar el almacenamiento en caché de DNS. Cuando ejecuta el comando dig por primera vez, el resultado debería ser bastante común.

┌──(root💀kali)-[/home/writer]
└─# dig kirukiru.es.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> kirukiru.es.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;kirukiru.es.com.                 IN      A

;; ANSWER SECTION:
kirukiru.es.com.          227     IN      A       172.66.43.163
kirukiru.es.com.          227     IN      A       172.66.40.93

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:52:49 EDT 2022
;; MSG SIZE  rcvd: 74

Aquí, tenga en cuenta que el tiempo de consulta es de aproximadamente 31 ms para consultar los detalles del servidor de nombres ascendente. Ejecute el mismo comando de excavación una vez más y notará una disminución significativa en el tiempo de consulta.

┌──(root💀kali)-[/home/writer]
└─# dig kirukiru.es.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> kirukiru.es.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;kirukiru.es.com.                 IN      A

;; ANSWER SECTION:
kirukiru.es.com.          281     IN      A       172.66.40.93
kirukiru.es.com.          281     IN      A       172.66.43.163

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:58:10 EDT 2022
;; MSG SIZE  rcvd: 74

Aquí, el tiempo de consulta es 0 mseg. Esto se debe al hecho de que después de realizar la búsqueda inicial, dnsmasq almacenó los datos y todas las búsquedas realizadas posteriormente fueron instantáneas debido a la utilización del caché almacenado. Es necesario reiniciar dnsmasq si desea eliminar el caché de DNS almacenado.

Terminando

En este artículo, hemos visto cómo instalar y configurar dnsmasq para que funcione como un servidor DNS local. También te puede interesar saber cómo cambiar los servidores DNS para Navegación más rápida en diferentes sistemas operativos.