# DHCP

Dynamic Host Control Protocol est le protocole utilisé pour assigner automatiquement des adresses IP aux clients d'un réseau.

# Rôle

## DHCP

#### Dynamic Host Control Protocol

Pour qu'un appareil puisse accéder et utiliser un réseau, il est nécessaire de configurer une adresse IP sur une interface ainsi que d'ajouter des entrées à sa table de routage pour l'informer des adresses qui sont accessibles directement et optionnellement, les routes à emprunter pour contacter des appareils à l'extérieur du réseau auquel l'appareil participe.

Dans le contexte d'un appareil qui doit être rejoingnable en tout temps tel qu'un serveur, un routeur, une switch, un point d'accès, etc. il est généralement préférable de configurer leurs adresses manuellement de façon statique pour éviter que le fonctionnement de ces appareils dépende aussi du fonctionnement d'un serveur DHCP. Lorsqu'il s'agit d'un appareil qui n'affecte pas le fonctionnement du réseau en contrepartie (ex. tablette, cellulaire, ordinateur, console de jeu, télévision intelligente, appareils de domotique, etc.), considérant que le commun des mortels n'est pas familier avec l'adressage IP, la quantité d'appareils ainsi que la fréquence à laquelle ces appareils changent de réseau, il est plus pratique de laisser un serveur attribuer des configurations IP automatiquement aux hôtes du réseau.

Ce service est aussi souvent utilisé pour répertorier et identifier l'adresse IP associée à un appareil relié au réseau. Même s'il s'agit d'un poste de travail plutôt qu'un serveur, cette information est utile lorsque l'on veut administrer ces appareils à distance. Il est aussi possible de relier un serveur DHCP à un serveur DNS pour créer des entrées de type A et PTR dans le serveur correspondant au noms des machines et aux adresses qui leur seront attribuées.

# Fonctionnement

Il est important de garder en tête que puisque le protocole sert à attribuer des adresses IP aux clients d'un réseau au moment de leur connexion, la communication entre le serveur et le client se fait entièrement sans adresse IP. La communication entre le client et le serveur est en UDP puisque sans adresse, il est impossible d'établir une connexion TCP et a lieu au port 67.

Le contenu de chaque message envoyé lors d'interactions DHCP est catégorisé en options qui seront décrites dans la suite de ce document.

Pour éviter de garder en mémoire tous les appareils s'étant connectés au réseau, l'attribution d'une adresse IP par un serveur DHCP est temporaire et se nomme un bail.

#### Découverte

À la connexion d'un client configuré en adressage dynamique/DHCP, l'appareil envoie un broadcast demandant à tout serveur DHCP rejoignable de signaler son existence. L'adresse MAC de destination est donc FF:FF:FF:FF:FF:FF pour que la demande soit acheminée à tous les appareils du réseau. Évidemment, pour que la demande soit acheminée au serveur, il est nécessaire à cette étape que le serveur et le client soient reliés au même domaine de diffusion.

Ce type de requête contient habituellement le type de message envoyé (option 53 avec une valeur de 1), le nom d'hôte du client (option 12), la liste de paramètres demandés (option 55) et l'identifiant du client contenant le type de matériel demandant l'adresse et son adresse physique/MAC (option 61).

Les paramètres qui sont demandés sont généralement une adresse IP, un masque de sous-réseau, l'adresse IP d'une passerelle par défaut, des routes statiques, un serveur DNS et un serveur NTP.

Exemple du contenu pertinent d'une demande de découverte DHCP tel que présenté dans Wireshark

```
    Option: (53) DHCP Message Type (Discover)
        DHCP: Discover (1)
    Option: (12) Host Name
        Host Name: Client
    Option: (55) Parameter Request List
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (121) Classless Static Route
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (33) Static Route
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (42) Network Time Protocol Servers
    Option: (61) Client identifier
        Hardware type: Ethernet (0x01)
        Client MAC address: 0c:c7:cb:cc:00:00 (0c:c7:cb:cc:00:00)
    Option: (255) End
        Option End: 255
```

#### Offre

Lorsque le serveur détecte une demande de découverte, celui-ci consultera sa configuration (spécifiquement les étendues d'adresses qu'il est configuré pour servir) et la liste des baux émis qui ne sont pas expirés. S'il reste des adresses qui ne sont pas encore attribuées dans les étendues d'adresses du serveur, le serveur effectuera une requête ARP pour s'assurer qu'aucun appareil soit configuré manuellement avec cette adresse et émettera alors une offre d'adresse destiné à l'adresse MAC du client.

