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 |
![]() |
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 |
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
|
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
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 |
Este documento es una traducción del documento "Gentoo BIND Guide". El original lo puedes encontrar aquí.