Servidor DNS Bind

Bind es  un servidor de nombres o DNS, pero antes de nada explicaré algunos conceptos:

Una IP es una dirección única que identifica cada máquina dentro de una red, como internet o una intranet.

Un dominio es un nombre amigable para acceder a un grupo de máquinas. Se compone de 2 partes un dominio de alto nivel (TLD, Top Level Domain) como com,org,net,es… y otra parte que es la que elegimos. Así tenemos nombres de dominio como google.com o microsoft.es. Pero como dijimos el dominio apunta a un conjunto de máquinas, para acceder a una sola máquina dentro de un dominio deberemos tener hosts.

Un host es un nombre amigable de una máquina determinada dentro de una red del dominio.

De esta manera tenemos un FQDN (Fully Qualified Domain Name): host.dominio.tld (www.google.com). Una vez conociendo estos conceptos:

Un DNS es una «base de datos», normalmente  distribuida, donde se guardan las asociaciones de nombres de dominios (como google) y hosts (como www) con sus correspondientes IPs. Cuando uno adquiere un dominio deberá tener una IP fija donde pueda escuchar el DNS (puerto 53 UDP y TCP) y este servidor deberá estar correctamente configurado para servir su propio dominio (el que hemos adquirido) y además pueda comunicárselo al resto de servidores que forman esa «base de datos» distribuida y no esperar que éstos se den cuenta del nuevo dominio.

Existen una serie de servidores DNS llamados roots que contienen las asociaciones básicas de los TLDs, que forman parte de la configuración del propio servidor. Ahora veremos como que hace un DNS:

Empezando por una petición, por ejemplo http://www.google.com, nuestra máquina accederá al servidor DNS configurado (cliente DNS en la configuración de la tarjeta de red), este le pasa la petición a los servidores root, que contienen la información del TLD para dominios .com, este a su vez  lleva a los servidores de nombres de google, donde se consulta a que IP corresponde el host www, y se devuelve ésta y así la petición es enviada a esta IP.

El DNS  se compone de dos partes

  • BIND, es el servidor propiamente dicho. Escucha en el puerto 53 TCP y UDP; y responde a las peticiones con la IP del host del dominio solicitado.(bind9)
  • RESOLVER, es el cliente, donde se configuran a que servidores se les va ha preguntar por las IPs (/etc/resolv.conf).

La configuración

Vamos a suponer el siguiente escenario. Servidor con IP 192.168.15, que responda internamente a un host llamado servidor de un dominio serverip.net (externamente se usará el servidor de nombres del propio registrador de dominio que está publicado en internet).

Para instalar el bind en sistemas linux:

apt-get install bind9 dnsutils

El primer fichero que el servidor intenta leer cuando hay una petición es /etc/bind/named.conf:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
  • En el primer archivo se define la localización de la cache DNS y la configuración genérica del servidor como fordwarders, transferencia de zonas, etc..
  • En el segundo pondremos nosotros nuestras zonas (nuestro dominio y máquinas)
  • En el tercero las zonas básicas para un DNS
    • zone “.” contiene los servidores root.
    • zone “localhost”.  Esta zona representa al propio servidor (loopback, 127.0.0.1). 
    • El resto son archivos de zonas inversas. Es decir, asocia una IP con una máquina o un dominio, al contrario que el DNS. Se identifican por la extensión in-addr.arpa

named.conf.local (nuestras zonas)

zone "serverip.net" {
 type master;
 file "/etc/bind/db.servidor";
};

zone "1.168.192.in-addr.arpa"{
 type master;
 file "/etc/bind/db.1.168.192.in-addr.arpa";
};
  • zone serverip.net, define el fichero de configuración de nuestra zona primaria (nuestro dominio) . Este fichero puede ser una copia de db.local y su  nombre DEBE ser el de nuestro host. (servidor.serverip.net => db.servidor)
  • zone 1.168.192.in-addr.arpa, define la búsqueda inversa de la zona 192.168.1.x. Ojo que está justo al revés de atrás hacia adelante evitando el último número de la IP. Se puede acortar por ejemplo a 168.192.in-addr.arpa pero cada host estaría definido como 1.15 (en  nuestro caso). Este fichero puede ser una copia de db.127.