Pour composer son offre, le serveur consultera sa configuration pour déterminer les options à envoyer au client en fonction de l'adresse IP qu'il offrira. L'option 53 de cette réponse aura comme valeur 2 pour indiquer qu'il s'agit d'une offre et contiendra l'ensemble des options que le client a demandé.

Exemple du contenu pertinent d'une offre DHCP offrant l'adresse IP 192.168.0.254/24 à un client tel que présenté dans Wireshark

```
  Your (client) IP address: 192.168.0.254
  Next server IP address: 192.168.0.1
    Option: (53) DHCP Message Type (Offer)
        DHCP: Offer (2)
    Option: (1) Subnet Mask (255.255.255.0)
        Subnet Mask: 255.255.255.0
    Option: (3) Router
        Router: 192.168.0.1
    Option: (51) IP Address Lease Time
        IP Address Lease Time: 30 minutes (1800)
    Option: (54) DHCP Server Identifier (192.168.0.1)
        DHCP Server Identifier: 192.168.0.1
    Option: (255) End
        Option End: 255
```

#### Requête

À cette étape, le client n'a pas encore appliqué son adresse IP et communique encore uniquement à la couche 2 (par adresses MAC). Le contenu de la requête pertinent ici est l'option 50 qui indique l'adresse demandée par le client. Dans le cas démontré dans ce document, le client n'avait pas d'adresse favorite et a seulement demandé l'adresse qui lui a été offerte. Cette option aurait pu être mentionnée à l'étape de la découverte si un client avait une adresse favorite (soit une adresse configurée ou préalablement attribuée par ce serveur)

Exemple du contenu pertinent d'une offre DHCP offrant l'adresse IP 192.168.0.254/24 à un client tel que présenté dans Wireshark

```
    Option: (50) Requested IP Address (192.168.0.254)
        Length: 4
        Requested IP Address: 192.168.0.254
```

#### Admission

Lorsque le serveur DHCP reçoit la requête, il confirmera à ce moment que le client peut appliquer la configuration IP offerte pour la durée du bail mentionnée dans l'option 51.

```
    Option: (51) IP Address Lease Time
        IP Address Lease Time: 30 minutes (1800)
```

À l'expiration du bail, le client fera parvenir une requête identique à la précédente pour recevoir une nouvelle admission et ceci renouvellera la période de validité de son bail.

#### Relâche

Advenant le cas où un client désirerait se faire oublier d'un serveur DHCP, il est possible d'envoyer une requête de relâche (option 53 avec une valeur de 7). Cet oubli permettera au serveur d'attribuer cette adresse IP à un autre client au besoin. Ce message doit contenir l'identifiant du client (option 61) permettant au serveur d'associer la demande avec la liste de baux émis.

```
    Option: (61) Client identifier
        Length: 7
        Hardware type: Ethernet (0x01)
        Client MAC address: 0c:c7:cb:cc:00:00 (0c:c7:cb:cc:00:00)
```

# Configuration

Afin d'émettre des configurations IP fonctionnelles aux clients DHCP d'un réseau, un serveur doit savoir sur quelle interface écouter des demandes, quelles adresses le serveur peut attribuer ainsi que les options à spécifier aux clients. Ces options sont spécifiées en fonction de l'adresse qui sera offerte/attribuée. Chaque système a des particularités et certains systèmes automatisent certaines parties de la configuration.

### Interface(s)

Dans le cas d'un réseau simple, le routeur est généralement l'appareil responsable d'émettre des adresses IP en DHCP aux clients mais dans un réseau de plus grande envergure, il est souvent coutume qu'un seul serveur centralise l'attribution des adresses pour tous les réseaux d'une entreprise. Dans la majorité des réseaux simples, un serveur DHCP attribue des adresses englobée dans le même réseau IP que celui configuré sur l'interface étant à l'écoute des requêtes DHCP. Avec ce type de configuration, l'appareil exécutant le serveur DHCP devra être directement branché dans chaque réseau qu'il devra servir. Dans des topologies réseau plus complexes, des relais seront utilisés dans les autres domaines de diffusion pour acheminer les requêtes au serveur puisque ces requêtes restent à l'intérieur du domaine de broadcast dans lequel elles ont été émises.

### Étendues

Puisque dans tous les réseaux IP, certaines adresses doivent être statiques comme celle du routeur et certaines adresses ne doivent pas être utilisées comme l'adresse de broadcast et l'adresse réseau, il est nécessaire de configurer des étendues ou plages d'adresses IP (souvent appelés "pools") pouvant être attribuées aux clients du réseau. Ces étendues sont représentées par une adresse IP de départ et une adresse IP de fin, nous permettant ainsi d'attribuer seulement les adresses qui seront spécifiées pour se réserver des plages d'adresses pouvant être attribuées manuellement à certains appareils tels qu'une imprimante ou un serveur de partage de fichiers.

