BIND

TÍTULO:			BIND
VERSIÓN LFS:	3.0-RC1
AUTOR:			Michenaud Laurent <lmichenaud@free.fr>
				Patrick Kirk <patrick@enterprise-hr.com>
TRADUCTOR:	Proyecto LFS-ES
SINOPSIS:
	Cómo configurar un servidor DNS sencillo con bind.

RECETA:
versión 1.0 final
Esta receta explica cómo configurar bind en tu lfs.
NO soy un especialista en bind, lo que está escrito
es lo que he entendido. No dudes en corregirlo si ves
errores o tienes optimizaciones.

El sistema de Nombre de Dominio (DNS, por sus siglas en inglés) es 
usado por todo los programas en Internet TCP/IP para traducir los
nombres que a los humanos nos gusta usar en números IP asignados
en todas las computadoras y dispositivos en Internet y en tu red
interna.

En la mayoría de los sabores de Unix, el paquete de software más 
comúnmente mas usado es el Berkley Internet Name Domain, (BIND). Este
artículo servirá como introducción para obtener, instalar y configurar
BIND en Linux, e incluirá algunas señales que indican a dónde ir para
obtener información mas profunda.

Ten en cuenta que recientemente se han descubierto ciertas vulnerabilidades
de seguridad en BIND, así que asegúrate de obtener al menos la versión 
8.23. Al momento de escribir esto, la última versión es la 9.1.1. Puedes
descargar BIND desde el Consorcio de Programas de Internet (Internet
Software Consortium, ISC) en http://www.isc.org.

Para los propósitos de este artículo usaremos la versión 9.1.1, descargable
desde
ftp://ftp.isc.org/isc/bind9/9.1.1/bind-9.1.1.tar.gz

En términos generales, DNS es un servicio bastante sencillo que toma 
nombres como www.yahoo.com y busca su correspondencia con las máquinas 
que sirven páginas web usando cuartetos de números separados por 
puntos, por ejemplo 212.19.67.5. Tu Proveedor de Servicios de
Internet te brinda este servicio usando BIND. Si tienes una máquina
conectada a la Internet y deseas compartir la conexión, ejecutar
BIND en la máquina que comparte la conexión hará las cosas más rápidas
y fáciles. Desde el punto de ista de la seguridad, las direcciones IP
del tipo 192.168.0.n y 10.n.n.n no son enrutables. Esto significa que
las máquinas de tu red local estarán mucho más seguras si usas estas
direcciones.  Si no lo haces, tarde o temprano, algo como ShareSniffer
encontrará alguna carpeta compartida o un servicio detrás de tu
cortafuegos y hará travesuras.


------------------------------------------------
1) Instalación de bind

Para hacer la instalación conforme al estándar FHS, instalaremos
Bind en /usr/local con sus ficheros de configuración en /etc/bind.
Esto tiene como ventaja que si deseas respaldar todos los documentos
de configuración de tu sistema, sólo necesitarás respaldar el
directorio /etc.

$ tar zxvf bind-9.1.3.tar.gz
$ cd bind-9.1.3
$ ./configure --prefix=/usr/local --sysconfdir=/etc/bind &&
$ make &&
$ make install &&
$ mkdir -p /etc/bind

Los ficheros de configuración que siguen son muy sencillos. Te permitirán
tener un servidor DNS para tu red local y te permitirán usar el servidor
DNS de tu Proveedor de Servicios de Internet cuando estés conectado a ella.
Por razones de seguridad, el servicio se pretará solamente a las máquinas
que están en tu red local.

Para este ejemplo:
  dirección de red : 192.168.0.0
  nombre de dominio : zerezo.org
  nombre de la máquina anfitrión (host) : zarba
  ip de la máquina : 192.168.0.51
  
---------------------------------------------------
2) El fichero de configuración principal: /etc/bind/named.conf

// Comienzo del fichero

// La dirección IP a las cuales queremos prestarles el servicio DNS
// Es mala idea dejar que cualquiera comience a jugar con este
// servicio.
// acl son las siglas en inglés de Listas de Control de Acceso,
// zerezo.org es nuestra red de área local
acl zerezo.org { 192.168.0.0/24; 127.0.0.0/24; };

