Cómo instalar el servidor DNS Bind en Ubuntu 20.04 LTS

En este artículo veremos cómo instalar y configurar el servidor DNS Bind en Ubuntu 20.04 LTS Focal Fossa paso a paso, de modo que puedas trabajar con tu propio servicio de resolución de nombres en tu red local, ya sea doméstica o profesional.

Antes de instalar DNS Bind en Ubuntu 20.04 LTS

Para poder seguir los pasos de esta guía de instalación y configuración del servicio DNS Bind en Ubuntu 20.04 LTS será necesario partir del siguiente escenario:

  • Una máquina Ubuntu 20.04 LTS Focal Fossa actualizada.
  • Un usuario con permisos de sudo.
  • Acceso a Internet.
  • Otras máquinas en red para probar el servicio.

En este tutorial configuraremos el servidor DNS Bind para resolver los nombres de una red con dominio localnet.net en una máquina Ubuntu 20.04 LTS con dirección IP 192.168.0.140 dentro de una red privada 192.168.0.0/24.

Si ya tienes todo el entorno listo, es hora de regular tu mesa de trabajo a la altura correcta, abrir tu terminal de línea de comandos favorita y ponernos manos a la obra.

Cómo instalar el servicio DNS Bind en Ubuntu 20.04 LTS

Para instalar el servicio DNS Bind en Ubuntu 20.04 LTS utilizaremos los paquetes disponibles en los repositorios del sistema, por lo que los actualizamos como primer paso:

~$ sudo apt update

El paquete que necesitamos es bind9 que instalamos con apt:

~$ sudo apt install -y bind9

Tras la descarga e instalación de Bind y sus dependencias se crea un nuevo servicio en Ubuntu 20.04 llamado bind9, o bind9.service, que queda iniciado y habilitado para su inicio automático en cada arranque del sistema.

Podemos comprobar el estado del servicio en cualquier momento con el comando systemctl status bind9:

como instalar el servicio dns bind en ubuntu 20.04 lts focal fossa

Si en los mensajes de estado aparecen ciertos errores como los mostrados en la imagen, es normal cuando se trata de redes locales, lo solucionaremos enseguida.

Configurar el firewall de Ubuntu 20.04 LTS para DNS Bind

En caso de que tengas activado el firewall UFW en tu máquina Ubuntu 20.04 LTS será necesario añadir una regla para permitir solicitudes externas de resolución de nombres:

~$ sudo ufw allow bind9

Cómo configurar los clientes de red para usar el servicio DNS Bind de Ubuntu 20.04 LTS

La forma más sencilla de que el resto de máquinas de la red comiencen a usar el servicio DNS Bind que estamos configurando en el servidor Ubuntu 20.04 LTS es configurando a su vez el servicio DHCP del router o de la máquina que corresponda para que envíe como servidor de nombres la dirección IP del nuevo servidor DNS.

En caso de configurar manualmente los adaptadores de red de cada dispositivo de la red local bastará con indicar la dirección del servidor de nombres Ubuntu 20.04 en el lugar adecuado.

Finalmente, si usas autoconfiguración y no puedes o no quieres modificar la configuración del servidor DHCP, puedes configurar el adaptador de red de las máquinas clientes para que mantengan la configuración automática excepto para los servidores de nombres.

En el caso de clientes Ubuntu 20.04, cuya configuración de red se realiza a través de Netplan, editaremos el archivo de configuración de la interfaz de red:

~$ sudo nano /etc/netplan/00-installer-config.yaml

Su contenido inicial puede ser similar al siguiente:

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
  version: 2

En la sección relativa a la interfaz de red, en este caso enp0s3, insertamos lo siguiente:

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
      nameservers:
        addresses: [192.168.0.140]
  version: 2

Recuerda que al tratarse de un archivo YAML sólo están permitidos los espacios en blanco para el sangrado o indentación de los parámetros.

