Aller au contenu
Réseaux high

DHCP, Comment votre machine obtient son IP

27 min de lecture

Votre VM affiche 169.254.x.x au lieu d'une vraie adresse IP ? C'est le signe que le DHCP n'a pas fonctionné. Ce module vous explique comment DHCP attribue automatiquement les adresses IP et comment diagnostiquer quand ça ne marche pas, une compétence indispensable quand vous déployez des VMs ou des conteneurs.

Un seul indice suffit pour trancher : regardez l'adresse. Si elle commence par 169.254, aucun serveur n'a répondu et le problème est en amont de la machine. Si elle est dans le bon sous-réseau, DHCP a fonctionné et la panne est ailleurs.

  • DHCP = attribution automatique d'IP (vous n'avez rien à configurer)
  • 169.254.x.x = DHCP a échoué (APIPA, auto-attribution sans serveur)
  • DORA = Discover → Offer → Request → Acknowledge
  • Si problème VM : vérifiez que le réseau est en mode "Bridge" ou "NAT" (pas "Host-only")

DHCP ne fournit pas qu'une adresse. Une configuration réellement complète tient en trois vérifications, et c'est souvent la deuxième ou la troisième qui manque quand « le réseau marche à moitié » : une machine peut avoir une IP valide, répondre en local, et rester incapable de sortir faute de passerelle ou de DNS.

  • ip addr affiche une IP dans le bon sous-réseau (pas 169.254.x.x)
  • ip route montre une passerelle par défaut
  • resolvectl status ou /etc/resolv.conf montre un serveur DNS

Ces trois commandes couvrent 90% des interventions : lire l'état, lire la route, forcer une nouvelle négociation. Retenez surtout la troisième, c'est la seule qui modifie quelque chose. Elle coupe brièvement la connectivité, donc évitez de la lancer depuis une session SSH sur la machine concernée.

Fenêtre de terminal
# 1. Voir mon IP actuelle
ip addr show
# 2. Voir la passerelle
ip route | grep default
# 3. Forcer un renouvellement DHCP
sudo dhclient -v eth0 # remplacer eth0 par votre interface

Un mot sur dhclient avant d'aller plus loin : l'ISC DHCP dont il fait partie n'est plus maintenu depuis fin 2022, l'éditeur ayant arrêté le développement du client et du relais et renvoyant vers Kea côté serveur. Le binaire a donc disparu des installations par défaut de plusieurs distributions récentes. Si la commande renvoie command not found, votre machine est pilotée par systemd-networkd, NetworkManager ou dhcpcd. Les équivalents sont respectivement sudo networkctl renew ens3, sudo nmcli device reapply ens3 et sudo dhcpcd -n ens3.

  • Module 3 complété : vous comprenez les adresses IP et les masques
  • Module 4 complété : vous savez ce qu'est une passerelle
  • Module 5 complété : vous comprenez le rôle du DNS
  • Une machine Linux connectée à un réseau avec DHCP

Quick check en 1 minute (si vous êtes en incident)

Section intitulée « Quick check en 1 minute (si vous êtes en incident) »

Si vous avez un problème DHCP maintenant, voici la séquence rapide :

Fenêtre de terminal
# 1. Interface UP ?
ip link show
# 2. Quelle IP ? (169.254.x.x = problème)
ip addr show
# 3. Passerelle configurée ?
ip route show | grep default
# 4. DNS configuré ?
resolvectl status # ou cat /etc/resolv.conf
# 5. Forcer un renouvellement DHCP (verbose)
sudo dhclient -v eth0 # remplacez eth0 par votre interface
# 6. Observer le trafic DHCP
sudo tcpdump -ni eth0 port 67 or port 68
  • Le problème que DHCP résout : configuration réseau automatique
  • Le processus DORA : les 4 étapes de l'attribution d'IP
  • Ce que DHCP fournit : IP, masque, passerelle, DNS
  • Le bail DHCP : durée et renouvellement
  • Les problèmes courants : 169.254.x.x, pas de DHCP, bail expiré
  • Cas pratiques : VMs, conteneurs, cloud

Sans DHCP, vous devriez configurer manuellement chaque machine :

  • Choisir une adresse IP non utilisée
  • Saisir le masque de sous-réseau
  • Configurer la passerelle par défaut
  • Renseigner les serveurs DNS

Imaginez faire ça pour 100 machines. Ou pire : gérer les conflits quand deux machines ont la même IP.

