Homelab

Servidor DHCP y DNS con Windows Server en VirtualBox: laboratorio paso a paso

Monta en VirtualBox una red aislada con Windows Server como DHCP y DNS, un cliente Windows y otro Ubuntu, y mira el DORA por dentro con Wireshark.

Por Alejandro · · 9 min

En esta guía

En esta guía vas a montar una pequeña red de empresa dentro de tu ordenador: un Windows Server que da IP a los equipos por DHCP y resuelve nombres con su propio DNS, un cliente Windows y un cliente Linux. Todo en VirtualBox, en una red aislada que no toca la de tu casa.

Es uno de los mejores laboratorios para entender de verdad qué pasa cuando un equipo se conecta a una red y “le llega internet”, y además es una práctica típica de ASIR y SMR.

Cómo funciona

Cuando un equipo se conecta a una red sin IP fija, habla con el servidor DHCP en cuatro pasos, que se resumen como DORA:

  1. Discover: el cliente aún no tiene IP y grita por broadcast “¿hay algún servidor DHCP?”.
  2. Offer: el servidor le ofrece una IP, junto con la máscara, la puerta de enlace, los DNS y el dominio.
  3. Request: el cliente acepta esa oferta y la pide formalmente.
  4. ACK: el servidor confirma, y la IP queda prestada durante un tiempo (la concesión).

El DNS, por su parte, traduce nombres a IPs. En este laboratorio usarás tres tipos de registro:

  • A: nombre → IP (servidor.homelab.local → 192.168.100.10).
  • CNAME: un alias de otro nombre (dns.homelab.local → servidor.homelab.local).
  • PTR: la búsqueda al revés, IP → nombre. Vive en la zona inversa.

Qué necesitas

  • Un PC con 16 GB de RAM (con 8 GB funciona, pero justo) y unos 140 GB libres.
  • VirtualBox 7.
  • Tres ISO:
    • Windows Server 2025 o 2022: la versión de evaluación de 180 días es gratuita en el Microsoft Evaluation Center.
    • Windows 11.
    • Ubuntu Server 24.04 LTS.

El esquema de red

EquipoFunciónIP
Adaptador host-only de tu PCPuerta de enlace de la red192.168.100.1
Windows Server SERVIDORDNS + DHCP192.168.100.10 (fija)
Cliente WindowsClientepor DHCP (192.168.100.100-200)
Cliente UbuntuClientepor DHCP (192.168.100.100-200)

El servidor lleva dos tarjetas de red: una en NAT, para que tenga internet, y otra en la red host-only, que es donde reparte las IPs. Los clientes solo van a la host-only, así que no tendrán internet una vez configurados: es una red aislada a propósito.

Cuidado

La red del laboratorio no puede coincidir con la red real de tu casa. Si tu router te da IPs 192.168.100.x, elige otra, por ejemplo 192.168.150.0/24. Si las dos redes se solapan, tu PC tendrá dos tarjetas en la misma red y se quedará sin internet.

Consejo

Las capturas de esta guía son de mi práctica de clase, en la que usé la red 10.14.0.0/16, el servidor en 10.14.0.10, la puerta de enlace 10.14.0.2 y el dominio calvo.local. Es exactamente el mismo montaje con otras direcciones: en tu laboratorio verás 192.168.100.x y homelab.local si sigues la guía tal cual.

Paso 1: crea la red host-only

  1. En VirtualBox, ve a Archivo → Herramientas → Gestor de red → Redes solo-anfitrión → Crear.
  2. En Adaptador, marca Configurar adaptador manualmente, con IP 192.168.100.1 y máscara 255.255.255.0.
  3. En la pestaña Servidor DHCP, desmarca “Habilitar servidor”. El DHCP lo va a dar tu Windows Server; si dejas activado el de VirtualBox, los dos se pelean por los clientes.

Paso 2: crea e instala las tres máquinas

VMRAM / CPU / discoRed durante la instalaciónRed al final
SERVIDOR4 GB / 2 / 50 GB1: NAT · 2: host-onlyigual
Cliente Windows4 GB / 2 / 64 GB1: NAT1: host-only
Cliente Ubuntu2 GB / 1 / 20 GB1: NAT1: host-only

