Servidor de DNS para direcciones locales y forwarding a otro DNS

Pues venga, otro manualillo así rapidillo de como configurar un servidor de nombre de dominios (que ya iba pregonando hace un par de días).

¿Para que sirve un servidor de DNS, y porque montarlo de forma que resuelva nombres locales? ¿y porqué hacer un forwarding?

Pues la respuesta a la primera pregunta, es para que no tengas que ir recordando todos las ip de las maquinas que tenemos en la red, es mucho mas fácil recordar sus nombres :)
por ejemplo, cuando hagamos ping a laservidora, automáticamente nos responderá con la ip que le corresponde.

La respuesta a la segunda es que nos encontramos dentro de una red de guifi.net y sólo podemos salir a internet a través de un proxy http. Las peticiones por el puerto 53 nunca responderán, para ello tendremos que hacer un forwarding de las peticiones DNS a un DNS dentro de la red de guifi.net.

Empezaremos instalando bind9, el servidor de nombre de dominios por excelencia.

# apt-get install bind9

A continuación editaremos el fichero /etc/bind/named.conf para decirle que solo nos interesa la configuración local:

# mv /etc/bind/named.conf{,.old}
# vi /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
//include "/etc/bind/named.conf.default-zones"; #comentamos esta línea

luego en el fichero named.conf.options, definiremos las redes que cubriremos además de definir el dns forwarding (este se podria obviar, si en las maquinas cliente tenemos un DNS secundario, pero por contra esto implicaria una mayor respuesta a la hora de resolver DNS).

# mv /etc/bind/named.conf.options{,.old}
# vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";

auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
listen-on { 127.0.0.1; 192.168.1.0/24; };

forwarders {
10.138.27.194;
};
};

Ahora será necesario definir las zonas y las zonas inversas.
Las zonas servirán para indicar un nombre de dominio a qué ip corresponde, con las inversas, qué ip corresponde a qué nombre de dominio (ya que los servidores internamente se hablan por ips, no por nombres de dominios).

Para ello en el fichero /etc/bind/named.conf.local indicamos donde se encuentran estos ficheros

# mv /etc/bind/named.conf.local{,.old}
# vi /etc/bind/named.conf.local
zone "hs-bcn.local" IN {
// this is the authoritative server for hs-bcn
type master;
file "/etc/bind/local.hs-bcn";
};

zone “1.168.192.in-addr.arpa” {
// this is the authoritative server for the 192.168.1.0 network
type master;
file “/etc/bind/revp.192.168.1”;
};

nuestro dominio se va a llamar hs-bcn.local.

a continuación definimos la configuración para la zona directa

# vi /etc/bind/local.hs-bcn
;
; dns zone for for hs-bcn.local
;
$ORIGIN hs-bcn.local.
$TTL 1D
; any time you make a change to the domain, bump the
; "serial" setting below. the format is easy:
; YYYYMMDDI, with the I being an iterator in case you
; make more than one change during any one day
@ IN SOA laservidora hostmaster (
200912253 ; serial
8H ; refresh
4H ; retry
4W ; expire
1D ) ; minimum
; laservidora.hs-bcn.local serves this domain as both the
; name server (NS) and mail exchange (MX)
NS laservidora
; define domain functions with CNAMEs
;www CNAME laservidora
; just in case someone asks for localhost.schroder.net
localhost A 127.0.0.1
; our hostnames, in alphabetical order
guifi A 192.168.1.20
laservidora A 192.168.1.30
router A 192.168.1.1

y la inversa

# vi /etc/bind/
;
; reverse pointers for 192.168.1.0 subnet
;
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 1D
@ IN SOA laservidora.hs-bcn.local. hostmaster.hs-bcn.local. (
200912253 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)

NS laservidora.hs-bcn.local.
A 192.168.1.30
; define the authoritative name server
NS laservidora.hs-bcn.local.
; our hosts, in numeric order
1 PTR router.hs-bcn.local.
20 PTR guifi.hs-bcn.local.
30 PTR laservidora.hs-bcn.local.

Si es la primera vez que ves un fichero de estos lo mas seguro es que te suene a chino, pero poco a poco los irás entendiendo :) esta es la configuración actual en la rimaia, prueba de añadir al DNS las maquinas de tu red :)
El serial deberás especificar un numero unico, se pone como ejemplo la fecha de creación del DNS.

A continuación reiniciamos el servidor de DNS para comprobar que toda la configuración es correcta.

# /etc/init.d/bind9 restart

Si falla algo, el servicio no se iniciará, y deberemos mirar en los logs cuál es el problema:

# tail /var/log/syslog

Si todo es correcto, para hacer pruebas cojemos un ordenador cualquiera de nuestra red y en /etc/resolv.conf podemos esta configuración:

# vi /etc/resolv.conf
search hs-bcn.local
nameserver 192.168.1.30
nameserver 10.138.27.194
nameserver 10.139.7.4

a continuación para comprobar que funciona:

# nslookup laservidora
Server: 192.168.1.30
Address: 192.168.1.30#53

Name: laservidora.hs-bcn.local
Address: 192.168.1.30

Si nos sale un output de este tipo:

# nslookup laservidora.hs-bcn.local
;; Got SERVFAIL reply from 192.168.1.30, trying next server
;; Got SERVFAIL reply from 192.168.1.30, trying next server
Server: 10.138.27.194
Address: 10.138.27.194#53

es que llega al servidor de DNS pero este no está funcionando correctamente. Revisa porfavor la configuración.

Para comprobar que la redirección de DNS del servidor está funcionando:

# nslookup nusepas.com
Server: 192.168.1.30
Address: 192.168.1.30#53

Non-authoritative answer:
Name: nusepas.com
Address: 91.121.183.218

Si no está funcionando correctamente, además que tardará mucho mas, nos saldrá que quien ha resuelto el nombre del DNS es el siguiente servidor definido en /etc/resolv.conf.

# nslookup nusepas.com
Server: 10.138.27.194
Address: 10.138.27.194#53

Non-authoritative answer:
Name: nusepas.com
Address: 91.121.183.218

Ahora ya sólo falta configurar el servidor de DHCP para que configure automáticamente el fichero /etc/resolv.conf y defina el search nombrededominio y añada la ip del servidor que acabamos de configurar como DNS primario.

7 Comments

  1. Pingback: cliente misterioso

  2. ¿Y para conseguir que mi dns resuelva las peticiones que llegan a mi router desde internet que es lo que deberia de hacer. ?

    Tengo la ip dinámica con mi proveedor, y un dominio que apunta a mi ip configurada con noip, pero si llega una petición desde internet el DNS solo conoce las direcciones locales, con lo que no me resuelve nada. Tiene que haber alguna manera, y que no sea asignar una ip de internet a cada una de las máquinas de mi red.

    Respon
  3. Hola, me parece bastante útil. Si os interesa he creado un comic, que pienso de forma amena enseña como configurar debería configurarse los DNS corporativos para que los clientes puedan resolver tanto nombres corporativos como nombres de Internet. Véase http://on.fb.me/1eZjJ9a

    Respon
  4. Hola buenas!
    En mi caso quiero un dns local que es por ejemplo 10.0.0.7 y de secundario el dns de google para que me resuelva las ips de “internet”. Mi dns solo resuelve direcciones en plan subdominio1.midominio.com..

    forwarders que dns seria? el de google el 8.8.8.8, no?

    He hecho pruebas desde un cliente pero me da un error que pone “got recursion not avaible 10.0.0.7 trying next server”. Sin embargo si quito del equipo cliente el dns de google el 8.8.8.8 y dejo solamente mi dns 10.0.0.7 si que me responde bien el nslookup….
    Por qué? :_(

    Respon
  5. Hola, buenos días.

    Si el servidor DNS está en la red 192.168.1.0, ¿Puedo añadir un registro A a un servidor web con IP 172.168.1.10 por ejemplo?

    Saludos

    Respon

Respon a Joaquin Cancel·la les respostes

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.