Servidor DNS Master-Slave con Bind9

En este post explicaremos como configurar un servidor DNS con la herramienta bind9 y crear un esclavo que se actualice automáticamente. Para esta práctica se utilizaran 2 sistemas Debian con una subred 192.168.0.0/24 siendo NS1 el servidor DNS maestro y el NS2 el servidor DNS esclavo.

Además de la instalación y configuración, se intentara securizar lo máximo posible para evitar posibles agujeros de seguridad.

NS1

Este servidor será el utilizado como maestro.

Actualizar repositorios

apt update

Instalar bind9

apt install bind9 bind9utils bind9-doc

Configurar bind9

vim /etc/bind/named.conf.options
acl "trusted" {
        192.168.0.104;          # ns1 (IP servidor bind)
        192.168.0.105;          # ns2
        192.168.0.0/24;         # subred que utilizaremos
};


options {
        directory "/var/cache/bind";

        recursion yes;                 # Permitir la recursión
        allow-recursion { trusted; };  # Permitir la recursión solo a los hosts declarados
        allow-query { trusted; }       # Permitir las consultas solo a los hosts declarados
        dnssec-validation auto;        # Auto-validación de DNSSEC
        listen-on { 192.168.0.104; };  # IP de escucha
        allow-transfer { none; };      # No permitir la transferencia
        version "DNS server";          # Ocultar la versión de bind
        forwarders {
                8.8.8.8;        #Google DNS
                209.67.222.222; #OpenDNS
        };

        auth-nxdomain no;    # conform to RFC1035
};

Definir la Zonas, en este caso se le indica que son maestras

vim /etc/bind/named.conf.local
zone "ichasco.com" {
 type master;
 file "/etc/bind/zones/db.ichasco.com"; # Path del fichero de zona directa
 allow-transfer { 192.168.0.105; };       # Permitir la transferencia a NS2 
};

zone "0.168.192.in-addr.arpa" {
 type master;
 file "/etc/bind/zones/db.192.168.0"; # Path del fichero de zona inversa - subred:192.168.0.0/24
 allow-transfer { 192.168.0.105; };   # Permitir la transferencia a NS2
};

Comprobar la sintaxis de los named.conf

named-checkconf

Zonas

Crear el directorio de las zonas

mkdir /etc/bind/zones

Zona directa

Crear la zona a partir del archivo de ejemplo

cp /etc/bind/db.local /etc/bind/zones/db.ichasco.com

Editar el archivo de zona directo. En este archivo hay que realizar varios cambios como el SOA, los NS, los registros y el serial cada vez que se edita

vim /etc/bind/zones/db.ichasco.com
$TTL    604800
@       IN      SOA     ns1.ichasco.com. ismael.ns1.ichasco.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

; NS records
                        IN      NS      ns1.ichasco.com.
                        IN      NS      ns2.ichasco.com.

; name servers - A records
ns1.ichasco.com.      IN      A       192.168.0.104
ns2.ichasco.com.      IN      A       192.168.0.105

; host - A records
host1.ichasco.com     IN      A       192.168.0.106
host2.ichasco.com     IN      A       192.168.0.107

Comprobar la sintaxis de la zona directa

named-checkzone ns1.ichasco.com /etc/bind/zones/db.ichasco.com 
/etc/bind/zones/db.ichasco.com:17: ignoring out-of-zone data (ns1.ichasco.com)
/etc/bind/zones/db.ichasco.com:18: ignoring out-of-zone data (ns2.ichasco.com)
zone ns1.ichasco.com/IN: loaded serial 3
OK

Zona Inversa

Crear la zona a partir del archivo de ejemplo

cp /etc/bind/db.127 /etc/bind/zones/db.192.168.0

Editar el archivo de zona inversa. En este archivo hay que realizar varios cambios como el SOA, los NS, los registros y el serial cada vez que se edita

vim /etc/bind/zones/db.192.168.0
$TTL    604800
@       IN      SOA     ns1.ichasco.com. ismael.ns1.ichasco.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; NS records
        IN      NS      ns1.ichasco.com.
        IN      NS      ns2.ichasco.com.

; PTR Records
104     IN      PTR     ns1.ichasco.com.
105     IN      PTR     ns2.ichasco.com.
106     IN      PTR     host1.ichasco.com.
107     IN      PTR     host2.ichasco.com.

Comprobar la sintaxis de la zona inversa

named-checkzone 0.168.192.in-addr-arpa /etc/bind/zones/db.192.168.0
zone 0.168.192.in-addr-arpa/IN: loaded serial 3
OK

Cuando todas las comprobaciones hayan sido exitosas, reiniciar bind

systemctl restart bind9

NS2

Actualizar repositorios

apt update

Instalar bind9

