Saltar la navegación

Configuración de un servidor DNS maestro

Como ya se ha comentado, una zona master tiene las siguientes características:

  • Aportará datos autoritarios de la zona o dominio.
  • El fichero de zona se aloja en el disco local del servidor.
  • El servidor de la zona master responderá a las solicitudes de transferencia de zona de los servidores de zonas slave.

Cualquier zona o dominio puede tener una o más zonas master y cero o más zonas slave.

Vamos a configurar un servidor maestro para el dominio asir.com, y una vez hecho tendremos lo siguiente:

  • Un servidor maestro, y por lo tanto, autoritario, para el dominio asir.com, incluyendo su zona inversa. Se consigue creando una zona tipo master..
  • Un servidor caché para el resto de dominios distintos a asir.com. Se consigue gracias al estamento recursion yes; y a la zona "." (zona raíz).
  • Un servidor que aporta el servicio de consultas recursivas, por lo tanto, el servidor aceptará consultas y él se encargará de conseguir las respuestas; al final se las entregará a los solicitantes. Se consigue con el estamento recursion yes;.

Para esta configuración y todas las demás, se va a trabajar en una única red de IP 172.16.0.0/24, y donde el router que da salida a internet es el 172.16.0.1.

Sabemos que solo hay un fichero de configuración para BIND, que en Debian es: /etc/bind/named.conf. La forma actual de trabajar con los ficheros de configuración de los distintos servicios, es fragmentándolos en ficheros más pequeños y temáticos desde algún punto de vista. En consecuencia, named.conf va a quedar así:

# cat /etc/bind/named.conf
include "/etc/bind/named.conf.acl";
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.logging";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

Es importante recordar que para todos estos ficheros, el usuario bind del grupo bind, tiene que tener permiso de lectura.

En primer lugar crearemos una lista acl para referirnos a dos servidores DNS secundarios que tenemos en nuestra red. Esta lista la crearemos en /etc/bind/named.conf.acl.

# cat /etc/bind/named.conf.acl 
acl dns-secundarios {
  172.16.0.3;
  172.16.0.4;
};

Los mensajes log de nuestro servidor DNS los vamos a canalizar de forma independiente, tal como se explicó en el apartado de la cláusula logging. Esta cláusula la mantendremos a través del fichero /etc/bind/named.conf.logging.