### Options

Les options qui seront spécifiées aux clients sont généralement associées à un ou une liste de sous-réseaux IP et options correspondantes configurées dans le serveur. La liste suivante décrit les options les plus communément configurées.

#### Adresse IP

L'adresse IP attribuée n'est pas une option, elle est située dans la réponse à l'extérieur de la section "options".

#### Masque de sous-réseau (option 1)

L'option 1 spécifie au client le masque de sous-réseau à associer à son adresse IP indiquant au client quelles adresses seront directement accessibles à partir de son interface. Ceci est utilisé pour configurer la route directement connectée dans sa table de routage.

La règle suivante sera configurée par cette option dans la table de routage du client :

```
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
        10.60.9.0    255.255.255.0         On-link        10.60.9.69    281
```

<p class="callout warning">Advenant le cas où cette option ne serait pas mentionnée, le résultat serait l'équivalent de configurer une adresse IP avec un masque de sous-réseau /32. Aucune route directement connectée ne serait configurée et l'interface serait incapable de contacter tout autre appareil, incluant son routeur.</p>

#### Routeur (option 3)

L'option 3 spécifie au client quelle adresse utiliser comme destination pour sa route par défaut/sa passerelle par défaut.

La règle suivante sera configurée par cette option dans la table de routage du client :

```
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0        10.60.9.1       10.60.9.69    281
```

<p class="callout warning">Sans cette option, le client ne pourra pas contacter d'autres réseaux.</p>

#### Serveur de temps (option 4)

L'option 3 spécifie au client à quel serveur se référer pour synchroniser son horloge. Certains systèmes ignorent cette option au profit de celle configurée dans leurs paramètres.

#### Serveur de noms de domaine (option 6)

L'option 6 spécifie au client à quel serveur DNS se référer pour traduire des noms de domaines en adresses IP et vice-versa. Cette option est parfois ignorée au profit d'une configuration statique pour contourner ou bénéficier de règles de filtrage web par DNS et par souci de sécurité.

#### Serveur de journalisation (option 7)

L'option 7 spécifie au client à quel serveur faire parvenir une copie de ses journaux ou "logs". Ce paramètre est utilisé pour automatiser la configuration d'une surveillance et journalisation centralisée d'une infrastructure informatique.

#### Nom d'hôte (option 12)

L'option 12 peut attribuer un nom d'hôte à un appareil n'ayant pas été configuré tel qu'une imprimante, un chromecast, apple tv, etc.

#### Nom de domaine et domaine de recherche (options 15 et 119)

L'option 15 permet d'attribuer un nom de domaine en plus du nom d'hôte à un appareil. Ce nom de domaine est utilisé comme "domaine de recherche", ce domaine sera ajouté aux requêtes DNS de l'appareil si un domaine n'est pas mentionné lors d'une tentative de connexion à cette adresse. Supposons qu'un appareil utilise son routeur comme serveur DNS et que ce serveur connait quelques adresses se terminant par "laboratoire.local", si cet appareil tente de rejoindre "routeur", la requête se complètera avec le domaine de recherche devenant ainsi "routeur.laboratoire.local".

#### Routes statiques (option 33)

Au delà de l'option de routeur spécifiant la passerelle par défaut à emprunter, l'option 33 permet de spécifier des routes supplémentaires à installer dans la table de routage du client DHCP.

<p class="callout info">Il est aussi possible avec cette option d'installer une ou plusieurs routes par défaut mais l'option 3 devrait être priorisée pour ce paramètre.</p>

#### Serveur TFTP et fichier de démarrage (options 66 et 67)

Ces options sont utilisées pour spécifier à quel serveur se référer et quel fichier demander pour démarrer à partir d'un serveur sur un réseau plutôt que de démarrer à partir de son propre stockage.

#### Fuseau horaire (options 100 et 101)

Ces options sont utilisées pour spécifier le fuseau horaire dans lequel le client DHCP se situe.

#### Portail captif (option 114)

Cette option est utilisée pour mentionner au client à quelle page web se référer pour accéder au portail captif d'un réseau. C'est le paramètre que vos appareils utilisent pour vous afficher la page de connexion à des réseaux commerciaux public comme ceux de cafés internet, restaurants, etc.

<p class="callout info">Une panoplie d'autres options propriétaires existent pour mentionner des paramètres spécifiques aux vendeurs/manufacturiers telles que l'adresse du serveur auquel se référer pour récupérer une configuration dans le cas d'un point d'accès sans-fil ou d'un commutateur géré par un système centralisé</p>