Algunos detalles que ahorran tiempo:

  • Windows Server: elige la edición "(Experiencia de escritorio)". La otra es Server Core, sin ventanas.
  • Windows 11: deja activada la instalación desatendida de VirtualBox con un usuario y una contraseña. Así se crea una cuenta local y no te obliga a usar cuenta Microsoft.
  • Ubuntu Server: marca “Install OpenSSH server” durante la instalación.
  • Instala las Guest Additions en el servidor para poder agrandar la ventana.

Consejo

Instala todo lo que haya que descargar (OpenSSH, paquetes, actualizaciones) mientras los clientes siguen en NAT, y pásalos a host-only al final. Y haz una instantánea de cada VM antes de cada cambio grande.

Paso 3: IP fija en el servidor

Abre PowerShell como administrador. Primero mira cómo se llama el adaptador host-only: es el que no tiene una IP 10.0.x.x, que es la del NAT.

Get-NetIPAddress -AddressFamily IPv4 | Format-Table InterfaceAlias, IPAddress

Si se llama distinto de “Ethernet 2”, cámbialo en todos los comandos de esta guía.

New-NetIPAddress -InterfaceAlias "Ethernet 2" -IPAddress 192.168.100.10 -PrefixLength 24
Set-DnsClientServerAddress -InterfaceAlias "Ethernet 2" -ServerAddresses 192.168.100.10
Rename-Computer -NewName "SERVIDOR" -Restart

No pongas puerta de enlace en el adaptador host-only. La salida a internet ya la da el adaptador NAT, y con dos puertas de enlace el servidor se queda sin conexión.

Paso 4: instala los roles DNS y DHCP

Install-WindowsFeature DNS, DHCP -IncludeManagementTools
Add-DhcpServerSecurityGroup
Restart-Service DHCPServer

Paso 5: configura el DNS

# Zona directa (nombres -> IP) y zona inversa (IP -> nombres)
Add-DnsServerPrimaryZone -Name "homelab.local" -ZoneFile "homelab.local.dns"
Add-DnsServerPrimaryZone -NetworkId "192.168.100.0/24" -ZoneFile "100.168.192.in-addr.arpa.dns"

# Registros A con su PTR
Add-DnsServerResourceRecordA -ZoneName "homelab.local" -Name "servidor" -IPv4Address 192.168.100.10 -CreatePtr
Add-DnsServerResourceRecordA -ZoneName "homelab.local" -Name "gateway" -IPv4Address 192.168.100.1 -CreatePtr

# Alias
Add-DnsServerResourceRecordCName -ZoneName "homelab.local" -Name "dns" -HostNameAlias "servidor.homelab.local"
Add-DnsServerResourceRecordCName -ZoneName "homelab.local" -Name "dhcp" -HostNameAlias "servidor.homelab.local"

# Para que el servidor resuelva también nombres de internet
Add-DnsServerForwarder -IPAddress 1.1.1.1

Cuidado

Si te olvidas de la zona inversa, nslookup por IP te dirá “Non-existent domain”. Es el fallo más típico de este laboratorio.

Paso 6: configura el DHCP

Add-DhcpServerv4Scope -Name "Homelab" -StartRange 192.168.100.100 -EndRange 192.168.100.200 `
  -SubnetMask 255.255.255.0 -LeaseDuration 0.12:00:00 -State Active

Set-DhcpServerv4OptionValue -ScopeId 192.168.100.0 -Router 192.168.100.1 `
  -DnsServer 192.168.100.10 -DnsDomain "homelab.local"

Set-DhcpServerv4Binding -InterfaceAlias "Ethernet 2" -BindingState $true
Restart-Service DHCPServer

Con esto, cada cliente recibe una IP entre la .100 y la .200, la puerta de enlace .1, tu servidor como DNS y el dominio homelab.local, con una concesión de 12 horas.

Paso 7: el cliente Windows

Con el adaptador todavía en NAT, abre PowerShell como administrador e instala el servidor SSH:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

Apaga la VM, cambia el Adaptador 1 a solo-anfitrión y arranca. En cmd:

ipconfig /release
ipconfig /renew
ipconfig /all
nslookup 192.168.100.1

Tiene que salir una IP 192.168.100.1xx, el servidor DHCP .10, el sufijo homelab.local, y nslookup debe responder gateway.homelab.local.

Paso 8: el cliente Ubuntu

Con el adaptador en NAT:

sudo apt update && sudo apt install -y openssh-server bind9-host
sudo systemctl enable --now ssh

Pásalo a solo-anfitrión, mira el nombre de la interfaz con ip a (suele ser enp0s3) y edita netplan:

