Configuración de un servidor DNS usando BIND

La implementación estándar de DNS para Unix es BIND (Berkely Internet Name Domain) y consiste en un módulo cliente llamado "resolver" que se integra a las aplicaciones, y un demonio llamado named, que debe ejecutarse en aquella computadora que se designe como server de nombres del dominio.

Si bien el tratamiento completo de la configuración de éste paquete de software escapa al alcance de éste trabajo, se discutirán a continuación los aspectos básicos de su configuración.

Tipos de Servidores de Nombres

BIND soporta tres modos de configuración para el servidor de nombres:

Archivos de configuración

named requiere un archivo de configuración llamado /etc/named.boot y varios archivos de zona, según los dominios que se vayan a administrar.

El archivo /etc/named.boot define parámetros generales para la configuración del servidor, en especial el modo de operación (primario, secundario o cache) y la ubicación y nombres de los archivos de zona.

El archivo /etc/named.boot típico para configurar el server de nombres primario de una red como la del dominio galaxia.org.ar contendrá la siguiente información:

;
; Server de nombres primario de galaxia.org.ar
;
directory /etc
primary galaxia.org.ar named.hosts
primary 25.170.in-addr.arpa named.rev
primary 0.0.127.in-addr.arpa named.local
cache . named.cache

Cada línea del archivo /etc/named.boot especifica una directiva de configuración, excepto aquellas que comiencen con punto y coma (;), que se consideran comentarios y son ignoradas.

La directiva directory indica el directorio donde named podrá encontrar los archivos de datos que se mencionen a continuación.

La directiva primary configura el server de nombres para ser servidor primario del dominio que se indica a continuación, obteniendo la lista de nombres y direcciones desde el archivo que figura como último parámetro. En ejemplo anterior, puede verse que el server de nombres será server primario de los dominios galaxia.org.ar (el dominio asignado a la organización), 25.170.in-addr.arpa (el dominio de reversa correspondiente a la dirección asignada a la red) y 0.0.127.in-addr.arpa (el dominio de reversa de la red de loopback).

Finalmente, con la directiva cache se indica a named el archivo a utilizar como contenido inicial del cache de direcciones y nombres. Es en este archivo donde se indican las direcciones IP de los servidores de nombres del dominio raíz.

La configuración de un server secundario resulta similar:

;
; Server de nombres secundario de galaxia.org.ar
;
directory /etc
secondary galaxia.org.ar 170.25.4.254 named.hosts
secondary 25.170.in-addr.arpa 170.25.4.254 named.rev
primary 0.0.127.in-addr.arpa named.local
cache . named.cache

En lugar de la directiva primary se utiliza la directiva secondary, cuyos argumentos son el nombre del dominio, la dirección IP del server primario desde donde transferir los archivos de datos y el nombre del archivo local donde almacenarlos. Dichos archivos serán creados automáticamente la primera vez que el server se inicie, y serán actualizados periódicamente.

Archivos de Zona

Al definir un server primario, utilizando la directiva primary, el administrador indica el nombre del archivo de zona desde donde obtener los datos.

La diferencia entre zona y dominio es sutil: una zona contiene la información sobre un dominio y todos aquellos subdominios que no han sido delegados a otro server. La partición en subdominios se realiza fundamentalmente para agrupar conceptualmente computadoras relacionadas, idealmente con el objetivo de delegar en sus usuarios la administración de la información sobre las mismas. Sin embargo, puede ocurrir que los mismos no estén en condiciones de hacerse cargo de esas tareas (por falta de equipamiento, capacitación, etc.), en cuyo caso el administrador de la red puede optar por crear los subdominios, pero no delegarlos. Obviamente, en un dominio cuyos subdominios han sido todos delegados, la zona y el dominio coinciden.

Un archivo de zona está compuesto por registros, cuya sintaxis es la siguiente (los campos entre corchetes son opcionales):

[nombre] [ttl] IN tipo datos

en donde:

 

Tipo
Función

SOA
Start Of Authority. Indica el inicio de la zona, y define parámetros generales para la misma

NS
Name Server. Define el nombre del server de nombres del dominio.

A
Address. Define la dirección IP asociada a un nombre.

PTR
Pointer. Define el nombre asociado a una dirección IP.

