Cómo configurar un servidor DNS local con Dnsmasq en Ubuntu

Dnsmasq significa «abreviatura de DNS enmascarado» y es un reenviador DNS sencillo, ligero y fácil de usar para una red pequeña. Puede configurarse como caché DNS y servidor DHCP y admite los protocolos IPv4 e IPv6. Cuando reciba alguna consulta DNS, la responderá desde su caché o la reenviará a otro servidor DNS.

Dnsmasq se compone de tres subsistemas:

  • SubsistemaDNS: Se utiliza para almacenar en caché distintos tipos de registros, como A, AAAA, CNAME y PTR.
  • SubsistemaDHCP: Soporta DHCPv4, DHCPv6, BOOTP y PXE.
  • SubsistemaRouter Advertisement: Proporciona autoconfiguración básica para hosts IPv6. Se puede utilizar de forma independiente o junto con DHCPv6.

En este tutorial, te mostraremos cómo configurar un servidor DNS local con Dnsmasq en un servidor Ubuntu 20.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 20.04.
  • Una contraseña de root configurada el servidor.

Cómo empezar

En primer lugar, se recomienda actualizar los paquetes del sistema a la última versión. Puedes actualizar todos los paquetes ejecutando el siguiente comando:

apt-get update -y

Después de actualizar todos los paquetes, tendrás que desactivar el servicio Systemd-resolved en tu sistema. El servicio Systemd-resolved se utiliza para la resolución de nombres de red a las aplicaciones locales.

Puedes desactivarlo ejecutando el siguiente comando:

systemctl disable --now systemd-resolved

Una vez desactivado el servicio, tendrás que eliminar el archivo resolv.conf predeterminado y crear uno nuevo con los detalles de tu servidor DNS personalizado.

Puedes eliminar el archivo resolv.conf predeterminado con el siguiente comando:

rm -rf /etc/resolv.conf

A continuación, añade el servidor DNS de Google al archivo resolv.conf con el siguiente comando:

echo "nameserver 8.8.8.8" > /etc/resolv.conf

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar Dnsmasq

Por defecto, Dnsmasq está disponible en el repositorio por defecto de Ubuntu 20.04. Puedes instalarlo simplemente ejecutando el siguiente comando:

apt-get install dnsmasq dnsutils ldnsutils -y

Una vez finalizada la instalación, los servicios de Dnsmasq se iniciarán automáticamente. Puedes comprobar el estado del Dnsmasq con el siguiente comando:

systemctl status dnsmasq

Deberías obtener la siguiente salida:

dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-11-02 11:02:01 UTC; 15s ago
   Main PID: 17726 (dnsmasq)
      Tasks: 1 (limit: 2282)
     Memory: 868.0K
     CGroup: /system.slice/dnsmasq.service
             ??17726 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e>

Nov 02 11:02:12 ubuntu2004 systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 02 11:02:12 ubuntu2004 dnsmasq[17705]: dnsmasq: syntax check OK.
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: started, version 2.80 cachesize 150
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: DNS service limited to local subnets
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfi>
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: reading /etc/resolv.conf
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: using nameserver 8.8.8.8#53
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: read /etc/hosts - 7 addresses
Nov 02 11:02:12 ubuntu2004 systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar Dnsmasq

A continuación, tendrás que configurar Dnsmasq como servidor DNS local. Puedes hacerlo editando el archivo de configuración principal de Dnsmasq:

nano /etc/dnsmasq.conf

Cambia las siguientes líneas:

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1,your-server-ip
expand-hosts
domain=dns-example.com
cache-size=1000

Guarda y cierra el archivo cuando hayas terminado.

A continuación, tendrás que añadir la dirección ip de tu servidor como servidor de nombres primario en tu archivo resolv.conf. Puedes añadirla con el siguiente comando:

nano /etc/resolv.conf

Añade la siguiente línea encima de la línea «nameserver 8.8.8.8»:

