Guía BIND de Gentoo

Contenido:

1. Introducción

En este tutorial aprenderás a configurar BIND, el servidor DNS más usado en Internet. Configuraremos bind para tu dominio usando diferentes configuraciones, una para tu red local y otra para el resto del mundo. Para hacer esto usaremos las vistas. Una vista para la zona interna (tu red local) y otra vista para la zona externa (el resto del mundo).

2. Datos usados en los ejemplos

Clave Explicación Ejemplo
$TU_DOMINIO Tu nombre de dominio gentoo.org
$TU_IP_PUBLICA La IP pública que te da tu proveedor de Internet 204.74.99.100
$TU_IP_LOCAL La IP de la máquina dentro de tu red local 192.168.1.5
$TU_RED_LOCAL Todo el rango de direcciones de tu red local 192.168.1.0/24
$SERVIDOR_DNS_ESCLAVO La dirección IP del servidor dns esclavo para tu dominio 209.177.148.228
$ADMIN El nombre del administrador del servidor dns root
$MODIFICACION La fecha de modificación del fichero de zona más un número añadido 2009062901

Figura 2.1: Ejemplo de red local

Fig. 1: network

3. Configurando BIND

Instalación

Primero instalamos el paquete net-dns/bind.

Listado de código 3.1: Instalando bind

# emerge net-dns/bind

Configurando /etc/bind/named.conf

Lo primero que hay que configurar es el fichero /etc/bind/named.conf. Hay que especificar en qué directorio se encuentra bind, el puerto en el que escucha, las IPs, el fichero de proceso (pid file) y si queremos usar (o no) el protocolo ipv6.

Listado de código 3.2: el apartado options

options {
        directory "/var/bind";

        listen-on-v6 { none; };
        listen-on port 53 { 127.0.0.1; $TU_IP_LOCAL; };

        pid-file "/var/run/named/named.pid";
};

La segunda parte del fichero named.conf es la vista interna para tu red local.

Listado de código 3.3: Vista interna

view "internal" {
        match-clients { $TU_RED_LOCAL; localhost; };
        recursion yes;

        zone "$TU_DOMINIO" {
                type master;
                file "pri/$TU_DOMINIO.internal";
                allow-transfer { any; };
        };
};

La tercera parte del fichero named.conf es la vista externa, usada para resolver nuestro dominio a todo el mundo y resolver también cualquier nombre de dominio para nosotros (y todo aquel que quiera usar nuestro servidor DNS).

Listado de código 3.4: Vista externa

view "external" {
        match-clients { any; };
        recursion no;

        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "127.in-addr.arpa" IN {
                type master;
                file "pri/127.zone";
                allow-update { none; };
                notify no;
        };

        zone "$TU_DOMINIO" {
                type master;
                file "pri/$TU_DOMINIO.external";
                allow-query { any; };
                allow-transfer { $SERVIDOR_DNS_ESCLAVO; };
        };
};

La parte final del fichero named.conf es la política de registro.

Listado de código 3.5: Política de registro