# cat /etc/bind/named.conf.logging 
logging {
    category default { mi_canal_log; };
    channel mi_canal_log {
        file "/var/log/bind/bind.log" versions 3 size 100k;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
};

Las opciones globales del servidor BIND van a ser las siguientes:

  • El directorio para resolver las rutas relativas será /var/cache/bind:
directory "/var/cache/bind";
  • Por seguridad, evitaremos dar pistas sobre la versión de BIND:
version "No disponible";
  • Especificaremos que el servidor escucha por todas sus tarjetas y por el puerto 53, todo valores por defecto, pero lo pondremos para tenerlo presente.
listen-on port 53 { any; };
  • El servidor DNS aportará servicio de caché y permitirá las consultas recursivas, pero solo a los equipos de las redes a las que está conectado el servidor.
recursion yes;
allow-recursion { localnets; };
  • Las transferencias de zonas se prohibirán a todos los host a nivel global, y será desde cada zona, desde donde se permitarán a los equipos que interese.
allow-transfer { none; };

Con todo esto la cláusula options que delegaremos en el fichero /etc/bind/named.conf.options quedará así:

# cat /etc/bind/named.conf.options 
options {
    directory "/var/cache/bind";

  version "No disponible";

listen-on port 53 { any; }; # valor por defecto, pero es mejor ponerlo para saber que lo hemos tenido en cuenta

  recursion yes; # valor por defecto, pero es mejor ponerlo para saber que lo hemos tenido en cuenta
  allow-recursion { localnets; }; # valor por defecto, pero es mejor ponerlo para saber que lo hemos tenido en cuenta

allow-transfer { none; };
};

Definiremos ahora la zona para el dominio asir.com con la cláusula zone que escribiremos en el fichero /etc/bind/named.conf.local. Las propiedades de esta zona son:

  • Zona maestra
  • El fichero de zona será /var/cache/bind/db.master.asir.com.
  • Se atenderán las peticiones de transferencia de la zona solo si provienen de nuestros servidores DNS secundarios.
zone "asir.com" in {
   type master;
   file "db.master.asir.com";
   allow-transfer { dns-secundarios; };
};

Hecha la zona directa maestra, nos queda la zona inversa maestra:

zone "0.16.172.IN-ADDR.ARPA" in {
type master;
file "db.master.172.16.0.rev";
allow-transfer { dns-secundarios; };
};

Sobre la configuración de named.conf ya no haremos nada más; solo comentar que el fichero named.conf.default-zones no lo tocaremos, con él se cargarán algunas zonas por defecto, y entre ellas está la zona raíz que es fundamental para poder dar el servicio de caché.

Terminada la configuración de named.conf, lo que nos queda es crear los ficheros de zona (directo e inverso) con los RR necesarios.

Fichero de zona directo:

# cat /var/cache/bind/db.master.asir.com
$TTL 2d
$ORIGIN asir.com.

@         IN    SOA   ns1.asir.com. hostmaster.asir.com. (
                      2016040800  ; se = serial number
                      12h         ; ref = refresh
                      15m         ; ret = refresh retry
                      3w          ; ex = expiry
                      2h          ; nx = nxdomain ttl
                      )
          IN    NS    ns1
          IN    NS    ns2
IN NS ns3

ns1       IN    A     172.16.0.2
ns2 IN A 172.16.0.3
ns3 IN A 172.16.0.4
prof      IN    A      172.16.0.10
www       IN    A      172.16.0.11
ftp       IN    CNAME www

Fichero de zona inverso:

# cat /var/cache/bind/db.master.172.16.0.rev
$TTL 2d
$ORIGIN 0.16.172.IN-ADDR.ARPA.

@         IN    SOA   ns1.asir.com. hostmaster.asir.com. (
                      2016040800  ; se = serial number
                      12h         ; ref = refresh
                      15m         ; ret = refresh retry
                      3w          ; ex = expiry
                      2h          ; nx = nxdomain ttl
                      )
          IN    NS    ns1.asir.com.
          IN    NS    ns2.asir.com.
IN NS ns3.asir.com.

2       IN    PTR     ns1.asir.com.
3 IN PTR ns2.asir.com.
4 IN PTR ns3.asir.com
10      IN    PTR      prof.asir.com.
11      IN    PTR      www.asir.com.
11      IN    PTR ftp.asir.com.

Terminada la configuración, debemos reiniciar el servicio (recordad que esto hace que la caché se borre):

# /etc/init.d/bind9 restart

Los comandos named-checkconf y named-checkzone podríamos haberlos utilizado durante la configuración para detectar errores de sintaxis en los fichero de configuración y de zona, respectivamente.

Comprobamos, con el comando dig, que funcionan ambas zonas:

# dig prof.asir.com

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> prof.asir.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9619
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;prof.asir.com.            IN    A

;; ANSWER SECTION:
prof.asir.com.        172800    IN    A    172.16.0.10

;; AUTHORITY SECTION:
asir.com.        172800    IN    NS    ns3.asir.com.
asir.com.        172800    IN    NS    ns2.asir.com.
asir.com.        172800    IN    NS    ns1.asir.com.

;; ADDITIONAL SECTION:
ns1.asir.com.        172800    IN    A    172.16.0.2
ns2.asir.com.        172800    IN    A    172.16.0.3
ns3.asir.com.        172800    IN    A    172.16.0.4

;; Query time: 2 msec
;; SERVER: 172.16.0.2#53(172.16.0.2)
;; WHEN: Thu May 28 19:09:31 CEST 2016
;; MSG SIZE  rcvd: 160

# dig -x 172.16.0.10

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> -x 172.16.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32282
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;10.0.16.172.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
10.0.16.172.IN-ADDR.ARPA. 172800 IN    PTR    prof.asir.com.

;; AUTHORITY SECTION:
0.16.172.IN-ADDR.ARPA.    172800    IN    NS    ns1.asir.com.
0.16.172.IN-ADDR.ARPA.    172800    IN    NS    ns2.asir.com.
0.16.172.IN-ADDR.ARPA.    172800    IN    NS    ns3.asir.com.

;; ADDITIONAL SECTION:
ns1.asir.com.        172800    IN    A    172.16.0.1
ns2.asir.com.        172800    IN    A    172.16.0.2
ns3.asir.com.        172800    IN    A    172.17.0.20

;; Query time: 2 msec
;; SERVER: 172.16.0.2#53(172.16.0.2)
;; WHEN: Thu May 28 19:14:09 CEST 2016
;; MSG SIZE  rcvd: 206

Observa que aparece el flag aa, lo que significa que la respuesta es autoritaria.

Licencia: licencia de software libre GPL