nameserver your-server-ip

Guarda y cierra el archivo cuando hayas terminado. A continuación, comprueba si el servidor presenta algún error de configuración con el siguiente comando:

dnsmasq --test

Si todo va bien, deberías obtener la siguiente salida:

dnsmasq: syntax check OK.

Por último, reinicia el servicio Dnsmasq para aplicar los cambios:

systemctl restart dnsmasq

En este punto, Dnsmasq está iniciado y escuchando en el puerto 53. Puedes verificarlo con el siguiente comando:

ss -alnp | grep -i :53

Deberías obtener la siguiente salida:

udp     UNCONN   0        0                                             0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=4))                                             
udp     UNCONN   0        0                                                [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=6))                                             
tcp     LISTEN   0        32                                            0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=5))                                             
tcp     LISTEN   0        32                                               [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=7))                                             

Añadir registros DNS al servidor Dnsmasq

A continuación, tendrás que editar tu archivo /etc/hosts y añadir la entrada del servidor DNS local.

nano /etc/hosts

Añade la siguiente línea:

your-server-ip host1.dns-example.com

Guarda y cierra el archivo cuando hayas terminado.

Verifica la resolución del servidor Dnsmasq

Llegados a este punto, Dnsmasq está instalado y configurado. No, es hora de verificar la resolución DNS.

Puedes utilizar el comando dig para comprobar la resolución DNS como se muestra a continuación:

dig host1.dns-example.com +short

Si todo va bien, deberías ver la ip de tu servidor en la siguiente salida:

your-server-ip

También puedes verificar la resolución DNS externa con el siguiente comando:

dig howtoforge.com +short

Deberías obtener la siguiente salida:

172.67.68.93
104.26.3.165
104.26.2.165

Configurar el cliente remoto para utilizar el servidor DNS Dnsmasq

A continuación, tendrás que configurar un cliente remoto para que utilice tu servidor DNS Dnsmasq como servidor DNS por defecto.

En primer lugar, instala las herramientas DNS con el siguiente comando:

apt-get install dnsutils ldnsutils -y

Una vez instalado, tendrás que editar el archivo /etc/resolv.conf y la entrada de tu servidor DNS Dnsmasq.

nano /etc/resolv.conf

Añade la siguiente línea al principio del archivo:

nameserver your-server-ip

Guarda y cierra el archivo cuando hayas terminado.

A continuación, verifica la resolución DNS local con el siguiente comando:

dig host1.dns-example.com

Deberías ver la siguiente salida:

; DiG 9.9.5-3ubuntu0.4-Ubuntu host1.dns-example.com
;; global options: +cmd
;; Got answer:
;; HEADER opcode: QUERY, status: NOERROR, id: 26401
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host1.dns-example.com.		IN	A

;; ANSWER SECTION:
host1.dns-example.com.	0	IN	A	45.58.32.165

;; Query time: 301 msec
;; SERVER: 45.58.32.165#53(45.58.32.165)
;; WHEN: Mon Nov 02 16:49:37 IST 2020
;; MSG SIZE  rcvd: 66

A continuación, tendrás que verificar el almacenamiento en caché de tu servidor DNS. Puedes comprobarlo utilizando la utilidad de perforación.

Primero, ejecuta el siguiente comando:

drill google.com | grep "Query time"

Deberías ver la siguiente salida:

;; Query time: 290 msec

A continuación, ejecuta de nuevo el comando para comprobar si el almacenamiento en caché funciona o no:

drill google.com | grep "Query time"

Deberías ver que el tiempo de consulta disminuye ahora a 4 mseg:

;; Query time: 4 msec

Conclusión

Enhorabuena! has instalado y configurado con éxito Dnsmasq como servidor DNS local y Ubuntu 20.04. Espero que ahora puedas implementarlo fácilmente en tu red local para la resolución de nombres.

También te podría gustar...