named (pronúnciese
n'eim-di://) es el servidor DNS en casi todas las máquinas Unix. Es un programa desarrollado originalmente para BSD. La versión 4 se ha usado mucho tiempo y venía con cualquier distribución GNU/Linux. La nueva edición, la versión 8, se ha introducido después y supone grandes cambios desde la anterior.[1] Tiene muchas características nuevas, como el soporte de actualización dinámica del DNS, notificaciones de cambios, mejoras importantes de rendimiento y una nueva sintaxis de fichero de configuración. Para más detalle debemos comprobar la documentación que viene con el código fuente.
Esta sección requiere ideas acerca de cómo funciona el Sistema de Nombres y Dominios (DNS). Si lo que sigue a continuación le suena a chino, puede releer el capítulo Sección 6.2∞, que le dará información acerca de cómo funciona básicamente el DNS.
named suele iniciarse al arrancar la máquina, y ejecutarse hasta que se apaga. Las versiones anteriores de BIND hasta la 8 obtienen la información que necesitan de un fichero llamado /etc/named.boot. Las nuevas versiones usan el fichero /etc/named.conf. Además, hay que configurar los ficheros de zona.
Para ejecutar named, sólo tiene que teclear:
|| # /usr/sbin/named ||
El programa named se iniciará y leerá el fichero named.boot y los ficheros de zona que se especifiquen en él. Su número de proceso será anotado en ASCII en el fichero /var/run/named.pid, recibirá ficheros de zona de los servidores principales si es necesario y comenzará a escuchar las peticiones de DNS por el puerto 53.
El fichero de configuración para los BIND anteriores a la 8 tenían una estructura muy simple. En la versión 8 el fichero se llama /etc/named.conf y es totalmente distinto. Nos pararemos en ambas versiones y veremos las diferencias, y cómo convertir del formato antiguo al nuevo.
El fichero named.boot suele ser muy pequeño y contiene punteros a ficheros con información de zonas y a otros servidores de nombres. Los comentarios en este fichero comienzan con un punto y coma y se extienden hasta el siguiente fin de línea. Antes de que veamos con más detalle el formato de este fichero, observaremos el ejemplo para la máquina vlager dado en Ejemplo 6-8∞.
Veamos cómo es el fichero. La palabra directory indica a named el directorio donde están los demás ficheros de configuración (los ficheros de zona).
Los comandos caché y primary sirven para cargar información en \prog{named}. Esta información se obtiene de los ficheros espeficados en el segundo argumento. Contienen representaciones textuales de los registros DNS, que veremos a continuación.
En este ejemplo, se configura named como el servidor de nombres principal para tres dominios: los que se indican con la orden primary. La primera línea dice que named actúe como servidor principal para vbrew.com, tomando la información de zona del fichero named.hosts.
La entrada iniciada con la palabra caché es muy especial y debe estar presente en casi todas las máquinas que ejecuten un servidor de nombres. Su función es doble: indica a named que active su caché
, y también que cargue la información de los servidores raíz del fichero indicado (en este caso, named.ca). Regresaremos a este concepto más tarde.
A continuación se presenta una lista de las opciones más importantes que podemos poner en el fichero named.boot?:
directory
Especifica un directorio donde estén los ficheros de zona. Pueden ponerse varios directorios repitiendo el comando directory. De acuerdo con el estándar de sistema de ficheros para Linux, el directorio debería ser /var/named.
primary
Los argumentos que lleva son un nombre de dominio y un nombre de fichero, declarando el servidor local primario para el dominio de named. Como servidor primario, named carga la información de zona del fichero dado.
Normalmente, siempre habrá por lo menos una orden primary en cada fichero named.boot, para traducción inversa del IP 127.0.0.1, que es el interfaz de bucle o «loopback», como ya sabemos.
secondary
Esta sentencia tiene como parámetros un nombre de dominio, una lista de direcciones y un nombre de fichero. Declara el servidor local como servidor maestro secundario para el dominio indicado.
Un servidor secundario mantiene también información «autorizada» como el primario, pero en lugar de obtenerla de un fichero, la intenta obtener de un servidor primario. Debe proporcionarse al menos una dirección IP de servidor primario en la lista de direcciones. El servidor local irá contactando con cada uno de ellos hasta que transfiera con éxito la base datos de zona, que será almacenada en el fichero de respaldo -copia de seguridad o backup- dado en el tercer argumento del comando. Si ninguno de los servidores primarios responde, se obtendrá la información de zona del fichero de respaldo.
named intentará entonces refrescar los datos almacenados regularmente. Esto se explica después cuando se vean las entradas SOA de los ficheros.
caché
Tiene como argumentos un dominio y un nombre de fichero. Contiene la lista de servidores de nombres raíz. Sólo se reconocerán registros NS y A. El argumento domain es normalmente el nombre del dominio raíz (.).
Esta información es fundamental: si la orden caché no existiera, named no haría una caché
local. Esto degradaría de forma importante el rendimiento e incrementaría la carga de la red si los nombres que se buscan no están en la red local. Además, named tampoco será capaz de contactar con cualquier servidor de nombres raíz, y por ello, no podrá resolver ninguna dirección excepto aquellas para las que esté autorizado. Una excepción a esta regla, ocurre cuando se usan servidores redirigidos (con la opción forwarders explicada a continuación).
forwarders
Esta opción lleva una lista de direcciones como argumento. Las direcciones IP en la lista especifican servidores de nombres a los que named puede preguntar si falla una traducción de un nombre mediante su caché
local. Se intenta preguntar a todos en orden hasta que uno de ellos responda.
slave
Esta opción hace que el servidor sea esclavo
. Esto significa que nunca realizará consultas recursivas, sino que las redirigirá a los servidores especificados con forwarders.
Hay dos opciones adicionales que no vamos a describir: sortlist y domain. Además, hay dos directivas que pueden aparecer en los ficheros de zona. Son $INCLUDE y $ORIGIN, que tampoco vamos a describir, ya que raramente se utilizan.
En la versión 8 de BIND se han incluido nuevas características, lo cual ha requerido una nueva sintaxis del fichero de configuración principal. El fichero named.boot ha sido reemplazado por otro, de nombre named.conf, que tiene una sintaxis similar a la del programa gated y recuerda a la del lenguaje C.
La nueva sintaxis es más compleja, pero por suerte disponemos de una utilidad para convertir automáticamente los ficheros named.boot de sintaxis antigua. Esta utilidad es un script de PERL llamado named-bootconf.pl, que encontraremos en el código fuente de BIND 8; y lee un fichero en sintaxis antigua, devolviendo por su salida estándar el fichero en sintaxis nueva. Naturalmente, para utilizarlo es necesario tener correctamente instalado el intérprete de lenguaje PERL.
Al script lo invocaremos, por ejemplo, así:
|| # cd /etc
# named-bootconf.pl <named.boot >named.conf ||
El script produce entonces un fichero similar al que se muestra en Ejemplo 6-9∞, donde hemos eliminado algunos comentarios que produce adicionalmente el script.
Ejemplo 6-9. Fichero named.conf para usar BIND 8 con vlager
||
/etc/named.boot para vlager.vbrew.com
options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "vbrew.com" {
type master;
file "named.hosts";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
zone "16.172.in-addr.arpa" {
type master;
file "named.rev";
}; ||
Si observamos el ejemplo, veremos que cada línea de named.boot ha sido convertida a un bloque en estilo C, encerrado entre llaves (signos { y }?).
Los comentarios del fichero se escriben ahora en notación similar a C++, es decir, dos barras (signo ?).
La sentencia directory va ahora dentro del bloque options, junto a otras posibles opciones globales de configuración.
Las sentencias caché y primary se convierten en bloques de zona, con sentencias type específicas, de valor hint y master, respectivamente.
Los ficheros de zona no necesitan modificarse, ya que su sintaxis sigue siendo la de antes.
La nueva sintaxis de configuración se ha pensado para poder incluir muchas más opciones de configuración, en las que no vamos a detenernos. Si deseamos conocerlas, la mejor fuente de información es la que viene con el paquete de fuentes de BIND 8.