Objectifs de certification
CCNA 200-301
4.3 Expliquer le rôle de DHCP et de DNS au sein du réseau
4.6 Configurer et vérifier DHCP client et relay
5.7 Configurer les fonctionnalités de sécurité Layer 2 (DHCP snooping, dynamic ARP inspection, et port security)
Attribution d’adresses IPv4 : DHCP
Avant d’être capable d’émettre du trafic TCP/IP vers une destination précise, une interface doit disposer au minimum d’une adresse IP et de son masque et, éventuellement d’autres paramètres (passerelle par défaut, résolveur DNS, etc.). En IPv4, c’est DHCP qui permet d’attribuer ces paramètres à une interface qui le demande. DHCP maintient un état des adresses attribuées par un mécanisme de bail (à durée déterminée). Ce chapitre expose le fonctionnement du protocole, sa configuration et sa vérification en Cisco IOS.
En IPv6, le comportement par défaut est l’auto-configuration des interfaces mais la version actualisée de DHCPv6 fournit un service géré des adresses semblable et amélioré d’attribution dynamique des adresses.
1. DHCP (IPv4)
DHCP (Dynamic Host Control Protocol) est formalisé dans le RFC3121
- DHCP est la successeur en version améliorée et compatible du protocole BOOTP. DHCP peut être identifié comme du trafic BOOTP par les analyseurs de paquets.
- La procédure d’attribution d’adresses en DHCP (IPv4) consiste en l’échange de 4 messages sur les ports UDP 67 (Serveur) et 68 (Client).
- Les messages du client au serveur émanent en Broadcast.
- Les réponses du serveur au client se font en Unicast.
1.1. Échange DHCP
Un échange DHCP connait typiquement quatre messages “DORA” :
- DHCPDISCOVER
- DHCPOFFER
- DHCPREQUEST
- DHCPACK
Dans une session typique, le client diffuse (Broadcast) un message DHCPDISCOVER sur son segment local. Le client peut suggérer son adresse IP et la durée du bail (lease). Si le serveur est sur le même segment, il peut répondre avec un message DHCPOFFER qui inclut une adresse IP valide et d’autres paramètres comme le masque de sous-réseau. Une fois que le client reçoit ce message, il répond avec un DHCPREQUEST qui inclut une valeur identifiant le serveur (pour le cas o๠il y en aurait plusieurs). Cette valeur l’identifie de manière certaine et décline implicitement les offres des autres serveurs. Une fois le DHCPREQUEST reçu, le serveur répond avec les paramètres définitifs de configuration par un message DHCPACK (si le serveur a déjà assigné l’adresse IP, il envoie un DHCPNACK).
Si le client détecte que l’adresse IP est déjà utilisée sur le segment, il envoie un DHCPDECLINE au serveur et le processus recommence.
Si le client reçoit un message DHCPNACK du serveur après un DHCPREQUEST, le processus recommence également.
Si le client plus besoin d’une adresse IP, il envoie un DHCPRELEASE au serveur.
Si le client veut étendre la durée du bail qui lui est allouée, il envoie un DHCPREQUEST au serveur dans lequel le champ ‘ciaddr’ correspondra à son adresse IP actuelle. Le serveur répondra avec un DHCPACK comprenant la nouvelle durée du bail.
1.2. États DHCP
La procédure DHCP connait aussi habituellement plusieurs états.
- INIT
- SELECTING
- REQUESTING
- BOUND
- RENEWING
- REBINDING
- BOUND
1.3. Champs DHCP
La capture de trafic DHCP : https://www.cloudshark.org/captures/c8fd8fd7d4dc offre ce scénario d’un client qui démarre sur le réseau :
1 0.000000 0.0.0.0 → 255.255.255.255 DHCP DHCP Discover - Transaction ID 0x62ce1357
2 0.940848 192.168.1.254 → 192.168.1.8 DHCP DHCP Offer - Transaction ID 0x62ce1357
3 0.959828 0.0.0.0 → 255.255.255.255 DHCP DHCP Request - Transaction ID 0x62ce1357
4 0.961122 192.168.1.254 → 192.168.1.8 DHCP DHCP ACK - Transaction ID 0x62ce1357
Si on est attentif aux champs DHCP. Un analyseur de paquet trouve un protocole “BOOTP”. L’adresse IPv4 attribuée remplit un champ d’en-tête mais les paramètres de bail, de masque, de passerelle et autres sous livrés sous forme d’option.
User Datagram Protocol, Src Port: 67, Dst Port: 68
Source Port: 67
Destination Port: 68
Length: 308
Checksum: 0xe057 [unverified]
[Checksum Status: Unverified]
[Stream index: 0]
Bootstrap Protocol (ACK)
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x62ce1357
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.1.8
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: 72:41:79:84:d5:7c (72:41:79:84:d5:7c)
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.1.254
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (86400s) 1 day
Option: (58) Renewal Time Value
Length: 4
Renewal Time Value: (43200s) 12 hours
Option: (59) Rebinding Time Value
Length: 4
Rebinding Time Value: (75600s) 21 hours
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.1.254
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.1.254
Option: (255) End
Option End: 255
Padding: 0000000000000000000000000000
1.4. Options DHCP
Code d’options | Signification |
---|---|
1 | Subnet Mask |
3 | Router |
6 | Domain Name Server |
54 | DHCP Server Identifier |
51 | IP Address Lease Time |
58 | Renewal Time Value |
59 | Rebinding Time Value |
255 | End |
2. Configuration DHCP en Cisco IOS
Le principe de configuration d’un service DHCP est assez évident : Dans un “pool” nommé on définit une plage à servir et différentes options telles que la durée du bail, la passerelle par défaut et bien d’autres options. Aussi, on peut exclure ou réserver des adresses du bloc.
2.1. Création d’un pool DHCP
Pour définir une plage, où le masque peut être noté en décimal pointé 255.255.255.0
en format “legacy” ou en notation CIDR /24
par exemple, on instancie au préalbale un “pool” DHCP en configuration globale.
(config)#ip dhcp pool <name>
(dhcp-config)#network <subnet> <mask>
Nécessairement, il faut que le routeur offrant ce service dispose d’une interface capable de communiquer directement avec le client en TCP/IP.
2.2. Durée du bail DHCP
Par défaut, la durée d’un bail d’adresse DHCP en Cisco IOS est de un jour, 24 heures. On peut modifier cette valeur dans la configuration du pool selon la nomenclature “Jours Heures Minutes” avec la commande lease
:
gateway(dhcp-config)#lease ?
<0-365> Days
infinite Infinite lease
gateway(dhcp-config)#lease 1 ?
<0-23> Hours
<cr>
gateway(dhcp-config)#lease 1 1 ?
<0-59> Minutes
<cr>
gateway(dhcp-config)#lease 1 1 1 ?
<cr>
gateway(dhcp-config)#lease 1 1 1
2.3. Options passerelle et serveur DNS
Pour configurer deux paramètres essentiels supplémentaires comme une passerelle par défaut et des serveurs de noms, on utilise les commandes suivantes :
(config)#ip dhcp pool <name>
(dhcp-config)#default-router <ip_address>
(dhcp-config)#dns-server <server_1> <server_2> <...>
2.4. Exclusion d’adresses à distribuer
Pour exclure certaines adresses de la plage, on reviendra en configuration globale avec la commande suivantes en définissant une plage d’une première à une dernière adresse.
(config)#ip dhcp excluded-address <première_adresse> <dernière_adresse>
2.5. Destruction du pool DHCP
On détruit le “pool” DHCP en le niant en configuration globale :
(config)#no ip dhcp pool <name>
Voici une configuration opérationnelle sur le LAN du routeur configuré en 192.168.1.254/24
sur son interface LAN :
Gateway(config)#ip dhcp pool GW
Gateway(dhcp-config)#network 192.168.1.0 255.255.255.0
Gateway(dhcp-config)#default-router 192.168.1.254
Gateway(dhcp-config)#dns-server 8.8.8.8
Gateway(dhcp-config)#lease 0 8
Gateway(dhcp-config)#exit
Gateway(config)#ip dhcp excluded-address 192.168.1.1 192.168.1.10
Le pool DHCP servira les adresses de 192.168.1.11/24
à 192.168.1.254/24
avec un bail de huit heures en poussant comme paramètre de passerelle par défaut 192.168.1.254
et comme paramètre de serveur de noms 8.8.8.8
.
2.6. Configuration des options “Serveur TFTP” et “Serveur NTP”
Un service DHCP peut pousser une multitude de paramètres (à condition que les hôtes puissent les interpréter). En dehors options habituelles (Router, DNS, masque, durée du bail, etc.), les options supplémentaires sont référencées par un code en hexadécimal.
- L’option DHCP 150 fournit les adresses IP d’une liste de serveurs TFTP (RFC 5859)
- L’option DHCP 66 donne l’adresse IP ou le nom d’hôte d’un seul serveur TFTP (RFC 2132).
Par exemple :
(dhcp-config)#option 150 ip 192.168.1.254
(dhcp-config)#option 66 ascii gateway
- L’option DHCP 42 fournit l’adresse de serveurs NTP :
(dhcp-config)#option 42 ip 192.168.1.254
Voir : https://www.cloudshark.org/captures/c0166adb7bb7?filter=bootp
2.7. Configuration d’un interface DHCP client
On utilise le paramètre dhcp
dans la commande ip address dhcp
au lieu d’y placer une adresse IPv4 et son masque.
(config)#interface g0/1
(config-if)#ip address dhcp
3. Diagnostic DHCP en Cisco IOS
Voici une exemple de configuration du service DHCP en Cisco IOS.
gateway#sh run | begin ip dhcp
ip dhcp excluded-address 192.168.1.200 192.168.1.254
ip dhcp excluded-address 192.168.1.1 192.168.1.99
!
ip dhcp pool DHCP-LAN
network 192.168.1.0 255.255.255.0
default-router 192.168.1.254
dns-server 192.168.1.254
option 150 ip 192.168.1.254
option 66 ascii gateway
Pour en faire le diagnostic, on utilisera volontiers les commandes IOS suivantes :
show ip dhcp binding
show ip dhcp pool <name>
show ip dhcp server statistics
show ip dhcp conflict
debug ip dhcp server packet
debug ip dhcp server events
3.1. Vérification des baux attribués
Pour vérifier les baux attribués :
gateway#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address Client-ID/ Lease expiration Type
Hardware address/
User name
192.168.1.1 5250.de85.6800 Jun 26 2018 08:29 AM Automatic
192.168.1.2 5250.de5f.eb00 Jun 26 2018 08:29 AM Automatic
3.2. Vérification de la configuration du pool DHCP
Pour vérifier le pool DHCP :
gateway#show ip dhcp pool DHCP-LAN
Pool DHCP-LAN :
Utilization mark (high/low) : 100 / 0
Subnet size (first/next) : 0 / 0
Total addresses : 254
Leased addresses : 2
Pending event : none
1 subnet is currently in the pool :
Current index IP address range Leased addresses
192.168.1.2 192.168.1.1 - 192.168.1.254 2
3.3. Statistiques des messages DHCP
Pour obtenir les statistiques des messages DHCP :
gateway#show ip dhcp server statistics
Memory usage 40829
Address pools 1
Database agents 0
Automatic bindings 2
Manual bindings 0
Expired bindings 0
Malformed messages 0
Secure arp entries 0
Message Received
BOOTREQUEST 0
DHCPDISCOVER 4
DHCPREQUEST 2
DHCPDECLINE 0
DHCPRELEASE 0
DHCPINFORM 0
Message Sent
BOOTREPLY 0
DHCPOFFER 2
DHCPACK 2
DHCPNAK 0
3.4. Déboggage du service DHCP
La commande debug ip dhcp server
suivuie d’un paramètre active les logs sur le service DHCP.
gateway#debug ip dhcp server ?
class Class-based address allocation
events Report address assignments, lease expirations, etc.
linkage Show database linkage
packet Decode message receptions and transmissions
redundancy DHCP server redundancy events
Par exemple, quand une station de travail du réseau local redémarre :
gateway#debug ip dhcp server events
DHCP server event debugging is on.
Jun 25 12:09:35.062: DHCPD: Sending notification of ASSIGNMENT:
Jun 25 12:09:35.062: DHCPD: address 192.168.1.2 mask 255.255.255.0
Jun 25 12:09:35.062: DHCPD: htype 1 chaddr 5250.de5f.eb00
Jun 25 12:09:35.062: DHCPD: lease time remaining (secs) = 73206
gateway#
Jun 25 12:09:39.057: DHCPD: checking for expired leases.
On ne manquera pas de désactiver le déboggage.
gateway#undebug all
All possible debugging has been turned off
4. DHCP Relay
Les clients DHCP utilisent le Broadcast UDP pour entrer en contact avec leurs serveurs. Ce trafic est arrêté par les routeurs du premier saut.
Pour faire en sorte que la passerelle du réseau qui reçoit du trafic DHCP le transfère auprès du serveur qui gère la plage DHCP à servir, il est possible de configurer un routeur Cisco avec la commande ip helper-address
en configuration d’interface.
L’interface qui reçoit ce trafic DHCPDISCOVER remplace le champ IP source par la sienne (une adresse Unicast dans le bloc à servir) et remplace l’adresse IP de destination 255.255.255.255
par l’adresse IP du serveur DHCP renseigné en paramètre de la commande ip helper-address
en configuration d’interface.
Cette solution est intéressante et légère quand on désire centraliser le rôle DHCP à un seul endroit de son interréseau.