Qué es DHCP y cómo funciona (el proceso DORA)

DHCP es el servicio que da a cada equipo su IP, su máscara, su puerta de enlace y sus DNS en cuanto se conecta a la red. Así funciona por dentro, paso a paso.

Para qué sirve

Para que un equipo hable con la red necesita cuatro datos: una dirección IP, la máscara, la puerta de enlace (el router) y al menos un servidor DNS. Configurarlos a mano en 200 ordenadores es lento y, sobre todo, fácil de hacer mal: basta un número repetido para que dos equipos se peleen por la misma IP.

DHCP (Dynamic Host Configuration Protocol, RFC 2131) lo automatiza. Un servidor guarda una lista de direcciones libres, el rango o pool, y se las presta a los equipos que las piden, junto con el resto de datos. Lo hace el router de tu casa, un servidor Linux con isc-dhcp-server o Kea, un Windows Server con el rol DHCP o un router Cisco.

El proceso DORA, paso a paso

Cuando un equipo se conecta y no tiene IP, intercambia cuatro mensajes con el servidor. Sus iniciales forman la palabra con la que se estudia: DORA.

Cliente (sin IP)     Servidor DHCP
   │                       │
   │── 1. DISCOVER ───────▶│  difusión
   │◀──────── 2. OFFER ────│
   │── 3. REQUEST ────────▶│  difusión
   │◀──────── 4. ACK ──────│
  1. Discover. El cliente todavía no tiene IP ni sabe dónde está el servidor, así que pregunta a todos: envía una difusión desde 0.0.0.0 a 255.255.255.255. Dentro va su dirección MAC para que el servidor sepa a quién responder.
  2. Offer. Cada servidor DHCP que lo oye reserva una dirección libre de su rango y la ofrece, junto con la máscara, la puerta de enlace, los DNS y la duración de la concesión.
  3. Request. El cliente elige una oferta (normalmente la primera que llega) y la pide. Lo hace otra vez por difusión, indicando qué servidor ha elegido: así los demás servidores saben que su oferta no se ha aceptado y liberan la dirección que habían reservado.
  4. Ack. El servidor confirma y apunta la concesión. El cliente se configura y, antes de usar la dirección, suele comprobar con ARP que nadie más la tiene. Si la encuentra ocupada, la rechaza con un mensaje DECLINE y vuelve a empezar.

Hay otros mensajes que también caen en los exámenes: NAK (el servidor rechaza la petición, por ejemplo porque el equipo pide una IP de otra red en la que estaba antes), RELEASE (el cliente devuelve la dirección, como con ipconfig /release) e INFORM (un equipo con IP fija pide solo las opciones, como los DNS).

Por qué usa UDP y los puertos 67 y 68

DHCP va sobre UDP: el servidor escucha en el puerto 67 y el cliente en el 68. No puede usar TCP porque TCP necesita una conexión entre dos direcciones conocidas, y el cliente todavía no tiene dirección: tiene que preguntar por difusión, y TCP no admite difusión. El puerto del cliente es fijo porque a veces la respuesta también va por difusión y el cliente tiene que reconocerla.

La concesión: la IP es prestada

El servidor no regala la dirección, la presta durante un tiempo: la concesión (lease). Windows Server pone 8 días por defecto y un router Cisco, 1 día. El cliente no espera a que caduque:

  • Al 50 % del tiempo pide renovarla directamente a su servidor. Si responde, el reloj vuelve a cero.
  • Al 87,5 %, si su servidor no ha contestado, pregunta por difusión a cualquier servidor DHCP de la red.
  • Si caduca sin respuesta, deja de usar la dirección y vuelve a empezar con un Discover.

Por eso, si el servidor DHCP se cae, los equipos que ya tenían IP siguen funcionando un tiempo. Los que se conectan después no consiguen dirección.

Qué datos reparte: las opciones

Además de la IP, el servidor envía opciones numeradas (RFC 2132). Las más habituales:

OpciónQué esEn isc-dhcp-server
1Máscara de subredoption subnet-mask
3Puerta de enlace (router)option routers
6Servidores DNSoption domain-name-servers
15Nombre de dominiooption domain-name
51Duración de la concesióndefault-lease-time
53Tipo de mensaje (DISCOVER, OFFER…)La pone el protocolo
54Identificador del servidorLa pone el protocolo
66 y 67Servidor TFTP y archivo de arranque (arranque por red, PXE)next-server, filename

