Servidor DNS a fondo

Berkeley Internet Name Domain (BIND) es una implementación del protocolo Domain Name System o DNS (en español: sistema de nombres de dominio), ampliamente usado para resolver nombres y números IP en Internet.


Es un sistema de nomenclatura jerárquica para computadoras, servicios o cualquier recurso conectado a Internet o a una red privada. Este sistema asocia información variada con nombres de dominios asignado a cada uno de los participantes. Su función más importante, es traducir (resolver) nombres inteligibles para los humanos en identificadores binarios asociados con los equipos conectados a la red, esto con el propósito de poder localizar y direccionar estos equipos mundialmente.


Su configuracion consiste basicamente en crear 2 Zonas una directa llamada "redinterna.net" que va traducir los nombres a las direcciones IP, y una inversa llamada "1.168.192.in-addr.arpa" que va a traducir las direcciones IP a los nombres.

A continuación se mostrará como instalar y configurar este importante servicio en un servidor Debian.



Configurando las interfaces de red


Nos logueamos en el servidor DNS, y escribimos en la consola:


su

poner contraseña de root, a partir de ahora y en todo el tutorial vamos a trabajar como usuario root.
(si estas en ubuntu sudo su y pones tu propia contraseña)


ifconfig -a | grep eth


Servidor DNS a fondo


Podemos ver que están detectadas dos interfaces de red.



Recopilar la configuración de red actual


El servidor debe tener IP fija en sus dos interfaces de red.


ifconfig eth0

nos muestra Ip interna, máscara e Ip broadcast, netmask.


netstat -r

nos muestra puerta de enlace y el network.


Servidor





Asignando IP fija



Vamos a cargar los datos correspontientes.

nano -wB /etc/network/interfaces


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.113
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.253

auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255



Como se puede apreciar cada interfaz de red usa un rango diferente eth0 192.168.0.0/24 , eth1 192.168.1.0/24







reiniciamos la red

/etc/init.d/networking restart


GNU






DHCP Server

El servidor DHCP es aquel que proporciona direcciones ip dinámicas a equipos que lo soliciten.



apt-get install dhcp3-server

dns


resolver

Luego de la instalación copiamos el archivo /etc/dhcp/dhcpd.conf
cd /etc/dhcp

cp dhcpd.conf ./dhcpd.conf.old

borramos el contenido de archivo y editamos el archivo

> dhcpd.conf


nano dhcpd.conf


Linux



Y en el archivo agregamos estos datos:

authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option domain-name-servers 192.168.1.1;
option domain-name "servidor-dns";
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600000;
max-lease-time 720000;
}
#host1 {
#hardware ethernet xx:xx:xx:xx:xx:xx;
#fixed-address 192.168.1.160;
#}
#host2 {
#hardware ethernet 90:4c:e5:55:0d:6d;
#fixed-address 192.168.1.161;
#}


Si se desea asignar IP fija a algunos equipos en particular, descomentar las últimas 8 lineas y completar con datos que correspondan (IP, nombre del cliente y mac adress




Debemos editar el archivo de configuración dónde deberemos indicar en que tarjeta se quiere activar el servidor DHCP, modificando la siguiente línea:

INTERFACES="eth1"


nano /etc/default/isc-dhcp-server


dhcp

Reiniciamos el servicio

/etc/init.d/isc-dhcp-server restart





Instalamos bind 9


apt-get install bind9 dnsutils


Edita /etc/resolv.conf y modifícalo de la siguiente manera:

nameserver 127.0.0.1


bind

Reinicia el daemon de BIND.

/etc/init.d/bind9 restart


iptables


Lo que hemos hecho es transformar a localhost (127.0.0.1) en el servidor de nombres, que a través de BIND hace requerimientos a los DNS de la red.





Deshabilitar el DNS asignado por el ISP

Muchos ISP usan DHCP para asignar parámetros de red a los computadores clientes del servicio. Por omisión, el cliente DHCP reescribe /etc/resolv.conf con el DNS asignado por la red cada vez que se reinicia. Para deshabilitar la reescritura de /etc/resolv.conf, edita el archivo de configuración del cliente DHCP, generalmente /etc/dhcp/dhclient.conf y comenta del instructivo request las opciones domain-name, domain-name-servers y domain-search,

Servidor DNS a fondo







Habilitar el DNS


Edita el archivo /etc/bind/named.conf.options


En forwarders van los números IP de los servidores de nombre (DNS) en este caso los de OpenDNS
El DNS ahora consulta los DNS indicados en forwarders y mantiene una tabla local.

nano /etc/bind/named.conf.options


Servidor





Configuración de un DNS primario

Para definir un nuevo dominio y hacer que el servidor actúe como su DNS autoritativo, necesitas primero haber comprado un dominio en un registro de nombres de dominio (NIC), en este caso vamos a usar de ejemplo un dominio ficticio, ya que no poseo uno por el momento.

Edita /etc/bind/named.conf.local y agrega al final del archivo lo siguiente:

nano -wB /etc/bind/named.conf.local


zone "redinterna.net" {
type master;
file "/etc/bind/db.redinterna.net";
allow-transfer { none; };
allow-query { any; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/rev.1.168.192.in-addr.arpa";
allow-transfer { none; };
allow-query { any; };
};




GNU


Allow-transfer: aquí va la dirección de nuestro servidor esclavo, para que redireccione peticiones a la dirección que le demos.

Allow-query: aquí van las direcciones de los clientes que pueden pedir información a nuestro dns, en este caso pusimos any (cualquiera).



Ahora debemos crear los dos archivos a los que hacemos referencia en el fichero anterior.

cd /etc/bind
cp db.local db.redinterna.net
cp db.127 rev.1.168.192.in-addr.arpa




Luego vamos a modificar el primer fichero creado:

En este fichero añadiremos la lista de todos nuestros dispositivos con sus respectivas direcciones IP, haciendo las modificaciones pertinentes.

Primero modificaremos el campo SOA (Start of Authority) que hace referencia al servidor de nombres con autoridad en la zona y a la cuenta de correo del administrador encargado de administrarla, donde la arroba es reemplazada por un punto. Así pues nosotros dejaremos la línea relativa al campo SOA como sigue, prestando especial atención a no borrar los puntos finales:

nano -wB /etc/bind/db.redinterna.net

@      IN      SOA      redinterna.net.      root.redinterna.net. (


Después modificaremos el campo NS que hace referencia al servidor de nombres de la zona. Por tanto dejaremos la línea así, sin olvidar también el punto del final:

@      IN      NS      redinterna.net.

Y después ya podremos añadir los registros A (de dirección) que se corresponderán con los dispositivos conectados a nuestra red, como primer ejemplo el mismo ordenador que hace de servidor DNS:

servidor-dns      IN      A      192.168.1.1



Al añadirlos todos, el fichero debería quedar similar a este:


dns







Continuamos modificando el fichero de resolución inversa:


nano -wB /etc/bind/rev.1.168.192.in-addr.arpa


Este fichero tiene la misma estructura que el anterior, por tanto debemos modificar prácticamente las mismas cosas, empezando por el registro SOA y el registro NS, dejándolos exactamente igual que en el fichero anterior.

Lo que cambia en este fichero es que en vez de utilizar registros A utilizaremos registros PTR para resolver las direcciones IP en nombres de dominio. Así pues, para el primer registro PTR, que coincidirá también con el propio servidor DNS, añadiremos la siguiente línea:

1      IN      PTR      servidor-dns.

Nótese que en la primera columna hemos puesto el último dígito de la dirección IP de ese equipo. En este caso, puesto que el ordenador llamado servidor-dns tiene la dirección IP 192.168.1.1 pondremos el número 1 por ser el último dígito. Y además no debemos olvidarnos de los puntos que hay al final de cada nombre de host.

Cuando terminemos, nuestro fichero quedaría más o menos así:

resolver


Por último, reiniciaremos el servicio bind9 para hacer efectivas las modificaciones que hemos hecho:

/etc/init.d/bind9 restart

Linux






Probando el servidor DNS


Para ver el servidor DNS local en acción da el comando:


dig www.taringa.org

Retornará a la pantalla la consulta al DNS autoritativo del dominio www.taringa.org


dhcp

La primera consulta tardó 1097 milisegundos (Query time).



Repetir el mismo requerimiento será prácticamente instantáneo 56 milisegundos (Query time) tardó ahora. El servidor ahora consulta su propia tabla, en dónde existe guardada una entrada con la información sobre www.taringa.org y la diferencia de respuesta es apreciable.

bind



Vamos a consultar la dirección IP de nuestro servidor DNS desde el propio servidor para que haga uso del servidor DNS:

host servidor-dns.redlocal.net.com

iptables


Nótese que para hacer la consulta debemos usar el nombre completo, es decir, el nombre de host seguido del dominio.



Y para probar la resolución inversa, podemos proceder así:

host 192.168.1.1


Servidor DNS a fondo


Como vemos, el servidor DNS nos resuelve tanto la consulta directa como la inversa, esto demuestra que funciona perfectamente.

Con nuestro servidor DNS funcionando ya podemos hacer uso de él en los demás dispositivos que se conecten a la red, de tal forma que exista resolución interna de nombres y la navegación por la web vaya considerablemente más fluida.





Firewall



Este firewall sirve para proteger el servidor, descarta todos los paquetes entrantes/reenviados, permite el tráfico saliente, y acepta los paquetes en estado relacionado y establecidos.



#!/bin/sh
## Ejemplo de script para firewall entre red-local e internet
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
## poner en /etc/network/if-up.d/dns-server-firewall
## le damos permisos de ejecución
## chmod +x /etc/network/if-up.d/dns-server-firewall
## modificado por alband de Taringa
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.0/24 -s 0/0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
echo " OK . Verifique que lo que se aplica con: iptables -nL"
# Fin del script



Verificamos las reglas del firewall:

iptables -nL


Servidor






Probamos la conectividad desde un cliente

GNU

dns

resolver






_____________________________________________________________________






Fuentes de conocimiento:

http://donjuanblogo.blogspot.com/2012/04/servidor-dns-bind9.html
http://man-es.debianchile.org/bind.html
http://www.debianisfreedom.com/2012/04/instalar-un-servidor-dns-domestico-en.html
http://laesa.com.ar/2012/01/24/configurar-un-servidor-dns-con-bind9-en-ubuntu-server-yo-debian-server/
http://jh3n1redes.wordpress.com/2011/05/23/configuracion-de-dns-en-debian-squeeze/
http://www.com-sl.org/configuracion-servidor-dns-linux-debian.html

Comentarios Destacados

@danilobos83 +31
y con todo eso mijo jakeamos el pentagono?

22 comentarios - Servidor DNS a fondo

@jjpastor -4
Inténtelo, a mi me funciono
@danilobos83 +31
y con todo eso mijo jakeamos el pentagono?
@perrumo +1
lo leere despues, tus aportes siempre son buenos asíque te dejo +8 y reco
@alband
Muchas gracias amigo por valorar mi trabajo.
@gabi_bp +1
Buen trabajo +10 y fav

Top?
@tingrid +1
mis preguntas:
¿cual es el objeto o cual es la finalidad de utilizar ese servidor dns?
¿el nivel de respuesta para navegar es sumamente mas elevada que utilizar el dns de google?
¿es posible utilizar ese metodo en windows?
como utilizo internet por modem usb :¿la diferencia es abismal o iguala en velocidad a un internet adsl de 1 mega byte?
@tingrid
@alband
entiendo..... solo es funcional en linux pero en windows tienes un tutorial similar ?
@alband
@tingrid te dejo el enlace para windows:
http://support.microsoft.com/kb/814591/es
@tingrid +1
@alband

gracias capo.. sos GRANDE
@Thierry +1
+10 , groso post , que manera de renegar cuando arme un dns primario y 5 esclavos , saque algunas cosillas del post que me vinieron al pelo ...
@alband
Gracias por los puntines amigo!!
Me alegra que te sea de utilidad el aporte.
@Stiif +1
Buenísimo! Como siempre. Te dejo +10 alto post. Linux
@alband +1
Muchas gracias amigo!!
@feli6031 +1
Gracias, como siempre... un superpost
saludos
@27aBe27 +1
¡Aportazo! Muchísimas gracias. +10
@alband
Gracias a vos por visitar el post!
@5hikamarU +2
me hubiera servido hace 2 semanas, ya reprobe taller de sistemas operativos por no hacer esto
@alband +1
Agradezco los puntos que me dejaste, lamento mucho que reprobaste la materia amigo.
@piruo7 +1
Acabo de revisar el post la verdad muy completo @alband ...

Saludos.
@alband +1
Gracias amigo, la verdad que vale la pena el trabajo cuando la gente como vos pasa a comentar!!
@chapitalmala +1
Excelente, excelente, excelente !
@alband
Gracias amigo!! te estaba esperando.
@chapitalmala
@alband

Gracias a vos, por tus muy buenos aportes y ayudas !
@ElMagno90 +1
+10 excelente como siempre
@fdm214 +1
+10, te sigo! GRACIAS
@metallitico +1
+10 se ve que te esforzaste
@alband +1
Muchas gracias por valorar mi trabajo!!
@ekardian +1
Es bueno encontrar gente con ganas de compartir lo nuevo, gente con nuevas fuerzas, me recuerda a aquellos 90 cuando la red solo era para los privilegiados, ahora el conocimiento al alcance de todos... felicidades @alband
@alband
Para eso estamos amigo!!
Comentarios de esta clase son los que me impulsan a aportar cada vez más.
@mfurones +1
este es el gran primer paso que quiero aplicar, un buen servidor de dns (ya me fume el de ssh y me estoy leyendo iptables para complementar).
+10 y reco
@alband
Y lo vas a lograr compañero!!!
@Viktor894 +1
Otro Gran aporte
@alband +1
Gracias capo.