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.
Instala el servicio de retransmisión:
sudo apt install isc-dhcp-relay
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=""
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:
Apaga el servidor DHCP temporalmente:
sudo systemctl stop isc-dhcp-server
Monitoreamos el comportamiento de los clientes que intentan renovar su IP durante el tiempo de arrendamiento.
Reactiva el servidor y verifica que los clientes puedan renovar correctamente sus direcciones IP:
sudo systemctl start isc-dhcp-server
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; }
Configura el segundo servidor como secundario con las configuraciones que hemos visto en anteriores puntos.
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