Hemos añadido la directiva nameservers, con el apartado addresses en el que especificamos, separadas por comas, las direcciones de los servidores DNS primario, secundario, terciario, etc. En este ejemplo la única dirección que añadimos es la del servidor DNS que configuraremos a continuación.

Guardamos los cambios y cerramos el archivo.

Para aplicar todos estos cambios usamos el comando netplan:

~$ sudo netplan apply

Desde este momento la máquina Ubuntu 20.04 LTS resolverá nombres mediante el servidor DNS especificado manualmente.

Cómo configurar el servidor DNS Bind en Ubuntu 20.04 LTS

Para configurar el servicio DNS Bind en Ubuntu 20.04 LTS trabajaremos sobre sus archivos de configuración, ubicados en la ruta /etc/bind/.

El archivo principal es named.conf que se limita a cargar las configuraciones de los archivos named.conf.options, named.conf.local y named.conf.default-zones.

Trabajar únicamente con IPv4

Pero también podemos realizar ciertos ajustes sobre el archivo /etc/default/named. Por ejemplo, si sólo vamos a trabajar con IPv4 en nuestra red local puede ser interesante desactivar IPv6 para evitar errores. Esto lo haremos editando dicho archivo:

~$ sudo nano /etc/default/named

Buscamos la directiva OPTIONS:

...
OPTIONS="-u bind"

Y le añadimos el parámetro -4:

...
OPTIONS="-u bind -4"

Ya podemos cerrar y guardar este archivo, y recargar el servicio:

~$ sudo systemctl reload bind9

Desactivar DNSSEC

Si trabajamos con un servidor DNS local, como el de este ejemplo, no funcionará la capa de seguridad DNSSEC, así que debemos desactivarla. Para ello editamos el archivo named.conf.options:

~$ sudo nano /etc/bind/named.conf.options

Buscamos la directiva dnssec-validation:

...
        dnssec-validation auto;
...

Y cambiamos su valor por «no»:

...
#       dnssec-validation auto;
        dnssec-validation no;
...

En este caso hemos desactivado la directiva original y hemos añadido una nueva con el valor deseado.

Tras guardar el archivo, habrá que recargar la configuración del servicio para aplicar los cambios.

Si ahora volvemos a consultar el estado del servicio, veremos que han desaparecido los mensajes de error:

~$ systemctl status bind9

instalacion y configuracion del servidor dns bind en ubuntu 20.04 lts focal fossa

Resolución de nombres de Internet (forwarding)

Si los clientes de tu red local tienen acceso a Internet y quieres que además de los nombres de la red local puedan resolver nombres de Internet, habrá que permitir lo que se denomina recursión. Para ello editamos el archivo named.conf.options:

~$ sudo nano /etc/bind/named.conf.options

Dentro del bloque options añadimos un bloque forwarders con las direcciones de servidores DNS que puedan resolver nombres de Internet:

...
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
...

En este caso usamos los servidores DNS de libre acceso de Google, pero puedes usar otros como, por ejemplo, los que proporciona tu proveedor de acceso a Internet.

Guardamos el archivo y recargamos el servicio.

Cómo configurar zonas o dominios

Para configurar un dominio o zona, creamos un archivo de zona para dicho dominio, normalmente utilizando el dominio como parte del nombre del archivo, lo que permite facilitar la configuración. En este caso vamos a crear el archivo de zona para el dominio de red local localnet.net:

~$ sudo nano /etc/bind/db.localnet.net

Comenzaremos con la estructura inicial, que sería similar a la siguiente:

$TTL    1D

@       IN      SOA     ns.localnet.net. root.localnet.net. (
        1       ; serial
        604800  ; refresh
        86400   ; retry
        2419200 ; expiration
        604800  ; TTL negative cache
)

; Registros NS (Servidores de nombres)

@       IN      NS      ns.localnet.net.

; Registros A

ns.localnet.net.        IN      A       192.168.0.140