Búsqueda directa: /etc/bind/db.servidor

Aquí vamos a definir los hosts que conforman nuestro dominio, además de los tiempos para la replicación de las zonas.

$TTL 604800
@ IN SOA servidor.serverip.net. root.serverip.net. (
         201412032  ; fecha+incremental de referencia para un Slave, saber si tiene                      que actualizarse o no 
         604800     ; tiempo entre actualizaciones para un Slave
         86400      ; tiempo de reintento en caso de fallo.
         2419200    ; tiempo en que caduca la información de un Slave
         604800 )   ; tiempo de vida de la petición.
;
@ IN NS servidor ;apunta a servidor.serveip.net
@ IN MX 10 mail ; apunta a mail.serveip.net
@ IN A 192.168.1.15

servidor IN A 192.168.1.15 ; necesario para @ IN NS
www  IN CNAME servidor.serverip.net. ; necesario haber creado 
; antes el registro A de servidor
mail IN A 192.168.1.10 ; necesario para @ IN MX

Los registros @ se apoyan en registros tipo A creador más abajo al igual que los registro CNAME requiren que se haya creado el registro tipo A del servdor al que apunten.

  • @, corresponde a la zona definida en el servidor
  • IN, tipo de registro INternet. (ver anexo)
  • SOA, especifica el servidor DNS primario del dominio, la cuenta de correo del administrador (root@serverip.net), los tiempos de refresco de los servidores secundarios. Es el primer registro de la zona y sólo puede haber uno en cada archivo de la zona y sólo está presente si el servidor es autoritario del dominio.
  • Los nombres acaban en «.» por que se parsean desde el final e indican el inicio del FQDN.

Observar que el servidor se llama servidor, con lo que en /etc/hostname debería de coincidir con dicho nombre y además apuntar a una máquina y no a un conjunto de máquinas (dominio).  Por otra parte para evitar el molesto mensaje «unable to resolve host» debemos actualizar el fichero /etc/hosts el cual posee un mapa de las ips locales de la siguiente manera:

127.0.0.1        localhost localdomain.localhost
127.0.1.1        servidor servidor.serverip.net
192.168.1.10     servidor servidor.serverip.net

Observar que 127.0.1.1 coincide con /etc/hostname 😉

Búsqueda inversa:  /etc/bind/db.1.168.192.in-addr.arpa

La búsqueda inversa es usada por muchos programas, que rechazarán establecer una conexión si la búsqueda inversa y en la búsqueda normal no coinciden. Muchos proveedores de correo usan la búsqueda inversa para clasificar correos como spam.

$TTL 604800
@ IN SOA servidor.serverip.net. root.serverip.net. (
         201412032  ; fecha+incremental de referencia para un Slave, saber si tiene                      que actualizarse o no 
         604800     ; tiempo entre actualizaciones para un Slave
         86400      ; tiempo de reintento en caso de fallo.
         2419200    ; tiempo en que caduca la información de un Slave
         604800 )   ; tiempo de vida de la petición.
;
@  IN NS  servidor.serverip.net.
15 IN PTR servidor.serverip.net.
  • 15 es el resultado de 192.168.1.15 que es la ip justo al revés. Como dijimos anteriormente si es nombre del fichero de configuración fuera db.168.192.in-addr.arpa el host sería:
1.15   PTR   servidor.serverip.net

Opciones del servidor: /etc/bind/named.conf.options

options {
 
directory “/var/cache/bind”; # Directorio donde se almacenará la caché.
 
auth-nxdomain no; # conform to RFC1035
 
# Reenviadores
forwarders {
   192.168.1.15;
   8.8.8.8; # DNS de Google.
   8.8.4.4; # DNS de Google.
};
 
listen-on port 53 { # Escuchamos en el puerto 53
   127.0.0.1; # ... por la interfaz de loopback...
   192.168.1.15; # ... ip del servidor.
};
 
listen-on-v6 { none; }; # No escuchamos tráfico IPv6
 
allow-query { # Permitimos consultas DNS desde...
   127.0.0.1; # ... la interfaz de loopback...
   192.168.1.0/24; # ... y nuestra red interna.
};
 
allow-transfer { none; }; # Prohibimos la transferencia de zonas puesto que este es nuestro único servidor DNS de la LAN
 
allow-recursion { # Permitimos consultas recursivas desde...
   127.0.0.1; # ... la interfaz de loopback...
   192.168.1.0/24; # ... y la red interna.
};
 
};

Luego para iniciar, parar, comprobar el estado o forzar la recarga de las zonas

sudo service bind9 [start|stop|status|force-reload]

Y para comprobar si las configuraciones sean correctas:

opciones: sudo named-checkconf 
busq. directa: sudo named-checkzone port0.org /etc/bind/db.opencode
busq. inversa: sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.1.168.192.in-addr.arpa

ANEXO 1

Las definiciones de los host asociándolo a su respectiva IP tiene el siguiente formato:

  • HOST   CLASE     [TTL ]    TIPO    DATOS
  • HOST: el nombre de la máquina, salvo en el DNS inverso que al tipo PTR le corresponde el último octeto de la IP.
  • CLASE: la clase puede ser IN (relacionada a protocolos de Internet, y por lo tanto, éste es el sistema que utilizaremos en nuestro caso), o CH (para el sistema caótico);
  • TIPO: define el tipo de recurso descrito por el registro:
    • A: Asocia el host con un IP. Pueden existir varios registros A relacionados con la misma IP aunque lo lógico es crear alias con CNAME.
    • CNAME (Nombre Canónico): Permite definir un alias para un host. Es particularmente útil para suministrar nombres alternativos relacionados con diferentes servicios en el mismo equipo.
    • HINFO: éste es un campo solamente descriptivo que permite la descripción en particular del hardware del ordenador (CPU) y del sistema operativo (OS).
    • MX (Mail eXchange): indica el servidor de correo electrónico en formato FQDN como CNAME. Debe existir un registro A que indique la IP. Pueden existir varios registros MX por dominio, para así suministrar una repetición en caso de fallas en el servidor principal de correo electrónico. De este modo, el registro MX permite definir una prioridad con un valor entre 0 y 65,535:
      mail.serverip.net. IN MX 10 mail.commentcamarche.net.
    • NS: es el servidor de nombres de dominio con autoridad sobre el dominio.
    • PTR: Es lo contrario de A. Asocia una IP a un host. Se utiliza en la búsqueda inversa.
    • SOA (Start Of Authority (Inicio de autoridad)): el campo SOA permite la descripción del servidor de nombre de dominio con autoridad en la zona, así como la dirección de correo electrónico del contacto técnico (en donde el carácter «@» es reemplazado por un punto).
    • TXT (Text): Permite asociar información adicional a un dominio. Esto se utiliza para otros fines, como el almacenamiento de claves de cifrado o autentificación.
  • DATOS: estos son los datos relacionados con el registro. Aquí se encuentra la información esperada según el tipo de registro:
    • A: la dirección IP de 32 bits:
    • CNAME: el nombre del host FQDN;
    • MX: la prioridad de 16 bits, seguida del nombre del host FQDN;
    • NS: el nombre del host FQDN;
    • PTR: el nombre del host FQDN;
    • SOA: varios campos.
      • servidor dns primario
      • correo.electronico.com
      • serial, fecha + incremental, cambia con cada actualización del fichero,se usa para indicar a un servidor esclavo si está actualizado o no.
      • refresh, indica el intervalo de tiempo en segundos en que tiene que actualizarse el servidor esclavo.
      • retry, indica el intervalo de tiempo en segundos para reintentar una conexión fallida del servidor esclavo.
      • expire, tiempo de caducidad de una petición del servidor esclavo.
      • minimum, tiempo de vida de la petición al servidor esclavo.

Extraido de http://sobrebits.com/montar-un-servidor-casero-con-raspberry-pi-parte-4-configurar-servidor-dns-cache/

Una respuesta a «»

Los comentarios están cerrados.