MX
Mailer Exchange. Define el nombre del host que recibe el correo electrónico para un determinado nombre del dominio.

CNAME
Canonical Name. Define un alias para un host.
 

El archivo de zona para un dominio como galaxia.gov.ar, llamado named.hosts como se indicó en named.boot, tendrá el siguiente contenido:

 

;
; server de nombres primario de galaxia.org.ar
;
@ IN SOA cygni.galaxia.org.ar. root.cigni.galaxia.org.ar. (
1998062202 ; nro de serie
43200 ; refresco cada 12 horas
3600 ; reintentar despues de 1 hora
3600000 ; expirar despues de 1000 horas
360000 ; ttl por defecto en 100 horas
)

galaxia.org.ar. IN NS cygni.galaxia.ar.
galaxia.org.ar. IN MX 10 andromeda.galaxia.ar.


localhost IN A 127.0.0.1
antares IN A 170.25.1.1
rigel IN A 170.25.1.2
cygni IN A 170.25.1.253
orion IN A 170.25.1.254
altair IN A 170.25.2.1
orion IN A 170.25.2.254
aldebaran IN A 170.25.3.1
orion IN A 170.25.3.254
andromeda IN A 170.25.3.253
canopus IN A 170.25.4.1
cygni IN A 170.25.4.252
centauri IN A 170.25.4.253
andromeda IN A 170.25.4.254

mailhost IN CNAME andromeda.galaxia.org.ar.
www IN CNAME orion.galaxia.org.ar.

Como puede verse, el archivo comienza con un registro SOA que declara el inicio de una zona. El símbolo @ en el registro SOA hace referencia al dominio actual, esto es, el que se indica en la directiva primary del archivo named.boot. El primer nombre que figura continuación es el nombre de la computadora que contiene este archivo, seguido de la dirección de correo del administrador del DNS (obsérvese que no contiene un @ sino un punto luego del nombre del usuario). Seguidamente aparecen entre paréntesis valores de configuración generales de la zona, como el ttl por defecto y el período de refresco de los datos (esto es, cada cuanto named deberá releer el archivo de zona para verificar si ha habido cambios en el mismo).

Particularmente importante es el número de serie del archivo de zona (primer parámetro numérico del registro SOA). Este número deberá ser incrementado por el administrador cada vez que introduzca un cambio en los datos de la zona. Por medio de ese valor, un servidor secundario sabrá que debe pedir una transferencia de zona a fin de actualizar su copia local del archivo. Es práctica común escribir ese número como una codificación de la fecha en que se realizo el cambio (en formato Año/Mes/Día), seguida de un numero de versión, por si se realiza más de un cambio en la misma fecha.

Obsérvese que ninguno de los registros posteriores especifica un valor de ttl; todos ellos toman el valor por defecto especificado en el registro SOA. Además los registros NS y MX no especifican el campo nombre.

A continuación del registro SOA aparece el registro NS, que define que el nombre del servidor de nombres de galaxia.org.ar es la computadora llamada cygni. Lo sigue un registro MX, que indica que el correo electrónico destinado a éste domino deberá ser enviado a la computadora andrómeda (obsérvese que el nombre que se especifica debe terminar con punto; si no fuera así, se asumiría que ese nombre debe completarse con el nombre del dominio actual).

Finalmente, se listan los registros A, que establecen la relación entre un nombre y una dirección IP y un par de registros CNAME, que definen aliases para ciertas computadoras (por ejemplo, especifican que www.galaxia.org.ar es equivalente a orion.galaxia.org.ar).

Archivos de zona para dominios de reversa

El archivo named.boot indicaba que se administrarían dos dominios de reversa: uno para las direcciones correspondientes a la dirección de red y otro para la red de loopback.

Los archivos de zona de un dominio de reversa contienen registros de tipo PTR. En dichos registros se utilizan los bytes de la parte de host de la dirección IP para el campo nombre, tomándolos en orden inverso. El dato asociado a cada registro es el nombre correspondiente a esa dirección IP.

El archivo de zona para la red de loopback es virtualmente idéntico en todas las configuraciones:

@ IN SOA cygni.galaxia.org.ar. root.cigni.galaxia.org.ar. (
1 ; nro de serie
43200 ; refresco cada 12 horas
3600 ; reintentar despues de 1 hora
3600000 ; expirar despues de 1000 horas
360000 ; ttl por defecto en 100 horas
)