logging {
        channel default_syslog {
                file "/var/log/named/named.log" versions 3 size 5m;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
       category default { default_syslog; };
};

El directorio /var/log/named/ debe existir y pertenecer al usuario named:

Listado de código 3.6: Creando el fichero de log

# mkdir -p /var/log/named/

# chmod 770 /var/log/named/
# touch /var/log/named/named.log
# chmod 660 /var/log/named/named.log
# chown -R named /var/log/named/
# chgrp -R named /var/log/named/

Creando el fichero de zona interna

Usaremos los nombres de hosts y las direcciones IP de la imagen de ejemplo. Fíjate que NO todos los nombres de dominio acaban con "." (punto).

Listado de código 3.7: /var/bind/pri/$TU_DOMINIO.internal

$TTL 2d
@	IN SOA	ns.$TU_DOMINIO.	$ADMIN.$TU_DOMINIO. (
	$MODIFICACION	; serial
	3h	; refresh
	1h	; retry
	1w	; expiry
	1d )	; minimum

$TU_DOMINIO.		IN MX	0 mail.$TU_DOMINIO.
$TU_DOMINIO.		IN TXT	"v=spf1 ip4:$TU_IP_PUBLICA/32 mx ptr mx:mail.$TU_DOMINIO ~all"
$TU_DOMINIO.		IN NS	ns.$TU_DOMINIO.
$TU_DOMINIO.		IN NS	$SERVIDOR_DNS_ESCLAVO
www.$TU_DOMINIO.	IN A	192.168.1.3
ns.$TU_DOMINIO.		IN A	192.168.1.5
mail.$TU_DOMINIO.	IN A	192.168.1.3
router.$TU_DOMINIO.	IN A	192.168.1.1
hell.$TU_DOMINIO.	IN A	192.168.1.3
heaven.$TU_DOMINIO.	IN A	192.168.1.5
desktop.$TU_DOMINIO.	IN A	192.168.1.4

Creando el fichero de zona externa

Aquí sólo tendremos los subdominios que queremos para los clients de fuera (www, mail y ns).

Listado de código 3.8: /var/bind/pri/$TU_DOMINIO.external

$TTL 2d
@	IN SOA	ns.$TU_DOMINIO.	$ADMIN.$TU_DOMINIO. (
	$MODIFICACION	;serial
	3h	;refresh
	1h	;retry
	1w	;expiry
	1d )	;minimum

$TU_DOMINIO.		IN MX	0 mail.$TU_DOMINIO.
$TU_DOMINIO.		IN TXT	"v=spf1 ip4:$TU_IP_PUBLICA/32 mx ptr mx:mail.$TU_DOMINIO ~all"
$TU_DOMINIO.		IN NS	ns.$TU_DOMINIO.
$TU_DOMINIO.		IN NS	$SERVIDOR_DNS_ESCLAVO
www.$TU_DOMINIO.	IN A	$TU_IP_PUBLICA
ns.$TU_DOMINIO.		IN A	$TU_IP_PUBLICA
mail.$TU_DOMINIO.	IN A	$TU_IP_PUBLICA

Finalizando la configuración

Añadimos el servicio named al nivel de ejecución por defecto:

Listado de código 3.9: Añadir al nivel de ejecución por defecto

# rc-update add named default

4. Configurando los clientes

Ahora puedes usar tu propio servidor DNS para resolver nombres de dominio en todas las máquinas de tu red local. Modifica el fichero /etc/resolv.conf en cada una de tus máquinas.

Listado de código 4.1: Editiando /etc/resolv.conf

search $TU_DOMINIO
nameserver $IP_DE_TU_SERVIDOR_DNS

Ten en cuenta que $IP_DE_TU_SERVIDOR_DNS es la misma dirección que $TU_IP_LOCAL que hemos venido usando en todo el documento. En la figura del ejemplo era 192.168.1.5

5. Haciendo pruebas

Ahora vamos a probar si realmente funciona. Primero tendremos que lanzar el servicio.

Listado de código 5.1: Lanzando el servicio manualmente


# /etc/init.d/named start

Ahora vamos a ejecutar unas cuantas órdenes host a varios dominios. Podemos usar cualquier máquinad de nuestra red local para hacer este test, ya que todas tienen (o deberían tener ya) el fichero resolv.conf modificado tal y como se explicó en el apartado anterior. Si no dispones del paquete net-dns/host también puedes usar ping. De todos modos lo puedes instalar con emerge host.

Listado de código 5.2: Haciendo las pruebas

$ host www.gentoo.org
www.gentoo.org has address 209.177.148.228
www.gentoo.org has address 209.177.148.229

$ host hell
hell.$TU_DOMINIO has address 192.168.1.3

$ host router
router.$TU_DOMINIO has address 192.168.1.1

6. Protegiendo el servidor con iptables

Si eres de los que usa iptables para proteger el servidor, puedes añadir las siguientes reglas.

Listado de código 6.1: Reglas de iptables

iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT

7. Notas

Este documento es una traducción del documento "Gentoo BIND Guide". El original lo puedes encontrar aquí.