%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                       Legal Notice                            %
%                                                               %
% This document is copyright (C) Olaf Kirch, okir@monad.swb.de  %
%                                                               %
% For copying conditions, please refer to the file COPYING.	%
%                                                               %
% The author is not liable for any damages, direct or indirect, %
% resulting from the use of information provided in this        %
% document.                                                     %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% When viewing this document with vi on an 80-columns screen,   %
% do a ':se nonumber' first.                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Traduccion realizada por Juan Jose Amor
% Envie sus comentarios a:
%       jjamor@ls.fi.upm.es (INTERNET)
%       2:341/12.19         (FIDONET)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Revisado en 24-Febrero-1999 por:
%   Juan Jose Amor <jjamor@ls.fi.upm.es>
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%               S T A R T   O F   C H A P T E R                 %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Servicio de nombres. Configuraci\'on}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Configure named and resolver lib                              %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.intro}
\index{configuraci\'on!traducci\'on de nombres|(}
\index{nombre del host!resoluci\'on}

Como se coment\'o en el cap\'{\i}tulo~\ref{tcpip}, la red TCP/IP puede
utilizar diferentes m\'etodos para convertir nombres en direcciones
IP. El mecanismo m\'as simple consiste en almacenar los nombres en una
tabla de m\'aquinas en el fichero \file{/etc/hosts}. Esto es \'unicamente
interesante en el caso de peque\~nas redes de \'area local que s\'olo
requieran la administraci\'on de una persona, y que no tengan tr\'afico~IP
con el mundo exterior. Recordamos que el formato del fichero \file{hosts}
fue descrito en el cap\'{\i}tulo~\ref{iface}.


\index{Sistema de nombres Internet de Berkeley}
% BIND = Berkeley Internet Name Domain
\index{BIND}
\index{named@\prog{named}}
Alternativamente, puede utilizarse BIND~-- el servicio de nombres
Internet de Berkeley o ``Berkeley Internet Name Domain''~-- para
traducir nombres de m\'aquinas a direcciones~IP (cosa que tambi\'en se
conoce como {\it resoluci\'on}). Configurar BIND puede ser una laboriosa
tarea pero, una vez hecho, los cambios en la topolog\'{\i}a de la red ser\'an
mucho m\'as f\'aciles de hacer. En \linux{}, como en muchos otros sistemas
Unix, el servicio de nombres se realiza mediante un programa llamado
\prog{named}. Al iniciarse, carga un conjunto de ficheros maestros en
su {\it cache} y espera peticiones de procesos locales o remotos.
Existen distintas maneras de preparar BIND, y no es necesario ejecutar un
servidor de nombres en cada m\'aquina: generalmente, uno para toda la red es
suficiente.


Este cap\'{\i}tulo le dar\'a ideas generales acerca de c\'omo configurar y
ejecutar un servidor de nombres. Si pretende usar BIND en un entorno
m\'as complejo que una peque\~na red local -tal vez con conexi\'on a Internet-
 deber\'{\i}a echar un vistazo a un buen libro sobre BIND, como ``DNS y BIND''
de Cricket Liu (vea \cite{liu-dns}). Adem\'as, le interesar\'a echar un
vistazo a los comentarios adicionales que aparecen junto a las fuentes de su
versi\'on de BIND. Tambi\'en existe un grupo de {\it news} para cuestiones
sobre DNS: el grupo \ngrp{comp.protocols.tcp-ip.domains}.

\section{La biblioteca de resoluci\'on}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.library}
\index{resoluci\'on!librer\'{\i}a}

Cuando hablamos del ``sistema de resoluci\'on'', no nos referiremos a
una aplicaci\'on en particular, sino a la \emph{biblioteca de resoluci\'on}:
un conjunto de funciones que pueden encontrarse en las bibliotecas
est\'andar del lenguaje C. Las rutinas principales son \func{gethostbyname(2)}
y \func{gethostbyaddr(2)}, que buscan la direcci\'on IP de una m\'aquina a
partir del nombre y viceversa. Es posible configurarlas para que
simplemente miren en el fichero \file{hosts} local (o remoto, si se usa
NIS). Otras aplicaciones, como \prog{smail}, pueden incluir diferentes
rutinas para esto y necesitan cierto cuidado. 


\subsection{El fichero \file{host.conf}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.host-conf}
\index{resoluci\'on!uso de NIS}
\index{resoluci\'on!uso de un servidor de nombres}
\index{resoluci\'on!configuraci\'on|(}
\index{host.conf@\file{host.conf}}

El fichero \file{host.conf} es fundamental para controlar la
configuraci\'on del sistema de resoluci\'on de nombres. Se encuentra en
el directorio \file{/etc} e indica al sistema de resoluci\'on qu\'e
servicios debe usar y en qu\'e orden.

Las opciones del fichero \file{host.conf} deben estar en l\'{\i}neas
distintas. Los campos deben separarse por blancos (espacios o
tabuladores). Un s\'{\i}mbolo almohadillado (\keyword{\#}) supone desde
ese punto hasta el final de la l\'{\i}nea un comentario del fichero.

Las opciones disponibles son las siguientes:
\begin{dispitems}
\ditem[\keyword{order}]
        \index{NIS!y resoluci\'on}
        \index{orden de uso de servicios de resoluci\'on}
        Determina el orden en el que los servicios de resoluci\'on se
usan. Opciones v\'alidas son \keyword{bind} para usar el servidor de
nombres, \file{hosts} para buscar en \file{/etc/hosts} y \keyword{nis}
para buscar con NIS. Puede especificarse cualquiera de las anteriores,
y el orden de aparici\'on determina qu\'e servicio se prueba en primer
lugar para intentar resolver el nombre.


\ditem[\keyword{multi}]
        Va con las opciones \keyword{on} u \keyword{off}. Determina si
una m\'aquina del fichero \file{/etc/hosts} puede tener distintas
direcciones~IP o no. Esta opci\'on no tiene efecto en peticiones via NIS
o DNS.

\ditem[\keyword{nospoof}]
        \index{seguridad!nombres de m\'aquina falsos}
        \index{seguridad!spoofing}
        \index{evitar spoofing}
        \index{spoofing}
        Como se explic\'o en el cap\'{\i}tulo anterior, DNS le permite
encontrar un nombre de m\'aquina perteneciente a una direcci\'on~IP dada
utilizando el dominio \host{in-addr.arpa}. Los intentos de los
servidores de nombres de proporcionar un nombre falso se conocen en
Ingl\'es como ``\emph{spoofing}''\footnote{N. del T.: literalmente,
burla}. Para evitar esto, el sistema puede configurarse para comprobar
si las direcciones~IP originales est\'an de hecho asociadas con el
nombre obtenido. Si no, el nombre ser\'a rechazado y se retornar\'a un
error. Esta opci\'on se activa poniendo \keyword{nospoof on}.

\ditem[\keyword{alert}]
        Esta opci\'on puede ir con las palabras \keyword{on} u
\keyword{off}. Si se activa, cualquier intento de dar nombre falso
ser\'a anotado con un mensaje enviado al sistema de registros \prog{syslog}.

\ditem[\keyword{trim}]
        Esta opci\'on lleva un nombre de dominio como argumento, que
se quitar\'a a los nombres antes de buscar su direcci\'on. Es \'util para
las entradas del fichero \file{hosts}, que podr\'an as\'{\i} ir solos los
nombres de m\'aquinas, sin el dominio. Cuando se busque una m\'aquina con
el nombre de dominio local \'este ser\'a eliminado, haciendo que la
b\'usqueda en el fichero \file{/etc/hosts} tenga \'exito.

        Esta opci\'on puede ir repetida con varios dominios, de modo que
su m\'aquina podr\'{\i}a ser local a diversos dominios.
\end{dispitems}

Un ejemplo de este fichero para la m\'aquina \host{vlager} ser\'{\i}a:

\begin{tscreen}
\begin{verbatim}
# /etc/host.conf
# Tenemos servidor de nombres, pero no NIS (de momento)
order   bind hosts
# Permitir multiples direcciones
multi   on
# Contra los nombres falsos
nospoof on
# Dominio local por defecto (no necesario).
trim    vbrew.com.
\end{verbatim}
\end{tscreen}


\subsection{Variables de entorno}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.environ}
\index{resoluci\'on!variables de entorno}

Existen algunas variables de entorno que establecen opciones que
tienen m\'as prioridad sobre las puestas en el fichero
\file{host.conf}. \'Estas son:

\begin{dispitems}
\ditem[\shellvar{RESOLV\_HOST\_CONF}]
        Especifica un fichero alternativo a \file{/etc/host.conf}.

\ditem[\shellvar{RESOLV\_SERV\_ORDER}]
        Establece la opci\'on equivalente a la orden \keyword{order} del
fichero anterior. Los servicios pueden ser \keyword{hosts},
\keyword{bind} y/o \keyword{nis}, separados por comas, espacios, puntos
o puntos y coma.

\ditem[\shellvar{RESOLV\_SPOOF\_CHECK}]
        Determina la pol\'{\i}tica seguida frente a los nombres
falsos. Estar\'a completamente desactivada con la opci\'on
\keyword{off}. Con las opciones \keyword{warn} y \keyword{warn off} se
realizar\'an comprobaciones contra los nombres falsos, pero en el primer
caso se mandar\'an los avisos al registro. Un valor \keyword{*} activa las
comprobaciones contra nombres falsos, pero las anotaciones en el registro se
dejan como diga el fichero \file{host.conf}.

\ditem[\shellvar{RESOLV\_MULTI}]
        El valor \keyword{on} activa la opci\'on ``multi'', y el valor
\keyword{off} la desactiva.

\ditem[\shellvar{RESOLV\_OVERRIDE\_TRIM\_DOMAINS}]
        Esta variable lleva una lista de dominios por defecto, similar
a la puesta en el fichero \file{host.conf} con la opci\'on \keyword{trim}. 

\ditem[\shellvar{RESOLV\_ADD\_TRIM\_DOMAINS}]
        Esta variable lleva una lista de dominios por defecto que se
{\it a\~nade} a las que se dan en el fichero \file{host.conf}.

\end{dispitems}


\subsection{Configuraci\'on del fichero \file{resolv.conf}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.resolv}
\index{configuraci\'on!uso del servidor de nombres}
\index{resolv.conf@\file{resolv.conf}}

Cuando se configura la librer\'{\i}a de resoluci\'on para utilizar los
servicios de BIND, tiene que indicarse tambi\'en qu\'e servidores
utilizar. El fichero \file{resolv.conf} contiene una lista de
servidores, que si est\'a vac\'{\i}a har\'a considerar al sistema que el
servidor est\'a en su m\'aquina.


Si ejecuta un servidor de nombres en su m\'aquina local, tendr\'a que
configurarlo por separado, como se explicar\'a despu\'es. Si se encuentra
en una red local y puede usar un servidor de nombres existente, mejor.


La opci\'on m\'as importante del fichero \file{resolv.conf} es
\keyword{nameserver}, que tiene la direcci\'on~IP del servidor de
nombres a usar. Si especifican varios servidores poniendo varias l\'{\i}neas
\keyword{nameserver}, se intentar\'an usar en el orden dado; por lo que
deber\'{\i}a poner en primer lugar el servidor de nombres m\'as r\'apido o
cercano. Actualmente, puede ponerse un m\'aximo de tres servidores distintos.


Si no hay ninguna l\'{\i}nea \keyword{nameserver}, se intentar\'a buscar el
servidor en la propia m\'aquina local.


\index{dominio!por defecto}
\index{configuraci\'on!dominio por defecto}
Hay dos opciones m\'as: \keyword{domain} y \keyword{search}, indicando
la primera dominios alternativos a probar si la b\'usqueda inicial del
nombre falla. Estos dominios ir\'an separados por blancos o tabuladores.


Si no se incluye una opci\'on \keyword{search}, se construir\'a una lista
de b\'usqueda por defecto por el dominio local m\'as todos los dominios
padre hasta el ra\'{\i}z. El dominio local puede darse con la opci\'on
\keyword{domain}, y si no se da ninguno el sistema de resoluci\'on lo
obtendr\'a mediante la llamada al sistema \func{getdomainname(2)}.

\noindent
Como lo anterior puede resultar confuso, sea el siguiente ejemplo de
fichero \file{resolv.conf} para la Cervecera Virtual:


\begin{tscreen}
\begin{verbatim}
# /etc/resolv.conf
# Nuestro dominio
domain         vbrew.com
#
# Nuestro servidor principal va a ser vlager:
nameserver     191.72.1.1
\end{verbatim}
\end{tscreen}


Cuando se trate de traducir el nombre \host{vale}, el sistema empezar\'a
por buscar directamente \host{vale} y si falla, probar\'a con
\host{vale.vbrew.com} y finalmente \host{vale.com}.



\subsection{Robustez del sistema de resoluci\'on}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.robustness}
\index{resoluci\'on!robustez}

Si tiene en funcionamiento una red local dentro de otra m\'as grande,
deber\'a usar servidores de nombres principales siempre que sea
posible. La ventaja de hacerlo as\'{\i} es que se consiguen generosas
memorias {\it cache}, ya que todas las peticiones de nombres les llega a
ellos. Este esquema, sin embargo, tiene un inconveniente: cuando un incendio
inutiliz\'o el cable de red dorsal de nuestro departamento en la Universidad,
no pudimos trabajar, pues ninguno de los servidores de nombres estaban
accesibles. No funcionaban ni los terminales~X ni las impresoras...


Aunque no es muy habitual que las redes dorsales de las universidades
sean pasto de las llamas, deber\'{\i}an tomarse precauciones para casos
como \'este.


Una soluci\'on es poner un servidor de nombres local que se ocupe de sus
nombres locales, y reenv\'{\i}e todas las peticiones de otros nombres a los
servidores principales. Por supuesto, esto s\'olo es posible si usted
tiene un dominio propio.


Alternativamente, puede mantener una copia de la tabla de nombres para
su dominio o red local en el fichero \file{/etc/hosts}. En el fichero
\file{/etc/host.conf} deber\'a incluir la opci\'on ``\keyword{order bind
hosts}'' para obligar a usar el fichero local si el servidor principal
de nombres falla.


\index{resoluci\'on!configuraci\'on|)}


\section{Ejecuci\'on de \prog{named}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.named}
\index{named@\prog{named}|(}
\index{servidor de nombres!configuraci\'on|(}
\index{configuraci\'on!servidor de nombres|(}
\index{DNS!configuraci\'on del servidor|(}
\index{BIND|(}

El programa que proporciona servicio de nombres en las m\'aquinas
\unix{} suele ser \prog{named}\footnote{N. del T.: Pron\'unciese
\emph{n\'{}eim-di:}}. Es un servidor desarrollado inicialmente para
Unix tipo BSD, con el prop\'osito de proporcionar servicio de nombres
a m\'aquinas clientes y posiblemente a otros servidores de nombres.

La versi\'on actualmente utilizada en casi todos los sistemas \linux{} es
BIND-4.8.3. La nueva versi\'on, BIND-4.9.3, est\'a en este momento en
versi\'on Beta, y pronto estar\'a disponible para \linux{}.

Esta secci\'on requiere ideas acerca de c\'omo funciona el Sistema de
Nombres y Dominios (DNS). Si lo que sigue a continuaci\'on le suena a
chino, puede releer el cap\'{\i}tulo~\ref{tcpip}, que le dar\'a informaci\'on
acerca de c\'omo funciona b\'asicamente el DNS.


\index{named.boot@\file{named.boot}|(}
El programa \prog{named} suele iniciarse al arrancar la m\'aquina, y
ejecutarse hasta que se apaga. Obtiene la informaci\'on que necesita de
un fichero llamado \prog{/etc/named.boot}, y diversos ficheros que
contienen datos acerca de nombres de dominio y direcciones, llamados
\emph{ficheros de zona}. Los formatos y sem\'antica de estos ficheros
ser\'an explicados en la siguiente secci\'on.


Para ejecutar \prog{named}, solo tiene que teclear:

\begin{tscreen}
\# /usr/sbin/named
\end{tscreen}


\noindent
El programa \prog{named} se iniciar\'a y leer\'a el fichero
\prog{named.boot} y los ficheros de zona que se especifiquen en \'el. Su
n\'umero de proceso ser\'a anotado en ASCII en el fichero
\file{/var/run/named.pid}, recibir\'a ficheros de zona de los servidores
principales si es necesario y comenzar\'a a escuchar las peticiones de
DNS por el puerto 53.\footnote{Hay varios binarios de \prog{named}
disponibles en los servidores de FTP, cada uno configurado de forma
diferente. Algunos anotan su fichero de n\'umero de proceso en el
directorio \file{/etc/}, otros en \file{/tmp} y otros en
\file{/var/tmp}.}


\subsection{El fichero \file{named.boot}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
El fichero \prog{named.boot} suele ser muy peque\~no y contiene punteros
a ficheros con informaci\'on 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\'{\i}nea. Antes de que veamos
con m\'as detalle el formato de este fichero, observaremos el ejemplo
para la m\'aquina \host{vlager} dado en la
figura~\ref{resolv.fig.named.boot}.\footnote{Observar que los nombres
de dominio del ejemplo se dan \emph{sin} el punto final. Versiones
anteriores del programa \prog{named} parece que traten los puntos al
final como errores y sin avisar descartan la l\'{\i}nea afectada. En
la versi\'on BIND-4.9.3 se intenta arreglar este tema.}


\begin{figure}[htbp]
\begin{tscreen}
\begin{verbatim}
;
; Fichero /etc/named.boot para vlager.vbrew.com
;
directory     /var/named
;
;             dominio                  fichero
;---------------------------------------------------
cache         .                        named.ca
primary       vbrew.com                named.hosts
primary       0.0.127.in-addr.arpa     named.local
primary       72.191.in-addr.arpa      named.rev
\end{verbatim}
\end{tscreen}
 \caption{
  \label{resolv.fig.named.boot}
  El fichero \prog{named.boot} para \file{vlager}.
 }
\end{figure}


Los comandos \keyword{cache} y \keyword{primary} sirven para cargar
informaci\'on en \prog{named}. Esta informaci\'on se obtiene de los
ficheros espeficados en el segundo argumento. Contienen
representaciones textuales de los registros DNS, que veremos a continuaci\'on.



En este ejemplo, se configura \prog{named} como el servidor de nombres
principal para tres dominios: los que se indican con el comando
\keyword{primary}. La primera l\'{\i}nea dice que \prog{named} act\'ue como
servidor principal para \host{vbrew.com}, tomando la informaci\'on de
zona del fichero \file{named.hosts}. El comando \keyword{directory}
dice que todos los ficheros de zona se encuentran en el directorio indicado.


La entrada iniciada con la palabra \keyword{cache} es muy especial y
debe estar presente en casi todas las m\'aquinas que ejecuten un
servidor de nombres. Su funci\'on es doble: indica a
\prog{named} que active su {\it cache}, y tambi\'en  que cargue la
informaci\'on de los servidores ra\'{\i}z del fichero indicado (en este caso,
\file{named.ca}). Regresaremos a este concepto m\'as tarde.


A continuaci\'on se presenta una lista de las opciones m\'as importantes
que podemos poner en el fichero \file{named.boot}:

\begin{dispitems}
\ditem[\keyword{directory}] 
        Especifica un directorio donde est\'en los ficheros de
zona. Pueden ponerse varios directorios repitiendo el comando
\keyword{directory}. De acuerdo con el est\'andar de sistema de ficheros
para \linux{}, el directorio deber\'{\i}a ser \file{/var/named}.

\ditem[\keyword{primary}]
        \index{primary (opci\'on de BIND)@\keyword{primary} (opci\'on de BIND)}
        \index{servidor de nombres!primary}
        Los argumentos que lleva son un \var{nombre de dominio} y un
\var{nombre de fichero}, declarando el servidor local primario para
el dominio de named. Como servidor primario, \prog{named} carga la
informaci\'on de zona del fichero dado.

        Normalmente, siempre habr\'a por lo menos un comando
\keyword{primary} en cada fichero \file{named.boot}, para traducci\'on
inversa del IP \host{127.0.0.1}, que es el interface de bucle o ``loopback'',
como ya sabemos.

\ditem[\keyword{secondary}]
        \index{secondary (opci\'on BIND)@\keyword{secondary} (opci\'on BIND)}
        \index{servidor de nombres!secondary}
        Esta sentencia tiene como par\'ametros un \var{nombre de
dominio}, una \var{lista de direcciones} y un \var{nombre de
fichero}. Declara el servidor local como servidor maestro secundario
para el dominio indicado.

        Un servidor secundario mantiene tambi\'en informaci\'on
``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\'on~IP de servidor primario en la lista
de direcciones. El servidor local ir\'a contactando con cada uno de
ellos hasta que transfiera con \'exito la base datos de zona, que ser\'a
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\'a la informaci\'on de zona del fichero de respaldo.

        \prog{named} intentar\'a entonces refrescar los datos
almacenados regularmente. Esto se explica despu\'es cuando se vean las
entradas ``SOA'' de los ficheros.

\ditem[\keyword{cache}]
        \index{cache (opci\'on BIND)@\keyword{cache} (opci\'on BIND)}
        \index{servidor de nombres!cache}
        Tiene como argumentos un \var{dominio} y un \var{nombre de
fichero}. Contiene la lista de servidores de nombres ra\'{\i}z. S\'olo
se reconocer\'an registros NS y A. El argumento \var{domain} es normalmente
el nombre del dominio ra\'{\i}z (``\keyword{.}'').

        Esta informaci\'on es fundamental: si el comando \keyword{cache}
no existiera, \prog{named} no har\'{\i}a una {\it cache} local. Esto
degradar\'{\i}a de forma importante el rendimiento e incrementar\'{\i}a
la carga de la red si los nombres que se buscan no est\'an en la red local.
Adem\'as, \prog{named} tampoco ser\'a capaz de contactar con cualquier
servidor de nombres ra\'{\i}z, y por ello, no podr\'a resolver ninguna
direcci\'on excepto aquellas para las que est\'e autorizado. Una
excepci\'on a esta regla, ocurre cuando se usan servidores redirigidos (con
la opci\'on \keyword{forwarders} explicada a continuaci\'on).

\ditem[\keyword{forwarders}]
        Esta opci\'on lleva una \var{lista de direcciones} como
argumento. Las direcciones~IP en la lista especifican servidores de
nombres a los que \prog{named} puede preguntar si falla una traducci\'on
de un nombre mediante su {\it cache} local. Se intenta preguntar a
todos en orden hasta que uno de ellos responda.

\ditem[\keyword{slave}]
        \index{servidor de nombres!slave}
        Esta opci\'on hace que el servidor sea \emph{esclavo}. Esto
significa que nunca realizar\'a consultas recursivas, sino que las
redirigir\'a a los servidores especificados con \keyword{forwarders}.

\end{dispitems}


Hay dos opciones adicionales que no vamos a describir:
\keyword{sortlist} y \keyword{domain}. Adem\'as, hay dos directivas que
pueden aparecer en los ficheros de zona. Son \keyword{\$INCLUDE} y
\keyword{\$ORIGIN}, que tampoco vamos a describir, ya que raramente
se utilizan.

%
%%%%%%%%%%%%%%% Voy por aqui revisando el documento %%%%%%%%%%%%%%%
%

% 
% The \keyword{\$ORIGIN} command may be used to alter the origin of
% the current file. Generally it is only used by \prog{named} itself
% when dumping its cache into a single file; you usually don't use it
% in the master files itself. Its format is
% \begin{screen}\st
% \$ORIGIN \sl domain
% \end{screen}
% where \var{domain} is an absolute domain name.
% 
% 
% The \keyword{\$INCLUDE} statement includes other files into
% the current file. Its syntax is
% \begin{screen}\st
% \$INCLUDE \var{file} [\var{domain}]
% \end{screen}
% where \var{file} is the name of the file to be included. File names
% without a leading slash (`\file{/}') are taken to be relative to one of
% the directories named in a \keyword{directory} statements in the boot file.
% The optional \var{domain} argument may be used to set the origin
% for the included file. It is equivalent to placing an \keyword{\$ORIGIN}
% directive in the first line of the included file. Note that
% \keyword{\$ORIGIN} statements inside the included file
% do not alter the origin of the including file.

\index{named.boot@\file{named.boot}|)}


\subsection{Ficheros de base de datos DNS}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Los ficheros incluidos con \prog{named}, como \prog{named.hosts},
siempre tienen un dominio asociado a ellos llamado \emph{origen}.
Este es el nombre de dominio especificado con los comandos
\keyword{cache} y \keyword{primary}. En un fichero maestro,
se pueden especificar nombres de m\'aquinas y dominios relativos a este
dominio. Un nombre dado en un fichero de configuraci\'on se considera
\emph{absoluto} si termina con un punto. En caso contrario se considera
relativo al origen. Al origen en s\'{\i} mismo nos podemos referir con
``\keyword{@}''.


\index{DNS!registro de recursos}
Todos los datos en un fichero principal se dividen en \emph{registros
de recursos} o RRs. Son la unidad de informaci\'on del DNS. Cada RR
tiene un tipo. Los registros de tipo A, por ejemplo, asocian un nombre
a una direcci\'on~IP. Los registros de tipo CNAME asocian un alias de
una m\'aquina con su nombre oficial. Como ejemplo, obs\'ervese la
figura~\ref{resolv.fig.named.hosts} de la
p\'agina~\pageref{resolv.fig.named.hosts}, que muestra el fichero
\prog{named.hosts} para nuestro sistema.

La representaci\'on de los RRs en los ficheros utiliza el siguiente formato:

\begin{screen}\st
[\var{domain}] [\var{ttl}\/] [\var{class}] \var{type} \var{rdata}
\end{screen}

Los campos se separan por espacios o tabulaciones. Una entrada puede
continuarse en varias l\'{\i}neas si se abre un par\'entesis antes del primer
fin de l\'{\i}nea y el \'ultimo campo es seguido de un cierre de
par\'entesis. Cualquier cosa entre un punto y coma y el siguiente salto
de l\'{\i}nea ser\'a un comentario.


\begin{dispitems}
\ditem[\var{domain}]
        Aqu\'{\i} va el nombre del dominio que se aplica al RR actual. Si
no se da nombre de dominio, se asume el mismo que se puso para el RR anterior.

\ditem[\var{ttl}]
        \index{DNS!tiempo de vida}
        Con el fin de forzar al sistema DNS a descartar informaci\'on
despu\'es de cierto tiempo, cada RR lleva asociado un ``\emph{tiempo de
vida}'' o \emph{ttl}\footnote{N. del T.: Time to Live}. El campo
\var{ttl} especifica, en segundos, el tiempo de validez de la
informaci\'on desde que se obtiene del servidor. Es un n\'umero decimal de
hasta ocho d\'{\i}gitos.

        Si no se especifica ning\'un valor, tomar\'a uno por defecto del
campo \var{minimum} del registro SOA precedente.

\ditem[\var{class}]
        Aqu\'{\i} se indica la clase de direcci\'on: IN para direcciones~IP,
HS para objetos de la clase Hesiod. Trabajando con redes TCP/IP debe usarse
siempre la clase IN.

        Si no se especifica ning\'un valor, se toma el valor del RR anterior.

\ditem[\var{type}]
        Describe el tipo de RR. Los tipos habituales son A, SOA, PTR y
NS. En las siguientes secciones comentaremos estos tipos de RRs.

\ditem[\var{rdata}]
        Contiene los datos asociados al RR. El formato depende del
tipo, y se describir\'an m\'as adelante.

\end{dispitems}


\bigskip\noindent
A continuaci\'on se presenta una lista incompleta de RRs que se utilizan
en los ficheros de DNS. Hay algunos m\'as que no vamos a comentar. Son
experimentales, y de escaso uso.

\begin{dispitems}
\ditem[SOA]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{servidor de nombres autorizado}
\index{SOA (registro DNS)}
\index{DNS!zona}

Describe una zona de autoridad (SOA significa ``Start of Authority'',
es decir, ``Comienzo de Autoridad''). Se\~nala que los registros
siguientes contienen informaci\'on ``autorizada'' para el dominio. Cada
fichero incluido en la opci\'on \keyword{primary} debe tener un registro
SOA para esta zona. Los datos asociados contienen los siguientes campos:


\begin{dispitems}
\ditem[\var{origin}]
        Nombre can\'onico del servidor de nombres primario para este
dominio. Se suele dar como nombre absoluto.

\ditem[\var{contact}]
        Direcci\'on de correo electr\'onico de la persona responsable de
mantener el dominio, reemplazando el car\'acter `\keyword{@}'{} por un
punto. Por ejemplo, si el responsable de nuestra red fuese
\user{janet}, este campo contendr\'a: \keyword{janet.vbrew.com}.

\ditem[\var{serial}]
        Este es el n\'umero de versi\'on del fichero de zona, expresado
con un n\'umero decimal. Cuando se cambien datos del fichero, deber\'a
incrementarse este n\'umero.

        El n\'umero de versi\'on es utilizado por los servidores
secundarios para saber cu\'ando la informaci\'on de una zona ha
cambiado. Para mantenerse actualizados, los servidores secundarios
piden cada cierto tiempo el registro SOA del primario, y comparan el
n\'umero de versi\'on con el que tienen en la {\it cache}. Si ha cambiado,
el servidor secundario pedir\'a de nuevo la informaci\'on de zona al primario.

\ditem[\var{refresh}]
        Especifica el intervalo, en segundos, que esperan los
servidores secundarios entre peticiones de registros SOA a los
primarios. De nuevo, se trata de un n\'umero decimal de hasta ocho
d\'{\i}gitos.

        Normalmente, la topolog\'{\i}a de la red no cambia mucho, con lo
que este n\'umero ser\'a como poco de un d\'{\i}a para grandes redes, y de mucho
m\'as tiempo para redes peque\~nas.

\ditem[\var{retry}]
        Este n\'umero determina los intervalos de tiempo entre
reintentos de comunicaci\'on con servidores primarios cuando una
petici\'on de una zona falla. No debe ser peque\~no ya que un fallo
temporal del servidor primario har\'a que el secundario cargue
in\'utilmente la red. Buenas elecciones son una hora o como poco media hora.

\ditem[\var{expire}]
        Especifica el tiempo, en segundos, que tardar\'a el servidor en
descartar los datos de zona si no ha podido contactar con el servidor
primario. Normalmente ser\'a grande. As\'{\i}, Craig Hunt (\cite{hunt-tcpip})
recomienda 42~d\'{\i}as.

\ditem[\var{minimum}]
        Valor por defecto para el valor del ttl en los registros de
recursos que no lo especifiquen. Sirve para indicar a otros servidores de
nombres que descarten el RR tras cierto tiempo. No tiene efecto, sin embargo,
sobre el tiempo en el que un servidor secundario intenta actualizar la
informaci\'on de zona.

        El valor de \var{minimum} debe ser grande, en especial para
redes locales con topolog\'{\i}as poco cambiantes. Una buena elecci\'on puede
ser de una semana o un mes. En el caso de que haya registros RR que
cambien con frecuencia, siempre podr\'a asignarle valores particulares
de \var{ttl}.

\end{dispitems}


\ditem[A]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{A (registro DNS)}
\index{address!registro de recurso DNS}

Asocia direcciones~IP con nombres. El campo de datos contiene la
direcci\'on separando los octetos por puntos, como es habitual.

\index{nombre de m\'aquina!can\'onico}
\index{nombre de m\'aquina can\'onico}
\index{CNAME (registro DNS)}
\index{nombre de m\'aquina!alias}
\index{alias!nombre de m\'aquina}
Para cada m\'aquina s\'olo puede haber un registro A, que se considera
nombre oficial o \emph{can\'onico}. Cualquier otro nombre ser\'a un alias
y debe ser incluido con registros CNAME.



\ditem[NS]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Apunta a un servidor de nombres maestro de una zona subordinada. Vea
la secci\'on~\ref{tcpip.dns} para obtener informaci\'on de por qu\'e es
necesario. El campo de datos contiene el nombre del servidor. Para
traducir ese nombre debe proporcionarse un registro A adicional, que
se conoce como \emph{glue record}, al proporcionar la direcci\'on~IP
del servidor.


\ditem[CNAME]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{CNAME (registro DNS)}

Asocia un alias con su \emph{nombre can\'onico}. El nombre can\'onico se
determina con un registro A. Los alias son indicados mediante
registros CNAME.


\ditem[PTR]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{PTR (registro DNS)}

Se usa para asociar nombres del dominio \host{in-addr.arpa} con sus
nombres normales. Se usa para obtener nombres a partir de
direcciones~IP (traducci\'on inversa). El nombre de la m\'aquina debe
ser el can\'onico.


\ditem[MX]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{MX (registro DNS)}

Especifica el \emph{servidor de correo} para un dominio. En la
secci\'on ``\ref{mail.routing.internet}'' del cap\'{\i}tulo~\ref{mail} se explica
por qu\'e son necesarios estos servidores. La sint\'axis del registro MX
es:


\begin{screen}\st
[\var{domain}] [\var{ttl}] [\var{class}] MX \var{preference} \var{host}
\end{screen}

\var{host} es el nombre del servidor de correo para el dominio
\var{domain}. Cada servidor tiene un valor entero de preferencia
(\var{preference}) asociado. Un agente de transporte de correo que
desee entregar mensajes al dominio indicado en \var{domain} lo
intentar\'a con los servidores de estos registros hasta que uno
responda. Se empieza probando con los de menor preferencia.


% \ditem[WKS]
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This RR advertises \emph{well known services} offered by the host.
% The syntax is
% \begin{screen}\st
% [\var{domain}] [\var{ttl}] [\var{class}] WKS \var{address protocol services}
% \end{screen}
% 
% 
% \var{address} is the host's IP~address written in dotted quad notation.
% The protocol used by the services, which must either be TCP or UDP
% for the IN class,
% is named in the \var{protocol} field. There may be only one
% WKS record per protocol. Finally, \var{services} is a list of
% service names as found in the \file{/etc/services} file (see
% section~\ref{appl.services}). The service names are separated
% by blanks or tabs, and may be continued across newlines using
% braces.


\ditem[HINFO]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Este registro da informaci\'on sobre el hardware y el software de la
m\'aquina. Su sintaxis es:


\begin{screen}\st
[\var{domain}] [\var{ttl}] [\var{class}] HINFO \var{hardware software}
\end{screen}

El campo \var{hardware} identifica el hardware utilizado. Existe un
conjunto de convenciones sobre esto, el cual puede verse en el
RFC~1340. Si el campo contiene blancos, debe encerrarse entre comillas
dobles. El campo \var{software} especifica el software utilizado, para el
que tambi\'en existen convenciones en el mismo documento RFC.
\end{dispitems}


\subsection{Escribiendo los ficheros}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Las figuras~\ref{resolv.fig.named.cache}, \ref{resolv.fig.named.hosts},
\ref{resolv.fig.named.local}, y \ref{resolv.fig.named.rev} son
ejemplos de ficheros para un servidor de nombres en nuestra red
ejemplo, localizado en la m\'aquina \file{vlager}. El ejemplo es
sencillo dada la simplicidad de nuestra red. Si tiene requisitos m\'as
complejos, l\'ease el libro ``DNS and BIND'' de Cricket Liu y Paul
Albitz (\cite{liu-dns}).


\index{DNS!servidores del dominio ra\'{\i}z}
\index{servidor de nombres!ra\'{\i}z}
El fichero \file{named.ca} mostrado en la
figura~\ref{resolv.fig.named.cache} da ejemplos de registros de
servidores ra\'{\i}z. Un fichero de {\it cache} t\'{\i}pico suele tener
informaci\'on sobre una docena de servidores. Puede obtener la lista de
servidores del dominio ra\'{\i}z mediante el programa \prog{nslookup}
descrito m\'as adelante.\footnote{Esto no podr\'a hacerlo si no ha
especificado alg\'un servidor ra\'{\i}z. Puede en cambio ejecutar
\prog{nslookup} con un servidor diferente del suyo, o usar el fichero de
ejemplo de la figura~\ref{resolv.fig.named.cache} y entonces obtener
una lista de servidores v\'alidos.}

%
%%%%%%%%%%%%%%% Voy por aqui revisando el documento %%%%%%%%%%%%%%%
%

\begin{figure}[htbp]
\begin{tscreen}
\begin{verbatim}
;
; /var/named/named.ca          Fichero de cache.
;                No estamos en Internet, luego no necesitamos
;                servidores raiz. Elimine los puntos y coma
;                si desea activarlos.
;
; .                99999999   IN    NS  NS.NIC.DDN.MIL
; NS.NIC.DDN.MIL   99999999   IN    A   26.3.0.103
; .                99999999   IN    NS  NS.NASA.GOV
; NS.NASA.GOV      99999999   IN    A   128.102.16.10
\end{verbatim}
\end{tscreen}
 \caption{
  \label{resolv.fig.named.cache}
  Fichero \prog{named.ca}.
 }
\end{figure}


\begin{figure}[htbp]
\begin{tscreen}
\begin{verbatim}
;
; /var/named/named.hosts       Maquinas locales en nuestra red
;                               El origen es vbrew.com
;
@                   IN  SOA   vlager.vbrew.com. (
                              janet.vbrew.com.
                              16         ; serial
                              86400      ; refresco: una vez al dia
                              3600       ; reintentos: una hora
                              3600000    ; expiracion:  42 dias
                              604800     ; minimo: 1 semana )
                    IN  NS    vlager.vbrew.com.
;
; el correo local se distribuye en vlager
                    IN  MX    10 vlager
;
; direccion de loopback
localhost.          IN  A     127.0.0.1
; Nuestra ethernet
vlager              IN  A     191.72.1.1
vlager-if1          IN  CNAME vlager
; vlager es tambien un servidor de USENET news
news                IN  CNAME vlager
vstout              IN  A     191.72.1.2
vale                IN  A     191.72.1.3
; Otra Ethernet
vlager-if2          IN  A     191.72.2.1
vbardolino          IN  A     191.72.2.2
vchianti            IN  A     191.72.2.3
vbeaujolais         IN  A     191.72.2.4
\end{verbatim}
\end{tscreen}
 \caption{
  \label{resolv.fig.named.hosts}
  Fichero \prog{named.hosts}.
 }
\end{figure}


\begin{figure}[htbp]
\begin{tscreen}
\begin{verbatim}
;
; /var/named/named.local       Traduccion inversa para 127.0.0
;                               El origen es 0.0.127.in-addr.arpa.
;
@                   IN  SOA   vlager.vbrew.com. (
                              joe.vbrew.com.
                              1          ; serial
                              360000     ; refresco: 100 horas
                              3600       ; reintento:   1 hora
                              3600000    ; expiracion:  42 dias
                              360000     ; minimo: 100 horas )
                    IN  NS    vlager.vbrew.com.
1                   IN  PTR   localhost.
\end{verbatim}
\end{tscreen}
 \caption{
  \label{resolv.fig.named.local}
  Fichero \prog{named.local}.
 }
\end{figure}

\begin{figure}[htbp]
\begin{tscreen}
\begin{verbatim}
;
; /var/named/named.rev         Traduccion inversa de nuestros numeros IP
;                               El origen es 72.191.in-addr.arpa.
;
@                   IN  SOA   vlager.vbrew.com. (
                              joe.vbrew.com.
                              16         ; serial
                              86400      ; refresco: una vez al dia
                              3600       ; reintento: una hora
                              3600000    ; expiracion:  42 dias
                              604800     ; minimo: 1 semana )
                    IN  NS    vlager.vbrew.com.
; nuestra red
1.1                 IN  PTR   vlager.vbrew.com.
2.1                 IN  PTR   vstout.vbrew.com.
3.1                 IN  PTR   vale.vbrew.com.
; la otra red
1.2                 IN  PTR   vlager-if1.vbrew.com.
2.2                 IN  PTR   vbardolino.vbrew.com.
3.2                 IN  PTR   vchianti.vbrew.com.
4.2                 IN  PTR   vbeaujolais.vbrew.com.
\end{verbatim}
\end{tscreen}
 \caption{
  \label{resolv.fig.named.rev}
  Fichero \prog{named.rev}.
 }
\end{figure}


\subsection{Comprobaci\'on del funcionamiento del servidor de nombres}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{resolv.nslookup}
\index{servidor de nombres!comprobaci\'on}
\index{comprobaci\'on!servidor de nombres}
\index{nslookup@\prog{nslookup}|(}
\index{comprobaci\'on!nombre de m\'aquinas}
\index{nombre de m\'aquina!b\'usqueda}
\index{DNS!comprobaci\'on}

Existe una utilidad que resulta interesante para comprobar el funcionamiento
del servidor de nombres reci\'en configurado. Se llama \prog{nslookup}, y
puede usarse tanto interactivamente como desde la l\'{\i}nea de
comandos. En el \'ultimo caso, se invoca simplemente como:

\begin{tscreen}
 nslookup \var{nombre}
\end{tscreen}

\noindent
y pedir\'a el nombre indicado al servidor de nombres que aparezca en
\file{resolv.conf} (si aparece m\'as de uno, \prog{nslookup} coger\'a uno
al azar).


El modo interactivo, sin embargo, es mucho m\'as interesante. Adem\'as de
buscar m\'aquinas por su nombre, se puede tambi\'en preguntar por
cualquier registro DNS, y transferir la informaci\'on de zona completa
de un dominio.


Cuando se invoca sin argumentos, \prog{nslookup} mostrar\'a el servidor
de nombres en uso y entrar\'a en modo interactivo. En el prompt
`\term{>}'{} que se mostrar\'a, puede teclear cualquier nombre de dominio
por el que quiera preguntar. Por defecto, preguntar\'a por registros de
tipo A, es decir, aquellos que dan una direcci\'on~IP correspondiente al
dominio introducido.

Esto se puede cambiar tecleando ``\term{set type=\sl tipo}'', donde
\var{tipo} es un nombre de registro de recurso (RR) como los descritos
antes (en la secci\'on~\ref{resolv.named}) o bien la palabra ANY.

Por ejemplo, esta puede ser una sesi\'on con \prog{nslookup}:

\begin{tscreen}\small
\begin{verbatim}
$ nslookup
Default Name Server:  rs10.hrz.th-darmstadt.de
Address:  130.83.56.60

> sunsite.unc.edu
Name Server:  rs10.hrz.th-darmstadt.de
Address:  130.83.56.60

Non-authoritative answer:
Name:    sunsite.unc.edu
Address:  152.2.22.81
\end{verbatim}
\end{tscreen}


Si intenta preguntar por un nombre que no tiene direcci\'on~IP asociada,
pero se encuentran otros registros relacionados en el DNS, el programa
responder\'a con un error ``\term{No type A records found}'' ({\it no se
encontraron registros de tipo A}). Sin embargo, puede hacer preguntas
para otro tipo de registros sin m\'as que usar el comando ``\term{set
type}''. Por ejemplo, para obtener el registro SOA de \host{unc.edu},
podr\'{\i}a escribir lo siguiente:


\begin{tscreen}\small
\begin{verbatim}
> unc.edu
*** No address (A) records available for unc.edu
Name Server:  rs10.hrz.th-darmstadt.de
Address:  130.83.56.60

> set type=SOA
> unc.edu
Name Server:  rs10.hrz.th-darmstadt.de
Address:  130.83.56.60

Non-authoritative answer:
unc.edu
        origin = ns.unc.edu
        mail addr = shava.ns.unc.edu
        serial = 930408
        refresh = 28800 (8 hours)
        retry   = 3600 (1 hour)
        expire  = 1209600 (14 days)
        minimum ttl = 86400 (1 day)

Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU       internet address = 128.109.157.30
\end{verbatim}
\end{tscreen}


De manera similar, se pueden pedir registros MX, etc. Y mediante la
palabra ANY se obtendr\'an todos los RR asociados al nombre escrito.


\begin{tscreen}\small
\begin{verbatim}
> set type=MX
> unc.edu
Non-authoritative answer:
unc.edu preference = 10, mail exchanger = lambada.oit.unc.edu
lambada.oit.unc.edu     internet address = 152.2.22.80

Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU       internet address = 128.109.157.30
\end{verbatim}
\end{tscreen}


\index{DNS!servidores ra\'{\i}z}
\index{servidor de nombres!ra\'{\i}z}

Una aplicaci\'on pr\'actica de \prog{nslookup} para la depuraci\'on es
obtener la lista de servidores ra\'{\i}z para el fichero
\file{named.ca}. Esto puede hacerse pidiendo todos los registros NS
asociados al dominio ra\'{\i}z:

\begin{tscreen}\small
\begin{verbatim}
> set type=NS
> .
Name Server:  fb0430.mathematik.th-darmstadt.de
Address:  130.83.2.30

Non-authoritative answer:
(root)  nameserver = NS.INTERNIC.NET
(root)  nameserver = AOS.ARL.ARMY.MIL
(root)  nameserver = C.NYSER.NET
(root)  nameserver = TERP.UMD.EDU
(root)  nameserver = NS.NASA.GOV
(root)  nameserver = NIC.NORDU.NET
(root)  nameserver = NS.NIC.DDN.MIL

Authoritative answers can be found from:
(root)  nameserver = NS.INTERNIC.NET
(root)  nameserver = AOS.ARL.ARMY.MIL
(root)  nameserver = C.NYSER.NET
(root)  nameserver = TERP.UMD.EDU
(root)  nameserver = NS.NASA.GOV
(root)  nameserver = NIC.NORDU.NET
(root)  nameserver = NS.NIC.DDN.MIL
NS.INTERNIC.NET internet address = 198.41.0.4
AOS.ARL.ARMY.MIL        internet address = 128.63.4.82
AOS.ARL.ARMY.MIL        internet address = 192.5.25.82
AOS.ARL.ARMY.MIL        internet address = 26.3.0.29
C.NYSER.NET     internet address = 192.33.4.12
TERP.UMD.EDU    internet address = 128.8.10.90
NS.NASA.GOV     internet address = 128.102.16.10
NS.NASA.GOV     internet address = 192.52.195.10
NS.NASA.GOV     internet address = 45.13.10.121
NIC.NORDU.NET   internet address = 192.36.148.17
NS.NIC.DDN.MIL  internet address = 192.112.36.4
\end{verbatim}
\end{tscreen}


El conjunto completo de comandos disponibles en \prog{nslookup} puede
obtenerse con la orden interna \term{help}.

\index{nslookup@\prog{nslookup}|)}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% hostcvt, dnswalk, etc						%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Otras utilidades interesantes}
\index{DNS!utilidades}

Hay algunas utilidades que pueden ayudarle en sus tareas de
administrador de BIND. Describiremos dos de ellas. Por favor, eche un
vistazo a la documentaci\'on que traen para saber c\'omo utilizarlas.

\index{DNS!conversi\'on de /etc/hosts@conversi\'on de \file{/etc/hosts}}
\index{m\'aquinas@\file{hosts}!conversi\'on a ficheros BIND}
\index{hostcvt@\prog{hostcvt}}
La utilidad \prog{hostcvt} sirve para obtener una configuraci\'on
inicial de BIND a partir del fichero \file{/etc/hosts}. Genera tanto
los ficheros de traducci\'on directa (registros A) como los de
traducci\'on inversa (registros PTR) teniendo cuidado con los nombres de
alias y otros. Por supuesto, no har\'a todo el trabajo, pues aun puede
que necesite ajustar los registros SOA o a\~nadir registros
MX. Suponemos que tambi\'en le ayudar\'a tener cerca algunas aspirinas. El
programa \prog{hostcvt} forma parte de las fuentes de BIND, pero puede
obtenerse por separado en algunos servidores FTP dedicados a \linux{}.

\index{DNS!depuraci\'on de la base de datos}
\index{dnswalk@\prog{dnswalk}}
\index{depuraci\'on!base de datos DNS}
Despu\'es de configurar el servidor de nombres, puede que desee
comprobar el resultado. La aplicaci\'on ideal para esto (al menos para
m\'{\i}) es el programa \prog{dnswalk}, un paquete basado en \prog{perl}
que navega por la base de datos DNS, buscando errores habituales y
verificando que la informaci\'on es consistente. El programa
\prog{dnswalk} ha sido enviado recientemente al grupo
\ngrp{comp.sources.misc} de News, y deber\'{\i}a estar en los servidores
FTP que archiven este grupo (un servidor que seguro que lo tiene es
\host{ftp.uu.net}).




\index{configuraci\'on!servidor de nombres|)}
\index{servidor de nombres!configuraci\'on|)}
\index{DNS!configuraci\'on del servidor|)}
\index{BIND|)}
\index{named@\prog{named}|)}
\index{configuraci\'on!traducci\'on de nombres|)}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                E N D   O F   C H A P T E R                    %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
