Page cover

DHCP con Ubuntu

El servicio por defecto de Ubuntu para el dhcp es el isc-dhcp-server que vamos a utilizar en la práctica.

Vamos a montar una práctica donde dos máquinas virtuales, una servidor y otra cliente se den servicio de DHCP la una a la otra.

Requisitos previos

  • Dos MV:

    • Una con Ubuntu Desktop 22.04 y un adaptador de red:

      • red NAT sin DHCP

    • Otra con Sistema operativo cliente y un adaptador de red:

      • Red interna

Actualizar e instalar paquetes

Actualizamos los repositorios de nuestro sistema:

sudo apt update

Una vez hecho esto, procedemos a instalar el paquete isc-dhcp-server:

sudo apt install isc-dhcp-server

En caso de error prueba con un sudo apt upgrade

Configurar DHCP

Planificaremos para nuestra configuración una máquina Ubuntu server con la siguiente información:

Red: 10.0.0.0/24
Máscara: 255.255.255.0
IP server: 10.0.0.5
Rango de Ips: 10.0.0.10 10.0.0.50
DNS: 10.0.0.5
Gateway: 10.0.0.1 //el GW de salida de la red NAT
Broadcast: 10.0.0.255 
Tiempo de arrendamiento (lease-time): 600s

Primero revisemos que adaptadores de red tenemos disponibles en nuestra MV, aparecen tres:

  • lo: dirección de loopback 127.0.0.1/8

  • enp0s3: actualmente asignado mediante red NAT pero lo cambiaremos a IP fija.

Configuración de servicio DHCP

Edita el archivo de configuración de la interfaz de red en /etc/default/isc-dhcp-server para especificar en qué interfaz debe escuchar el servidor DHCP. Abre el archivo en un editor de texto:

sudo nano /etc/default/isc-dhcp-server

Asegúrate de que la línea INTERFACESv4 esté configurada para la interfaz que estás utilizando. Por ejemplo:

INTERFACESv4="enp0s3"

Configuración de una red en DHCP

La información antes mencionada la dispondremos dentro de los archivos de configuración del servicio, para editar el fichero de configuración de nuestro servidor DHCP:

Antes de editar el archivo procedemos a realizar una copia de seguridad:

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.BKP

Para luego editar el archivo con nano:

sudo nano /etc/dhcp/dhcpd.conf

Una vez dentro lo escribiremos de tal forma:

#Para tener una referencia
option domain-name "alexdns.local";
option domain-name-servers ns1.alexdns.local;

default-lease-time 600;
max-lease-time 7200;

authoritative;

subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.10 10.0.0.50;
option routers 10.0.0.1; #con la Ip de GW de antes
option broadcast-address 10.0.0.255; #lo mismo con el broadcast
option domain-name-servers 10.0.0.5; #lo dejaremos configurado para poder usarlo como DNS

}

Si quiere asegurarte que el archivo de configuración del servidor DHCP (/etc/dhcp/dhcpd.conf) está correctamente configurado y sin errores de sintaxis puedes verificar la sintaxis del archivo con el siguiente comando:

sudo dhcpd -t

Configuración de varias subredes

El Objetivo ahora es configurar el servidor DHCP para manejar múltiples subredes, útil en redes grandes con diferentes segmentos, para ello seguiremos los mismos pasos que antes pero modificaremos el archivo /etc/dhcp/dhcpd.conf

#Vamos a trabajar con la siguiente configuración:
IP server/DNS: 10.0.0.5
Máscara: 255.255.255.224

    Subred1 (La subred del servidor)
    IP red: 10.0.0.0/27
    Rango: 10.0.0.1 -- 10.0.0.30
    Broadcast: 10.0.0.31
    
    Subred2
    IP red: 10.0.0.32/27
    Rango: 10.0.0.33 -- 10.0.0.62
    Broadcast: 10.0.0.63
    
    Subred3
    IP red: 10.0.0.64/27
    Rango: 10.0.0.65 -- 10.0.0.94
    Broadcast: 10.0.0.95

En el archivo /etc/dhcp/dhcpd.conf, agrega configuraciones para varias subredes:

subnet 10.0.0.32 netmask 255.255.255.224 {
  range 10.0.0.33 10.0.0.62;
  option routers 10.10.0.34;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

subnet 10.0.0.64 netmask 255.255.255.224 {
  range 10.0.0.65 10.0.0.94;
  option routers 10.10.0.65;
  option domain-name-servers 1.1.1.1;
}

Ahora debemos configurar un DHCP Relay para reenviar solicitudes DHCP entre subredes cuando el servidor DHCP no está en la misma red que los clientes.

  1. Instala el servicio de retransmisión:

    sudo apt install isc-dhcp-relay
  2. Configura el archivo /etc/default/isc-dhcp-relay con la dirección del servidor DHCP y las interfaces que se usarán para reenviar las solicitudes:

    SERVERS="10.0.0.5"
    INTERFACES="enp0s3"
    OPTIONS=""
  3. Reinicia el servicio y verifica que las solicitudes DHCP se reenvíen al servidor apropiado desde otra subred.

🚧 Configuración de un servidor DHCP failover (alta disponibilidad)

Vamos a mirar que en caso de fallo de servidor, tener un entorno de alta disponibilidad para DHCP, con dos servidores que puedan operar en modo activo/pasivo.

Primero vayamos a simular la caída del servidor DHCP y luego recuperarlo sin interrumpir a los clientes que ya han recibido una IP:

  1. Apaga el servidor DHCP temporalmente:

    sudo systemctl stop isc-dhcp-server
  2. Monitoreamos el comportamiento de los clientes que intentan renovar su IP durante el tiempo de arrendamiento.

  3. Reactiva el servidor y verifica que los clientes puedan renovar correctamente sus direcciones IP:

    sudo systemctl start isc-dhcp-server
  4. Ahora sí, configuremos el archivo /etc/dhcp/dhcpd.conf en ambos servidores para establecer el modo failover, este código lo pondremos en nuestro servidor primario:

    failover peer "dhcp-failover" {
      primary;  # en el servidor primario
      address 10.0.0.5;
      port 519;
      peer address 10.0.0.50; #Ip del servidor secundario
      peer port 519;
      max-response-delay 60;
      max-unacked-updates 10;
      load balance max seconds 3;
      mclt 3600;
      split 128;
    }
  5. Configura el segundo servidor como secundario con las configuraciones que hemos visto en anteriores puntos.

  6. Verifica que ambos servidores puedan compartir el estado de los clientes DHCP simulando el entorno de nuevo.

Revisar servicios de red

Reinicia el servicio DHCP para aplicar los cambios:

sudo systemctl restart isc-dhcp-server
sudo service isc-dhcp-server restart

Para asegurarte de que el servicio DHCP se inicie automáticamente al arrancar, ejecuta el siguiente comando:

sudo systemctl enable isc-dhcp-server

Además, podemos ver en el servidor si el cliente tiene una dirección DHCP. Esto lo podemos ver en en el archivo de "arrendamientos":

cat /var/lib/dhcp/dhcpd.leases

Última actualización