// Opciones generales
options {
	auth-nxdomain yes;
	directory "/usr/local/sbin";
	forward first;
	forwarders {
		212.47.227.206;  //Pon acá los DNS de tu Proveedor
		212.47.227.207;
	};
};

// Cómo llevar registros (log)
logging {
	channel warning
	{ 
		file "/var/log/dns_warnings" versions 3 size 100k;
		severity warning;
		print-category yes;
		print-severity yes;
		print-time yes;
	};
	channel general_dns
	{
		file "/var/log/dns_logs" versions 3 size 100k;
		severity info;
		print-category yes;
		print-severity yes;
		print-time yes;
	}; 
	category default { warning; } ;
	category queries { general_dns; } ;
}; 

// zona para acceder a la Internet
zone "." {
	type hint;
	file "/etc/bind/named.ca";
};

// zone para acceder al anfitrión local (localhost)
zone "0.0.127.in-addr.arpa" {
	type master; 
	file "/etc/bind/named.local";
};

// zone para acceder a tu dominio
zone "zerezo.org" in {
	type master;
	notify no;
	file "/etc/bind/zerezo.org";
};

// zona para acceder a tu dominio usando la ip
zone "0.168.192.in-addr.arpa" in {
	type master;
	notify no;
	file "/etc/bind/db.192.168.0";
};

// Fin del fichero


--------------------------------------------------------
3) Ficheros de configuración para cada una de las zonas

Hay un fichero de configuración para cada zona definida en el 
named.conf.
Estos archivos están en /etc/ind. Debes crear este directorio.
	
	a) /etc/bind/named.ca

Este archivo se usa cuando estás aconectado a la Internet.
La versión más reciente puedes obtenerla desde ftp://ftp.rs.internic.net
en donde aparece con el nombre de named.root

Si lo descargas, recuerda renombrarlo como named.ca cuando lo pongas
en /etc/bind

// Comienzo del fichero
;	Este fichero contiene los detalles de los servidores de
;	nombres raíz necesarios para inicializar el caché de los
;	servidores de nombres de dominio en la Internet
;	(por ejemplo haz una referencia a este fichero en el fichero
;	de configuración de los servidores de dominio BIND con la
;	directiva "cache  .  <fichero>".
;
;	Este fichero está disponible gracias a los servicios de egistro
;	de InterNIC bajo FTP anónimo de la siguientes formas:
;           fichero             /domain/named.root
;           en el servidor      FTP.RS.INTERNIC.NET
;       -O- por Gopher en       RS.INTERNIC.NET
;           debajo del menú     InterNIC Registration Services (NSI)
;              submenú          InterNIC Registration Archives
;           fichero             named.root
;
;       última actualización:    22 de Agosto de 1997
;       versión relacionada a la zona raíz:   1997082200
;
;
; anteriormente NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; anteriormente NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
;
; anteriormente C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; anteriormente TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; anteriormente NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; anteriormente NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; anteriormente NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; anteriormente AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; anteriormente NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; hospedado temporalmente en NSI (InterNIC)
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
;
; hospedado en LINX, operado por RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
;
; temporalmente hospedado en ISI (IANA)
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; hospedado en Japón, operado por WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33

// Fin del fichero


	b) /etc/bind/named.local
	
Debes tener un alias postmaster que apunte al usuario root o a 
cualquier otro.
	
// Comienzo del fichero
$TTL    604800
@	IN	SOA	zarba.zerezo.org. postmaster.zarba.zerezo.org. (
			1999112002 ;
			28800 ;
			14400 ;
			604800 ;
			86400 );
		NS	zarba.zerezo.org.
1	PTR	localhost. ;
// Fin del fichero


	c) /etc/bind/zerezo.org
	
// Comienzo del fichero
$TTL    604800
@	IN	SOA	zarba.zerezo.org. postmaster.zarba.zerezo.org. (
			1999112002 ;  número de serie
			28800 ;       rafraichissement
			14400 ;       nouvel essais
			604800 ;      expiración
			86400 );      temps de vie minimum

// NS = servidor de nombres
@	IN	NS	zarba
@	IN	NS	zarba.zerezo.org.

// MX = ervidor de correos, el número es la prioridad
@	IN	MX	10 zarba
@	IN	MX	20 zarba.zerezo.org.

