martes, 24 de julio de 2007

Configuración de un Servidor DNS con vistas

Es muy normal que tengamos asignados algunas direcciones IP publicas y al mismo tiempo tengamos toda nuestra red privada LAN, y tenemos un solo servidor DNS para hacer la resolución de nombres para las dos redes. Esto se puede resolver utilizando vistas (views) en el servicio de DNS. voy a poner aquí el como configurar un servicio de DNS, utilizando bind9 en Debian GNU/Linux en su rama estable, que se nombra en estos momentos Etch.
Se necesitan los paquetes


bind9                          - Internet Domain Name Server
bind9-host - Version of 'host' bundled with BIND 9.X

y este paquete que nos brinda herramientas para hacerle comprobaciones de nuestra configuración.


dnsutils                        - Clients provided with BIND

Además de estos paquetes se instalaran automáticamente las dependencias que necesita cada uno de ellos.


Vamos a un caso concreto, en nuestro instituto, tenemos la siguiente red local 168.158.0.0/255.255.252.0 y la red publica es 192.168.159.32/255.255.255.240, y queremos que el mismo servidor resuelva nombres para las dos redes, y lo que queremos es que cuando alguien pida desde la red LAN www.cmw.rimed.cu le responda el IP 169.158.0.250 y cuando lo pidan desde la red WAN que le responda el IP 192.168.159.36, para esto crearemos dos vistas en nuestro DNS, una interna y otra externa, que se les puede llamar como queramos, wan y lan, por ejemplo.


Un detalle importante, cuando un servidor de DNS se configura con vistas, pues entonces TODAS las zonas en este tienen que estar dentro de una vista.


Las zonas como toda la configuración del servicio DNS usando bind se configura en el archivo named.conf, que se encuentra en el directorio /etc/bind/; como quedaría nuestro archivo de configuración.

Recuerde que la configuración del named.conf es posible tenerla separada por archivos en las que tendremos diferentes secciones de la configuración como es las opciones que aparecen en el archivo named.conf.options



options {
// directorio en el que se guardaran los archivos de zona
directory "/var/cache/bind";
query-source address * port 53;
forwarders { 192.168.31.17; };
auth-nxdomain no; # conform to RFC1035
};
acl "ext" { 192.168.159.0/24 };
acl "int" { 169.158.0.0/22 };
view "interna" {
match-clients { ppp; !any; };
allow-recursio { int; };
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "cmw.rimed.cu" IN {
type master;
file "dominio.interno.db";
allow-transfer { none; };
allow-update { none; };
notify yes;
};
zone "0/22.0.158.169.in-addr.arpa" {
type master;
file "frelay/rev.169.158.0.0";
};
};

view "externa" {
match-clients { fr; !any; };
allow-recursion { any; };
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "cmw.rimed.cu" IN {
type master;
file "dominio.externo.db";
allow-transfer { none; };
allow-update { none; };
notify yes;
};
zone "32/28.159.168.192.in-addr.arpa" {
type master;
file "frelay/rev.192.168.159.32";
};
};

luego de declarar todas las zonas en nuestro DNS, veamos como quedarían los archivos de zona, que

se encuentran ubicados en el directorio definido por la variable directory en las opciones generales del named.conf.



# cat /var/cache/bind/dominio.interno.db
$TTL 86400
@ IN SOA cmw.rimed.cu. postmaster.cmw.rimed.cu. (
07052501 ; serial
604800 ; refresh
86400 ; retry
2419200 ; expire
604800 ; ttl
)
IN NS ns
IN MX 10 mx
IN A 169.158.0.4
ns IN A 169.158.0.4
serv IN A 169.158.0.5
mx IN CNAME strike
www IN CNAME serv

y el archivo de configuración de la zona inversa.



# cat /var/cache/bind/rev.169.158.0.0
$ORIGIN 0/24.0.158.169.in-addr.arpa.
$TTL 604800
@ IN SOA cmw.rimed.cu. postmaster.cmw.rimed.cu. (
07062003 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL

@ NS ns.cmw.rimed.cu.
4 IN PTR ns.cmw.rimed.cu.
5 IN PTR serv.cmw.rimed.cu.


así mismo se configuran para la resolución del dominio por la red externa, solo que apuntando a las direcciones IP de esta, y lo que si hay que tener en cuenta es que en el achivo de la zona inversa el $ORIGIN cambia a la red externa, quedaría así
$ORIGIN 32/28.159.168.192.in-addr.arpa.


ahora hagamos algunas pruebas.



dig www.cmw.rimed.cu +short @168.158.0.4
serv.cmw.rimed.cu.
169.158.0.5

dig www.cmw.rimed.cu +short @192.168.159.35
serv.cmw.rimed.cu.
192.168.159.36

dig -x 192.168.159.36 +short @192.168.159.35
36.32/28.159.168.192.in-addr.arpa.
serv.cmw.rimed.cu.

dig -x 169.158.0.5 +short @169.158.0.4
5.0/24.0.158.169.in-addr.arpa.
serv.cmw.rimed.cu.

y con esto vemos que están funcionando nuestras vistas, y en cada una de ellas la zona de resolución directa y la inversa.