Servidor DHCP + DNS + Gateway en GNU/Linux

Escrito el 11 abril 2013 por Luis Ignacio Díaz Martínez


En el mundo empresarial es muy común encontrarse con una infraestructura informática por lo menos amplia. La red es algo que tenemos que cuidar ya que forma parte imprescindible del trabajo diario.

Si tenemos en nuestra área local más de 25 equipos tendríamos que tener un servidor DHCP y un servidor DNS en buen funcionamiento ( no obstante ya existen equipos con estos servicios embebidos como la mayoría de routers ).

La importancia de hacerlo con GNU/Linux es que tenemos más flexibilidad y a la vez más potencia para ejecutar según que cosas. En mi caso me he quedado corto en los equipos los cuales me ofrecían dichos servicios.

Así que manos a la obra! que no se diga que somos nosotros mismos los que nos cortamos nuestras alas!

Entorno

Estoy operando actualmente con un servidor Dell PowerEdge T110 con:

  • Sistema operativo: GNU/Linux ( Debian 6 )
  • Doble tarjeta de red 10/100/1000 de Intel

Esas tarjetas de red están conectadas:

  • ETH1 = 192.168.0.45 ( Internet )
  • ETH2 = 172.16.0.45 ( Local )

El servidor DHCP que montaremos dará direcciones IP a la red local.

Instalando paquetes

Principalmente vamos a tener que instalar los siguientes paquetes:

Así que bueno… a instalar!

Modificando las interfaces

Tenemos que configurar la dirección IP tanto local como externa de forma estática ya que al tratarse de un servidor no pueden ser variables por lo tanto la configuración tiene que ser algo parecido a esta:

Que contiene:

Como podemos observar tan solo tenemos un gateway que sencillamente es el que tiene la salida Internet! ir con cuidado… si no la máquina no sabrá por donde tiene que ir…

Redireccionando tráfico ( GateWay )

Este apartado está ampliado en el artículo «Servidor Gateway con Debian«!

Para que el servidor que estamos montando funcione como puerta de enlace es muy importante ejecutar lo siguiente:

Lo que realizamos con lo anterior es activar el «ip_forward» que nos servirá para realizar reenvios de de IP ( como su nombre indica ) o más bien enrutamientos dinámicos.

Después la siguiente regla «da a conocer» la red «eth1» al resto de los equipos, permitiendo así el reenvío de tráfico de una red a otra.

Importante! esto no es permanente! para aplicar esta configuración de forma permanente tendríamos que realizar un script y ejecutarlo a cada vez que se encienda la máquina!

Configurando DHCP

Pasaremos a la parte más divertida .. la configuración! veremos algunos conceptos básicos y algunos algo más avanzados que se intentarán explicar con claridad….

Fichero principal

Como podemos ver tenemos diferentes campos en la configuración del fichero principal… vamos a explicar los conceptos más generales.

La zona comentada como «Opciones DNS» la vamos a ver más tarde así que de esta no hablaré.

La zona comentada como «Tipo de DNS y LOG» sencillamente indica el tipo de DNS en el cual indicamos que será de tipo autoritativo la cual cosa quiere decir que ofrecerá los registros a las zonas de menor nivel ( o concedidas ). Y el otro campo tan solo quiere decir donde va a ir a parar el log!

Ahora llegamos a la zona importante de shared-network donde este parámetro es opción cosa que he querido introducir por si en un futuro tengo que realizar alguna que otra modificación en ACL’s.

Por lo tanto podemos ver que dentro de shared-network se encuentra el campo subnet donde se definirá la configuración la cual contendrá esa red.

Por defecto vemos que tenemos una red con IP de nivel B con una mascara de 16 bits la cual cosa está vacía porqué no quiero que se utilice… y por debajo de esta vemos que hay otra IP de nivel B con una mascara de 24 bits ( por lo tanto contiene subredes ) y sus configuraciones… las cuales creo que se sobreentienden bien.

El pool indicará la configuración de red que otorgará al cliente que lo pida!

Fijando IP al cliente ( host )

Si nos fijamos en el fichero principal anterior podemos observar que tenemos un include que hace referencia al fichero «host-fix_172.16.5». Este fichero hace referencia a las máquinas que tendrán una dirección IP reservada, queriendo decir con esto que serán tan solo para ellos, a esto se le denomina DHCP de tipo estático. 

El fichero en cuestión es el siguiente:

Que contiene el ejemplo:

Esto nos facilitará más adelante insertar nuevos equipos sin variar la configuración del fichero principal. Por ejemplo, si queremos utilizar un script para añadir nuevas máquinas lo podremos hacer de forma sencilla sin afectar a la configuración más importante.

Listar máquinas asignadas

En un futuro pienso crear un script ( como indico en un apartado dentro de este mismo artículo ) donde me mostrará el listado de máquinas que se encuentran activas… pero claro! hasta entonces… la única solución que he encontrado es la siguiente:

Donde podemos observar toda la información del equipo!

Prometo aportar algún que otro dato extra referente a este apartado…

Configuración del DNS

Cuando trabajamos con una red relativamente grande ( más de 50 máquinas por ejemplo ) necesitamos de un servidor DNS que nos ofrezca la posibilidad de relacionar una dirección IP con un nombre… para así poder tener controladas y localizadas cada una de las máquinas que forman nuestra área local.

Si configuramos de forma correcta Bind9 y DHCP podemos conseguir un tipo de direccionamiento dinámico de nombres… eso quiere decir que cuando una máquina obtenga una dirección IP por medio del servicio DHCP este lo registrará también en el DNS facilitando así al resto de la red la comunicación con el equipo por medio del nombre.

Configuración previa del sistema

Primero tendríamos que editar el fichero de configuración «resolvconf» para que escuche tan solo nuestras peticiones…

Que contendrá tan solo esto:

Nota: La dirección IP «172.16.0.15» es la de la propia máquina!

Rutas de los ficheros

Voy a modificar las rutas de los ficheros que por defecto trae bind9 sencillamente para hacerlo algo más ordenado y sobretodo lógico ya que al ser dinámico empieza a generar ficheros… y luego nadie se entera!

Necesitaremos crear un directorio «config» donde estará toda la configuración y un directorio db donde estará la base de datos:

Ahora moveremos los ficheros:

Por lo tanto tendríamos que tener algo parecido a esto:

Si puede ser… tendríamos que tener algo así!

Fichero de configuración principal

Vamos a ver ahora la configuración del fichero principal llamado «named.conf» que podemos encontrar en:

Que contiene:

Como podemos ver el fichero principal tan solo contiene inclusiones a los ficheros de configuración y a la clave de comunicación «rndc.key».

Por lo tanto este fichero no lo tendríamos que tocar a no ser que queramos incluir alguna otra «libreria».

Delegando el control DNS

Necesitamos principalmente que Bind9 acepte las peticiones y control desde otra aplicación externa… como tanto el servidor DNS como el DHCP se encuentran en «localhost» nos resultará bastante sencillo realizar esta acción editando el siguiente fichero de configuración y añadiendo al final de todo esto:

Quedando el fichero así:

Nota: El fichero nombrado como «rndc-key» sirve como llave de acceso para la comunicación de los servicios que van a interactuar con bind9, más tarde podremos ver la configuración de este.

Configurando zona local

Ahora vamos a configurar una zona local que acepte las modificaciones externas… para ello vamos a editar el fichero «local» dentro del directorio «config» como podemos ver a continuación:

Con el contenido:

En el caso que quisiéramos añadir otros dominios realizaríamos lo mismo pero cambiando el nombre del dominio ( junto con el fichero de la base de datos ) y la dirección inversa…

Nota: La zona que vemos indicada como «0.16.172» hace referencia a una zona de resolución inversa… sencillamente sirve para hacer la búsqueda de forma contraria… dando una IP nos devolverá un nombre.

Base de datos de zona

Antes hemos configurado las zonas que tendrá nuestro servidor DNS ahora tendríamos que agregar las bases de datos ( si nos fijamos indicamos un fichero donde irá a buscar dicha configuración ) por lo tanto siguiendo las referencias anteriores vamos a crear estos ficheros:

En el cual cada uno de ellos tendrá lo siguiente:

Archivo de claves «rndc.key»

Como ya he indicado anteriormente en una nota el archivo de clave «rndc.key» nos servirá como llave de acceso entre servicios permitiendo así que DNS y DHCP puedan trabajar juntos.

El fichero tendría que contener lo siguiente:

Nota: Nuestro fichero tendría que contener ya una clave lista para funcionar… así que no realizaremos ninguna modificación en este fichero.

Crear fichero «managed-keys.bind»

Realmente esto es una solución a un error retornado… que indicaba que este archivo no fué creado correctamente… así que lo he creado a mano!

Más tarde veremos que permisos tendría que tener este permiso.

Reconfigurando DHCP

Ahora tenemos que hacer unas modificaciones a nuestro fichero de configuración DHCP para que funcione conjunto el servicio de DNS… por lo tanto editamos el fichero y lo dejamos así:

Podemos ver que al principio del documento hemos introducido las líneas pertinentes a la comunicación con el servidor de DNS.

También podemos observar que el pool{} de la subred tiene asignado los campos de ddns-domainname ddns-rev-domainname cosa importante a tener en cuenta.

Fijando permisos

La verdad es que he tenido muchos problemas y todos por culpa de la falta de permisos! para ello de momento les he asignado permisos muy grandes y la verdad es que son poco seguros pero bueno… de momento necesarios. Para ello vamos a realizar lo siguiente:

Con eso no tendríamos que tener ningún problema…

Reiniciando los servicios

Ahora vamos a reiniciar los servicios para cargar y comprobar la nueva configuración…

Como podemos observar aparentemente no tenemos ningún error… pero aconsejo mirar el registro de eventos de nuestro sistema ( /var/log/syslog ) donde podremos encontrar algún que otro error… la verdad, es que para realizar este artículo me he tirado muchas horas revisando y corrigiendo fallos gracias a este fichero.

Comprobando DNS

Vamos a realizar a continuación ciertas pruebas para comprobar que nuestro servidor DNS está funcionando de forma correcta.

Para ello primero vamos a utilizar el comando nslookup que nos devolverá algunos datos básicos entre ellos el nombre del host y la dirección ip.

Esto es importante! cuando nosotros marcamos «pepe» el sobreentiende que estará dentro del dominio y por lo tanto realizará la búsqueda conjunto el dominio!

Como podemos ver… funciona correctamente!

Scripts de automatización

ToDo ( pendiente )

Tengo pendiente desarrollar unos script que me automaticen una serie de procesos que realizo o realizaré de forma constante.

Referencias


Cargando...

Comentarios: