lunes, 13 de septiembre de 2010

Configuración de un servidor DNS BIND


Este servidor nos va a permitir implementar el servicio DNS dentro de nuestra red, lo cual, nos va a facilitar el encontrar los servidores con las aplicaciones a las que necesitamos entrar y esto va a ser el punto de partida para nuestra intranet.

Normalmente el BIND se encuentra ya instalado en Solaris y casi en cualquier distro de Linux, lo recomendable es utilizar versiones nuevas de sistema operativo y que sea el mismo sistema de actualización del S.O. el que se encargue de actualizar, la desventaja de esto es que las versiones y funcionalidades disponibles son a criterio del fabricante. Si queremos hacer nuestra propia instalación es muy sencillo, solo se debe obtener el archivo fuente de ISC, compilarlo e instalarlo; la desventaja de esto es que debemos estar muy pendientes de las actualizaciones, especialmente, aquellas en las que la seguridad del servidor se vea comprometida.

En este ejemplo vamos a habilitar un servidor BIND 9 para que pueda resolver direcciones del internet, además de crear una zona para el dominio "unixymas.com.mx".

En internet hay un conjunto de servidores que nos va a permitir resolver direcciones, a estos se les llama "servidores raíz", siempre que lo necesitemos podemos obtener una lista actualizada de estos servidores y que además nos puede ser útil para nuestro servidor, se puede obtener por un ftp anónimo a la IP 198.41.0.6, buscamos y bajamos el archivo named.root o db.cache, son el mismo.

Por convención, el directorio donde vamos a alojar a los archivos con las zonas es el /var/named, si no existe, lo creamos, es posible utilizar otro, siempre y cuando, sea para uso exclusivo del BIND.

También es lo usual nombrar a los archivos con las zonas cómo db.dominio. Por ejemplo, para la zona "unixymas.com.mx" el archivo se va a llamar db.unixymas.com.mx, el archivo con los servidores raíz va a llamarse db.cache, por lo que al archivo que bajamos por ftp lo vamos a renombrar así y lo vamos a depositar en /var/named.

El archivo db.unixymas.com.mx va a incluir en este ejemplo a todos los nodos de mi red interna, es muy recomendable que todos los nodos de nuestra red tengan un nombre, podemos hacer una especificación de nombres genéricos para la mayor parte de las IP's y solo emplear nombres específicos para IP's de servidores, en mi ejemplo, mi red es 192.168.188.0/24, esto quiere decir que tengo direcciones desde la 192.168.188.1 hasta la 192.168.188.254, por lo que decidí nombrar a las direcciones de la forma: 188-1.unixymas.com.mx, 188-2.unixymas.com.mx hasta 188-254.unixymas.com.mx y solo la 192.168.188.138 que es la de mi servidor la voy a llamar solaris10.unixymas.com.mx

$TTL 3h
@      IN SOA solaris10.unixymas.com.mx. webmaster.solaris10.uniymas.com.mx. (
           2010091201 ; serial
           3h ; refresh
           1h ; retry
           1w ; expire
           1h ) ; negative TTL
 
@      IN NS solaris10.unixymas.com.mx.
 
188-1  IN A 192.168.188.1
188-2  IN A 192.168.188.2

solaris10 IN A 192.168.188.138

 
El primer renglón corresponde al tiempo en el que los datos de esta zona deben permanecer en el cache de un servidor DNS (Time To Live), aquí se le indica que deben ser 3 horas.

El carácter @ es una abreviatura que se sustituye por el nombre definido para la zona.

Lo siguiente es el registro SOA, el cual, le otorga la autoridad sobre este dominio al servidor indicado, en este caso, solaris10.unixymas.com.mx, además, indica que la cuenta de correo a la que se puede recurrir para cualquier asunto relacionado a este dominio es webmaster@solaris10.unixymas.com.mx, nótese que no estamos utilizando el caracter @ para la dirección de correo y que al final de las direcciones estamos agregando un punto, es muy importante no olvidarlo. Después de esto hay un paréntesis y continua el registro en las siguientes líneas, en la que dice serial es un número cualquiera y que debe ser actualizado siempre que se realice una actualización sobre este archivo, no hay ninguna restricción en lo que respecta al número inicial, puede ser simplemente el número 1, yo en lo personal, utilizo la fecha en la que cree el archivo para tener una idea de cuándo fue que se creó. El siguiente es una indicación para los servidores esclavos del tiempo que debe transcurrir para que corroboren la información. A continuación, tiempo en el que debe hacer un reintento en el caso de que recibiera una respuesta incorrecta. El siguiente es el tiempo en el que el servidor esclavo va a dar respuestas a peticiones que tengan que ver con esta zona a pesar de no tener comunicación con el maestro, después de ese tiempo, se considera la zona como ya muerta. Finalmente el TTL negativo se refiere al tiempo de permanencia en caso de tener respuesta negativa (honestamente, no sé qué diferencia hay con el refresh).

El siguiente registro es el NS el cual, indica el nombre del servidor con la información de la zona, aunque en este caso es el mismo, no siempre es igual, se puede ser un servidor con autoridad y obtener las direcciones de otro.

Finalmente, esta toda la lista de direcciones de nuestro dominio en registros A, estos son lo que indican que IP corresponde a cada dirección del dominio, aquí debemos tomar nota que las direcciones no tienen punto final, esto es porque al no tener un punto final, el servidor va a agregar toda la zona a estas direcciones, es decir, el 188-1 va ser llamado 188-1.unixymas.com.mx.

Omití el agregar todo el archivo, solo destaco el registro que corresponde a la dirección del servidor.

Otra zona que vamos a agregar es en la que se encuentra la IP 127.0.0.1, al archivo lo vamos a llamar db.127.0.0, Esta dirección se reserva para el "loopback" es decir, la IP se traduce como "yo mismo".

$TTL 3h
@      IN SOA solaris10.unixymas.com.mx. webmaster.solaris10.uniymas.com.mx. (
            2010091201 ; serial
            3h ; refresh
            1h ; retry
            1w ; expire
            1h ) ; TTL
 
@      IN NS solaris10.unixymas.com.mx.
 
1      IN PTR localhost.
 
En este caso, tenemos el TTL, un registro SOA, un registro NS y para el número 1, el cual corresponde a 127.0.0.1, hay un registro PTR (apuntador) al cual se le llama dirección inversa, es decir, una IP que apunta a una dirección, las zonas que se refieren a IP's son parte de un dominio reservado "in-addr.arpa" y su nomenclatura es inversa a la dirección IP, en este ejemplo, la zona es: "0.0.127.in-addr.arpa".

Terminado todo esto, procedemos a "activar" nuestras zonas por medio del archivo de configuración /etc/named.conf

options {
     directory "/var/named";
};

zone "." in {
     type hint;
     file "db.cache";
};
 
zone "0.0.127.in-addr.arpa" in {
     type master;
     file "db.127.0.0";
};
 
zone "unixymas.com.mx" in {
     type master;
     file "db.unixymas.com.mx";
};

La directiva "options" es la que corresponde las opciones globales, aquí solamente estamos indicando el directorio de trabajo.

Después aparecen directivas zone para cada una de las zonas que definimos, dentro de las directivas tenemos la opción type, la cual indica la relación de este servidor con la zona (aquí utilizamos solo 2, "hint" que indica que para la zona "." (raíz) el archivo proporciona los servidores raíz y "master" que indica que el servidor es el maestro) y la opción file, la cual, corresponde al archivo con la zona.

Ya configurado, podemos ejecutar el programa named, el cual, se va a ejecutar en forma de demonio, van a aparecer en bitácora mensajes similares a estos:

Sep 13 16:20:19 solaris10 named[877]: [ID 873579 daemon.notice] starting BIND 9.6.1-P3
Sep 13 16:20:19 solaris10 named[877]: [ID 873579 daemon.notice] built with --prefix=/usr --with-libtool --bindir=/usr/sbin --sbindir=/usr/sbin --libdir=/usr/lib/dns --sysconfdir=/etc --localstatedir=/var --with-openssl=/usr/sfw --enable-threads=yes --enable-devpoll=yes --enable-fixed-rrset --disable-openssl-version-check -DNS_RUN_PID_DIR=0
Sep 13 16:20:22 solaris10 named[877]: [ID 873579 daemon.notice] command channel listening on 127.0.0.1#953
Sep 13 16:20:22 solaris10 named[877]: [ID 873579 daemon.notice] couldn't add command channel ::1#953: address not available
Sep 13 16:20:22 solaris10 named[877]: [ID 873579 daemon.notice] running
 
Hay un error que menciona que no puede abrir el Puerto 953, esto quiere decir que no tiene activo el servicio rndc para su administración remota, por lo que no afecta para este ejemplo, lo importante es el último que dice: running

Con esto damos por finalizado este ejemplo, espero no haberme extendido mucho.

No hay comentarios.: