Cómo crear un DHCP relay en Linux

Publicado el 02 agosto 2016 por Drassill
Hoy quiero traeros un pequeño artículo más orientado al mundo de las redes... El mundo de las redes es muy amplio y apasionante y tiene que contemplar un gran número de escenarios muy diversos entre sí... Uno de ellos es el hecho de que puedes tener una serie de equipos (PCs) separados de un servidor DHCP (Dynamic Host Configuration Protocol) por un PC intermedio que puede estar haciendo de firewall y/o otras tareas.  La cuestión está que generalmente queremos que haya únicamente un solo servidor DHCP, porque en caso contrario, en caso de haber cualquier fuga en el futuro, pueden haber conflictos tales como el hecho de que un equipo intente coger IP habiendo dos servidores DHCP y coja ip precisamente desde el servidor que no debe. Es por eso que existe un método que ayuda a saltar ese pequeño escoyo: El DHCP relay.

DCHP relay no es más que un proxy que redirige las peticiones DHCP recibidas al servidor DHCP real para que éste las atienda. Esto no es nada complicado; requeriría que, para empezar tuviésemos el siguiente escenario a nivel físico: Un servidor DHCP; un equipo que hará de proxy (que tendrá dos tarjetas de red), un switch y luego todos los equipos queramos conectar a dicho switch; que pueden ser 2, 10 o los que deseemos. Un pequeño ejemplo gráfico sería el de a continuación:

Lo primero que habría que hacer sería preparar un servidor DHCP; esto es tan sencillo como instalarlo desde los repositorios mediante apt-get:
apt-get install isc-dhcp-server
Aquí la configuración que uno puede aplicar puede ser muy personalizable; desde cosas muy sencillas a cosas tan especificas como la entrega de una serie de rangos de ip a unas MAC en concreto. En caso de no tener nociones sobre el funcionamiento de este servicio, una configuración muy básica que podríamos aplicar en /etc/dhcp/dhcpd.conf sería:
  1. default-lease-time 600;
  2. max-lease-time 7200;
  3. subnet 192.168.1.0 netmask 255.255.255.0 {
  4. }
  5. subnet 192.168.2.0 netmask 255.255.255.0 {
  6.   range 192.168.2.2 192.168.2.255;
  7. }

Tras aplicar nuestros cambios sería imprescindible reiniciar nuestro servicio DHCP, con el comando:
/etc/init.d/isc-dhcp-server restart
Obviamente el ejemplo anterior es eso, un ejemplo; que puede ser adaptado a la situación que mejor convenga... Teniendo ese pequeño requisito preparado, sería el turno de preparar el DHCP relay. Esto es tan sencillo como ejecutar el comando de instalación, de forma parecida a como se ha hecho con el servidor.
apt-get install isc-dhcp-relay
A diferencia del servidor DHCP, el relay posee un asistente de configuración que hará que el proceso sea mucho más automatizado que su predecesor. En caso de equivocarnos durante el asistente no pasaría nada, pues los parámetros introducidos se encontrarían dentro del fichero de configuración /etc/default/isc-dhcp-relay.
El primer paso y más importante sería la especificación de la dirección ip del servidor DHCP REAL; es decir, la dirección ip a la que tendremos que redirigir las peticiones DHCP.

Tras eso, sería muy importante especificar en qué interfaz de red (ojo, interfaz de red, no dirección ip) deseamos estar "escuchando" las peticiones DHCP que queremos luego redirigir... Aquí habría que poner el nombre de la interfaz de red que estaría conectada a la red que va a solicitarnos ips para que sean entregadas por DHCP... El nombre de la interfaz puede ser eth0,eth1... En mi caso en particular sería eth0.

Por último, pero no por ello menos importante habría que especificar qué parámetros especiales asignarle al servicio DHCP-relay. Al arrancar un servicio se le pueden poner parámetros especiales que pueden aportar más o menos funcionalidades. En este caso en concreto nos interesa que se esté ejecutando en segundo plano, es decir que se ejecute como un demonio; así que le especificaremos el parámetro -D.

Al tener que hacer de "proxy" y tener que transferir información de una interfaz a otra, el equipo que haga de relay, es indispensable que el equipo tenga activada la función ip_forward, tal y como se hace cuando se quieren hacer tareas de NAT. Este parámetro está alojado a nivel de kernel, con lo que se encuentra dentro del directorio proc. La ruta completa sería: /proc/sys/net/ipv4/ip_forward
Ahora únicamente tendríamos que tener equipos que estuviesen preparados para hacer de clientes DHCP; tanto en Windows como en Linux, los equipos de escritorio estarían preparados para recibir ip automáticamente desde un servidor DHCP, si bien en Linux podríamos asegurarnos comprobando la existencia del fichero dhclient.conf dentro del fichero /etc/dhcp.
Con esto ya tendríamos nuestro DHCP relay preparado, pudiendo redirigir toda petición DHCP a un servidor real.
Espero que os haya resultado útil.
Saludos.