sudo nano /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: true
sudo netplan apply
netplan status enp0s3
host 192.168.100.10

host debe responder servidor.homelab.local. En YAML los espacios importan: usa 2 por nivel y nunca tabuladores.

Paso 9: comprueba que todo funciona

En el servidor, mira quién ha cogido IP:

Get-DhcpServerv4Lease -ScopeId 192.168.100.0

Así quedó mi laboratorio, con todo funcionando a la vez:

Cliente Windows y cliente Ubuntu con IP por DHCP, consola DNS con la zona calvo.local y sus registros A y CNAME, y consola DHCP con las dos concesiones
Arriba, el cliente Windows (ipconfig y nslookup) y el cliente Ubuntu (netplan status y host). Abajo, el Administrador de DNS con la zona y sus registros, y la consola DHCP con las dos concesiones. Cada color une un dato del servidor con lo que recibe el cliente. Pulsa para ampliar.

Y conéctate a los dos clientes por SSH desde el propio servidor. Si ssh no existe, instala el cliente y abre una ventana nueva de PowerShell:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
ssh usuario@192.168.100.100

Consejo

Para SSH a un Windows, el usuario es el de la cuenta local (lo ves con whoami), no el nombre del equipo. Y la cuenta tiene que tener contraseña.

Paso 10: mira el DHCP por dentro con Wireshark

Abre Wireshark en tu PC, elige el adaptador VirtualBox Host-Only y filtra por dhcp. Luego haz ipconfig /release y ipconfig /renew en el cliente Windows, y reinicia el Ubuntu.

Verás los cuatro paquetes del DORA de cada cliente. Abre el Offer o el ACK y despliega las opciones: ahí está todo lo que configuraste en el paso 6, con la máscara, el router, el DNS, el dominio y las 12 horas de concesión.

Consejo

Curiosidad: Si un cliente ya tenía concesión y solo renueva, verás únicamente Request + ACK. Para ver el DORA completo hay que reiniciar el cliente o liberar la IP primero.

Esto es lo que capturé yo:

Captura de Wireshark filtrada por dhcp con el DORA completo del cliente Windows, la renovación del cliente Linux y el DORA del Linux tras reiniciar, con el detalle del paquete Request
En verde, el DORA completo del cliente Windows. En amarillo, el Linux renovando su concesión: solo Request y ACK. En azul, el DORA completo del Linux tras reiniciarlo. Abajo, el Request del cliente Windows desplegado: el tipo de mensaje (opción 53), su MAC (61), la IP que pide (50), el servidor que ha elegido (54) y el nombre del equipo (12). Pulsa para ampliar.

Fíjate en que, en mi captura, el Offer y el ACK salen del servidor hacia 255.255.255.255: como el cliente todavía no tiene una IP configurada, el servidor le responde por broadcast.

Problemas típicos

SíntomaSolución
El cliente coge una IP 169.254.x.xNo le llega el DHCP. Comprueba que está en la misma red host-only, que el ámbito está activo y que el DHCP de VirtualBox está desactivado.
El cliente coge una IP 192.168.56.xEstá respondiendo el DHCP de VirtualBox. Desactívalo y renueva la IP.
nslookup por IP fallaFalta la zona inversa o el registro PTR.
ssh no se reconoceInstala el cliente OpenSSH y abre una ventana nueva de PowerShell.
Tu PC se queda sin internetLa red host-only coincide con la de tu casa. Cámbiala.

Y la parte de seguridad

  • La red host-only está aislada de tu red real, así que puedes romper lo que quieras sin afectar a nadie. Es justo lo que tiene que ser un laboratorio.
  • Un DHCP “pirata” es un ataque real. Si alguien conecta un servidor DHCP falso a una red, puede darles a los equipos una puerta de enlace o un DNS suyos y ver o desviar su tráfico. Por eso los switches de empresa tienen DHCP snooping, que solo deja responder al DHCP autorizado.
  • El dominio .local está reservado para mDNS (Bonjour, Avahi). Para un laboratorio vale, pero en una red real usa un subdominio de un dominio tuyo o home.arpa.

Siguiente paso

Si tienes un servidor con Proxmox, puedes mover este laboratorio allí y dejarlo encendido siempre: tienes cómo empezar en la guía de Proxmox: cómo crear tu primera máquina virtual y tu primer contenedor. Y si te ha gustado la parte del DNS, el siguiente proyecto natural es Pi-hole para bloquear la publicidad en toda tu casa.