DNS Configuración · 17 min read · Sep 08, 2025
Cómo configurar un resolutor DNS local con Unbound en Ubuntu 22.04

Unbound es un software de servidor DNS gratuito y de código abierto que se puede utilizar para validación, resolución recursiva y almacenamiento en caché de DNS. Es un servidor DNS rico en características que admite DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), Minimización de Nombres de Consulta, el Uso Agresivo de Caché Validada por DNSSEC y soporte para zonas de autoridad. Unbound se centra en la privacidad y seguridad de DNS, pero sin sacrificar la velocidad y el rendimiento.
Unbound es desarrollado principalmente por NLnet Labs y distribuido bajo la licencia BSD, y admite características modernas en estándares abiertos de Servidor DNS. Unbound ha sido auditado rigurosamente y se puede ejecutar en Linux, BSD y macOS. Unbound está disponible para la mayoría de estos sistemas operativos y se puede instalar a través del gestor de paquetes del sistema.
En este tutorial, instalarás Unbound en un servidor Ubuntu 22.04 y lo configurarás como un Servidor DNS Local con algunas características habilitadas, como DNSSEC, caché DNS, nombres de dominio locales y subdominios, y también DNS-over-TLS (DoT). También configurarás el registro de Unbound a través de Rsyslog y logrotate y configurarás una máquina cliente Ubuntu para verificar tu instalación de Unbound.
Requisitos previos
Para completar este tutorial, debes tener los siguientes requisitos:
- Un servidor Ubuntu 22.04 - Este ejemplo utiliza un servidor Ubuntu con el nombre de host ‘unbound-server‘ y la dirección IP ‘192.168.5.100‘.
- Un usuario no root con privilegios de administrador sudo/root.
Eso es todo. Ahora estás listo para proceder con la instalación de Unbound.
Instalando el Servidor DNS Unbound
Por defecto, el repositorio de Ubuntu proporciona un paquete Unbound que puedes instalar fácilmente a través de APT. Antes de comenzar la instalación de Unbound, emite el siguiente comando apt para actualizar y refrescar tu índice de paquetes de Ubuntu.
sudo apt updateAhora verifica los detalles del paquete unbound a través del siguiente comando.
sudo apt info unboundEn el momento de escribir esto, el repositorio predeterminado de Ubuntu proporciona Unbound 1.13.

A continuación, instala Unbound utilizando el siguiente comando apt. Cuando se te pida, ingresa y para confirmar y presiona ENTER para continuar.
sudo apt install unboundSalida:

Una vez que Unbound esté instalado, ejecuta el siguiente comando systemctl para verificar el servicio Unbound.
sudo systemctl is-enabled unbound
sudo systemctl status unboundLa salida ‘enabled‘ confirma que Unbound está habilitado y se iniciará automáticamente al arrancar el sistema. Y la salida ‘active (running)‘ confirma que Unbound está en funcionamiento.

Configurando Unbound como Servidor DNS Local
La configuración predeterminada de Unbound se encuentra en ‘/etc/unbound/unbound.conf’. En este paso, modificarás el archivo de configuración principal de Unbound ‘/etc/unbound/unbound.conf’ a través de tu editor preferido.
Ahora aprenderás sobre la configuración básica de un servidor DNS Unbound, habilitando la caché DNS, configurando nombres de dominio locales y subdominios, y configurando Unbound como resolutor DNS con DoT (DNS-over-TLS) habilitado.
Configuración Básica
Abre el archivo de configuración predeterminado de Unbound ‘/etc/unbound/unbound.conf’ utilizando tu editor preferido. Este ejemplo utiliza nano para editar el archivo de configuración ‘/etc/unbound/unbound.conf’.
sudo nano /etc/unbound/unbound.confAgrega las siguientes líneas al archivo. La sección ‘server‘ te permite configurar las configuraciones básicas de Unbound. En este ejemplo, ejecutarás Unbound en la dirección IP local ‘192.168.5.100‘ con el puerto predeterminado 53. Además, configurarás el registro de mensajes de Syslog y deshabilitarás IPv6. Por último, configurarás Unbound para consultar recursivamente cualquier nombre de host desde los servidores DNS raíz a través del archivo ‘root-hints‘.
#Agregando soporte para DNS-Over-TLS
server:
use-syslog: yes
username: "unbound"
directory: "/etc/unbound"
tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt
do-ip6: no
interface: 192.168.5.100
port: 53
prefetch: yes
root-hints: /usr/share/dns/root.hints
harden-dnssec-stripped: yesParámetros detallados:
- use-syslog: habilitar el registro de mensajes en Syslog.
- username: ejecutar como usuario unbound, que es el usuario predeterminado.
- directory: el directorio de trabajo predeterminado para Unbound es el directorio ‘/etc/unbound’.
- tls-cert-bundle: Certificados utilizados para autenticar conexiones realizadas hacia arriba. En distribuciones basadas en Debian, el archivo de certificado se encuentra en ‘/etc/ssl/certs/ca-certificates.crt’.
- do-ip6: usa ‘yes‘ para ejecutar Unbound con IPv6 o establece ‘no‘ para deshabilitar IPv6.
- interface: interfaz de red o dirección IP en la que Unbound estará funcionando. Puedes usar una dirección IP o el nombre de la interfaz como ‘eth0‘. También puedes ejecutar en un puerto específico agregando un formato como este ‘IP-ADDRESS@PORT‘.
- port: especifica el puerto en el que Unbound estará funcionando, y este puerto manejará las conexiones de los clientes. El puerto DNS predeterminado es 53.
- prefetch: establece en ‘yes‘ para habilitar la prefetching de entradas de caché de mensajes casi expiradas.
- root-hints: un archivo que contiene detalles del servidor DNS raíz. El archivo ‘/usr/share/dns/root.hints’ es proporcionado por el paquete ‘dns-root-data‘. También puedes descargar el archivo root-hints desde aquí ‘https://www.internic.net/domain/named.cache’.
- harden-dnssec-stripped: configúralo en ‘yes‘ para endurecer contra la recepción de datos dnssec-stripped.
Habilitar Caché DNS
A continuación, agrega las siguientes líneas para habilitar la consulta de caché DNS en tu instalación de Unbound.
cache-max-ttl: 14400
cache-min-ttl: 11000Parámetros detallados:
- cache-max-ttl: TTL o Tiempo de Vida para RRSets y mensajes en la caché DNS. El formato es en segundos.
- cache-min-ttl: Tiempo de Vida mínimo para la caché. El predeterminado es 0, pero puedes cambiar esto a tu preferencia, como ‘11000‘ segundos. No lo configures por más de 1 hora o tendrás problemas debido a datos obsoletos.
Privacidad y Seguridad de Unbound
Ahora puedes agregar las siguientes líneas para establecer privacidad y seguridad básicas para Unbound.
aggressive-nsec: yes
hide-identity: yes
hide-version: yes
use-caps-for-id: yesParámetros detallados:
- aggressive-nsec: establece en ‘yes‘ para habilitar NSEC agresivo para usar la cadena NSEC de DNSSEC para sintetizar NXDOMAIN y otras denegaciones. Consulta la página web de IETF sobre ‘NSEC’ https://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html.
- hide-identity: establece en yes para deshabilitar respuestas de consultas bind sobre id.server o hostname.bind.
- hide-version: establece en yes para deshabilitar consultas version.server y version.bind.
- use-caps-for-id: establece en yes para habilitar el uso de ‘0x100-encoded‘ en la consulta para frustrar intentos de suplantación.
Definir Red Privada y Listas de Control de Acceso (ACLs)
A continuación, necesitas definir la dirección privada de tu red y las ACLs (Listas de Control de Acceso). Asegúrate de cambiar la subred local en las líneas a continuación con tu entorno de red actual.
private-address: 192.168.0.0/16
private-address: 192.168.5.0/24
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
#controlar qué clientes pueden hacer consultas (recursivas)
access-control: 127.0.0.1/32 allow_snoop
access-control: ::1 allow_snoop
access-control: 127.0.0.0/8 allow
access-control: 192.168.5.0/24 allowParámetros detallados:
- private-address: define subredes de red privada en tu infraestructura. Solo se permiten nombres ‘private-domain‘ y ‘local-data’ para tener estas direcciones privadas.
- access-control: define el control de acceso en el que los clientes pueden hacer consultas (recursivas) al servidor Unbound. El parámetro ‘allow‘ habilitará recursivas, mientras que ‘allow_snoop‘ habilitará tanto recursivas como no recursivas.
Configurar Dominio Local
Después de configurar la dirección privada y las listas de control de acceso, definirás la zona local de tu nombre de dominio. Esto es muy útil, especialmente si tienes múltiples aplicaciones autoalojadas en tu red local. Puedes definir fácilmente tu nombre de dominio o subdominios y apuntar a la dirección IP específica.
Este ejemplo creará la zona para el dominio ‘home.lan‘ con el tipo ‘static‘, luego crearás múltiples subdominios a través del parámetro ‘local-data‘. Cada subdominio se apuntará a una dirección IP específica, y también crearás registros PTR a través del parámetro ‘local-data-ptr‘.
# zona local
local-zone: "home.lan." static
local-data: "firewall.home.lan. IN A 10.0.0.1"
local-data: "vault.home.lan. IN A 10.0.0.2"
local-data: "media.home.lan. IN A 10.0.0.3"
local-data: "docs.home.lan. IN A 10.0.0.4"
local-data: "wiki.home.lan. IN A 10.0.0.5"
local-data-ptr: "10.0.0.1 firewall.home.lan"
local-data-ptr: "10.0.0.2 vault.home.lan"
local-data-ptr: "10.0.0.3 media.home.lan"
local-data-ptr: "10.0.0.4 docs.home.lan"
local-data-ptr: "10.0.0.5 wiki.home.lan"Parámetros detallados:
- local-zone: define el dominio local aquí.
- local-data: define el registro A para subdominios y qué dirección IP local se resolverá.
- local-data-ptr: define el registro ptr para tus subdominios.
Ajuste de Rendimiento de Unbound
Agrega las siguientes líneas para obtener más rendimiento. Puedes ajustar los parámetros a continuación con tu entorno actual.
num-threads: 4
msg-cache-slabs: 8
rrset-cache-slabs: 8
infra-cache-slabs: 8
key-cache-slabs: 8
rrset-cache-size: 256m
msg-cache-size: 128m
so-rcvbuf: 8mParámetros detallados:
- num-threads: el número de hilos que se crearán. El valor debe coincidir con los núcleos de CPU del servidor.
- msg-cache-slabs: el número de slabs a utilizar para la caché de mensajes. Establecerlo en 8 optimiza Unbound para usar más memoria para el almacenamiento en caché.
- rrset-cache-slabs: el número de slabs a utilizar para la caché de RRset. Establecerlo en 8 optimiza Unbound para usar más memoria para la caché de RRSet.
- infra-cache-slabs: el número de slabs a utilizar para la caché de Infraestructura. Establecerlo en 8 optimiza Unbound para usar más memoria para la caché de Infraestructura.
- key-cache-slabs: el número de slabs a utilizar para la caché de claves. Establecerlo en 8 optimiza Unbound para usar más memoria para la caché de claves.
- rrset-cache-size: especifica la cantidad de memoria para la caché de RRSet. Este ejemplo utiliza 256MB, con el predeterminado de solo 4MB.
- msg-cache-size: especifica la cantidad de memoria para la caché de mensajes. Este ejemplo utiliza 128MB, con el predeterminado de solo 4MB.
- so-rcvbuf: establece el tamaño del búfer para el puerto DNS 53/udp en 8 MB. En el sistema Ubuntu, también debes establecer un valor más alto para el parámetro del kernel ‘net.core.rmem_max‘.
Configurar Unbound como un Resolutor DNS con DNS-over-TLS (DoT)
Por último, agrega una nueva sección ‘forward-zone‘ para configurar Unbound como un resolutor DNS para tus redes locales. Este ejemplo utiliza servidores DNS Quad9 con DoT (DNS-over-TLS) habilitado.
forward-zone:
name: "."
forward-ssl-upstream: yes
## También agrega IBM IPv6 Quad9 sobre TLS
forward-addr: 9.9.9.9@853#dns.quad9.net
forward-addr: 149.112.112.112@853#dns.quad9.netParámetros detallados:
- forward-zone: define la zona de reenvío para Unbound.
- name: establece en “.” para reenviar todas las consultas DNS.
- forward-addr: usa un reenvío específico para reenviar todas las consultas DNS. Este ejemplo utiliza Quad9 DNS con DNS-over-TLS (DoT) habilitado.
Guarda y cierra el archivo ‘/etc/unbound/unbound.conf’ cuando termines. Con el archivo de configuración de Unbound modificado, ahora puedes reiniciar el servicio Unbound y aplicar los cambios.
Ejecuta el siguiente comando para verificar y comprobar la configuración de Unbound. Si es exitoso, deberías obtener una salida como ‘unbound-checkconf: no errors in /etc/unbound/unbound.conf‘.
sudo unbound-checkconfA continuación, ejecuta el siguiente comando para aumentar el valor predeterminado de tu sistema ‘net.core.rmem_max’ a través del archivo ‘/etc/sysctl.conf’. Luego, aplica los cambios a través del comando ‘sysctl‘.
echo "net.core.rmem_max= 8388608" >> /etc/sysctl.conf
sudo sysctl -pDespués de eso, ejecuta el siguiente comando systemctl para reiniciar el servicio Unbound y aplicar los cambios.
sudo systemctl restart unboundCon esto, el servicio Unbound debería estar funcionando con la nueva configuración en la dirección IP 192.168.5.100 en el puerto 53.

