Aller au contenu
Réseaux high

DHCP — Comment votre machine obtient son IP

21 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.

  • 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”)
  • 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
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
  • 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).

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)
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

Si vous voulez obtenir une nouvelle IP ou renouveler le bail :

Fenêtre de terminal
# Libérer l'IP actuelle
sudo dhclient -r eth0
# Demander une nouvelle IP
sudo dhclient eth0
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
  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
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.

  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
  • 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
  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.

  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)
  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

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