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.
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
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
.
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.