// servidor local DNS
@	IN A	127.0.0.1
@	IN A	192.168.0.51

// servido de IP
localhost	IN A	127.0.0.1
zarba		IN A	192.168.0.51

// IP de las demás máquinas de la red
karine	IN A	192.168.0.52
yaf	IN A	192.168.0.7

// alias
www	IN CNAME	zarba
ftp	IN CNAME	zarba
mail	IN CNAME	zarba

// Fin del fichero


	d) /etc/bind/db.192.168.0

// Comienzo del fichero
$TTL    604800
@	IN	SOA	zarba.zerezo.org. postmaster.zarba.zerezo.org. (
			1999112002 ; número de serie
			28800 ;	     rafraichissement
			14400 ;	     nouvel essais
			604800 ;     expiración
			86400 );    temps de vie

// nameserver
	IN	NS	zarba.zerezo.org.

// reversos de las direcciones IP
1	IN	PTR	zarba.zerezo.org.
2	IN	PTR	karine.zerezo.org.
3	IN	PTR	yaf.zerezo.org.

// Fin del fichero
	

------------------------
4) configuración de rndc

rndc se usa para administrar bind. su desarrollo aún no
ha terminado pero prefiero ponerla en este hint que poner
la obsoleta nslookup.
	
	a) Creación de una llave

Debes obtener una llave para que rndc pueda comunicarse con bind :
dnssec-keygen -a hmac-md5 -b 128 -n user rndc
	
Esto creará dos ficheros. Obten el valor de la llave en el .key .


	b) /etc/bind/rdnc.conf

Crea el fichero y edita la llave por favor.

// Comienzo del fichero
options {
        default-server  localhost;
        default-key     rndc_key;
};

server localhost {
        key     rndc_key;
};

key rndc_key {
        algorithm hmac-md5;
        secret "Xd3zz2FgxvkML4V/BlVG8Q==";
};
// Fin del fichero


	c) Nuevamente edita /etc/bind/named.conf y agrega las líneas que siguen :
	
key rndc_key {
        algorithm       hmac-md5;
        secret		
"Xd3zz2FgxvkML4V/BlVG8Q==";
};

controls {
    inet 127.0.0.1 allow { localhost; } keys { rndc_key; };
};


--------------------
5) /etc/init.d/named

	a) Aquí está el guión de inicio

#!/bin/sh
# Comienzo de /etc/init.d/
#
# Incluye las funciones declaradas en el fichero /etc/init.d/functions
#

source /etc/init.d/functions

case "$1" in
        start)
                echo -n "Iniciando el servidor DNS..."
                loadproc /usr/sbin/named
                ;;

        stop)
                echo -n "Deteniendo el servidor DNS..."
                /usr/sbin/rndc stop
                evaluate_retval
                ;;

        reload)
                echo -n "Volviendo a cargar el servidor DNS..."
                /usr/sbin/rndc reload
		            evaluate_retval
                ;;

        restart)
                $0 stop
                /usr/sbin/sleep 1
                $0 start
                ;;

        status)
                /usr/sbin/rndc status
		            evalute_retval
                ;;

        *)
                echo "Modo de uso: $0 {start|stop|reload|restart|status}"
                exit 1
        ;;

esac

# Fin de /etc/init.d/


	b) Crea los enlaces
	
	cd /etc/rc0.d
	ln -s ../init.d/named K600named
  cd /etc/rc1.d
	ln -s ../init.d/named K600named
	cd /etc/rc6.d
	ln -s ../init.d/named K600named
	cd /etc/rc3.d
	ln -s ../init.d/named S300named
	cd /etc/rc5.d
	ln -s ../init.d/named S300named


--------------------------
6) Edita /etc/resolv.conf para que use tu servidor DNS

search zerezo.org
nameserver 127.0.0.1
nameserver 192.168.0.51


--------------------------
6) Prueba tu configuración

Algunas pruebas:
	dig -x 127.0.0.1
	
	si tienes un servidor ftp :
		ftp ftp.zerezo.org
		ftp zarba.zerezo.org
		
	si tienes apache, abre un navegador y usa como url :
	  http://www.zerezo.org
	  http://zarba.zerezo.org
		
	Si tienes problemas, lee los logs /var/log/dns* y
/var/log/daemon.log