Cuando indicamos a nuestro navegador Web que, por ejemplo, vaya a una página en www.gnu.org, éste tiene que realizar algunas tareas antes de saber dónde buscar.
Como es bien sabido, los ordenadores conectados a Internet se identifican por un número, la dirección IP. En este aspecto funciona igual que los teléfonos. Si queremos llamar a alguien cuyo nombre y apellidos conocemos, o bien sabemos de antemano el número, o se tiene que consultar en una guía o listín telefónico. En internet es lo mismo, de alguna forma el navegador tiene que averiguar qué número tiene el servidor de cada una de las páginas o documentos que se consultan. ¿Cómo se hace?
Sin entrar en detalles, básicamente diremos que nuestro ordenador realiza los siguientes pasos
Se consultan los ficheros /etc/nsswitch.conf y /etc/host.conf.
Si la librería del sistema utilizada es muy antigua (libc4 o anterior) entonces solamente
se consulta el segundo fichero. Para libc5 y librería GNU C 2.x se lee el primero. Si existen
ambos ficheros entonces deben de ser coherentes. En esencia, indican el orden que hay que seguir
en la búsqueda. En el fichero /etc/nsswitch.conf debemos tener una línea
hosts: files dns
De existir /etc/host.conf deberíamos tener, por ejemplo, la línea
order hosts, bind
Ambos ficheros indcan que se busque primero en los ficheros locales,
normalmente en el fichero /etc/hosts y despues se realice una
consulta DNS, los términos dns o bind se refieren
a éste último tipo de consulta.
Suponiendo el orden descrito en el punto anterior, mira si en el
fichero /etc/hosts existe una linea con la forma
dirección_ip servidor_buscado
Si esto es así la búsqueda ha terminado, pero no es lo habitual. De
esta forma se recurre a la consulta DNS
La consulta DNS comienza con la inspección del fichero /etc/resolv.conf.
En este fichero tenemos una serie de lineas con el formato
nameserver dirección_ip
Es la lista de servidores DNS que tuvimos que implementar en su día
para poder acceder a la red, y que nos facilitó nuestro Proveedor de
Servicios de Internet. Primero envía una consulta al primero de ellos
(DNS primario), en caso de fallo al secundario y así normalmente
tenemos hasta 3 servidores.
Los pasos a seguir en el proceso inverso, es decir, en la busqueda de un nombre a partir de una IP, son muy parecidos. Por ejemplo, si se busca el nombre del host con IP 62.72.78.213 el servidor pregunta por 213.78.72.62.in-addr.arpa (obsérvese cómo se invierte en la petición el orden de los cuatro números que conforman la IP). La primera llamada al servidor raíz nos daría información acerca de algún DNS que sabe de *.62.in-addr.arpa, llamando a este servidor obtendriamos otro que contiene información de *.72.62-in-addr.arpa y así sucesivamente hasta que en algún paso uno de los servidores encuentra la respuesta completa y nos la devuelve como gcc.gnu.org
Llegados a este punto, conviene aclarar que el término servidor
DNS suele utilizarse para dos tipos de servicios totalmente
distintos:
El objetivo de este documento es, fundamentalmente, instalar nuestro
servidor local como servidor DNS primario funcionando como servidor
caché, de forma que las consultas a lugares habituales se resuelven en
pocos milisegundos en vez de superar, en algunos casos, una espera
superior al segundo. La configuración como servidor maestro de algún
dominio es algo más complicada, pero se darán indicaciones de cómo
hacerlo.
Se seleccionan bind9 y bind9-utils, se pulsa el boton
aceptar y ya se tiene el software instalado. Pero todavía hace falta
configurarlo para que funcione. Pasar al apartado 3.
En el caso de utilizar apt-get para
actualizar paquetes, como root
#apt-get install bind9
bind9-utils
Una vez instalado el software, hay que configurarlo, lo cual se
describe en el apartado 3.
# Copyright (c) 2001 SuSE GmbH Nuernberg, Germany
#
# Author: Frank Bodammer <feedback@suse.de>
#
# Traducción y comentarios:
# Guillermo Ballester Valor gbv@oxixares.com
#
# /etc/named.conf
#
# Este es un ejemplo de fichero de configuración de name para BIND9
# Funciona como servidor caché sin modificación.
#
# Un ejemplo para hacer de servidor maestro de tu propio dominio puedes
# verlo en /usr/share/doc/packages/bind9/sample-config.
#
# La descripción de todas las opciones posibles puede verse en
# /usr/share/doc/packages/bind9/misc/options.
options {
# Aquí se define el nombre del directorio de trabajo
directory "/var/named";
# La Línea forwarders se puede descomentar, cambiando los
# IP por los que facilita el Proveedor de Servicios de Internet
# Si se habilita, el servidor puede pasar la petición a los
# servidores indicados. En general, no es necesario habilitar
# esta opción si en el fichero 'resolv.conf' ya están esos
# servidores que suminstra el ISP.
#forwarders { 10.11.12.13; 10.11.12.14; };
# Si se habilita la siguiente línea, antes que intentar buscar la información
# por sí mismo, el servidor la solicita la información a los 'forwarders'
# definidos anteriormente
#forward first;
# Con la siguiente linea, se define la interface y el puerto en las
# que named escucha las peticiones DNS. Por defecto escucha en todas
# las interfaces definidas en el sistema. El puerto definido por defecto
# es el 53, y puede cambiarse en esta línea.
#listen-on port 53 { 127.0.0.1; };
# Esta línea activa la escucha de interfaces IPV6
# Los valores permitidos son 'any' y 'none'
# o una lista de direcciones IPv6 se puede utilizar solamente
# con el kernel 2.4 en esta version.
listen-on-v6 { any; };
# Las siguientes tres líneas se pueden necesitar si hay un firewall
# entre el servidor e internet.
#query-source address * port 53;
#transfer-source * port 53;
#notify-source * port 53;
# La línea allow-query contiene una lista de redes o direcciones IP
# para aceptar o rechazar peticiones. La opción por defecto es aceptar
# todas las peticiones de todas las direcciones.
#allow-query { 127.0.0.1; };
# Si notify se pone a yes (por defecto), se envían mensajes 'notify' a otros
# servidores cuando cambian los datos de alguna zona. En vez de utilizar esta
# opción de forma global, es mejor hacerlo individualmente en la definición
# de cada zona
notify no;
};
# Las siguientes tres definiciones no necesitan ninguna modificación.
# La primera define 'localhost', la segunda la inversa para 'localhost'
# y la tercera es la definición de los servidores raíz "."
zone "localhost" in {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.zone";
};
zone "." in {
type hint;
file "root.hint";
};
# Aquí puedes introducir las definiciones de zona para tus propios
# dominios.
|
$TTL 1W
@ IN SOA localhost. root.localhost. (
20030325 ; Numero de serie
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS localhost.
1 IN PTR localhost.
|
$TTL 1W
@ IN SOA @ root (
20030325 ; Numero de serie
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS @
IN A 127.0.0.1
|
; This file holds the information on root name servers needed to ; initialize cache of Internet domain name servers ; (e.g. reference this file in the "cache . <file>" ; configuration file of BIND domain name servers). ; ; This file is made available by InterNIC ; under anonymous FTP as ; file /domain/named.root ; on server FTP.INTERNIC.NET ; ; last update: Nov 5, 2002 ; related version of root zone: 2002110501 ; ; ; formerly NS.INTERNIC.NET ; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ; formerly C.PSI.NET ; . 3600000 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ; ; formerly TERP.UMD.EDU ; . 3600000 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 ; ; formerly NS.NASA.GOV ; . 3600000 NS E.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 ; ; formerly NS.ISC.ORG ; . 3600000 NS F.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 ; ; formerly NS.NIC.DDN.MIL ; . 3600000 NS G.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 ; ; formerly AOS.ARL.ARMY.MIL ; . 3600000 NS H.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 ; ; formerly NIC.NORDU.NET ; . 3600000 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ; ; operated by VeriSign, Inc. ; . 3600000 NS J.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30 ; ; housed in LINX, operated by RIPE NCC ; . 3600000 NS K.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 ; ; operated by IANA ; . 3600000 NS L.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12 ; ; housed in Japan, operated by WIDE ; . 3600000 NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 ; End of File |
# Aquí puedes introducir las definiciones de zona para tus propios
# dominios.
zone "mi_dominio.com" {
type master;
file "zone/land-5.com.zone";
};
|
zone "203.202.201.in-addr.arpa" {
type master;
file "203.202.201.zone";
};
|
Para que un sistema llame a nuestro servidor DNS en primer lugar, no olvidarse
de insertar como primera línea de /etc/resolv.conf
nameserver mi_direccion_ip
téngase en cuenta que hay que poner la dirección IP adecuada para acceder al servidor. Esta IP
puede ser 127.0.0.1 si estamos en el mismo sistema donde instalamos named, puede ser una IP
desde nuestra red interna 192.168.xxx.xxx y desde fuera puede ser una IP válida en la Internet.
No conviene borrar los IP de los servidores que nos suministró nuestro proveedor de servicios, en caso de que nuestro nuestro servidor falle, se recurre a estos otros como alternativa.
Recuérdese que hay que dejar abierto el puerto #53 (o el que se defina en el fichero de configuración /etc/named.conf) para que se pueda acceder desde los sistemas a los que desemos prestar el servicio DNS, normalmente una red local. Si se deja libre el acceso desde la Internet sin restricciones puede haber un abuso de peticiones DNS que pueden colapsar nuestro sistema. Para evitarlo, se debe configurar adecuadamente nuestro firewall o al menos ajustar el parametro allow-query en /etc/named.conf
Una vez que se ha instalado el software, hay que activar el servidor. Se trata del demonio named. Lo habitual es que en los paquetes precompilados ya se incluya el script de inicio y control de tal forma que se pueda configurar como servicio al arrancar el sistema.
En el caso de SuSE, con el sistema de inicio tipo system V, este script se halla en el directorio
/etc/init.d y también se llama named. Tras la instalación del rpm, se activa el servicio con
#rcnamed start
rcnamed es simplemente un enlace blando que se halla en /usr/sbin
Bien, para ver si funciona el servidor podemos intentar el comando dig que siempre se
incluye con el paquete. Ahora no hace falta trabajar como root.
>dig www.gnu.org
Si el resultado es similar a
; <<>> DiG 9.2.2 <<>> www.gnu.org ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39212 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.gnu.org. IN A ;; ANSWER SECTION: www.gnu.org. 86400 IN A 199.232.41.10 ;; AUTHORITY SECTION: gnu.org. 86400 IN NS ns1.gnu.org. gnu.org. 86400 IN NS ns2.gnu.org. gnu.org. 86400 IN NS ns3.gnu.org. gnu.org. 86400 IN NS ns4.gnu.org. ;; ADDITIONAL SECTION: ns4.gnu.org. 86400 IN A 193.201.200.170 ;; Query time: 122 msec ;; SERVER: 192.168.0.4#53(192.168.0.4) ;; WHEN: Mon Sep 1 18:41:11 2003 ;; MSG SIZE rcvd: 133 |
;; Query time: 2 msec ;; SERVER: 192.168.0.4#53(192.168.0.4) ;; WHEN: Mon Sep 1 18:55:07 2003 ;; MSG SIZE rcvd: 133 |
Queda por comentar cómo se hace para que al arrancar el sistema se active named. Esto dependerá
en cada caso de la distribución. En el caso de SuSE 8.2 esto se realiza facilmente con yast2
yast2 -> Runlevel editor -> RunLevel properties -> Activar named en niveles 3 y 5
El documento básico es la traducción al español de Cómo ser un administrador DNS en poco tiempo. .
Para finalizar, solo expresar mi deseo de que este pequeño documento sea útil, al menos en mi caso he mejorado notablemente la velocidad de navegación en la Internet. Las críticas, aviso de fallos y sugerencias me las podeis enviar aquí.