Instalación y configuración de un servidor DHCP en Ubuntu y Webmin

Instalación y configuración de un servidor DHCP en Ubuntu y Webmin

Aprende a montar un servidor DHCP con isc-dhcp-server en Ubuntu y configurarlo de forma gráfica con Webmin. Incluye red interna, asignación dinámica de IPs, reservas fijas y errores comunes.

FECHA:
ACTUALIZADO:
AUTOR:Jorge Beneyto Castelló
LECTURA:10 MINUTOS DE LECTURA

¿Te imaginas tener que ir a cada equipo de tu red a ponerle la IP a mano? Eso es justo lo que te ahorra un servidor DHCP: tú defines un rango una vez y todos los clientes se configuran solos al arrancar. En esta guía monto un servidor DHCP con dos máquinas virtuales en VirtualBox, asigno una IP fija a la tarjeta interna del servidor y lo configuro todo desde Webmin, incluso con reservas de IP fijas por MAC.

🤔 ¿Qué vamos a conseguir?

  • Dos máquinas virtuales en VirtualBox comunicándose por una Red Interna.
  • Una IP fija en la tarjeta interna del servidor para que el DHCP siempre sepa dónde está.
  • El paquete isc-dhcp-server instalado y escuchando en la red interna.
  • Un rango de IPs dinámico (192.168.101.200 - 192.168.101.205) asignado automáticamente a los clientes.
  • Configuración gráfica completa desde Webmin y reservas de IP fija por MAC.
  • Saber verificar con dhcpd -t, echo $? y el fichero de arrendamientos.

🧰 Prerrequisitos

  • VirtualBox instalado (o cualquier otro hipervisor tipo VirtualBox/VMware).
  • Dos máquinas virtuales con Ubuntu 12.04 o superior (yo usé Ubuntu Desktop; sirve cualquier versión moderna).
  • Una ISO de Ubuntu descargada: Descargas alternativas de Ubuntu.
  • Instalar Webmin en el servidor para la configuración gráfica.
  • Conocimientos básicos de red: qué es una IP, una máscara y una puerta de enlace.

El flujo es sencillo: creamos la VM servidor (con 2 adaptadores: Red Interna + NAT) y la VM cliente (solo Red Interna). Como el cliente es “tonto” y no sabe qué IP usar, el servidor DHCP se lo dirá.

🤔 ¿Qué hace el DHCP?

Antes de picar comandos, entendamos el papel del servicio. El DHCP (Dynamic Host Configuration Protocol) permite configurar direcciones IP, máscaras, pasarelas por defecto y muchas otras opciones de red de forma totalmente dinámica.

Una forma campechana de entenderlo: imagina que los equipos cliente, al arrancar, hacen un grito por la red y preguntan “¿hay alguien ahí? ¿quién soy yo?”. El servidor DHCP les contesta proporcionándoles toda la información necesaria para que sepan quiénes son y cómo configurar su red.

En la práctica es un intercambio de 4 mensajes: DISCOVER (el cliente busca un servidor) → OFFER (el servidor le ofrece una IP) → REQUEST (el cliente la pide) → ACK (el servidor la confirma). Todo automático y sin intervención humana.

🛠️ Preparar la red en VirtualBox

Lo primero es crear la máquina que actuará como servidor e instalar la ISO. Después crea la máquina cliente. Cuando ambas estén instaladas, apágalas y ve a su configuración de red:

  • En el servidor necesitamos 2 adaptadores, ambos habilitados:
    • Adaptador 1: Red NAT (la salida a internet).
    • Adaptador 2: Red Interna (la que comparte con el cliente), p. ej. intnet.
  • En el cliente solo el adaptador de Red Interna (sin NAT, para que dependa del DHCP).

Aceptamos, encendemos la máquina servidor y le asignamos una IP fija a la tarjeta de red interna (la que hablará con el cliente). Es imprescindible: un servidor DHCP no puede tener IP dinámica, porque entonces nadie sabría dónde buscar los arrendamientos.

En el servidor, ve a Conexiones → Editar conexiones → IPv4 → Método: Manual y pon la IP, la máscara y la puerta de enlace:

Asignar una IP fija a la tarjeta de red interna del servidor

Yo uso la IP 192.168.101.1 para el servidor, con máscara 255.255.255.0. En el cliente, en esa misma pantalla, pon el método en Automático (DHCP) para que espere la IP que le asigne el servidor.

🐳 Opción Docker: servidor DHCP de prueba en 1 minuto

No tienes que montar dos VMs para practicar la configuración del DHCP. Puedes levantar un servidor DHCP en un contenedor y comprobar la sintaxis de tu configuración sobre la marcha:

docker run -d --name dhcp-lab \
  -v $(pwd)/dhcpd.conf:/etc/dhcp/dhcpd.conf:ro \
  -p 67:67/udp \
  networkboot/dhcpd

El contenedor se basa en ISC DHCP y lee tu dhcpd.conf. Es perfecto para validar config antes de moverla a tu VM:

docker run --rm -v $(pwd)/dhcpd.conf:/etc/dhcp/dhcpd.conf:ro networkboot/dhcpd -t

Recuerda: dos servidores DHCP en la misma subred pelearían por responder. Usa el contenedor solo como laboratorio de pruebas aislado, no junto a tu VM.

🛠️ Instalar Webmin en el servidor

Para configurar el servidor de forma gráfica instalamos Webmin. Descarga el paquete .deb: Descargas de Webmin. Después lo instalamos desde la terminal:

cd /ruta_donde_este_el_archivo
sudo dpkg -i webmin_*.deb

Si da errores de dependencias, ejecuta:

sudo apt -f install

Una vez instalado, abre el navegador en https://localhost:10000/:

Acceso a Webmin por el puerto 10000

Entra con un usuario con permisos de administrador y cambia el idioma a español (por defecto está en inglés): en Webmin → Change Language and Theme. Después pulsa Refresh modules para que se apliquen los cambios.

El original menciona instalar el paquete Avahi (avahi-autoipd) para la configuración automática por enlace local. Hoy en día con IP fija + servidor DHCP explícito no es imprescindible, pero si quieres que el cliente obtenga una IP por link-local en ausencia de DHCP, puedes instalar avahi-autoipd. No es un requisito para que funcione nuestro servidor.

🛠️ Instalar el servidor DHCP

Ya podemos instalar el servidor DHCP propiamente dicho. En Debian/Ubuntu el paquete es isc-dhcp-server:

sudo apt update
sudo apt install isc-dhcp-server

Cuando termine, vuelve al navegador, pulsa Refresh modules y ve a Servidores. Debería aparecer Servidor DHCP (ISC): el módulo que Webmin ha detectado al instalar el paquete.

Módulo de servidor DHCP en Webmin

Consejo: antes de liarte con la VM, este es un buen momento para exportar la máquina virtual (Archivo → Exportar, formato OVA). Así, si se estropea, restauras desde el OVA sin reinstalar todo.

🚀 Configurar una nueva subred desde Webmin

Entramos en Servidores → Servidor DHCP (ISC) y pulsamos Añadir una nueva subred. Configuramos los parámetros de la red interna:

  • Nombre de red: red-interna (lo que quieras).
  • Rango de IPs: 192.168.101.200 - 192.168.101.205 (las IPs dinámicas que asignará).
  • Máscara: 255.255.255.0.

Guardamos. Con esto, Webmin escribe la subred en /etc/dhcp/dhcpd.conf.

Añadir una nueva subred con su rango de IPs en Webmin

🚀 Configurar las opciones del cliente

Dentro de la subred creada, entra en Editar opciones de cliente (o Edit Client Options). Rellena los parámetros que recibirán los clientes:

  • Nombre de anfitrión (host-name): un nombre sugerido para los clientes.
  • Máscara de subred (subnet-mask): 255.255.255.0.
  • Enrutadores por defecto (routers): 192.168.101.1.
  • Broadcast (broadcast-address): 192.168.101.255.
  • Servidor de dominio / DNS: pon un servidor DNS con el que resolver nombres (por ejemplo el del router o 8.8.8.8), e idealmente un segundo DNS de respaldo por si el primero falla.
Editar las opciones de cliente de la subred en Webmin

Guarda los cambios. Ahora reiniciamos el servicio para que aplique la nueva configuración. En versiones modernas usamos systemctl:

sudo systemctl restart isc-dhcp-server
sudo systemctl status isc-dhcp-server