Verifica la lista de puertos abiertos en tu sistema a través del comando ss a continuación.
ss -tulpnRecibirás una salida como esta - El puerto DNS udp predeterminado 53 es utilizado por el servicio Unbound.

Ahora que has terminado las configuraciones de Unbound, configurarás el firewall UFW y abrirás el puerto DNS predeterminado 53.
Configurando el Firewall UFW
En Ubuntu, el firewall predeterminado que está instalado es UFW. Está instalado, pero aún inactivo. En este paso, configurarás el firewall UFW y abrirás el puerto UDP para Unbound.
Ejecuta el siguiente comando para abrir el servicio OpenSSH en UFW a través del siguiente comando. Luego, puedes agregar el puerto DNS 53/udp al firewall UFW.
sudo ufw allow OpenSSH
sudo ufw allow 53/udpA continuación, ejecuta el siguiente comando para iniciar y habilitar el servicio del firewall UFW. Cuando se te pida, ingresa y para confirmar y presiona ENTER para continuar.
sudo ufw enableLa salida ‘El firewall está activo y habilitado en el inicio del sistema‘ confirma que el firewall UFW está en funcionamiento y está habilitado, lo que significa que el firewall UFW se iniciará automáticamente al arrancar el sistema.
Salida:

Ahora ejecuta el siguiente comando ufw para verificar el estado del firewall UFW. Deberías recibir una salida que indique que el estado de UFW es ‘activo‘ con el servicio OpenSSH y el puerto DNS 53/udp habilitados.
sudo ufw statusSalida:

