En este artículo veremos cómo instalar y configurar el servidor DNS Bind en Ubuntu 18.04 LTS Bionic Beaver 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.
Contenido
- Antes de instalar el servidor DNS Bind en Ubuntu 18.04 LTS
- Cómo instalar el servicio DNS Bind en Ubuntu 18.04 LTS
- Cómo configurar los clientes de red para usar el servicio DNS Bind de Ubuntu 18.04 LTS
- Cómo configurar el servidor DNS Bind en Ubuntu 18.04 LTS
- Cómo probar el servicio DNS Bind del servidor Ubuntu 18.04 LTS
- Conclusión
Antes de instalar el servidor DNS Bind en Ubuntu 18.04 LTS
Para poder seguir los pasos de esta guía de instalación y configuración del servicio DNS Bind en Ubuntu 18.04 LTS será necesario partir del siguiente escenario:
- Una máquina Ubuntu 18.04 LTS Bionic Beaver 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 18.04 LTS con dirección IP 192.168.0.105 dentro de una red privada 192.168.0.0/24.
Cómo instalar el servicio DNS Bind en Ubuntu 18.04 LTS
Para instalar el servicio DNS Bind en Ubuntu 18.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 18.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
:
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 18.04 LTS para el servicio DNS Bind
En caso de que tengas activado el firewall UFW en tu máquina Ubuntu 18.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 18.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 18.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 18.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 18.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.name-servers, 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/01-netcfg.yaml
La configuración automática suele ser del tipo siguiente:
... network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: yes
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: yes dhcp4-overrides: use-dns: false nameservers: addresses: [192.168.0.105]
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 18.04 LTS resolverá nombres mediante el servidor DNS especificado manualmente.
Cómo configurar el servidor DNS Bind en Ubuntu 18.04 LTS
Para configurar el servicio DNS Bind en Ubuntu 18.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/bind9
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
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:
options { ... 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.105
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 18.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.105
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 18.04 LTS
Desde cualquier máquina de la red configurada manual o automáticamente para usar como servidor DNS la máquina Ubuntu 18.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 18.04 LTS 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 o DNS 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!