En esta ocasión vamos a ver cómo instalar y configurar el servidor DNS Bind en Ubuntu 22.04 LTS Jammy Jellyfish paso a paso, de modo que podremos resolver nombres en red local, tanto pertenecientes a dominios locales como nombres de Internet.
Contenido
Antes de instalar DNS Bind en Ubuntu 22.04 LTS Jammy Jellyfish
Si quieres completar los pasos de esta guía de instalación y configuración del servidor DNS Bind en Ubuntu 22.04 LT Jammy Jellyfish será necesario contar con los siguientes requisitos mínimos:
- Una máquina Ubuntu 22.04 LTS Jammy Jellyfish actualizada, que actuará como servidor DNS.
- Opcionalmente, una segunda máquina Ubuntu 22.04 LTS para utilizarla como cliente DNS.
- Acceso a línea de comandos con un usuario con privilegios de sudo.
- Conexión a Internet.
En el ejemplo de este tutorial configuraremos un servidor DNS Bind sobre una máquina Ubuntu 22.04 LTS que resolverá los nombres de las máquinas de una red local que utilizará el dominio red.lan, aunque también servirá para resolver nombres de Internet.
La red privada sobre la que trabajamos es la 192.168.1.0/24 y la dirección IP del servidor Ubuntu 22.04 LTS que correrá el servicio DNS Bind es la 192.168.1.187.
En este tutorial no abarcamos cómo configurar los clientes en la red para que usen el nuevo servidor DNS. A grandes rasgos, si la configuración de los adaptadores de red es automática el servidor DHCP de la red debería configurarse para enviar dicho servidor DNS; si la configuración es manual, habrá que especificar el servidor DNS manualmente en la configuración de cada adaptador.
Cómo instalar DNS Bind en Ubuntu 22.04 LTS
Vamos a instalar el servicio DNS Bind en Ubuntu 22.04 LTS Jammy Jellyfish mediante los paquetes procedentes de los repositorios de la distribución, por lo que actualizamos la información de los mismos:
~$ sudo apt update
E instalamos los paquetes necesarios:
~$ sudo apt install -y bind9
Tras la descarga e instalación de este paquete y todas sus dependencias se crea un nuevo servicio en el sistema, el servicio named, que queda en ejecución y activada para su inicio automático. Podemos comprobar el estado de este servicio en cualquier momento con el siguiente comando:
~$ systemctl status named
Configurar el firewall para Bind en Ubuntu 22.04 LTS
Si tienes activado el firewall UFW en Ubuntu 22.04 LTS Jammy Jellyfish será necesario añadir una regla para permitir la conexión al servicio desde red:
~$ sudo ufw allow bind9
Cómo configurar el servidor DNS Bind en Ubuntu 22.04 LTS
Vamos a configurar el servicio DNS Bind en Ubuntu 22.04 LTS Jammy Jellyfish a través de sus archivos de configuración que se organizan bajo la ruta /etc/bind/.
Resolución de nombres de Internet
Si queremos que los clientes de red puedan resolver nombres de Internet con el servidor DNS Bind que acabamos de instalar, editaremos el archivo named.conf.options:
~$ sudo nano /etc/bind/named.conf.options
Buscamos la sección forwarders:
... // forwarders { // 0.0.0.0; // }; ...
Activamos dicha sección e introducimos los servidores DNS públicos que consideremos, por ejemplo el de Cloudflare:
... forwarders { 1.1.1.1; }; ...
O los de Google:
... forwarders { 8.8.8.8; 8.8.4.4; }; ...
Guardamos los cambios y comprobamos que la sintaxis del archivo es correcta con el comando named-checkconf:
~$ named-checkconf
Si todo es correcto podemos recargar la configuración del servicio:
~$ sudo systemctl reload named
Ahora desde el propio servidor o, mejor aún, desde otra máquina en red podemos probar la resolución de nombres de Internet con la herramienta nslookup.
Si lo hacemos desde el propio servidor:
~$ nslookup google.com localhost Server: localhost Address: 127.0.0.1#53 Non-authoritative answer: Name: google.com Address: 142.250.184.14 Name: google.com Address: 2a00:1450:4003:806::200e
Y desde una máquina en red, la misma petición pero indicando la dirección IP del servidor DNS que estamos configurando:
~$ nslookup google.com 192.168.1.187 Server: 192.168.1.187 Address: 192.168.1.187#53 Non-authoritative answer: Name: google.com Address: 142.250.200.14 Name: google.com Address: 2a00:1450:4003:806::200e
Resolución de nombres de la red interna
Para que nuestro servidor DNS Bind pueda resolver nombres de un dominio interno en una red local crearemos un archivo de configuración para dicho dominio.
Vamos a crear un archivo de base datos para el dominio local red.lan:
~$ sudo nano /etc/bind/db.red.lan
El esquema mínimo suele ser el siguiente:
$TTL 1D @ IN SOA ns.red.lan. instalador.red.lan. ( 1 ; serial 604800 ; refresh 86400 ; retry 2419200 ; expiration 604800 ; TTL negative cache ) ; Registros NS (Servidores de nombres) @ IN NS ns.red.lan. ; Registros A ns IN A 192.168.1.187 router IN A 192.168.1.1 nas IN A 192.168.1.2 pi IN A 192.168.1.130 puesto1 IN A 192.168.1.151 puesto2 IN A 192.168.1.152
En el registro SOA (start of authority) se indican el nombre del servidor DNS principal del dominio (en este ejemplo ns.red.lan) y la dirección de correo electrónico del administrador del servicio, donde la @ se sustituye por un punto (es decir, instalador.red.lan equivale a instalador@red.lan).
En este mismo registro, el parámetro que incorpora el comentario serial es el número de versión del archivo. Siempre que vayamos a introducir cambios debemos incrementar manualmente dicho número.
En el registro NS introducimos el servidor DNS del dominio. Si hubiera más servidores (secundarios, terciarios, etc.) deberíamos añadir más registros con los nombres de dichos servidores.
Finalmente, los registros A son los que asocian un nombre con su dirección IP. En lugar de poner el FQDN o nombre completo de cada máquina, podemos poner sólo la parte de la máquina.
Por ejemplo, para ns.red.lan indicamos ns, para puesto1.red.lan indicamos puesto1, etc.
Cuando terminemos de introducir la base de datos del dominio, guardamos y cerramos el archivo.
Comprobamos la sintaxis de este archivo con el comando named-checkzone, que recibe como parámetros el dominio que queremos comprobar y su archivo de base de datos:
~$ named-checkzone red.lan /etc/bind/db.red.lan zone red.lan/IN: loaded serial 1 OK
En caso de error habrá que solucionar el problema para poder continuar.
Para que el archivo de zona sea incluido en la configuración de Bind, debemos editar el archivo named.conf.local:
~$ sudo nano /etc/bind/named.conf.local
Y añadimos al final un bloque zone para el dominio en el que se incluya la base de datos o archivo de zona:
... zone "red.lan" IN { type master; file "/etc/bind/db.red.lan"; };
Guardamos y cerramos este archivo y recargamos la configuración del servicio DNS:
~$ sudo systemctl reload named
Podemos probar la resolución de nombres de la red local, por ejemplo desde una máquina Ubuntu 22.04 LTS que no es el servidor, con el comando nslookup:
~$ nslookup puesto1.red.lan 192.168.1.187 Server: 192.168.1.187 Address: 192.168.1.187#53 Name: puesto1.red.lan Address: 192.168.1.151
Y deberíamos obtener la respuesta esperada.
Resolución inversa
Ahora realizaremos la configuración para que el servidor DNS Bind del servidor Ubuntu 22.04 LTS devuelva el nombre de máquina asociado a una dirección IP.
Para ello creamos el archivo de base de datos de la zona inversa de la red local (en este ejemplo para la red 192.168.1.0/24):
~$ sudo nano /etc/bind/db.1.168.192
El contenido de este archivo sería similar al siguiente:
$TTL 1D @ IN SOA red.lan. root.red.lan. ( 0 ; serial 604800 ; refresh 86400 ; retry 2419200 ; expires 604800 ; TTL negative cache ) @ IN NS ns.red.lan. ; Registros PTR 187 IN PTR ns.red.lan. 1 IN PTR router.red.lan. 2 IN PTR nas.red.lan. 130 IN PTR pi.red.lan. 151 IN PTR puesto1.red.lan. 152 IN PTR puesto2.red.lan.
Podemos ver que los registros SOA y NS son similares a los del archivo de resolución directa de la zona. Lo que varía es que para resolución inversa usamos registros PTR en los que especificamos la parte numérica de la dirección IP que varía y el nombre completo o FQDN de la máquina.
Guardamos los cambios y comprobamos si la sintaxis es correcta:
~$ named-checkzone 1.168.192 /etc/bind/db.1.168.192 zone 1.168.192/IN: loaded serial 0 OK
Si todo está bien editaremos el archivo named.conf.local:
~$ sudo nano /etc/bind/named.conf.local
Y añadimos al final un bloque zone para incluir el archivo de base de datos de resolución inversa que acabamos de crear:
... zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.1.168.192"; };
Guardamos este archivo y comprobamos que la sintaxis esté correcta:
~$ named-checkconf
Ya podemos recargar la configuración del servicio DNS Bind:
~$ sudo systemctl reload named
Ahora probamos la resolución inversa desde un cliente para cualquiera de las direcciones IP que hemos registrado:
~$ nslookup 192.168.1.1 192.168.1.187 1.1.168.192.in-addr.arpa name = router.red.lan.
¡Todo listo!
Por último, cuando ya tenemos funcionando correctamente el servicio DNS Bind en Ubuntu 22.04 LTS es el momento de hacer que el sistema lo use por defecto. Para ello editamos el siguiente archivo:
~$ sudo nano /etc/systemd/resolved.conf
Dentro de la sección [Resolve] observamos dos directivas desactivadas:
... [Resolve] ... #DNS= ... #Domains= ...
Las activamos y les damos los siguientes valores:
... DNS=127.0.0.1 ... Domains=~. ...
Guardamos y cerramos el archivo, y reiniciamos el servicio systemd-resolved:
~$ sudo systemctl restart systemd-resolved
A partir de este momento el sistema usa Bind por defecto para resolver tanto los nombres de Internet:
~$ nslookup ubuntu.com Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: ubuntu.com Address: 185.125.190.20 ...
Como el dominio local (directo e inverso) que hemos configurado:
~$ nslookup router.red.lan Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: router.red.lan Address: 192.168.1.1 ~$ nslookup 192.168.1.1 1.1.168.192.in-addr.arpa name = router.red.lan. Authoritative answers can be found from:
Quedaría configurar el servidor DHCP de la red para que envíe el nuevo servidor DNS a los clientes que se configuran automáticamente y/o configurar las máquinas clientes que tienen direcciones IP estáticas.
Conclusión
Ahora que sabes cómo instalar y configurar el servicio DNS Bind en Ubuntu 22.04 LTS Jammy Jellyfish ya puedes proporcionar servicio de resolución de nombres para tu red local. Funciona perfectamente tanto para nombres de Internet como para los nombres locales de tu red privada.
Si te ha surgido algún problema, duda, sugerencia, quieres notificar algún error, hacer una sugerencia, etc. puedes dejar un comentario. Los comentarios están moderados, para intentar luchar contra el SPAM, pero se revisan prácticamente a diario.
¡Apoya comoinstalar.me!
¿Ya tienes resolución de nombres con tu propio servidor gracias a nuestra pequeña guía? Si es así y quieres agradecérnoslo cualquier contribución mínima siempre es bien acogida.
Puedes ayudarnos dejando una propina de tan solo 1 $ con PayPal:
O, si te sientes especialmente agradecido, puedes invitarnos a un café:
¡Gracias!
Buenas tardes,
recién instalé Ubuntu Server 22.04 LTS en la empresa que laboro, pero al momento de dar el comando w para identificar los equipos que se conectan al servidor no me muestra sus nombres canónicos, sino las IP, en el apartado FROM.
Aparte de realizar el cambio en el archivo /etc/hosts, ¿se requiere algún cambio adicional?
Con CentOS 7 funcionaba perfecto pero no he podido dar con la configuración en Ubuntu Server 22.04 LTS.
Agradecería su apoyo al respecto.
Mil gracias.
Rafael Gallardo A.
Hola, Rafael. A día de hoy tengo el mismo problema. Las últimas versiones de Ubuntu con el nuevo sistema de configuración de red introducen muchas novedades, pero también muchos quebraderos de cabeza para cosas que antes se hacían más fácil y rápidamente.
Buenas tardes. Estoy tratando de configurar el servicio bind para cambiar las DNS de ionos, pero a la hora de recargar el servicio cuando ingreso la zona me sale este error, no sé si me puede ayudar:
Job for named.service failed.
See «systemctl status named.service» and «journalctl -xeu named.service» for details.
También no me queda muy claro en los registros de tipo A que debo poner si la IP pública o IP local del equipo.
Muchas gracias, perdone las preguntas, estoy aprendiendo aún.
Hola, José Luis. Es posible que cualquiera de los dos comandos que te muestra el mensaje de error te indiquen a qué tipo de error te enfrentas, seguramente error de sintaxis en el archivo de zona. Por otro lado, dependiendo de qué estés haciendo deberás indicar direcciones IP públicas o privadas en los registros A. Por ejemplo, si se trata de nombres DNS para ser accedidos a través de Internet se entiende que deberían ser IP públicas; en cambio, si estás configurando una red local con nombres de dominio locales, serían IP privadas.
Pregunta, al usar la red interna de un cliente y un servidor con DHCP conectado a una red de Internet, ¿sí o sí el cliente Ubuntu debe de darle Internet?
Si te digo la verdad, no me queda claro qué estás preguntando, no acabo de entender la estructura de red y la cuestión que planteas.
Tengo un problema al probar la resolución de la inversa con el IP router y NS en la otra máquina, no me da, me aparece el error:
** server can´t find 10.12.168.192.in-arpa: NXDOMAIN
Revisa que el archivo de resolución inversa contenga el registro para la IP 192.168.12.10 asociado al correspondiente nombre de máquina, y que dicho archivo está incluido en la configuración de Bind. Casi con toda seguridad se tratará de alguún error en la relación de nombres y direcciones.