En la versión antigua del original se hacía con sudo /etc/init.d/dhcp3-server restart. Ese binario ya no existe en sistemas actuales; ahora el servicio se llama isc-dhcp-server y se gestiona con systemctl.

🚀 Asignar una IP fija a un cliente (reserva por MAC)

Si quieres que un cliente concreto reciba siempre la misma IP (útil para servidores, impresoras o equipos que necesitan IP estable), usamos una reserva DHCP basada en la dirección MAC.

En Webmin: Servidor DHCP → Añadir nueva máquina (host). Indica el nombre del host, su dirección MAC (hardware ethernet) y la IP fija. Alternativamente, edita manualmente /etc/dhcp/dhcpd.conf y añade al final del bloque de la subred:

# internet
subnet 192.168.101.0 netmask 255.255.255.0 {
    range 192.168.101.200 192.168.101.205;
    host client {
        hardware ethernet 08:00:27:e9:ae:eb;
        fixed-address 192.168.101.202;
    }
}

Reinicia el servicio:

sudo systemctl restart isc-dhcp-server
Reserva de una IP fija por MAC en Webmin

🧪 Comprobar que funciona

  • Valida la configuración antes de reiniciar. dhcpd -t comprueba la sintaxis de /etc/dhcp/dhcpd.conf sin arrancar el servicio:
sudo dhcpd -t
echo $?

Si imprime errores, salen por pantalla; si no, echo $? devuelve 0 (todo correcto).

  • El cliente recibe IP: enciende la máquina cliente y comprueba en Conexiones o con:
ip addr show

Debe aparecer una IP del rango 192.168.101.200 - 205 asignada automáticamente.

  • Los arrendamientos están registrados: en el servidor, el fichero de leases muestra a quién se asignó cada IP:
sudo cat /var/lib/dhcp/dhcpd.leases
  • Revisa qué cambió en los ficheros: para entender lo que Webmin escribió por nosotros:
sudo nano /etc/dhcp/dhcpd.conf
cat /etc/network/interfaces    # o usa ip addr para ver la IP

El original usaba ifconfig y sudo gedit /etc/network/interfaces. En versiones modernas ifconfig se sustituye por ip addr, y el archivo de leases es /var/lib/dhcp/dhcpd.leases.

⚠️ Errores comunes

ErrorCausaSolución
fail to write pid file o no arrancaPuertos 67/68 ocupados o config inválidaComprueba sudo systemctl status isc-dhcp-server y sudo dhcpd -t
Not configured to listen on any interfaces!El servidor no sabe en qué interfaz escucharConfigura INTERFACESv4 en /etc/default/isc-dhcp-server con tu tarjeta interna (p. ej. eth1)
El cliente no obtiene IPCliente y servidor en redes distintas o servidor con IP dinámicaVerifica que ambos estén en Red Interna y que el servidor tenga IP fija 192.168.101.x
No hay DNS/IP en el clienteFalta definir routers, subnet-mask o DNS en las opciones de clienteRellena los campos en “Editar opciones de cliente” de Webmin
dhcpd.conf con error de sintaxisParéntesis o punto y coma mal puestosUsa sudo dhcpd -t para localizar la línea exacta (el ; siempre va al final de cada línea)
El cliente tiene IP pero no navegaFalta puerta de enlace o DNS correctoRevisa routers (debe ser 192.168.101.1) y añade un DNS válido

🪜 Siguiente nivel

  1. Asegura el acceso remoto a tu servidor para gestionarlo sin pantalla: Formas de conectarse por SSH.
  2. Comparte internet entre el cliente y el servidor con un túnel SSH, complementario al DHCP: Conectarse del cliente al servidor mediante SSH.
  3. Sirve archivos en red: monta un servidor FTP para que los clientes compartan ficheros: Cómo conectarse a un servidor FTP.
  4. Protege tu panel Webmin con contraseña para no dejar el servidor abierto: Cómo proteger una carpeta con contraseña en Webmin.
  5. Da capa de seguridad con HTTPS en tu web o servicios: Cómo obtener un certificado SSL.

🔗 Enlaces y recursos

COMPARTIR:
ETIQUETADO EN:
COMENTARIOS:

📋 Contenido