Configurando el Registro de Unbound a través de Rsyslog y Logrotate
Después de configurar el firewall UFW, ahora configurarás un archivo de registro para Unbound a través de rsyslog y logrotate. El servicio rsyslog creará un archivo de registro específico para Unbound y logrotate rotará el archivo de registro de Unbound en un cierto tiempo.
Ejecuta el siguiente comando para agregar una nueva configuración de Rsyslog ‘/etc/rsyslog.d/unbound.conf‘ para el servicio Unbound. Con esto, los registros de Unbound se almacenarán en ‘/var/log/unbound.log‘.
cat <A continuación, ejecuta el siguiente comando para agregar la configuración de logrotate ‘/etc/logrotate.d/unbound‘ para el servicio Unbound. Esto creará rotación de registros para el archivo de registro de Unbound ‘/var/log/unbound.log‘ a diario.
cat <
Ahora ejecuta el siguiente comando systemctl para reiniciar los servicios Rsyslog y Logrotate. Esto aplicará los cambios que has realizado en ambos servicios.
sudo systemctl restart rsyslog logrotatePor último, puedes verificar el archivo de registro reiniciando el servicio Unbound usando el siguiente comando.
Con esto, los mensajes que son generados por el servicio Unbound durante el proceso de reinicio se almacenarán en el archivo de registro ‘/var/log/unbound.log‘. Ejecuta el comando cat para mostrar el contenido del archivo de registro ‘/var/log/unbound.log‘.
sudo systemctl restart unbound
cat /var/log/unbound.logSalida:

