miércoles, 12 de octubre de 2011

BIND9 Zonas maestras

Hoy vamos a ver como configurar un servidor DNS en linux (en windows es la cosa mas fácil del mundo), para eso vamos a suponer que trabajamos en una empresa, en la cual tenemos una serie de maquinas que son las que proporcionan servicios al exterior y también tendremos otras maquinas por 4 departamentos, teniendo en cada departamento unas 8 maquinas.

El ejemplo quedaría algo como esto:

- Servidor web 1: 192.168.100.100
- Servidor web 2: 192.168.100.101
- Servidor web 3: 192.168.100.102
- Servidor web 4: 192.168.100.103
- Servidor ftp 1: 192.168.100.105

- Departamento de Administración:
  • Equipo 1: 192.168.2.1
  • Equipo 2: 192.168.2.2
  • Equipo 3: 192.168.2.3 
  • Equipo 4: 192.168.2.4  
- Departamento de  Marketing:
  • Equipo 5: 192.168.3.5
  • Equipo 6: 192.168.3.6
  • Equipo 7: 192.168.3.7 
  • Equipo 8: 192.168.3.8
- Departamento de Atención al cliente:
  • Equipo 9: 192.168.1.9
  • Equipo 10: 192.168.1.10
  • Equipo 11: 192.168.1.11 
  • Equipo 12: 192.168.1.12
- Departamento de Contabilidad:
  • Equipo 13: 192.168.4.13
  • Equipo 14: 192.168.4.14
  • Equipo 15: 192.168.4.15 
  • Equipo 16: 192.168.4.16
Bueno, pues con estos equipos hay ejemplo para dar y vender.

Vamos al grano, en una maquina, yo voy a usar una debian totalmente limpia, instalamos el BIND9.

Para instalar (como se supone que no tenemos entorno gráfico :P), pues tecleamos:

aptitude update --> Con esto se actualizaran los repositorios.
aptitude install bind9 --> Se instalaran solo 2 paquetes (esto me choco mucho)

Una vez instalado, como va a ser nuestro Servidor DNS, tenemos que configurarlo para que nos resuelva nuestro propio DNS, para ello editamos el archivo /etc/resolv.conf:

nano /etc/resolv.conf

Y dejar solo la siguiente linea:

nameserver 127.0.0.1


Foto 1: /etc/resolv.conf



Esto significa que el servidor al que vamos ha hacer las peticiones somos nosotros mismos.

¿Y que pasa cuando en nuestro Servidor DNS no puede ofrecer la respuesta?

Pues fácil, en las opciones del servidor, indicamos un forward o lo que viene a ser lo mismo el siguiente servidor al que tiene que preguntar.

Para hacer esto hay que editar el archivo /etc/bind/named.conf.options


nano /etc/bind/named.conf.options

Y en este archivo descomentamos y dejamos así:

forward {
      8.8.8.8;
      };

Foto 2: Forwarders.


Ahora cuando le pidamos dominios que no tenemos nosotros, el servidor DNS de google nos los dirá, no es obligatorio poner el Servidor DNS de google, puedes poner el de tu ISP o el de quien tu quieras.

Continuamos con el siguiente paso, que es crear la zona que nos va a dar servicio, para ello editamos el archivo /etc/bind/named.conf.local:

nano /etc/bind/named.conf.local

y en este archivo tenemos que poner algo como esto:


zone "necromals.com" { --> Esto seria el comienzo y entre las comillas hay que poner el nombre de nuestro dominio.

type master; --> Con esto le indicamos el tipo de servidor que estamos preparando, en este casto maestro, pero tenemos otros como esclavo....

file "/etc/bind/db.necromals.com"; --> Aquí le indicamos en que archivo tendrá toda la configuración de la zona, osease donde tendrá el nombre de las maquinas y sus ips.

}; --> Hay que cerrar las llaves xD, el ";" se utiliza para indicar que se acabo la linea, si da fallos, siempre hay que mirar este tipo de cosas.

Foto 3: Nueva zona.


Bueno ahora viene lo jodido no, lo siguiente. El archivo de configuración de la zona.

Pos ale al tajo.....

Editamos el archivo /etc/bind/db.necromals.com al abrirlo con el nano o cualquier editor, en teoría debería grabarse donde le estamos indicando (siempre y cuando las carpetas estén creadas, para crear carpetas mkdir).

nano /etc/bind/db.necromals.com

Bueno ahora vamos a ver que lineas podemos tener en este archivo.


$TTL 604800 --> Es un tiempo de vida que le da a los registros.


