Página siguiente Página anterior Índice general

3. Servidor de nombres de ``sólo cacheo''.

Una primera nota para la configuración de DNS, muy útil para usuarios de módem, cable-módem, ADSL y similares.

En Red Hat y distribuciones derivadas puedes conseguir los resultados prácticos de esta primera sección del COMO instalando los paquetes bind, bind-utils y caching-nameserver. Si usa Debian simplemente instala bind (o bind9, al escibir esto, BIND 9 no está soportado por Debian Stable (potato))y bind-doc. Desde luego, que sólo instalando estos paquetes no aprenderás más que leyendo este COMO. Así pues, instala los paquetes, lee y verifica los ficheros instalados.

Un servidor de "sólo cache" encontrará las respuestas a las consultas de nombres y las recordará para la próxima vez que las necesites. Esto acorta el tiempo de espera significativamente para la próxima vez, especialmente si dispones de una conexión lenta.

Lo primero que necesitas es un fichero llamado /etc/named.conf (Debian: /etc/bind/named.conf). Este fichero se lee cuando arranca named. Por ahora simplemente contendrá:


// Fichero de configuración para servidor de sólo cacheo
// La version que lea de este COMO puede contener espacios
// iniciales (espacios previos a los caracteres de estas
// líneas) en este u otros ficheros. Debe eliminarlos para
// que las cosas funcionen.
//
// Observe que los nombres de ficheros y directorio pueden
// ser distintos, aunque los ultimos contenidos deben
// ser muy parecidos.

options {
        directory "/var/named";

        // Descomentar esto podría ayudar si tiene que salir a través
        // de un cortafuegos y las cosas no funcionan fuera.  Sin embargo, de
 todas
        // formas necesitarás hablar con el administrador del cortafuegos.

        // query-source port 53;
};
controls {
        inet 127.0.0.1 allow { localhost; } keys { rndc_key; };
};

key "rndc_key" {
        algorithm hmac-md5;
        secret
 "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};

zone "." {
        type hint;
        file "root.hints";
};

zone "0.0.127.in-addr.arpa" {
        type master;
        file "pz/127.0.0";
};

Los paquetes de las distribuciones Linux pueden usar diferentes nombres para cada uno de los ficheros mencionados aquí; el contenido sigue siendo el mismo.

La línea `directory' le indica a named donde buscar los ficheros. Todos los ficheros mencionados están relativos a esta ruta. Así pz es un directorio bajo /var/named, i.e., /var/named/pz. /var/named es el directorio correcto de acuerdo con la distribución estándar de directorios en Linux (Linux File system Standard).

Aquí describimos el fichero /var/named/root.hints. /var/named/root.hints debería contener lo siguiente: (si cortas y pegas este fichero de una versión electrónica del documento, ten en cuenta que no deberían haber espacios en blanco iniciales en este fichero, i.e. todas las líneas deberían comenzar con un carácter que no sea espacio. Algún software de procesamiento de documentos inserta espacios al comienzo de las líneas y causan confusión. En este caso, elimina los espacios iniciales).


;
; Puede haber comentarios aquí si ya tenías el fichero.
; Si no no te preocupes.
;
.                       6D  IN      NS      A.ROOT-SERVERS.NET.
.                       6D  IN      NS      B.ROOT-SERVERS.NET.
.                       6D  IN      NS      C.ROOT-SERVERS.NET.
.                       6D  IN      NS      D.ROOT-SERVERS.NET.
.                       6D  IN      NS      E.ROOT-SERVERS.NET.
.                       6D  IN      NS      F.ROOT-SERVERS.NET.
.                       6D  IN      NS      G.ROOT-SERVERS.NET.
.                       6D  IN      NS      H.ROOT-SERVERS.NET.
.                       6D  IN      NS      I.ROOT-SERVERS.NET.
.                       6D  IN      NS      J.ROOT-SERVERS.NET.
.                       6D  IN      NS      K.ROOT-SERVERS.NET.
.                       6D  IN      NS      L.ROOT-SERVERS.NET.
.                       6D  IN      NS      M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     6D  IN      A       128.9.0.107
C.ROOT-SERVERS.NET.     6D  IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     6D  IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     6D  IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     6D  IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     6D  IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     6D  IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     6D  IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.10
K.ROOT-SERVERS.NET.     6D  IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     6D  IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     6D  IN      A       202.12.27.33

Este archivo describe los servidores de nombres raíz en el mundo. Este archivo cambiará a lo largo del tiempo y tiene que ser mantenido y actualizado con una cierta regularidad. Vea la sección de ( mantenimiento) para saber cómo mantenerlo actualizado.

La siguiente sección de named.conf es la última zone. Explicaré su uso en un capítulo posterior: Por ahora, crea un archivo llamado 127.0.0 en el subdirectorio pz:(De nuevo, por favor borra los espacios iniciales si cortas y pegas esto).


$TTL 3D
@               IN      SOA  ns.linux.bogus. hostmaster.linux.bogus. (
                                1       ; Serial
                                8H      ; Refresh
                                2H      ; Retry
                                4W      ; Expire
                                1D)     ; Minimum TTL
                        NS      ns.linux.bogus.
1                       PTR     localhost.

Las secciones llamadas key y controls juntas especifican que tu named se puede controlar remotamente mediante un programa llamado rndc si se conecta desde el host local y se identifica con la llave secreta codificada. Esta llave es como una contraseña. Para que rndc funcione necesita que /etc/rndc.conf cumpla esto:


key rndc_key {
    algorithm "hmac-md5";
    secret
 "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};
options {
    default-server localhost;
    default-key    rndc_key;
};

Como puedes ver la clave es idéntica. Si quieres usar rndc desde otras máquinas sus tiempos tiene que estar dentro de un margen de 5 minutos la una de la otra. Recomiendo usar el software the ntp (xntpd y ntpdate) para hacer esto.

A continuación, necesitas un /etc/resolv.conf parecido a este:(De nuevo: ¡borrar espacios!)


search
 subdomain.your-domain.edu
 your-domain.edu
nameserver 127.0.0.1

La línea `search' especifica en qué dominios buscar para cualquier nombre de máquina al que te quieras conectar. La línea `nameserver' especifica la dirección de tu servidor de nombres, en este caso tu misma máquina ya que es donde se ejecuta named (127.0.0.1 está bien, no importa si la máquina tiene otra dirección también). Si quieres incluir varias máquinas como servidores de nombres basta añadir líneas `nameserver' para cada uno.(Nota: Named nunca lee este fichero, lo lee la aplicación que busca un servidor de nombres. Nota 2: En algunos ficheros resolv.conf puedes encontrar una línea "domain". Es correcto, pero no uses a la vez "search" y "domain", sólo una de ellas funcionará).

Para ilustrar lo que hace este archivo:
Si un cliente intenta buscar a fulano, primero se probará fulano.subdominio.su-dominio.edu, a continuación fulano.su-dominio.edu, y finalmente fulano. Si un cliente intenta buscar sunsite.unc.edu, sunsite.unc.edu.subdominio.su-dominio.edu se prueba primero (sí, es tonto, pero es así como tiene que ser), después sunsite.unc.edu.su-dominio.edu, y finalmente sunsite.unc.edu. Puede que no quieras poner demasiados dominios en la línea search, lleva su tiempo el efectuar las búsquedas.

El ejemplo supone que pertenece al dominio subdominio.su-dominio.edu, tu máquina probablemente se llame su-máquina.subdominio.su-dominio.edu. La línea search no debería contener tu TLD (Top Level Domain o Dominio de Nivel Superior, `edu' en este caso). Si necesitas conectar frecuentemente con máquinas de otro dominio, puedes añadir ese dominio a la línea search como sigue:(Recuerda eliminar los espacios iniciales, si los hay)


search subdominio.su-dominio.edu su-dominio.edu otro-dominio.com

y así. Obviamente necesitas poner un dominio real en su lugar. Esto es importante; por favor observa la ausencia de puntos al final de los nombres de dominio.

3.1 Iniciando named

Tras haber terminado todo lo anterior es el momento de lanzar named. Si usas un conexión por módem, conéctate primero. Ejecuta el guion de arranque /etc/init.d/named start o named directamente: /usr/sbin/named. Si has usado versiones previas de BIND probablementa hayas usado `ndc start'. BIND9 lo ha sustituido por `rndc start', que puede controlar tu named remotamente, pero que ya no puede iniciar named. Si falla mira la sección PUF. Si observas los mensajes del fichero de syslog (normalmente llamado /var/adm/messages, Debian lo llama /var/log/daemon o también en el directorio, /var/log) mientras inicias named (ejecuta tail -f /var/log/messages) deberías ver algo como:

(las líneas terminadas en \ continúan en la siguiente línea)

Dec 23 02:21:12 lookfar named[11031]: starting BIND 9.1.3
Dec 23 02:21:12 lookfar named[11031]: using 1 CPU
Dec 23 02:21:12 lookfar named[11034]: loading configuration from \
    '/etc/named.conf'
Dec 23 02:21:12 lookfar named[11034]: the default for the \
    'auth-nxdomain' option is now 'no'
Dec 23 02:21:12 lookfar named[11034]: no IPv6 interfaces found
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface lo,\
     127.0.0.1#53
Dec 23 02:21:12 lookfar named[11034]: listening on IPv4 interface
 eth0, \
    10.0.0.129#53
Dec 23 02:21:12 lookfar named[11034]: command channel listening on \
     127.0.0.1#953
Dec 23 02:21:13 lookfar named[11034]: running

Si hay algún mensaje sobre errores debe haber algún fallo. Named indicará el fichero en el que está el fallo. Vuelve y compruébalo. Reinicia named ("etc/init.d/named restart"/ ) cuando lo hayas corregido.

Ahora puedes comprobar la configuración. Tradicionalmente hay un programa llamado nslookup que nos servirá para estos fines. Actualmente se recomienda dig:

$ dig -x 127.0.0.1
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26669
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL:
 0

;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 259200  IN      PTR     localhost.

;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.   259200  IN      NS      ns.linux.bogus.

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:26:17 2001
;; MSG SIZE  rcvd: 91

Si es esto lo que obtienes, está funcionando. Espero. Ante cualquier otra cosa, vuelve y verifica todo otra vez. Cada vez que modifiques un fichero necesitas reiniciar named usando la orden rndc reload.

Ahora puedes introducir una consulta. Intenta buscar alguna máquina cercana. pat.uio.no está cerca de mi, en la Universidad de Oslo:

$ dig pat.uio.no
; <<>> DiG 9.1.3 <<>> pat.uio.no
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15574
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0

;; QUESTION SECTION:
;pat.uio.no.                    IN      A

;; ANSWER SECTION:
pat.uio.no.             86400   IN      A       129.240.130.16

;; AUTHORITY SECTION:
uio.no.                 86400   IN      NS      nissen.uio.no.
uio.no.                 86400   IN      NS      nn.uninett.no.
uio.no.                 86400   IN      NS      ifi.uio.no.

;; Query time: 651 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 23 02:28:35 2001
;; MSG SIZE  rcvd: 108

Esta vez dig ha preguntado a tu named para buscar la máquina pat.uio.no. Contacta con una de las máquinas servidoras de nombres indicadas en tu fichero root.hints, y busca su camino desde ahí. Puede demorar un poquito antes de obtener los resultados si tiene que buscar todos los dominios que hay en /etc/resolv.conf.

Si de nuevo preguntas lo mismo, obtendrás:

$ dig pat.uio.no

; <<>> DiG 8.2 <<>> pat.uio.no
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUERY SECTION:
;;      pat.uio.no, type = A, class = IN

;; ANSWER SECTION:
pat.uio.no.             23h59m58s IN A  129.240.130.16

;; AUTHORITY SECTION:
UIO.NO.                 23h59m58s IN NS  nissen.UIO.NO.
UIO.NO.                 23h59m58s IN NS  ifi.UIO.NO.
UIO.NO.                 23h59m58s IN NS  nn.uninett.NO.

;; ADDITIONAL SECTION:
nissen.UIO.NO.          23h59m58s IN A  129.240.2.3
ifi.UIO.NO.             1d23h59m58s IN A  129.240.64.2
nn.uninett.NO.          1d23h59m58s IN A  158.38.0.181

;; Total query time: 4 msec
;; FROM: lookfar to SERVER: default -- 127.0.0.1
;; WHEN: Sat Dec 16 00:23:09 2000
;; MSG SIZE  sent: 28  rcvd: 162

3.2 Resolutores (Resolvers)

Todos los sistemas operativos que incorporan la API estándar de C disponen de las llamadas gethostbyname y gethostbyaddr. Estas llamadas pueden obtener información de diferentes orígenes. El origen viene determinado por la configuración indicada en /etc/nsswitch.conf en Linux (y otros Unix). Es un fichero grande que especifica de qué base de datos se obtienen los diferentes tipos de datos. Normalmente contiene comentarios útiles al principio, que deberías leer. Tras encontrar que empieza con `hosts:'; se debería leer:


hosts:      files dns

(¿Recuerdas lo de los espacios en blanco? Ya no lo voy a mencionar de nuevo.)

Si no hay una línea que comience por `hosts:', pon una como la anterior. Eso le dice a los programas que primero deben buscar en el fichero /etc/hosts, y después comprobar DNS de acuerdo con resolv.conf.

3.3 Felicitaciones

Ahora ya sabes como configurar un servidor de nombres de sólo cacheo. Tómate una cerveza, leche, o lo que más te guste, para celebrarlo.


Página siguiente Página anterior Índice general