¿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-serverinstalado 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:

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/:

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.

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.

🚀 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.

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 llamaisc-dhcp-servery se gestiona consystemctl.
🚀 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

🧪 Comprobar que funciona
- Valida la configuración antes de reiniciar.
dhcpd -tcomprueba la sintaxis de/etc/dhcp/dhcpd.confsin 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
ifconfigysudo gedit /etc/network/interfaces. En versiones modernasifconfigse sustituye porip addr, y el archivo de leases es/var/lib/dhcp/dhcpd.leases.
⚠️ Errores comunes
| Error | Causa | Solución |
|---|---|---|
fail to write pid file o no arranca | Puertos 67/68 ocupados o config inválida | Comprueba sudo systemctl status isc-dhcp-server y sudo dhcpd -t |
Not configured to listen on any interfaces! | El servidor no sabe en qué interfaz escuchar | Configura INTERFACESv4 en /etc/default/isc-dhcp-server con tu tarjeta interna (p. ej. eth1) |
| El cliente no obtiene IP | Cliente y servidor en redes distintas o servidor con IP dinámica | Verifica que ambos estén en Red Interna y que el servidor tenga IP fija 192.168.101.x |
| No hay DNS/IP en el cliente | Falta definir routers, subnet-mask o DNS en las opciones de cliente | Rellena los campos en “Editar opciones de cliente” de Webmin |
dhcpd.conf con error de sintaxis | Paréntesis o punto y coma mal puestos | Usa sudo dhcpd -t para localizar la línea exacta (el ; siempre va al final de cada línea) |
| El cliente tiene IP pero no navega | Falta puerta de enlace o DNS correcto | Revisa routers (debe ser 192.168.101.1) y añade un DNS válido |
🪜 Siguiente nivel
- Asegura el acceso remoto a tu servidor para gestionarlo sin pantalla: Formas de conectarse por SSH.
- Comparte internet entre el cliente y el servidor con un túnel SSH, complementario al DHCP: Conectarse del cliente al servidor mediante SSH.
- Sirve archivos en red: monta un servidor FTP para que los clientes compartan ficheros: Cómo conectarse a un servidor FTP.
- Protege tu panel Webmin con contraseña para no dejar el servidor abierto: Cómo proteger una carpeta con contraseña en Webmin.
- Da capa de seguridad con HTTPS en tu web o servicios: Cómo obtener un certificado SSL.