Toda esta configuración inicial se encarga de definir el dominio y el servidor DNS que lo gestiona, que en este caso es nuestro servidor Ubuntu 20.04 LTS.

Inicialmente hemos incluido el registro SOA, un registro NS y un registro A.

En la línea que comienza por @, el registro SOA o «Start of Authority«, indicamos cuál es el servidor de nombres del dominio y la dirección de correo electrónico del administrador, especificada sin el carácter @, es decir, root@localnet.net se indica como root.localnet.net. Puedes utilizar el nombre que quieras para tu servidor DNS, pero los cambios deben ser consistentes. Por ejemplo:

...
@       IN      SOA     dns1.localnet.net. root.localnet.net. (
...
@       IN      NS      dns1.localnet.net.
...
dns1.localnet.net.      IN      A       192.168.0.140

Ahora hemos decidido llamar dns1 en lugar de ns al servidor de nombres, enlazándolo a la misma cuenta de correo del administrador.

Es muy importante no olvidar ninguno de los puntos al final de cada nombre de máquina.

La línea etiquetada como ‘serial‘ recoge un número que deberá incrementarse manualmente cada vez que editemos este archivo, ya sea para modificar nombres o añadir nuevos.

Observa que el registro NS está indentado, ya que si no lo está la configuración no funcionará.

Guardamos los cambios y cerramos el archivo.

Para comprobar que la configuración es correcta podemos usar el comando named-checkzone, que recibe como parámetros el dominio que queremos comprobar y el archivo que lo configura:

~$ named-checkzone localnet.net /etc/bind/db.localnet.net
zone localnet.net/IN: loaded serial 1
OK

Una vez que la configuración inicial es correcta, podemos editar el archivo de nuevo y añadir nombres de máquinas de nuestra red y sus correspondientes direcciones IP, mediante registros A adicionales:

...
                        2       ; serial
...
; Registros A
...
router.localnet.net.            IN      A       192.168.0.1
nas.localnet.net.               IN      A       192.168.0.101
sat.localnet.net.               IN      A       192.168.0.102
ubuntu2.localnet.net.           IN      A       192.168.0.108

Guardamos el archivo y pasamos de nuevo el comando named-checkzone:

~$ named-checkzone localnet.net /etc/bind/db.localnet.net
zone localnet.net/IN: loaded serial 2
OK

Observa que, además de devolvernos el mensaje ‘OK‘, también se muestra el serial actual, que hemos modificado manualmente.

Para que esta configuración sea tenida en cuenta por el servicio DNS Bind será necesario incluirla desde el archivo named.conf.default-zones, así que lo editamos:

~$ sudo nano /etc/bind/named.conf.default-zones

Añadimos un bloque zone como el siguiente al final del archivo:

...
zone "localnet.net" IN {
        type master;
        file "/etc/bind/db.localnet.net";
};

Guardamos el archivo y recargamos el servicio:

~$ sudo systemctl reload bind9

El servicio está listo para aceptar y responder peticiones de resolución de nombres.

Cómo probar el servicio DNS Bind del servidor Ubuntu 20.04 LTS

Desde cualquier máquina de la red configurada manual o automáticamente para usar como servidor DNS la máquina Ubuntu 20.04 que acabamos de configurar, podemos abrir una terminal de consola y usar el comando ping; por ejemplo, para un nombre de Internet (si hemos configurado la recursión):

~$ ping kernel.org
PING kernel.org (198.145.29.83) 56(84) bytes of data.
64 bytes from kernel.org (198.145.29.83): icmp_seq=1 ttl=46 time=152 ms
64 bytes from kernel.org (198.145.29.83): icmp_seq=2 ttl=46 time=151 ms
64 bytes from kernel.org (198.145.29.83): icmp_seq=3 ttl=46 time=152 ms

Podemos probar los nombres de nuestra propia red, como el propio servidor de nombres:

~$ ping ns.localnet.net
PING ns.localnet.net (192.168.0.105) 56(84) bytes of data.
64 bytes from 192.168.0.105 (192.168.0.105): icmp_seq=1 ttl=64 time=0.370 ms
64 bytes from 192.168.0.105 (192.168.0.105): icmp_seq=2 ttl=64 time=0.480 ms
64 bytes from 192.168.0.105 (192.168.0.105): icmp_seq=3 ttl=64 time=0.584 ms

O cualquiera de las máquinas o dispositivos cuyo nombre hayamos configurado:

~$ ping router.localnet.net
PING router.localnet.net (192.168.0.1) 56(84) bytes of data.
64 bytes from _gateway (192.168.0.1): icmp_seq=1 ttl=64 time=8.89 ms
64 bytes from _gateway (192.168.0.1): icmp_seq=2 ttl=64 time=2.93 ms
64 bytes from _gateway (192.168.0.1): icmp_seq=3 ttl=64 time=4.43 ms

La máquina debería contestar en unos instantes, e igual debería ocurrir con el resto de nombres del dominio.

Si alguno de los nombres corresponde a una máquina que está apagada, no responderá, pero observa cómo sí se obtiene la dirección IP:

~$ ping nas.localnet.net
PING nas.localnet.net (192.168.0.101) 56(84) bytes of data.
From ubuntu2 (192.168.0.108) icmp_seq=1 Destination Host Unreachable
From ubuntu2 (192.168.0.108) icmp_seq=2 Destination Host Unreachable
From ubuntu2 (192.168.0.108) icmp_seq=3 Destination Host Unreachable

¡Así de fácil!

Cómo configurar la resolución inversa con el servidor DNS Bind en Ubuntu 20.04

A veces es interesante poder obtener el nombre DNS que corresponde a una dirección IP concreta. Por ejemplo, muchos registros de eventos y conexiones guardan el nombre DNS en lugar de la dirección IP si es posible realizar la resolución inversa.

Para hacer esto crearemos un nuevo archivo de zona correspondiente a nuestra dirección de red:

~$ sudo nano /etc/bind/db.0.168.192

Arrancaremos con una configuración bastante parecida pero no igual a la configuración de zona que ya hicimos antes:

$TTL 1D

@       IN      SOA     ns.localnet.net. root.localnet.net. (
        0       ; serial
        604800  ; refresh
        86400   ; retry
        2419200 ; expires
        604800  ; TTL negative cache
)

@       IN      NS      ns.localnet.net.

; Registros PTR

140     IN      PTR     ns.localnet.net.
1       IN      PTR     router.localnet.net.
101     IN      PTR     nas.localnet.net.
102     IN      PTR     sat.localnet.net.
108     IN      PTR     ubuntu2.localnet.net.
112     IN      PTR     nox.localnet.net.

El registro SOA indica igualmente el servidor DNS principal de la zona a la que corresponde la resolución inversa, también incluye la dirección de correo-e del administrador y los parámetros de número de serie y tiempos.

Recuerda incrementar el número de serie si haces cambios en este archivo.

Para asociar la parte de dirección de máquina de la dirección IP con los nombres DNS usamos registros PTR.

En este ejemplo usamos una red clase C, así que usamos los 3 primeros números (dirección de red) para el nombre del archivo de zona y el cuarto y último número para los registros PTR.

Guardamos los cambios y comprobamos la corrección del archivo con named-checkzone:

~$ named-checkzone 0.168.192 /etc/bind/db.0.168.192
zone 0.168.192/IN: loaded serial 0
OK

Si todo es correcto editaremos de nuevo named.conf.default-zones:

~$ sudo nano /etc/bind/named.conf.default-zones

Y añadimos el siguiente bloque zone para incluir la configuración del archivo de resolución inversa:

...
zone "0.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0.168.192";
};

