Servidor DNS con BIND en Ubuntu 18.04

Los Servidores de Nombres de Dominio (DNS) son probablemente (junto con los servidores web) los más implementados y usados.
La parte teórica es amplia y recomiendo revisarla; sin embargo, este post tiene el objetivo de mostrar la configuración de BIND (Berkeley Internet Name Domain) en un servidor con Ubuntu 18.04 como sistema operativo base. Para ello se pueden seguir los siguientes pasos.
Actualización de la lista de paquetes
$sudo apt-get update
Instalación de bind9 y complementos
$sudo apt-get install bind9 bind9utils bind9-doc
Establecer el uso únicamente de IPv4 (opcional)
Editar el archivo «bind9»:
$sudo nano /etc/default/bind9
Agregar la siguiente línea:
OPTIONS="-u bind -4"
Configuración de opciones
Editar el archivo «named.conf.options»
$sudo nano /etc/bind/named.conf.options
Tomar la siguiente configuración como base. Donde la ip del servidor DNS es 10.0.0.16 y usa los servidores de google como «forwarders»:
options {
directory "/var/cache/bind";
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on { 10.0.0.16; };
//listen-on-v6 { any; };
};
Configuración de vistas y zonas
Editar el archivo «named.conf.local»
$sudo nano /etc/bind/named.conf.local
Tomar la siguiente configuración como base. Donde la red interna es 10.0.0.0/24, se tienen dos vistas (interna y externa), cada vista tiene dos zonas y el dominio es «fabritb.com».
acl interna { 10.0.0.0/24; localhost; };
acl externa { 0.0.0.0/0; };
view interna {
match-clients { interna; };
allow-recursion { any; };
zone "fabritb.com"
{
type master;
file "/etc/bind/zones/db.interna.fabritb.com";
};
zone "0.0.10.in-addr.arpa"
{
type master;
file "/etc/bind/zones/db.0.0.10";
};
include "/etc/bind/zones.rfc1918";
include "/etc/bind/named.conf.default-zones";
};
view externa {
match-clients { externa; };
allow-recursion { any; };
zone "fabritb.com"
{
type master;
file "/etc/bind/zones/db.externa.fabritb.com";
};
zone "181.190.in-addr.arpa"
{
type master;
file "/etc/bind/zones/db.181.190";
};
include "/etc/bind/zones.rfc1918";
include "/etc/bind/named.conf.default-zones";
};
Eliminar las zonas por defecto
Para eliminar las zonas por defecto, se debe editar el archivo «named.conf».
$sudo nano /etc/bind/named.conf
Y comentar o eliminar la siguiente línea:
//include "/etc/bind/named.conf.default-zones";
Configuración de zonas
Se debe crear el directorio «zones».
$mkdir /etc/bind/zones
Dentro del directorio «zones», se crean las zonas citadas en el archivo «named.conf.local».
$touch /etc/bind/zones/db.interna.fabritb.com
$touch /etc/bind/zones/db.0.0.10
$touch /etc/bind/zones/db.externa.fabritb.com
$touch /etc/bind/zones/db.181.190
Y se edita cada uno de los archivos. Tomar como ejemplo la siguiente configuración para «db.interna.fabritb.com», donde se tienen subdominios para el sitio web (www), correo electrónico (mail) y nube (cloud).
$ORIGIN cteub.bo.
$TTL 86400
@ IN SOA ns1.fabritb.com. root.fabritb.com. (
2021030923 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
Creado
@ IN NS ns1.fabritb.com.
@ IN MX 10 mail.fabritb.com.
ns1 IN A 10.0.0.16
www. IN A 10.0.0.12
mail IN A 10.0.0.14
cloud IN A 10.0.0.15
De manera similar, tomar como ejemplo la configuración de «db.0.0.10».
$TTL 86400
@ IN SOA ns1.fabritb.com. root.fabritb.com. (
2021030901 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers
IN NS ns1.fabritb.com.
; PTR Records
16.0.0.10.in-addr.arpa. IN PTR ns1.fabritb.com. ; 10.0.0.16
12.0.0.10.in-addr.arpa. IN PTR www.fabritb.com. ; 10.0.0.12
14.0.0.10.in-addr.arpa. IN PTR mail.fabritb.com. ; 10.0.0.14
15.0.0.10.in-addr.arpa. IN PTR cloud.fabritb.com. ; 10.0.0.15
Se deberá configurar también las zonas de la vista externa, siguiendo la misma lógica pero empleando las direcciones IP públicas.
Comprobación de configuraciones
Para comprobar la sintaxis de los archvios named.conf.* hacer uso del siguiente comando.
$sudo named-checkconf
Para verificar las zonas, usar el comando «named-checkzone».
$sudo named-checkzone fabritb.com db.interna.fabritb.com
Cambios y actualizaciones
Es común implementar nuevos servidores que se deben publicar con algún subdominio, para ello se deben editar los archivos «db.lo.que.corresponda» agregando la entrada con el subdominio y la dirección IP, además de modificar el valor del «Serial», para ello se recomienda usar la nomenclatura AñoMesDiaNrocambio (ej 2021030901) para asegurar que el número es siempre superior al de la configuración previa. Tras ello se debe reiniciar el servicio y el mismo debe estar listo para ser usado.
$sudo service bind9 restart
Recomendaciones
Con eso el servidor DNS debería estar listo y operando. Si se desea publicar el servidor DNS y se tiene algún dispositivo de seguridad (Firewall, NGF, UTM) se debe permitir el acceso al puerto 53 (TCP y UDP). Así mismo, para un entrono de producción, es recomendable revisar DNSSEC (Domain Name System Security Extensions). Y recuerda, si lo usarás como DNS publicado en internet, en nic.bo o en tu proveedor de nombre de dominio debes establecer el (o los) servidor DNS como «ns1.dominio.com» (no solo «domino.com»).
Como de costumbre, recalcar que este post no es nada del otro mundo y se puede encontrar lo mismo (inclusive con mas detalles) en otros blogs, sin embargo si esto te ayuda, eres libre de usarlo. Los siguientes enlaces están relacionados con el post.
Leave a Reply