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 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.

Cómo instalar el servicio 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 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, empezamos modificando la configuración del cliente DHCP en su archivo de configuración:

~$ sudo nano /etc/dhcp/dhclient.conf

En la siguiente sección se encuentra la configuración de los parámetros que acepta el cliente DHCP procedentes del servidor DHCP:

...
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;
...

Deberíamos eliminar los parámetros domain-name-servers y dhcp6.name-servers. Puedes eliminarlos sin más o duplicar este bloque, desactivar el original y hacer los cambios en la copia:

...
#request subnet-mask, broadcast-address, time-offset, routers,
#       domain-name, domain-name-servers, domain-search, host-name,
#       dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
#       netbios-name-servers, netbios-scope, interface-mtu,
#       rfc3442-classless-static-routes, ntp-servers;

request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-search, host-name,
        dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers;
...

Así puedes recuperar la configuración original fácilmente.

Guardamos los cambios y cerramos el archivo.

Ahora ajustaremos la configuración de Netplan para el adaptador de red en su respectivo archivo:

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

La configuración automática suele ser del tipo siguiente:

...
network:
  ethernets:
    enp0s3:
      dhcp4: true
  version: 2

En la configuración del adaptador añadimos directivas que ignoren la configuración DNS automática y permitan la configuración manual:

...
    enp0s3:
      dhcp4: true
      dhcp4-override:
        use-dns: false
      nameservers:
        addresses: [192.168.0.140]

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.

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 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/bind9. 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:

~$ sudo 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
...
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:

~$ sudo 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.112.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!

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

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.

ACEPTAR
Aviso de cookies