Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

lunes, 15 de junio de 2015

Cómo crear un servidor DHCP en Linux

Hoy vengo a hablaros sobre cómo crear un servidor DHCP en Linux. DHCP (Dynamic Host Configuration Protocol) no es ni más ni menos que un servicio encargado de entregar de forma dinámica direcciones ip a aquellos equipos que estén pidiendo una y cumple una función vital en el día a día de todos los usuarios sin que muchos se den cuenta: Cuando un usuario se conecta a una red wifi, es el DHCP quien se encarga de gestionar la entrega de ip al equipo que se acaba de conectar; al igual que pasa en una red local en la que uno conecta cualquier equipo a esta red y sin tener que hacer nada ya es capaz de salir a Internet. En resumidas cuentas hablaríamos de una ip que ha sido asignada de forma automática por un servidor, evitando así cualquier intervención por parte del usuario final.
Este proceso obviamente consta de dos o más participantes: El servidor DHCP hace las veces de gestor de direcciones ip y posee la capacidad de no sólo entregar direcciones ip; sino que de memorizar a quien ha sido entregada dicha dirección. Obviamente esto no sería posible si los equipos que se conectan a la red no "pidiesen" a gritos una dirección ip con la que poder comunicarse con el resto; ya sea en un equipo Linux o Windows, tienen que estar configurados para ser clientes DHCP para poder pedir una dirección ip; cosa para la que están todos configurados por defecto. El proceso de obtención de ip consta de 4 pasos:
  • DHCP Discovery: Tan pronto cómo un equipo configurado parar ser cliente DHCP se conecta a una red; éste solicita un servidor DHCP que le entregue una ip. Esta petición no va a un servidor DHCP en concreto con lo que en caso de haber más de un servidor DHCP en la misma red, la petición les llegaría a ambos servidores. Es por ello que la existencia de más de un servidor DHCP en la misma VLAN o red resulta peligrosa y/o problemática.
  • DHCP Offer: Una vez el servidor DHCP recibe la petición de ip desde un equipo; le envía un paquete con una serie de parámetros de red, los cuales incluyen la ip, la máscara de red y la MAC del servidor (entre otros).
  • DHCP Request: Si el cliente ha recibido el paquete "offer" exitosamente, éste revisa los parámetros que el servidor le ha enviado y le solicita al servidor la ip que éste le ha ofrecido.
  • DHCP Acknowledge: Por último, si el servidor ha recibido el paquete DHCP Request exitosamente, éste envía un paquete DHCP ACK (abreviación de acknowledge) al cliente; paquete que simplemente consta de una confirmación de recepción del "request". Con dicha verificación realizada, el servidor añade la dirección ip y física del cliente a su lista de clientes y el cliente configura su tarjeta de red con los parámetros de red que se han negociado durante el proceso offer y request.
Una imagen que explicaría este proceso de forma simple sería la siguiente:


Con estos conceptos estaríamos listos para proseguir a la parte de la instalación y configuración del servidor DHCP en un sistema Linux. Para ello, lo primero que habría que hacer es instalar el paquete que nos permitirá que nuestro sistema sea capaz de actuar cómo servidor DHCP; por fortuna solo se trata de un paquete, el cual está incluido en los repositorios oficiales de cualquier sistema operativo, ya esté basado en Debian o en Red Hat. Para instalar el software en cuestión habría que escribir en la consola:

En Debian:

  1. apt-get install isc-dhcp-server

En Red Hat:

  1. yum install dhcp

Una vez instalado el software, solamente faltaría configurarlo. Existen varios tipos de configuraciones; algunos más básicos que otros pero todos igual de funcionales. Aún así, antes de meternos en el reparto de direcciones ip, conviene tener presentes tres parámetros globales muy importantes:
  • Default-lease-time: Es el número de segundos que tiene validez la ip entregada; Dicho número de segundos es asignado al cliente que recibe la ip para que así, en caso de que el cliente no tenga dicho número asignado, posea uno. Una vez pasado dicho tiempo, el cliente tendría que preguntar que realizar el proceso de petición de ip de nuevo con el fin de renovar la validez de ésta. El valor por defecto es 600 segundos.
  • Max-lease-time: Es el número de segundos que tiene validez la ip entregada para el servidor. Pasado dicho tiempo, si el cliente no ha renovado la ip o no la está usando debido a que el equipo está apagado y/o ya no está conectado a la red; la ip del cliente cómo su MAC son borrados de la lista de direcciones almacenada en el servidor. El valor por defecto es de 7200 segundos.
  • Authoritative: Especifica que este servidor DHCP tiene sobre el resto. Esto hace que en teoría, en caso de haber más de un servidor DHCP en la misma red, aquel que tenga el parámetro Authoritative tenga prioridad sobre el otro, pero desafortunadamente no es un parámetro demasiado fiable. En este caso no existen un valor por defecto; se trata de añadir este valor al fichero o no.
Un ejemplo de un DHCP muy simple, pero que bastaría para que los equipos que reciban ip se comuniquen con el resto sería:


Esta configuración es muy básica y no es funcional; pero sirve cómo un DHCP de pruebas. Ahora veremos cómo mejorar esta configuración, pero antes vamos a revisar cada uno de estos parámetros:
  1. Subnet: Este parámetro especificaría el rango de red en el que se trabajaría; esto viene bien a la hora de trabajar con distintas VLANes y simplemente habría que asignar la subred sobre la que se trabaja. En una red local del hogar por ejemplo, la subred sería 192.168.1.0
  2. Netmask: También conocida como mascara de red. Para entender este parámetro hay que tener algunas nociones de redes pero a grandes rasgos, sería el factor que determinaría el rango de equipos con el que sería capaz de comunicarse y entregar ip.
  3. Range: Aquí habría que establecer el rango de red que abarcaría el DHCP. Todo DHCP posee un rango de direcciones que puede otorgar a sus clientes. A mayor el rango, mayor el número de clientes al que puede dar servicio.
  4. Option routers: Esto sería nada menos que la puerta de enlace; Sin ésto, los equipos no tendrían posibilidad de acceder a Internet.
Esto puede parecer funcional, pero no es así. Cualquiera que haya recibido los parámetros de este DHCP podría comunicarse con el exterior, pero de forma muy aparatosa e ineficaz, pues aunque podrían comunicarse con la ip (por ejemplo) 8.8.8.8, que sería la ip del DNS de google, no serían capaces de navegar por Internet con normalidad, pues no tienen la capacidad de resolver nombres. Para lograr solventar dicho inconveniente habría que modificar un poco la configuración anterior para que aquellos que reciban ip no tengan problemas:

El cambio simplemente radica en añadir una línea llamada option domain-name-servers. Dicho parámetro establece uno o varios DNSs, y con ésto ya estarían los clientes listos para navegar por internet. Aún así se puede mejorar la configuración tal para que sea más funcional. Una configuración más habitual y funcional sería ésta:


Cómo podéis ver, se puede especificar el número de segundos que tienen validez las ips entregadas en cada subred de forma personalizada. En caso de asignar un valor específico en esta sección, los valores default-lease-time y max-lease-time establecidos en los parámetros generales no tendrán validez y serán estos los que tendrán prioridad en dicha subred.

Con esto ya tendríamos las nociones generales de cómo crear un DHCP, pero existen algunas opciones muy interesantes que pueden resultar útiles en muchos casos; especialmente dos de ellas: Los fixed-address y los spoofs mediante MAC.

El concepto de fixed-address es muy sencillo. Simplemente se trata de asignar una ip específica a un equipo en concreto; para ello se usa la MAC (Dirección física) de la tarjeta de red del equipo cliente en cuestión y así uno se asegura de que dicho equipo siempre tendrá esa ip. Sería algo parecido que asignarle a dicho equipo una ip estática, con la diferencia de que éste depende del servidor DHCP para obtener la ip. Un pequeño ejemplo de una ip fija o fixed-address sería el siguiente:


El concepto de spoofs de MAC se basa en la distribución de una serie de rangos de ips por grupos de dispositivos. Dichos grupos se distinguen entre sí gracias a las MAC. Eso es debido a que aunque todas las MAC son únicas, siguen un patrón o estándar y concretamente los 3 primeros campos de la MAC (véase que todas las MAC se componen de 6 campos) hacen referencia al fabricante del dispositvo. Con lo que se pueden diseñar spoofs dependiendo del fabricante del dispositivo con el fin de realizar diferentes repartos. Para crear un grupo de dispositivos habría que crear una clase tal que así:

 
Con dicho clase creada, simplemente habría que asociarla con un rango de ips en concreto mediante un concepto llamado pool, obteniendo así la distinción de rangos deseada. Este sería el fichero de configuración final siguiendo todo lo citado anteriormente:

  1. default-lease-time 600;
  2. max-lease-time 7200;
  3. authoritative;
  4. host test{
  5.   hardware ethernet 08:00:27:03:de:fe;
  6.   fixed-address 192.168.1.100;
  7. }
  8. class "grupo" {
  9.   match if substring (hardware, 1, 8) = 08:00:27:;
  10. }
  11. subnet 192.168.1.0 netmask 255.255.255.0 {
  12.   range 192.168.1.2 192.168.1.99;
  13.   option domain-name-servers 8.8.8.8;
  14.   option routers 192.168.1.1;
  15.   default-lease-time infinite;
  16.   max-lease-time infinite;
  17. pool {
  18.         range 192.168.1.101 192.168.1.200;
  19.         allow members of "grupo";
  20. }
  21. }

Con esto ya tendríamos las nociones para crear nuestro propio servidor DHCP.

Espero que os sea útil.

Saludos cordiales.

No hay comentarios :

Publicar un comentario