$ORIGIN necromals.com. --> Establece el nombre de dominio por omisión, osease que si nos dejamos en el archivo un dominio al final sin un punto pondrá esto.

En el siguiente registro (el primero en realidad) tenemos que decir quien tiene la autoridad de esta zona.

Para ello se pone lo siguiente:

<nombre de dominio> IN SOA <servidor> <responsable> (<parametros>)
necromals.com. IN SOA ns.necromals.com. root.localhost (parametros)
en las siguientes lineas van el numero de serie, el periodo de refresco, la frecuencia de reintentos, el tiempo de expiracion y el TTL ninimo.

El siguiente registro es un NS, que indica en una zona que servidores tienen autoridad a responder.
<nombre de dominio> IN NS <servidor con autoridad>
necromals.com. IN NS ns.necromals.com.

A partir de aqui los registros son mas sencillos.

Tenemos el registro A, que es el que nos va a dar a un dominio que ip le pertenece.

<nombre de dominio> IN A <dirección IP>

ns.necromals.com. IN A 192.168.100.253 --> con esta linea le estamos diciendo que nuestro servidor dns (el que en el registro ns le da privilegios para poder responder en esta zona) tiene la ip 192.168.100.253

Para uno de nuestros servidores web podríamos poner algo así como:

www.necromals.com. IN A 192.168.100.100 --> con este registro, nuestro server con el dominio necromals.com seria el 192.168.100.100, si mirais la foto de abajo con la configuración que tengo de esta zona, podrás ver que tengo varios servidores web con 4 ips distintas, esto es para hacer un balanceo de carga entre los 4 servidores.

Otro registro, muy útil, es el registro CNAME, este nos permite cambiar un dominio por otro.

<nombre de dominio> IN CNAME <nombre de dominio real>

Por ejemplo google:
www.google.es. IN CNAME www.google.com.

Nos faltaria añadir los tipos de registro MX, que son los registros que consultan los servidores de correo para conocer la IP de otros servidores de correo.

Estos registros a parte del IN MX tienen una cifra numérica, esto indica cuando hay varios servidores de correo quien es el que tiene prioridad.

<nombre de dominio> IN MX 20 <Dirección IP>

mail1.necromals.com. IN MX 10 192.168.100.104

Dentro de este archivo, a parte de estos registros también podemos poner directivas.

La forma de explicar una de ellas, que es $GENERATE, es muy simple.
Si tenemos el departamento de administracion que tienen una serie de equipos, para darles ip tendriamos que hacer lo siguiente:

equipo1.administracion IN A 192.168.2.1
equipo2.administracion IN A 192.168.2.2
equipo3.administracion IN A 192.168.2.3
equipo4.administracion IN A 192.168.2.4

En este caso es mas o menos simple porque solo hay que poner 4, pero y si nuestro departamento tiene 100 equipos, pues que nos morimos escribiendo lo mismo todo el rato.

Para ello tenemos la directiva &GENERATE, esta nos permite dar ip a todos esos equipos con solo poner una linea.

&GENERATE 1-4 equipo$.administracion IN A 192.168.2.$

Creo que la linea se entiende de sobras, pero la explico un poco.

&GENERATE --> es la directiva.

1-4 --> es el intervalo de números que pueden cambiar.

equipo$administración IN A 192.168.2.$ --> seria un registro normal de A pero cambiando los números que nos interesan que cambien por el símbolo "$".

Otra directiva, es &INCLUDE: con esta directiva, llamaríamos a otro archivo, en el cual tendríamos mas registros. Para mi sinceramente esta directiva no tiene mucho sentido.

&INCLUDE <ruta del nuevo archivo a incluir>

&INCLUDE /etc/bind/db.ayuda

En la siguiente foto se muestra como quedarían los registros para nuestro ejemplo:

Foto 4: Registros
En verdad, para entender todo esto muy bien, tendremos que leer este articulo varias veces y practicar un poco.

Para probar, podemos utilizar cualquier maquina, siempre que este dentro de la misma red, y tener en el archivo /etc/resolv.cnf el primer nameserver con la ip de nuestro servidor dns.

Cuando tengamos eso, solo tenemos que poner un dig y el nombre que queramos. Por ejemplo:

dig equipo13.contabilidad.necromals.com

con esto una de las lineas nos dira la ip, quien nos la puede ofrecer y mas cosas, pero esto del dig, me lo reservo para otro post.

Saludos by NECROMALS

No hay comentarios:

Publicar un comentario