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