Guardamos los cambios y comprobamos que todo sea correcto con named-checkzone:

~$ named-checkconf

Y recargamos la configuración del servicio DNS:

~$ sudo systemctl reload bind9

Ya podemos realizar resolución inversa de direcciones IP usando alguna herramienta como nslookup (incluida en el paquete bind9-tools).

Desde el propio servidor Ubuntu 20.04 donde corre el servicio DNS Bind:

~$ nslookup 192.168.0.1 localhost
1.0.168.192.in-addr.arpa      name = router.localnet.net.

Y desde cualquier otra máquina conectada en red, indicando si es necesario la dirección del servidor DNS:

~$ nslookup 192.168.0.1 192.168.0.140
1.0.168.192.in-addr.arpa      name = router.localnet.net.

¡Así de sencillo!

Conclusión

Ahora que sabes cómo instalar el servicio DNS Bind en Ubuntu 20.04 LTS Focal Fossa ya puedes configurar tus propios dominios y subdominios locales en tu red local, de modo que cualquier dispositivo tenga su propio nombre y, a su vez, pueda resolver el resto de nombres de la red.

En caso de dudas, preguntas, sugerencias, etc. puedes dejar un comentario (están moderados, para evitar SPAM, pero se revisan diariamente).

¡Apoya comoinstalar.me!

