Guia sobre como instalar un servidor DNS en Ubuntu

Tagged:  

DNS proviene de Domain Name Service. En internet, el Domain Name Service (DNS) almacena y asocia diversos tipos de información con nombres de dominio; pero lo más importante, traduce los nombres de dominio (nombres de equipos) a direcciones IP. También lista todos los servidores que aceptan correo electrónico para cada dominio. DNS es un componente escencial en el uso de internet que nos permite utilizarla sin necesidad de recordar la dirección IP de cada página existente.

Introducción

BIND (Berkeley Internet Name Domain) es una implementación abierta del protocolo DNS y provee una implementación redistribuible de uno de los mayores componentes de Domain Name Service.

Un Servidor de Nombres (named)

Una Librería de Resolución

Herramientas de resolución de problemas como nslookup y dig

El DNS de BIND es utilizado por la mayoría de las máquinas que ejecutan resolucón de nombres en Internet, brindando una arquitectura robusta y estable sobre la cual se puede construir la arquitectura de resolución de nombre de una organización. La librería de resolución incluida en la distribución BIND provee API's standard para la traducción de nombres de dominio a direcciones de Internet y se encuentra orientada a estar enlazada con aplicaciones que requieren resolución de nombres.

Configuración de Firewall

BIND escucha en el puerto 53 UDP y TCP, este último utilizado para la transferencia de zonas entre servidores por lo cual se podría filtrar el protocolo en caso de no contar con más de un servidor. Sin embargo si la respuesta a una petición es superior a 1024 bytes, el servidor envía una respuesta parcial, y entre el cliente y el servidor se intentará volver a realizar la petición por medio de TCP.
Respuestas de este tipo no ocurren a menudo, pero si ocurren. Y la gente tiende a bloquear el protocolo TCP sobre el puerto 53 sin permitir la llegada de este tipo de respuestas. Es aquí donde usualmente aparece la historia sobre los grandes servidores de nombre fundidos cuando más servidores root fueron agregados.Esto hace peticiones a los servidores root mayores a 1024 bytes y todo el sistema de DNS tiende a quebrarse por gente que viola las especificaciones de DNS (RFC1035) y bloqueando el protocolo TCP.


Diferencias entre BIND 8 y BIND9

Además de ser multi-thread y su código completamente reescrito, lo cuál debería proveer mejor estabilidad y seguridad a largo plazo, existen otras diferencias

En caso de existir un error en la sintaxis en el archivo named.conf, BIND 9 logueará el error pero no reiniciará el servicio. BIND 8 logueará el error y el servició morirá!.
Extensivo soporte para TSIGs (llaves compartidas) para control de acceso, por ejemplo, "update-policy" puede ser utilizado para un control de acceso granular de actualizaciones dinámicas.
La herramienta para inicio/parada/reinicio, rndc es diferente de la versión 8 ndc, comunicaciones diferentes, autenticación y características.
La sintaxis en los archivos de zonas es verificado más rigurosamente (por ejemplo una línea TTL, debe existir)

En named.conf

Las opciones check-names y statistics-interval de la versión 8 no están disponibles en la 9.
La opción auth-nxdomain que se encontraba activa por defecto ya no se encuentra y si no es configurado manualmente, BIND 9 logueará el mensaje correspondiente durante el inicio.
La lista de servidores root, normalmente llamada named.root ó root.hints en BIND 8 no es necesaria en BIND 9 ya que se encuentra incluída en el servidor.

Instalando DNS en Ubuntu

sudo apt-get install bind9 dnsutils

Esto instalará los paquetes necesarios para BIND 9.

Configurando BIND

Si se instala BIND desde el código fuente, tendremos que editar el archivo named.conf. Sin embargo Ubuntu nos provee un BIND pre-configurado por lo cual editaremos el archivo named.local

sudo vi /etc/bind/named.conf.local

Es aquí donde configuraremos nuestras zonas. Una zona es, dentro de un DNS, una porción del espacio de nombres global. Este espacio de nombres está definido por la RFC1034, “Domain Names - Concepts and Facilities” y la RFC 1035, “”Domain Names - Implementation and Specification”, y se encuentra representado en un esquema de árbol de izquierda a derecha, estas divisiones del espacio de nombre son performadas por una serie de caracteres seguidas por un punto (.) hacia el espacio de nombre superior.