Configurando el Resolutor DNS en el Cliente
En el lado del cliente, necesitas configurar el resolutor DNS y usar Unbound como el resolutor predeterminado en el sistema cliente. Para la distribución de Ubuntu, puedes usar NetworkManager, el servicio systemd-resolved, o configurar un archivo estático para ‘/etc/resolv.conf‘.
En este paso, aprenderás cómo configurar el resolutor DNS en Ubuntu Desktop y Ubuntu Server.
Para Ubuntu Desktop
El servicio NetworkManager maneja la red predeterminada para la versión de Ubuntu Desktop. Así que puedes configurar fácilmente el resolutor DNS a través de NetworkManager, lo que se puede hacer a través de la GUI de línea de comandos o editando el archivo de configuración para cada interfaz de red.
Para configurar el resolutor DNS a través de la línea de comandos, puedes usar nmcli. Ejecuta el siguiente comando para configurar el resolutor DNS para la interfaz de red específica. Puedes reemplazar el nombre de la interfaz eth0.
sudo nmcli connection modify eth0 ipv4.dns "192.168.5.100"Cada interfaz gestionada por NetworkManager tiene un archivo de configuración específico que se almacena en el directorio ‘/etc/NetworkManager/system-connections’ con el formato ‘.nmconnection’.
Puedes modificar la configuración de la interfaz con tu editor de texto preferido y agregar las siguientes líneas a la sección ‘[ipv4]‘.
[ipv4]
dns=192.168.5.100
ignore-auto-dns=true
never-default=trueSi prefieres usar una aplicación GUI, abre la aplicación NetworkManager en tu máquina y edita el nombre de la interfaz que deseas modificar. Haz clic en la pestaña ‘Configuraciones IPv4’ y ingresa tu servidor DNS local. Luego, haz clic en Guardar para confirmar.

Para Servidor Ubuntu Genérico
Para máquinas de servidor Ubuntu genéricas, la red es manejada por netplan con el servicio backend systemd-networkd. Y para la configuración del resolutor DNS, el systemd-networkd utiliza el systemd-resolved. Así que, para configurar el resolutor DNS en un servidor Ubuntu genérico, puedes lograrlo a través del servicio systemd-resolved.
Abre el archivo de configuración de systemd-resolved usando tu editor preferido. Este ejemplo utiliza un editor nano.
sudo nano /etc/systemd/resolved.confEn la sección ‘[Resolve]‘, descomenta el parámetro ‘DNS‘ e ingresa la dirección IP de tu servidor DNS local.
[Resolve]
DNS=192.168.5.100Guarda y cierra el archivo cuando termines.
Ahora ejecuta el siguiente comando para reiniciar el servicio systemd-resolved y aplicar los cambios. Luego, puedes verificar el estado del resolutor DNS a través del comando resolvectl como a continuación.
sudo systemctl restart systemd-resolved
sudo resolvectl statusSi es exitoso, deberías ver una salida como esta - El resolutor DNS predeterminado ha cambiado a la dirección IP del servidor DNS local Unbound 192.168.5.100.

Probando el Servidor DNS Unbound
Para asegurarte de que el DNS Unbound está funcionando como un resolutor DNS, ejecuta el comando dig a continuación desde la máquina cliente Ubuntu. El parámetro ‘@192.168.5.100‘ asegura que estás utilizando un servidor DNS Unbound que se ejecuta en la dirección IP ‘192.168.5.100‘.
dig @192.168.5.100Cuando sea exitoso, recibirás una respuesta del servidor DNS raíz como la salida a continuación. También notarás la bandera ‘ad‘ (datos auténticos) en la salida del encabezado, lo que significa que DNSSEC está habilitado.

A continuación, ejecuta el siguiente comando para asegurarte de que los clientes pueden acceder a los nombres de dominio en internet.
dig github.com
dig duckduckgo.comCuando sea exitoso, deberías recibir detalles de salida del registro DNS para el dominio ‘github.com‘ y ‘duckduckgo.com‘. Puedes ver que el resolutor DNS que responde a la consulta es ‘127.0.0.53#53’, el systemd-resolved que utiliza Unbound como el resolutor predeterminado. También puedes ver el ‘Tiempo de consulta‘ para cada consulta, el ‘Tiempo de consulta‘ para el dominio ‘github.com‘ es ‘1748‘ y para ‘duckduckgo.com‘ es ‘999‘.
Salida para github.com:

Salida para duckduckgo.com:

Si vuelves a ejecutar el comando dig anterior, el ‘Tiempo de consulta’ debería reducirse. Y esto confirma que tus consultas han sido almacenadas en caché, y la caché DNS está funcionando.
dig github.com
dig duckduckgo.comAccede a Github después de que la caché se almacene:

Accede a duckduckgo después de que la caché se almacene:

A continuación, verifica el dominio local o subdominio a través del comando dig a continuación. Si es exitoso, cada subdominio se apuntará a la dirección IP correcta configurada en el archivo de configuración de Unbound ‘/etc/unbound/unbound.conf‘.
dig firewall.home.lan +short
dig vault.home.lan +short
dig media.home.lan +shortSalida:

Ahora ejecuta el siguiente comando dig para asegurarte de que los registros PTR están apuntando al nombre de dominio correcto.
dig -x 10.0.0.1 +short
dig -x 10.0.0.2 +short
dig -x 10.0.0.3 +shortSalida:

También puedes verificar DoT (DNS sobre TLS) a través de tcpdump. Instala el paquete ‘tcpdump‘ en tu servidor Unbound.
sudo apt install tcpdumpIngresa y para confirmar cuando se te pida y presiona ENTER para continuar.

Ahora ejecuta el siguiente comando tcpdump para monitorear el tráfico en la interfaz ‘eth0‘ con el puerto DoT 853. En este ejemplo, el DNS Unbound se está ejecutando en la dirección IP ‘192.168.5.100‘ con la interfaz ‘eth0‘.
tcpdump -vv -x -X -s 1500 -i eth0 'port 853'Muévete a la máquina cliente y ejecuta el siguiente comando para acceder a nombres de dominio externos/internet a través del comando dig a continuación.
dig google.comSalida:

Después de eso, vuelve al servidor Unbound y ahora deberías obtener una salida similar a esta en la salida de tcpdump.

Con esto, ahora has instalado y configurado un Servidor DNS Local a través de Unbound en el servidor Ubuntu. También has configurado un resolutor DNS en Ubuntu Desktops y Servidores a través de NetworkManager y systemd-resolved.
Conclusión
En esta guía, has instalado el Servidor DNS Local Unbound en un servidor Ubuntu 22.04. Has habilitado la caché DNS, DNSSEC (habilitado por defecto), configurado direcciones privadas y ACLs, agregado un dominio local a través de local-zone, y luego configurado Unbound como resolutor DNS con DoT (DNS-over-TLS).
Además, has configurado privacidad y seguridad DNS básicas, optimizado Unbound y configurado registros de Unbound a través de rsyslog y logrotate.
Al final de esta guía, también has aprendido cómo configurar un resolutor DNS en Ubuntu Desktops y Servidores a través de NetworkManager y systemd-resolved. Y también aprendiste el uso básico del comando dig para verificar el servidor DNS.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.