¿Ya dispones de servicio de resolución de nombres en tu red local gracias a nuestra guía? Si es así y quieres agradecérnoslo, puedes ayudarnos a mantener este sitio en línea dejando 1 $ de propina desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarnos a un cappuccino:

¡Gracias!

Valora esta entrada

5/5 - (7 votos)

10 comentarios en «Cómo instalar el servidor DNS Bind en Ubuntu 20.04 LTS»

  1. Hola, Instalador. Oye, ¿cómo tendría que configurar mi servidor DNS para que acepte peticiones de una red externa? ¿Bastaría con abrir el firewall o hay que configurar algo más? Gracias por adelantado 🙂

    Responder
    • Hola, Nenya. Si la conexión de la máquina Ubuntu 20.04 donde corre el servicio DNS Bind es directa a Internet, sí bastaría con abrir el firewall, pero normalmente las conexiones se realizan a través de un router. En ese caso habría que realizar el típico redireccionamiento de puertos del router al servidor Ubuntu 20.04.

      Por otro lado, si el servicio DNS resuelve direcciones locales ten en cuenta que tal vez los clientes de la red externa no puedan conectar a dichas direcciones internas. Tendrías que montar una VPN, conexión punto a punto, etc.

      Responder
  2. Buenos días,

    Buen post. Me gustaría saber cómo podría realizar esta práctica a partir de máquinas virtuales. ¿Tendrían que estar en red interna tanto servidor como clientes?
    Siguiendo todos tus pasos, el servidor DNS no muestra errores pero en el momento de realizar un ping kernel.org me salta el siguiente error: “Temporary failure in name resolution

    Si me pudieras ayudar me harías un gran favor.

    Responder
    • Hola, Tomas. En cuanto a la configuración de red de las máquinas, en el caso de los clientes bastarí con que puedan alcanzar al servidor Ubuntu 20.04 donde corre el servicio DNS con el ping. Y por lo que respecta a tu problema, seguramente se trate de configuración de los sistemas clientes. Si no has configurado el servidor DHCP para que obtengan la dirección del servidor DNS, revisa la sección de configuración para los clientes de este tutorial. La he revisado y mejorado justo para este caso. Ya me dirás si te ha funcionado.

      Responder
  3. Acabo de hacer todos los pasos y efectivamente la zona inversa se por lugo (no acepta la IP que pongo para la zona inversa). Saludos y a ver cómo se podría solucionar.

    Responder

Deja un comentario

Ads Blocker Image Powered by Code Help Pro

¡Detectado un bloqueador de publicidad!

Hemos detectado que está usando extensiones para bloquear anuncios prublicitarios. Por favor, ayúdenos desactivando dicho bloqueador para este sitio web. ¡Gracias!