galaxia.org.ar. IN NS cygni.galaxia.ar.
1 IN PTR localhost

El contenido del archivo named.rev es similar:

@ IN SOA cygni.galaxia.org.ar. root.cigni.galaxia.org.ar. (
1998102305 ; nro de serie
43200 ; refresco cada 12 horas
3600 ; reintentar despues de 1 hora
3600000 ; expirar despues de 1000 horas
360000 ; ttl por defecto en 100 horas
)

galaxia.org.ar. IN NS cygni.galaxia.ar.

1.1 IN PTR antares
2.1 IN PTR rigel
253.1 IN PTR cygni
254.1 IN PTR orion
1.2 IN PTR altair
254.2 IN PTR orion
1.3 IN PTR aldebaran
254.3 IN PTR orion
253.3 IN PTR andromeda
1.4 IN PTR canopus
252.4 IN PTR cygni
253.4 IN PTR centauri
254.4 IN PTR andromeda

 

Archivo de inicialización del cache

Como se mencionó anteriormente, el archivo named.cache contendrá las direcciones IP de los servidores de nombres del dominio raíz, y se utilizará como el contenido inicial del cache.

El archivo tendrá el siguiente aspecto:

;
; Nombres de los servidores del dominio raiz
;
. 99999999 IN NS A.ROOT-SERVERS.NET.
99999999 IN NS B.ROOT-SERVERS.NET.
99999999 IN NS C.ROOT-SERVERS.NET.
99999999 IN NS D.ROOT-SERVERS.NET.
99999999 IN NS E.ROOT-SERVERS.NET.
99999999 IN NS F.ROOT-SERVERS.NET.
99999999 IN NS G.ROOT-SERVERS.NET.
99999999 IN NS H.ROOT-SERVERS.NET.
99999999 IN NS I.ROOT-SERVERS.NET.
;
; Direcciones de los servidores del dominio raiz
;
A.ROOT-SERVERS.NET. 99999999 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 99999999 IN A 128.9.0.107
C.ROOT-SERVERS.NET. 99999999 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 99999999 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 99999999 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 99999999 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 99999999 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 99999999 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 99999999 IN A 192.36.148.17

Como se puede apreciar, el archivo contiene registros NS que definen los nombres de los servidores de nombre del dominio raíz, y registros A con sus direcciones IP. Una lista completa y actualizada de estos servidores puede obtenerse por FTP anónimo, desde ftp://nic.ddn.mil/netinfo/root-servers.txt.

Configuración del "resolver"

Como ya se dijo, las aplicaciones que utilizan los servicios de un server DNS lo hacen por medio de un módulo del sistema operativo llamado resolver.

En Unix, el resolver se configura por medio del archivo /etc/resolv.conf, cuyo contenido mínimo consta de las siguientes directivas:

La directiva domain indica cual es el dominio por defecto, mientras que la directiva nameserver especifica la dirección IP del servidor de nombres a utilizar para peticiones de resolución. Pueden indicarse varias de estas directivas, para utilizar servidores de nombres alternativos.

Consultando interactivamente un servidor de nombres

El paquete BIND provee una herramienta de depuración llamada nslookup que puede utilizarse para hacer consultas interactivamente a un servidor de nombres.

Al ser ejecutada desde la línea de comandos, nslookup informa cual es el server de nombres que se utilizará y queda a la espera de comandos del usuario:

$ nslookup
Default server: cygni.galaxia.org.ar
Address: 170.25.1.253
> _

Si se escribe el nombre de una computadora, nslookup realizará la consulta al server de nombres y nos mostrará el resultado:

$ nslookup
Default server: cygni.galaxia.org.ar
Address: 170.25.1.253
> rigel

Server: cygni.galaxia.org.ar
Address: 170.25.1.253
Name: andromeda.galaxia.org.ar
Address: 170.25.1.2

De manera similar, es posible utilizar nslookup para hacer consultas sobre otro dominio:

$ nslookup
Default server: cygni.galaxia.org.ar
Address: 170.25.1.253
> bbs.frc.utn.edu.ar

Server: cygni.galaxia.org.ar
Address: 170.25.1.253
Name: bbs.frc.utn.edu.ar
Address: 170.210.248.214