Se necesitan agregar las siguientes líneas en el archivo named.local

# This is the zone definition. replace example.com with your domain name

zone “example.com” {
type master;
file “/etc/bind/zones/example.com.db”;
};

# This is the zone definition for reverse DNS. replace 0.168.192 with your network address in reverse notation - e.g my network address is 192.168.0

zone “0.168.192.in-addr.arpa” {
type master;
file “/etc/bind/zones/rev.0.168.192.in-addr.arpa”;
};

Ahora necesitamos editar el achivo de opciones

sudo vi /etc/bind/named.conf.options

Necesitamos modificar el forwarder. El forwarder es un servidor DNS al cual le reenviarmos consultas que nuestro propio servidor no pueda procesar.

forwarders {
# Replace the address below with the address of your provider’s DNS server
123.123.123.123;
};

Agregar los archivos de definición de la zona (reemplazar ejemplo.com por su nombre de dominio)

sudo mkdir /etc/bind/zones
sudo vi /etc/bind/zones/example.com.db

El archivo de definición de la zona es donde pondremos todas las direcciones y nombres de máquinas que nuestro servidor DNS conocerá. Un ejemplo del contenido de este archivo es el siguiente:

// reemplazar ejemplo.com por su nombre de dominio y no olvide el . al final del mismo
// También reemplace ns1 con el nombre de su servidor DNS
ejemplo.com. IN SOA ns1.example.com. admin.ejemplo.com. (
// No modifique las siguientes líneas!
2007031001
28800
3600
604800
38400
)

// Reemplace las siguientes líneas en caso de ser necesario:
// ns1 = nombre del servidor DNS
// mail = nombre de su servidor de correo
// ejemplo.com = nombre de su dominio
ejemplo.com. IN NS ns1.ejemplo.com.
ejemplo.com. IN MX 10 mail.ejemplo.com.

// Reemplace las direcciones IP con las que correspondan a su entorno.
www IN A 192.168.0.2
mta IN A 192.168.0.3
ns1 IN A 192.168.0.1

Crear un archivo de zona reversa

Una petición a un servidor DNS sería algo así como "Cuál es la dirección IP del servidor=www en el dominio=ejemplo.com" Existen casos en los que sin embargo en los que necesitaremos conocer el nombre de una dirección IP determinada por motivos de resolución de problemas cada vez más frecuentes en estos días.

Para poder resolver consultas reversas y soportar consultas recursivas y no recursivas, los desarrolladores de DNS definieron un nombre de dominio (reservado) llamado IN-ADDR.ARPA. Este dominio soporta tanto IP versión 4 como IP versión 6.

sudo vi /etc/bind/zones/rev.0.168.192.in-addr.arpa

Copie y pegue el siguiente ejemplo

//reemplace ejemplo.com su nombre de dominio, ns1 con su nombre de servidor DNS.
// El número anterior a IN PTR ejemplo.com es la dirección de máquina del servidor DNS. in nuestro caso es 1, ya que mi dirección IP es 192.168.0.1.
@ IN SOA ns1.ejemplo.com. admin.ejemplo.com. (
2007031001;
28800;
604800;
604800;
86400
)

IN NS ns1.ejemplo.com.
1 IN PTR ejemplo.com

Reinicie BIND utilizando el siguiente comando

sudo /etc/init.d/bind9 restart

Pruebe su servidor DNS

Modifique el archivo resolv.conf con los siguientes parámetros

sudo vi /etc/resolv.conf

Ingrese las siguientes líneas, salve el archivo y salga del editor

// reemplace ejemplo.com con su nombre de dominio, y 192.168.0.1 con la dirección IP de su nuevo servidor DNS.

search ejemplo.com
nameserver 192.168.0.1

Para probar su servidor DNS ingrese el siguiente comando

dig example.com

Fuente DNS Server Setup using bind in ubuntu

Nicolas Solop
Ver el perfil de Nicolas Solop en LinkedIn