Rango, exclusiones y reservas

  • Rango (ámbito o pool): las direcciones que el servidor puede prestar.
  • Exclusión: direcciones dentro de la red que el servidor no debe dar nunca, porque son de equipos con IP fija.
  • Reserva: el servidor da siempre la misma IP a un equipo concreto, reconociéndolo por su MAC. Ideal para impresoras.

Para decidir qué rango poner y obtener la configuración ya escrita, usa la calculadora de rango DHCP.

DHCP con varias redes: el agente de retransmisión

Los routers no dejan pasar las difusiones, así que un Discover no sale de su red. Si el servidor DHCP está en otra red, el router que da a los clientes hace de agente de retransmisión (DHCP relay): recoge la difusión y se la reenvía al servidor como un paquete normal, indicando de qué red viene. Así un solo servidor reparte direcciones a muchas redes, con un ámbito para cada una. En Cisco se configura en la interfaz de los clientes con ip helper-address seguido de la IP del servidor.

DHCP en VirtualBox

  • NAT: VirtualBox trae su propio DHCP y da siempre la 10.0.2.15.
  • Solo anfitrión: también tiene DHCP, en 192.168.56.100, y reparte desde la .101.
  • Red interna: no tiene DHCP. Por eso en las prácticas se monta un servidor propio en una máquina, y los clientes reciben de él la dirección.
  • Adaptador puente: nunca arranques ahí un servidor DHCP de prácticas. Respondería a los equipos reales del aula o de tu casa y los dejaría sin red.

Comprobarlo desde el cliente

QuéWindowsLinux
Ver la IP y quién la dioipconfig /allip a
Soltar la IPipconfig /releasesudo dhclient -r
Pedir IP de nuevoipconfig /renewsudo dhclient

En Ubuntu reciente puede que dhclient no esté instalado. Con Netplan y systemd-networkd (Ubuntu Server) se renueva con sudo networkctl renew enp0s3, y en el escritorio basta con desconectar y volver a conectar la red. En ip a, una dirección obtenida por DHCP aparece marcada como dynamic.

Para ver los cuatro mensajes DORA con tus propios ojos, captura con Wireshark en el cliente con el filtro dhcp y haz un release y un renew.

Problemas típicos

SíntomaCausa probable
El equipo tiene una 169.254.x.xNingún servidor DHCP le ha respondido: servidor parado, cable o red equivocada en la máquina virtual.
Recibe una IP de otra redHay otro servidor DHCP respondiendo antes (un router doméstico conectado a la red, por ejemplo).
Aviso de conflicto de IPUn equipo tiene puesta a mano una IP que está dentro del rango DHCP.
Los primeros equipos van bien y los nuevos noEl rango está lleno. Amplíalo o acorta la concesión.
isc-dhcp-server no arrancaError de sintaxis (revisa con dhcpd -t), interfaz sin IP en esa red o falta INTERFACESv4.

Seguridad: el DHCP falso

Cualquiera que conecte un servidor DHCP a la red puede responder antes que el bueno y repartir su propia puerta de enlace y sus propios DNS. Así todo el tráfico pasa por él. A veces es un despiste (alguien enchufa un router de casa) y a veces un ataque. Otro ataque, el agotamiento (starvation), pide direcciones con MAC falsas hasta vaciar el rango. La defensa habitual es el DHCP snooping de los switches gestionables: solo se aceptan respuestas DHCP por los puertos marcados como de confianza.

¿Y en IPv6?

En IPv6 un equipo puede configurarse solo, sin servidor, con los anuncios del router (SLAAC). También existe DHCPv6, que usa los puertos UDP 546 (cliente) y 547 (servidor). Lo tienes en IPv6 explicado.

Preguntas frecuentes

¿DHCP asigna nombres a los equipos?

No, los nombres son cosa del DNS. Lo que sí puede hacer un servidor DHCP es avisar al DNS de qué IP ha dado a cada equipo (DNS dinámico), algo habitual en redes con Windows Server.

¿Puede haber dos servidores DHCP en la misma red?

Sí, para tener respaldo, pero con rangos que no se pisen (por ejemplo, uno reparte el 80 % y otro el 20 %) o con la función de conmutación por error de Windows Server o Kea. Dos servidores con el mismo rango acaban dando la misma IP a dos equipos.

¿Los servidores también usan DHCP?

No. Un servidor, una impresora o el router necesitan una dirección que no cambie, porque otros equipos se conectan a ellos. Llevan IP fija o una reserva.