apt install bind9 bind9utils bind9-doc

Editar la configuración de bind9

vim /etc/bind/named.conf.options
acl "trusted" {
        192.168.0.105;          # ns2 (IP servidor secundario bind)
        192.168.0.104;          # ns1
        192.168.0.0/24;
};

options {
        directory "/var/cache/bind";

        recursion yes;
        allow-recursion { trusted; };      # Permitir la recursión a los hosts definidos
        allow-query { trusted; }           # Permitir consultas a los hosts definidos      
        dnssec-validation auto;            # Auto-validación de DNSSEC
        listen-on { 192.168.0.105; };      # ns2 private IP address 
        allow-transfer { none; };          # deshabilitar la transferencia
        version "DNS server";              # Ocultar la versión del servidor DNS
        
        forwarders {
                8.8.8.8;        #Google DNS
                209.67.222.222; #OpenDNS
        };

        auth-nxdomain no;    # conform to RFC1035
};

Definir las zonas e indicar que son de tipo slave. Una vez con esto. Cuando se reinicie el servicio automáticamente se sincronizará con el master

vim /etc/bind/named.conf.local
zone "ichasco.com" {
 type slave;
 file "slaves/db.ichasco.com"; 
 masters { 192.168.0.104; }; # IP del NS1
};
 
zone "0.168.192.in-addr.arpa" {
 type slave;
 file "slaves/db.192.168.0"; 
 masters { 192.168.0.104; }; # IP del NS1
};

Comprobar la sintaxis de los named.conf

named-checkconf

Reiniciar bind9

systemctl restart bind9

 

7 comments

  1. Hola,
    Cree una maquinas virtuales, un pc , un dns primario y dns secundario.
    Con del debian 8.10, el dns primario me resuelve sin problemas desde el pc windows.
    La transferencia de zonas se realizo sin problemas, las zonas se ven con código y texto de configuración..no literalmente cono el original dns primario.
    Al desactivar el dns primario, el pc no resuelve del dns secundario, pero internamente el secundario si resuelve…no he logrado encontrar el error 🙁

    1. Si utilizas windows no siempre funciona bien el DNS secundario. Si lanzas la consulta manualmente desde el windows haciendo un nslookup loquesea IP_DNS2 funciona?

  2. muy buenas la verdad creo que es el tutorial que mas se aproxima a lo perfecto yo estoy renegando con esto de los dns y me parece bastante util igual hay cosas que me gustaria preguntarte que no se de donde salen supongamos que 192.168.0.104 es la ip de tu equipo en el que esta instalado bind9 de donde sale 192.168.0.105 ?? segundo como obtienes la direccion addr in arpa?? el dominio ichasco.com lo creaste vos o pagaste algun servicio para registrarlo y tercero en ningun lugar pones tu ip externa como sabe el proveedor de dominio la ip externa para los ns1 y ns2 y por ultimo en lugar del dominio.com se puede usar un dominio.com.ar??

  3. no vi que se publicara el comentario a si que comento de nuevo 4 preguntas para hacer se puede hacer con dominios .com.ar de donde sale la ip 192.168.0.105 suponiendo que la de tu server es 192.168.0.104 los ns1 y ns2 creados a partir del dominio ichaco.com pagaste por el dominio o lo creaste en tu propio equipo suponiendo que la ip 192.168.0.x es interna y cuando registras un dominio necesitas poner la ip externa como creas los ns a partir de la ip externa para darselos al proovedor de dominios por ejemplo creas un dominio en nic.ar pirulito.com.ar para transferir ese dominio a tu servidor nic.ar te pide ns1.algo.com y ns2.algo.com tanto ns1 como ns2 tienes que apuntarlos a la ip externa como haces eso??

    1. Buenas,

      1- La IP 192.168.0.105 correspondería al NS2. Esto pueden ser IPs públicas o Privadas.
      2- 0.168.192.in-addr.arpa esto equivale a la red 192.168.0.0. Si en tu caso utilizas la red: 10.2.1.0/24, sería 1.2.10.in-addr
      3- el dominio ichasco.com, es publico. Pero en este caso sería para uso interno. Es decir, tu puedes utilizar el dominio que quieras internamente siempre y cuando los servidores a los que se consulten sean los que tienen este registro. Es decir, si tu quieres utilizar example.com (puedes utilizar el que quieras) en tu empresa/proyecto, tienes que hacer que todos los host apunten su servidor DNS contra el que has montado y aquí gestionar este dominio.
      4- Si esto lo quieres hacer público, tienes que cambiar en tu proveedor que los NS sean los servidores controlados por ti.

  4. hola me sale esto dumping master file: slave/tmp-XomqUbiEWB: open: file
    cuando reinicio el servicio y miro el estado

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *