Saltar la navegación

Configuración de un servidor DNS esclavo

Como se ha comentado, un servidor DNS esclavo es un servidor que obtiene los RR del fichero de zona a través de operaciones de transferencia de zonas, y sus respuestas son tan autoritarias como las de un servidor maestro, siempre que sus datos no hayan expirado (tiempo de expiración del RR SOA). No hay ninguna connotación de prioridad en estos servidores. También, es interesante recordar que los servidores esclavos pueden hacer transferencias de zonas a otros esclavos.

La configuración que vamos a llevar a cabo, hará que dispongamos de un servidor esclavo con las siguientes características:

  • Un servidor esclavo del dominio asir.com, incluyendo su zona inversa. Se consigue creando una zona de tipo slave.
  • Un servidor caché para el resto de dominios distintos a asir.com. Se consigue gracias el 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;.

La configuración del fichero named.conf la vamos a distribuir de la misma forma que en la configuración del servidor maestro.

# 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";

Como no vamos a utilizar ninguna lista acl, el fichero named.conf.acl lo dejaremos vacío. Y en cuanto al mecanismo de los mensajes log de BIND, mantendremos el mismo sistema.

# 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;
    };
};

Con respecto a la configuración global de BIND, mantendremos el mismo comportamiento global que para el servidor maestro, con el añadido de que deshabilitaremos los mensajes NOTIFY del esclavo, solo el servidor maestro emitirá dichos mensajes:

  • Directorio para las rutas relativas: /var/cache/bind.
  • No se dará información sobre la versión de BIND.
  • El servidor escuchará por todas sus tarjetas por el puerto 53.
  • El servidor funcionará como caché DNS para las redes a las que está conectado.
  • Se prohibirán las transferencias de zona.
  • Se prohibirán los mensajes NOTIFY.
# 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; };

notify no;
};

En el servidor maestro si queremos, podemos introducir en la cláusula options la siguiente línea:

notify yes;

pues, aunque este comportamiento esté establecido por defecto, y no sea estrictamente necesario introducir este estamento, nos serviría para recordar que hemos pensado en el flujo de los mensajes NOTIFY.

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

  • Zona esclava.
type slave;
  • El fichero de zona será /var/cache/bind/db.slave.asir.com.
file "db.slave.asir.com";
  • Las peticiones de transferencia de zona se realizarán únicamente al servidor maestro de dirección IP 172.16.0.2.
masters { 172.16.0.2; };
  • Por seguridad, solo aceptaremos mensajes NOTIFY del servidor maestro.
allow-notify { 172.16.0.2; };

En resumen, la cláusula zone nos quedaría así:

zone "asir.com" in {
   type slave;
   file "db.slave.asir.com";
   masters { 172.16.0.2; };
allow-notify { 172.16.0.2; };
};

Hecha la zona directa esclava, pasamos ahora a la zona inversa esclava:

zone "0.16.172.IN-ADDR.ARPA" in {
type slave;
file "db.slave.172.16.0.rev";
masters { 172.16.0.2; };
allow-notify { 172.16.0.2; };
};

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, debemos reiniciar el servicio (recordad que esto hace que la caché se borre):

# service bind9 restart

El comando named-checkconf podríamos haberlo utilizado durante la configuración para detectar errores de sintaxis en los fichero de configuración.

Por último, deberíamos provocar la primera transferencia de zona, para ello simplemente reiniciaremos (recargaremos) el servicio DNS en el servidor maestro, lo cual provocará que se envíe un mensaje NOTIFY al servidor esclavo, y como este no dispone del fichero de zona, solicitará la transferencia del mismo; en futuros mensajes NOTIFY que lleguen al esclavo, el número de serie del RR SOA será lo que determinará si se solicitará la transferencia o no.

Una vez producida la transferencia de las zonas, podemos acceder al fichero log de BIND y veríamos mensajes como los siguientes:

# cat /var/log/bind/bind.log
28-May-2016 18:52:28.087 general: info: zone asir.com/IN: Transfer started.
28-May-2016 18:52:28.088 xfer-in: info: transfer of 'asir.com/IN' from 172.16.0.2#53: connected using 172.16.0.3#33501
28-May-2016 18:52:28.090 general: info: zone asir.com/IN: transferred serial 2016040805
28-May-2016 18:52:28.090 xfer-in: info: transfer of 'asir.com/IN' from 172.16.0.2#53: Transfer completed: 1 messages, 12 records, 291 bytes, 0.001 secs (291000 bytes/sec)
28-May-2016 18:52:28.588 general: info: zone 0.16.172.IN-ADDR.ARPA/IN: Transfer started.
28-May-2016 18:52:28.590 xfer-in: info: transfer of '0.16.172.IN-ADDR.ARPA/IN' from 172.16.0.2#53: connected using 172.17.0.3#50042
28-May-2016 18:52:28.593 general: info: zone 0.16.172.IN-ADDR.ARPA/IN: transferred serial 2016040803
28-May-2016 18:52:28.593 xfer-in: info: transfer of '0.16.172.IN-ADDR.ARPA/IN' from 172.16.0.2#53: Transfer completed: 1 messages, 11 records, 299 bytes, 0.002 secs (149500 bytes/sec)

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

# dig @172.16.0.3 prof.asir.com

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @172.16.0.3 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.3#53(172.16.0.3)
;; WHEN: Thu May 28 10:29:10 CEST 2016
;; MSG SIZE  rcvd: 160

# dig @172.16.0.3 -x 172.16.0.10

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @172.16.0.3 -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.3#53(172.16.0.3)
;; WHEN: Thu May 28 11:35:10 CEST 2016
;; MSG SIZE  rcvd: 206

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

Nota:

En las zonas del servidor maestro no se nos puede olvidar el estamento allow-transfer, para que se atiendan las solicitudes de transferencia de los esclavos.

Licencia: licencia de software libre GPL