DHCP¶
Dynamic Host Configuration Protocol.
Viene por UDP
Puerto 68 en cliente
Puerto 67 en servidor
Es la evolución del protocolo BOOTP.
Header¶
Message type (OP) (1 byte): Indica petición (1) o respuesta (2).
Hardware type (HTYPE) (1 byte): Protocolo de enlace, si es Ethernet es 1.
Hardware address length (HLEN) (1 byte): Longitud de la dirección de enlace en bytes, si es Ethernet es 6.
Hops (HOPS) (1 byte): Empieza en cero, cada gateway incrementa el salto, si llega a 3 se supone que hubo un bucle.
Transaction ID (XID) (4 bytes): Número aleatorio que identifica a esta transacción (DHCPDISCOVER, DHCPOFFER, DHCPREQUEST y DHCPACK).
Seconds elapsed (SECS) (2 bytes): Fijado por el cliente, segundos desde que el cliente arrancó.
BOOTP flags (FLAGS) (2 bytes): Solamente se usa el primer bit para indicar si el cliente quiere que el servidor responda como broadcast (1) o unicast (0). Se usa siempre unicast salvo en clientes que no puedan recibir unicast antes de inicializar su stack TCP/IP.
Client IP (CIADDR) (4 bytes): Generalmente es
0.0.0.0
salvo por ejemplo cuando se hace una renovación.Your IP (YIADDR) (4 bytes): Fijado por el servidor si CIADDR era
0.0.0.0
.Server IP (SIADDR) (4 bytes): IP del servidor, fijada por el servidor.
Relay IP (GIADDR) (4 bytes): Fijado por el relay si es que se está usando uno.
Client MAC (CHADDR) (16 bytes): Fijada por el cliente, como sobra espacio tiene padding de ceros.
Server hostname (SNAME) (64 bytes): Es opcional, pero si no se usa queda el espacio vacío con ceros.
Boot filename (FILE) (128 bytes): En DHCPDISCOVER no tiene nada, en DHCPOFFER el servidor fija un nombre de archivo.
Opciones (OPTIONS) (variable): Ver abajo
Opciones¶
Hay muchísimas, pongo las mas usadas:
Generales, se usan siempre:
DHCP Message type (53): Indica el tipo de mensaje, por ejemplo:
DHCPDISCOVER: 1
DHCPOFFER: 2
DHCPREQUEST: 3
DHCPACK: 5
Endmark (255): Indica fin de opciones.
Usadas en DHCPDISCOVER y DHCPREQUEST.
Parameter request list (55): Lista de parámetros que requiere el cliente. Son varios números que se corresponden a las opciones que explico abajo.
Usadas en DHCPOFFER y DHCPACK.
Subnet mask (1): Máscara de red a usar por el cliente
Router (3): Gateway a usar por el cliente.
IP address lease time (51): Tiempo de lease para la IP dada.
DNS servers (8): Servidores DNS para el cliente.
DHCP server identifier (54): IP del servidor DHCP.
Usadas en DHCPREQUEST:
Requested IP address (50): IP que el cliente está solicitando.
Funcionamiento¶
Los datagramas más importantes son DHCPDISCOVER, DHCPOFFER, DHCPREQUEST y DHCPACK:
Descubrimiento (DHCPDISCOVER): Cliente pregunta que DHCPs hay.
Origen:
MAC: MAC Cliente.
IP:
0.0.0.0
.Puerto: 68.
Destino:
MAC:
FF:FF:FF:FF:FF:FF
.IP:
255.255.255.255
.Puerto: 67
DHCP:
YIADDR:
0.0.0.0
.DHCP message type: 1 (Discover).
Lista de parámetros requeridos.
Oferta (DHCPOFFER): Servidores DHCP reservan una IP y la ofrecen, indicando además el tiempo de lease (arrendamiento).
Origen:
MAC: MAC Servidor.
IP: IP Servidor.
Puerto: 67.
Destino:
MAC: MAC Cliente
IP: IP propuesta para Cliente.
Puerto: 68
DHCP:
YIADDR: IP propuesta para cliente.
DHCP message type: 2 (Offer).
Tiempo de lease, máscara de red, gateway, DNS.
Solicitud (DHCPREQUEST): Cliente pide a un servidor DHCP esa IP, es broadcast para avisarle a los potenciales otros servidores que no los elegi.
Origen:
MAC: MAC Cliente.
IP:
0.0.0.0
.Puerto: 68.
Destino:
MAC:
FF:FF:FF:FF:FF:FF
.IP:
255.255.255.255
.Puerto: 67
DHCP:
YIADDR:
0.0.0.0
.DHCP message type: 3 (Request).
Lista de parámetros requeridos.
IP requerida por el cliente.
ACK (DHCPACK): Servidor confirma.
Origen:
MAC: MAC Servidor.
IP: IP Servidor.
Puerto: 67.
Destino:
MAC: MAC Cliente
IP: IP Cliente.
Puerto: 68
DHCP:
YIADDR: IP propuesta para cliente.
DHCP message type: 5 (ACK).
Tiempo de lease, máscara de red, gateway, DNS.
Estados¶
Initialization
Selection: Espera todas las ofertas de los servidores
Request: Pide a un servidor y espera respuesta.
Bound: Una vez que le llegó la confirmación del servidor. En este momento la PC trabaja normalmente.
Renew: Envía un DHCPREQUEST para renovar (al 50% del tiempo) y espera respuesta.
Rebind: Envía un DHCPREQUEST para renovar (al finalizar el tiempo) y espera respuesta.
DHCP relaying¶
Cuando hay varias subredes, puede haber un servidor DHCP por subred o puede haber un servidor que sirva a varias redes. El problema es que en este caso el servidor y el cliente están en redes distintas, el cliente no tiene una IP ruteable y tampoco sabe la IP del servidor DHCP.
Para permitir a los clientes comunicarse con los servidores, se instalan DHCP relay agents. Estos agentes de retransmisión cuando reciben un broadcast DHCP reenvían el mensaje a uno o varios servidores DHCP presentes en otras redes mediante unicast.
Hay un campo específico en la trama llamado GIADDR
, en donde el gateway
coloca su IP, de esta forma el servidor DHCP sabe que debe responder a esa IP en
particular y que debe reservarle una IP al cliente en esa red.
Para la comunicación entre relay y servidor generalmente se usa el puerto 67 para origen y destino.
Capturas¶
Discover, UDP 68 -> 67:
Frame 55: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on
interface 0
Ethernet II, Src: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55), Dst: Broadcast
(ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x10 (DSCP: Unknown, ECN: Not-ECT)
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
Fragment offset: 0
Time to live: 128
Protocol: UDP (17)
Header checksum: 0x3996 [validation disabled]
[Header checksum status: Unverified]
Source: 0.0.0.0
Destination: 255.255.255.255
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 68, Dst Port: 67
Source Port: 68
Destination Port: 67
Length: 308
Checksum: 0xbf55 [unverified]
[Checksum Status: Unverified]
[Stream index: 0]
Bootstrap Protocol (Discover)
Message type: Boot Request (1)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Discover)
Length: 1
DHCP: Discover (1)
Option: (12) Host Name
Length: 16
Host Name: mbernardi-laptop
Option: (55) Parameter Request List
Length: 13
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (28) Broadcast Address
Parameter Request List Item: (2) Time Offset
Parameter Request List Item: (3) Router
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (119) Domain Search
Parameter Request List Item: (12) Host Name
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
Parameter Request List Item: (26) Interface MTU
Parameter Request List Item: (121) Classless Static Route
Parameter Request List Item: (42) Network Time Protocol Servers
Option: (255) End
Option End: 255
Padding: 0000000000000000000000000000000000000000000000
Offer, UDP 67 -> 68:
Frame 56: 590 bytes on wire (4720 bits), 590 bytes captured (4720 bits) on
interface 0
Ethernet II, Src: Tp-LinkT_c7:77:b4 (70:4f:57:c7:77:b4), Dst:
HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Internet Protocol Version 4, Src: 192.168.2.1, Dst: 192.168.2.101
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
Total Length: 576
Identification: 0xb762 (46946)
Flags: 0x00
Fragment offset: 0
Time to live: 64
Protocol: UDP (17)
Header checksum: 0x3b94 [validation disabled]
[Header checksum status: Unverified]
Source: 192.168.2.1
Destination: 192.168.2.101
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 67, Dst Port: 68
Source Port: 67
Destination Port: 68
Length: 556
Checksum: 0xcb8a [unverified]
[Checksum Status: Unverified]
[Stream index: 1]
Bootstrap Protocol (Offer)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.2.101
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Offer)
Length: 1
DHCP: Offer (2)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.2.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.2.1
Option: (6) Domain Name Server
Length: 8
Domain Name Server: 200.7.141.6
Domain Name Server: 200.7.141.7
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...
Request, 68 -> 67:
Frame 57: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on
interface 0
Ethernet II, Src: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55), Dst: Broadcast
(ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x10 (DSCP: Unknown, ECN: Not-ECT)
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
Fragment offset: 0
Time to live: 128
Protocol: UDP (17)
Header checksum: 0x3996 [validation disabled]
[Header checksum status: Unverified]
Source: 0.0.0.0
Destination: 255.255.255.255
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 68, Dst Port: 67
Source Port: 68
Destination Port: 67
Length: 308
Checksum: 0xfd67 [unverified]
[Checksum Status: Unverified]
[Stream index: 0]
Bootstrap Protocol (Request)
Message type: Boot Request (1)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Request)
Length: 1
DHCP: Request (3)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.2.1
Option: (50) Requested IP Address
Length: 4
Requested IP Address: 192.168.2.101
Option: (12) Host Name
Length: 16
Host Name: mbernardi-laptop
Option: (55) Parameter Request List
Length: 13
Parameter Request List Item: (1) Subnet Mask
Parameter Request List Item: (28) Broadcast Address
Parameter Request List Item: (2) Time Offset
Parameter Request List Item: (3) Router
Parameter Request List Item: (15) Domain Name
Parameter Request List Item: (6) Domain Name Server
Parameter Request List Item: (119) Domain Search
Parameter Request List Item: (12) Host Name
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope
Parameter Request List Item: (26) Interface MTU
Parameter Request List Item: (121) Classless Static Route
Parameter Request List Item: (42) Network Time Protocol Servers
Option: (255) End
Option End: 255
Padding: 0000000000000000000000
ACK, UDP 67 -> 68:
Frame 58: 590 bytes on wire (4720 bits), 590 bytes captured (4720 bits) on
interface 0
Ethernet II, Src: Tp-LinkT_c7:77:b4 (70:4f:57:c7:77:b4), Dst:
HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Internet Protocol Version 4, Src: 192.168.2.1, Dst: 192.168.2.101
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
Total Length: 576
Identification: 0xb762 (46946)
Flags: 0x00
Fragment offset: 0
Time to live: 64
Protocol: UDP (17)
Header checksum: 0x3b94 [validation disabled]
[Header checksum status: Unverified]
Source: 192.168.2.1
Destination: 192.168.2.101
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 67, Dst Port: 68
Source Port: 67
Destination Port: 68
Length: 556
Checksum: 0xc88a [unverified]
[Checksum Status: Unverified]
[Stream index: 1]
Bootstrap Protocol (ACK)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xa1368e3d
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.2.101
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HonHaiPr_13:7f:55 (08:3e:8e:13:7f:55)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (ACK)
Length: 1
DHCP: ACK (5)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.2.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.2.1
Option: (6) Domain Name Server
Length: 8
Domain Name Server: 200.7.141.6
Domain Name Server: 200.7.141.7
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...