DHCP (Dynamic Host Configuration Protocol) automatise tout ça. Un serveur DHCP, souvent votre box ou routeur, distribue les configurations réseau à la demande.

Sans DHCPAvec DHCP
Configuration manuelleConfiguration automatique
Risque de conflits d'IPIPs uniques garanties
Maintenance fastidieuseCentralisée
Erreurs de saisiePas d'erreur humaine

L'attribution d'une adresse IP par DHCP se fait en 4 étapes. On les retient avec l'acronyme DORA : Discover, Offer, Request, Acknowledge.

DHCP — Le processus DORA💻 Client(pas d'IP)🖥️ Serveur DHCP(pool d'IPs)① D - Discover"Y a-t-il un serveur ?"② O - Offer"Voici 192.168.1.50"③ R - Request"OK, je prends celle-ci"④ A - Acknowledge"C'est noté, elle est à toi"✅ Client configuréIP: 192.168.1.50
  1. Discover, Le client cherche un serveur

    Quand votre machine démarre sans IP, elle envoie un message broadcast (à tout le réseau) : "Y a-t-il un serveur DHCP ici ?"

    Ce message est envoyé depuis 0.0.0.0 (pas d'IP source) vers 255.255.255.255 (tout le monde).

  2. Offer, Le serveur propose une IP

    Le serveur DHCP reçoit la demande et répond : "Voici une IP disponible : 192.168.1.50. Tu la veux ?"

    L'offre inclut aussi le masque, la passerelle et les DNS.

  3. Request, Le client accepte

    Le client répond (toujours en broadcast, car il n'a pas encore d'IP) : "OK, je prends 192.168.1.50."

    Pourquoi en broadcast ? Pour informer les autres serveurs DHCP (s'il y en a plusieurs) que l'offre est acceptée.

  4. Acknowledge, Le serveur confirme

    Le serveur valide : "C'est noté, 192.168.1.50 est à toi pour les 24 prochaines heures (le bail)."

    Le client peut maintenant utiliser cette configuration.

DHCP ne donne pas qu'une adresse IP. Il fournit une configuration réseau complète :

Ce que DHCP fournit📍 Adresse IP192.168.1.50🎭 Masque de sous-réseau255.255.255.0 (/24)🚪 Passerelle par défaut192.168.1.1 (votre box)🔍 Serveurs DNS192.168.1.1, 8.8.8.8➕ Optionnel : durée du bail (lease), serveur NTP, domaine de recherche...
ÉlémentRôleExemple
Adresse IPIdentifie la machine192.168.1.50
MasqueDéfinit le réseau local255.255.255.0
PasserelleRoute vers Internet192.168.1.1
Serveurs DNSRésolution de noms192.168.1.1, 8.8.8.8

Options supplémentaires (selon la configuration) :

  • Durée du bail : combien de temps l'IP est réservée
  • Serveur NTP : pour synchroniser l'heure
  • Domaine de recherche : suffixe DNS ajouté aux noms courts

Quand vous dépannez DHCP ou configurez un serveur, ces options reviennent souvent :

OptionNomContenuUtilité
3RouterAdresse de la passerelleSortir du réseau local
6DNS ServersListe des serveurs DNSRésolution de noms
15Domain NameDomaine de rechercheCompléter les noms courts
51Lease TimeDurée du bail en secondesContrôler la fréquence de renouvellement
54Server IdentifierIP du serveur DHCPIdentifier qui a attribué l'IP
42NTP ServersServeurs de tempsSynchronisation horaire

Sur Linux, plusieurs commandes permettent de voir la configuration reçue :

Fenêtre de terminal
# Voir votre IP et masque
ip addr show
# Voir votre passerelle
ip route show
# Voir vos serveurs DNS
cat /etc/resolv.conf
# ou sur systemd
resolvectl status

L'adresse IP n'est pas donnée définitivement. Elle est louée pour une durée limitée : c'est le bail (lease).

La durée de bail est un arbitrage entre stabilité et rotation. Un bail long évite les renégociations et garde les adresses stables, mais immobilise une adresse longtemps après le départ de la machine. Un bail court libère vite le pool, au prix de bien plus de trafic DHCP. Les valeurs ci-dessous sont des ordres de grandeur constatés, pas des règles : ce sont surtout les contextes qu'il faut retenir, car ils expliquent le choix.

ContexteDurée de bail
Réseau domestique24 heures
Réseau d'entreprise8 heures
Réseau public (café, hôtel)1-2 heures
Cloud / VMVariable (souvent 1 heure)

Le client n'attend pas l'expiration pour agir : il tente un renouvellement bien avant, à deux moments distincts. Le schéma se lit de gauche à droite comme une frise, chaque marque étant un pourcentage de la durée totale du bail. Ce découpage explique pourquoi une coupure du serveur DHCP passe souvent inaperçue : entre T1 et l'expiration, la machine garde son adresse et continue de fonctionner normalement.

Obtention 50% 87.5% Expiration
│ │ │ │
▼ ▼ ▼ ▼
[DORA] → [Renewal T1] → [Rebind T2] → [Bail expiré]
  • T1 (50%) : le client essaie de renouveler avec le même serveur (unicast)
  • T2 (87.5%) : le client essaie avec n'importe quel serveur DHCP (broadcast)
  • Expiration : l'IP est libérée, retour à DORA

Ces pourcentages, 50% pour T1 et 87,5% pour T2, sont les valeurs recommandées par la RFC 2131 et la plupart des implémentations les appliquent telles quelles. Elles restent configurables côté serveur : ne concluez pas à un dysfonctionnement si vos captures montrent un renouvellement à un autre moment.

La commande à taper dépend du gestionnaire réseau installé, pas de la distribution. Identifiez-le d'abord avec systemctl is-active NetworkManager systemd-networkd, puis choisissez l'onglet correspondant. Lancer dhclient sur une machine pilotée par NetworkManager crée deux clients concurrents sur la même interface, avec des résultats imprévisibles.

Fenêtre de terminal
# Libérer l'IP actuelle
sudo dhclient -r eth0
# Demander une nouvelle IP
sudo dhclient eth0

Le critère de décision n'est pas « serveur ou poste de travail » mais qui doit connaître l'adresse à l'avance. Dès qu'une autre machine, un enregistrement DNS ou une règle de pare-feu cite l'adresse en dur, elle doit être fixe. Dans tous les autres cas, DHCP évite une configuration à maintenir. La troisième ligne du tableau mérite votre attention : la réservation est presque toujours la bonne réponse, car elle fixe l'adresse côté serveur sans rien figer sur la machine.

SituationRecommandationPourquoi
Poste de travailDHCPFlexibilité, pas de maintenance
Serveur en productionIP statiqueStabilité, DNS prévisible
Imprimante réseauRéservation DHCPIP fixe sans config manuelle
VM de testDHCPCréation/destruction fréquentes
ConteneurDHCP (géré par l'orchestrateur)IP éphémères

Si votre machine affiche une IP en 169.254.x.x, c'est le signe que DHCP a échoué.

Fenêtre de terminal
ip addr show eth0

Sortie problématique :

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 169.254.45.123/16 brd 169.254.255.255 scope link

APIPA (Automatic Private IP Addressing), aussi appelé IPv4 Link-Local (RFC 3927), est un mécanisme de secours. Selon l'OS et la configuration, la machine peut s'auto-attribuer une IP dans la plage 169.254.0.0/16 quand DHCP échoue.

Conséquences :

  • Pas d'accès à Internet (pas de passerelle)
  • Communication possible uniquement avec d'autres machines APIPA sur le même réseau physique

Suivez ces cinq étapes dans l'ordre : chacune élimine une couche, de la plus basse à la plus haute. Inutile d'analyser le trafic DHCP si l'interface est DOWN, et inutile de soupçonner le serveur si aucun client DHCP ne tourne sur la machine. L'étape 4 est celle qui tranche vraiment : elle montre si le problème vient du client (rien n'est émis) ou du réseau (les Discover partent, rien ne revient).

  1. Vérifier l'état de l'interface

    Fenêtre de terminal
    ip link show eth0

    L'interface est-elle UP ? Le câble est-il branché ?

  2. Vérifier si DHCP est actif

    Fenêtre de terminal
    # Voir les processus DHCP
    ps aux | grep -E "dhclient|dhcpcd|NetworkManager"
  3. Relancer DHCP manuellement

    Fenêtre de terminal
    sudo dhclient -v eth0

    L'option -v (verbose) montre les étapes DORA en temps réel.

  4. Vérifier si le serveur DHCP répond

    Fenêtre de terminal
    # Écouter le trafic DHCP (remplacez eth0 par votre interface)
    sudo tcpdump -ni eth0 port 67 or port 68

    Sortie attendue (DORA complet) :

    12:34:56 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from aa:bb:cc:dd:ee:ff, length 300
    12:34:56 IP 192.168.1.1.67 > 192.168.1.50.68: BOOTP/DHCP, Reply, length 300
    12:34:56 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from aa:bb:cc:dd:ee:ff, length 300
    12:34:56 IP 192.168.1.1.67 > 192.168.1.50.68: BOOTP/DHCP, Reply, length 300

    Diagnostic :

    Vous voyezSignificationAction
    Discover sans OfferServeur DHCP injoignableVérifier serveur, câble, VLAN, relay
    Discover + Offer sans RequestClient ne répond pasVérifier client, pare-feu local
    DORA complet mais pas d'IPConfiguration clientVérifier dhclient, NetworkManager
    Rien du toutInterface down ou mauvais filtreVérifier ip link, nom interface
  5. Vérifier la configuration obtenue

    Fenêtre de terminal
    # Fichier de bail (selon le client)
    cat /var/lib/dhcp/dhclient.eth0.leases
    # ou
    cat /var/lib/dhclient/dhclient.leases

Gardez ce tableau sous la main pendant un incident : il part du symptôme visible, celui que vous constatez sans outil, et non de la cause. Les deux dernières lignes sont les plus traîtresses, parce que la machine semble fonctionner : une adresse qui change ou un conflit ne se voient qu'au moment où une connexion tombe sans explication.

SymptômeCause probableSolution
169.254.x.xPas de serveur DHCPVérifier le serveur, le câble, le VLAN
IP normale mais pas de gatewayDHCP partielVérifier config serveur DHCP
IP qui change souventBail courtConfigurer une réservation
"No lease, failing"Serveur down ou filtréVérifier connectivité au serveur
Conflit d'IPIP statique sur une plage DHCPExclure les IP statiques de la plage

En entreprise, vous rencontrerez souvent des VLANs (réseaux virtuels séparés). Problème : DHCP ne fonctionne pas directement entre VLANs.

Le blocage vient d'une propriété fondamentale du routage : un broadcast ne franchit pas un routeur. Il reste confiné au sous-réseau où il est émis. La séquence ci-dessous détaille l'impasse, étape par étape.

  1. Le client DHCP envoie un broadcast (Discover)
  2. Les routeurs ne relaient pas les broadcasts entre sous-réseaux par défaut
  3. Le serveur DHCP sur un autre VLAN ne reçoit jamais la requête

Solution : configurer un relais DHCP (DHCP relay / ip helper-address) sur le routeur.

┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Client │ 1. Discover │ Routeur │ 2. Relais │ Serveur │
│ VLAN 20 │ ──────────────────►│ (relay) │ ──────────────────►│ DHCP │
│ │ │ │ │ VLAN 10 │
│ │◄──────────────────────────────────────────────────────│ │
└─────────────┘ 4. Offer (via relay) 3. Offer └─────────────┘

Le routeur transforme le broadcast en unicast vers le serveur DHCP, puis retourne la réponse au bon VLAN.

Même pour un module débutant/intermédiaire, vous devez connaître les risques DHCP en production :

AttaqueDescriptionImpact
Rogue DHCPServeur DHCP pirate sur le réseauClients redirigés vers une fausse passerelle (MITM)
DHCP StarvationÉpuisement du pool par requêtes massivesPlus d'IP disponibles, DoS
SpoofingUsurpation d'identité via MAC forgéVol d'IP réservée

La défense la plus efficace se joue sur le commutateur, pas sur les machines : c'est le seul équipement qui voit tout le trafic du segment. Le DHCP Snooping est la mesure de base, celle qui neutralise à elle seule le serveur pirate en refusant les réponses DHCP venant d'un port non déclaré. Les trois autres mesures la complètent et ne la remplacent pas.

  • DHCP Snooping : le switch n'autorise que les serveurs DHCP légitimes (ports "trusted")
  • Port Security : limite le nombre de MAC par port
  • Segmentation : isoler les VLANs sensibles
  • Logs centralisés : surveiller les attributions anormales

Dans le cloud, le DHCP est géré par l'hyperviseur. Chaque VM reçoit automatiquement :

  • Une IP privée du subnet
  • La passerelle du VPC
  • Les serveurs DNS du cloud (ou les vôtres si configurés)
Fenêtre de terminal
# Sur une VM AWS, vérifier la configuration
ip addr show
ip route show
cat /etc/resolv.conf

Docker n'utilise pas DHCP au sens protocolaire. Il gère l'attribution d'IP via son IPAM interne (IP Address Management) sur les réseaux bridge :

Fenêtre de terminal
# Créer un conteneur et voir son IP
docker run --rm alpine ip addr
# Voir la configuration du réseau bridge (dont l'IPAM)
docker network inspect bridge

Les conteneurs reçoivent souvent une IP dans la plage 172.17.0.0/16 par défaut, mais cette plage est configurable (daemon.json ou création de réseau custom).

Dans la plupart des clusters Kubernetes, les pods reçoivent leur IP du CNI (Container Network Interface) via son propre IPAM, pas de DHCP. Le principe reste similaire : attribution automatique depuis un pool configuré.

Fenêtre de terminal
# Voir l'IP d'un pod
kubectl get pod mon-pod -o wide

Ce premier exercice ne modifie rien : il vous fait lire l'état actuel de votre machine. L'objectif est de savoir se trouve chaque information, pour ne plus la chercher pendant un incident. Notez vos valeurs sur un papier, elles serviront de référence dans le TP 3.

  1. Affichez votre configuration actuelle

    Fenêtre de terminal
    ip addr show
    ip route show
    cat /etc/resolv.conf

    Notez votre IP, masque, passerelle et DNS.

  2. Vérifiez le bail DHCP

    Fenêtre de terminal
    # Chercher le fichier de bail
    find /var/lib -name "*lease*" 2>/dev/null
    cat /var/lib/dhcp/dhclient.*.leases

    Quelle est la durée du bail ?

  3. Identifiez votre serveur DHCP

    Dans le fichier de bail, cherchez dhcp-server-identifier.

Ici vous observez le protocole en direct. Le point important est l'ordre des opérations : tcpdump doit tourner avant de forcer le renouvellement, sinon vous manquerez les paquets. Prévoyez deux terminaux, et travaillez depuis une console locale plutôt qu'une session SSH sur la machine testée.

  1. Lancez tcpdump pour observer

    Fenêtre de terminal
    sudo tcpdump -i eth0 port 67 or port 68 -n
  2. Dans un autre terminal, forcez un renouvellement

    Fenêtre de terminal
    sudo dhclient -r eth0 && sudo dhclient -v eth0
  3. Observez les 4 étapes DORA

    Vous devriez voir :

    • DHCP Discover (votre machine)
    • DHCP Offer (le serveur)
    • DHCP Request (votre machine)
    • DHCP ACK (le serveur)

Ce dernier exercice reproduit volontairement la panne que vous rencontrerez en production : une machine sans adresse. Il vous fait constater le comportement réel de votre système, qui n'est pas le même partout : certaines configurations basculent en 169.254.x.x, d'autres restent simplement sans adresse IPv4. Ne le lancez pas sur une machine distante, vous perdriez l'accès.

  1. Libérez votre IP

    Fenêtre de terminal
    sudo dhclient -r eth0
  2. Vérifiez que vous n'avez plus d'IP

    Fenêtre de terminal
    ip addr show eth0

    L'interface devrait n'avoir qu'une adresse IPv6 link-local.

  3. Attendez quelques secondes

    Sans intervention, la machine peut passer en APIPA ou rester sans IP.

  4. Récupérez une IP

    Fenêtre de terminal
    sudo dhclient eth0
  • DHCP automatise la configuration réseau (IP, masque, gateway, DNS)
  • DORA : Discover → Offer → Request → Acknowledge (4 étapes UDP)
  • 169.254.x.x = APIPA = pas de serveur DHCP trouvé
  • Bail : l'IP est louée pour une durée limitée (souvent 24h)
  • dhclient -v eth0 : force un renouvellement et montre le processus
  • Réservation DHCP : IP fixe sans config manuelle sur la machine
  • VMs/conteneurs : DHCP géré par l'hyperviseur ou l'orchestrateur

Les questions portent sur le raisonnement de diagnostic plutôt que sur la mémorisation des numéros d'options : que signifie une adresse en 169.254, à quel moment le client relance une négociation, ce que le relais change dans un réseau segmenté.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
10 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Les questions rassemblées ici reviennent régulièrement en formation et recoupent les cas non traités dans le corps du module : cohabitation de plusieurs serveurs, DHCP en IPv6, comportement des baux après un redémarrage.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn