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
Echange entre client et serveur DHCP

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
Machine à états DHCP

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’optionsSignification
1Subnet Mask
3Router
6Domain Name Server
54DHCP Server Identifier
51IP Address Lease Time
58Renewal Time Value
59Rebinding Time Value
255End

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.