Terug naar hoofdinhoud

Linux concept: DHCP

25 augustus 2026

Je steekt een netwerkkabel in, of gaat op een wifinetwerk, en een paar seconden later werkt alles. Je hebt geen IP-adres gekozen, geen gateway opgezocht en geen DNS-server ingetypt. Iets heeft dat allemaal aan je machine gegeven terwijl jij de laptop nog aan het openklappen was. Dat iets is DHCP, en op de meeste netwerken is het de dienst met de grootste gevolgen waar niemand aan denkt tot de dag dat hij stopt.

1. De basis

DHCP is hoe een machine die niets van een netwerk weet alles krijgt wat hij nodig heeft om dat netwerk te gebruiken. Het lost een kip-en-eiprobleem op: om een server om configuratie te vragen heb je een adres nodig, en dat adres is precies waar je om vraagt.

De truc is broadcast. Een machine zonder adres roept het lokale netwerk in, en elke DHCP-server die het hoort antwoordt. Daarom werkt DHCP alleen op het netwerksegment waar je fysiek aan hangt, en daarom moet een router speciaal ingesteld worden om het ergens anders heen door te sturen. Sectie 5 behandelt hoe dat doorsturen werkt, want vrijwel geen enkele organisatie draait een aparte server per VLAN.

1.1 Het is niet alleen een adres

De meeste mensen omschrijven DHCP als "dat ding dat je een IP-adres geeft". Dat is het kleinste deel van wat het doet. Een gewone lease draagt ook de instellingen die dat adres bruikbaar maken:

Wat er binnenkomtWaarom je het nodig hebtZonder
IP-adres en prefix Je identiteit op dit netwerk, en welke adressen lokaal zijn Helemaal geen netwerk
Default gateway Waar alles heen moet wat niet lokaal is Het lokale netwerk werkt, het internet niet
DNS-servers Namen omzetten in adressen Adressen werken, namen niet: "het internet is stuk"
Zoekdomein Korte namen als printer aanvullen Korte interne namen worden niet meer opgezocht
NTP-servers De klok gelijkzetten Klokafwijking, en daarna mislukkende certificaten en authenticatie
Leaseduur Hoe lang dit allemaal geldig is Geen manier om adressen terug te halen

Die derde rij is het stilstaan waard, want het is de meest voorkomende DHCP-storing in de praktijk. Als DHCP een DNS-server uitdeelt die fout of onbereikbaar is, wijzen alle symptomen naar DNS, het internet of de website. Vrijwel niemand kijkt naar het ding dat die DNS-server geleverd heeft.

1.2 Een lease is huur, geen cadeau

DHCP geeft je geen adres. Het leent je er een, voor een afgesproken periode, en verwacht dat je voor het einde daarvan terugkomt om opnieuw te vragen.

Dit is de ontwerpbeslissing waardoor de rest logisch wordt. Adressen zijn op elk netwerk een eindige voorraad, en apparaten komen en gaan voortdurend. Een lease betekent dat een adres vanzelf terugkeert in de voorraad als een laptop vertrekt en nooit meer terugkomt, zonder dat iemand een lijst bijhoudt.

Het juiste mentale model: DHCP is een huurovereenkomst met een klok erop, geen database van wie wat bezit. Elk vreemd DHCP-gedrag wordt begrijpelijk zodra je vraagt "waar in zijn leasecyclus zit deze machine?"

1.3 Waar dit artikel over gaat

Dit artikel behandelt wat DHCP uitdeelt en waarom, het gesprek van vier pakketten dat het aflevert, hoe leases verlengd worden en wat er gebeurt als dat niet lukt, hoe je de lease van je eigen machine leest, hoe je een server draait, en het beveiligingsprobleem dat midden in het protocol zit.

DHCP en DNS zijn buren en worden voortdurend met elkaar verward. DHCP is hoe je machine leert welke DNS-server hij moet vragen; DNS is wat daarna gebeurt. Het bijbehorende artikel over DNS behandelt die tweede helft.

Naar boven

2. Waar komt de naam vandaan?

DHCP staat voor Dynamic Host Configuration Protocol, en elk woord erin is gekozen tegen iets specifieks.

DHCP  =  Dynamic Host Configuration Protocol
  • Dynamic, omdat de voorgaande systemen statisch waren. Configuratie werd met de hand opgeschreven, per machine, en een netwerk wijzigen betekende elk apparaat langsgaan.
  • Host, het oude woord voor elke machine aan een netwerk, uit een tijd waarin dat meestal iets groots in een ruimte met een verhoogde vloer betekende.
  • Configuration, bewust breder dan "adres". Zelfs in 1993 was de bedoeling een heel pakket instellingen af te leveren.
  • Protocol, omdat het een vastgelegd gesprek is en geen product. Elke client kan met elke server praten.

Het woord dat het meeste werk doet is dynamic. Dat is de hele bedoeling: een machine die nog nooit op dit netwerk geweest is, en waar de beheerder nog nooit van gehoord heeft, kan aankomen en binnen een seconde correct ingesteld zijn zonder dat er een mens aan te pas komt.

Naar boven

3. Een korte geschiedenis

DHCP is de derde poging tot hetzelfde probleem, en elke poging faalde op een manier die de volgende vormgaf.

De eerste was RARP, Reverse ARP: een machine zond zijn hardware-adres uit en vroeg "wie ben ik?". Het werkte, en het gaf precies een ding terug, een IP-adres, zonder gateway, zonder DNS en zonder manier om het uit te breiden. Het kon ook geen router over, omdat het volledig onder de IP-laag leefde.

BOOTP verving het in september 1985 met RFC 951, het "Bootstrap Protocol". BOOTP liep over UDP, dus het kon over routers doorgestuurd worden, en het kon extra instellingen dragen. De beperking zat in de naam: het was gebouwd om schijfloze werkstations op te starten vanuit een vaste tabel. Een beheerder schreef nog steeds elk hardware-adres met de hand op, en een adres werd permanent toegewezen.

DHCP behield het pakketformaat van BOOTP, en daarom werken de twee samen, en voegde het ontbrekende idee toe: leases. Adressen konden nu tijdelijk uit een voorraad uitgedeeld worden aan machines die niemand ooit geregistreerd had. De specificatie waar alles nog steeds op draait is RFC 2131, in maart 1997 gepubliceerd door R. Droms, die het eerdere RFC 1541 verving.

JaarMijlpaal
1984 RARP: zend je hardware-adres uit, krijg een IP-adres terug en verder niets
1985 RFC 951 legt BOOTP vast, dat doorgestuurd kan worden en opties kan dragen, maar toewijst uit een handgeschreven tabel
1993 De eerste DHCP-specificatie voegt leases en dynamische voorraden toe boven op het pakketformaat van BOOTP
1997 RFC 2131 vervangt die en is nog steeds de specificatie die in gebruik is
2018 RFC 8415 bundelt DHCPv6 en vervangt zeven eerdere documenten, waaronder RFC 3315
2022 ISC verklaart ISC DHCP op 5 oktober end-of-life en wijst nieuwe installaties naar Kea

Twee dingen volgen uit die geschiedenis. Het pakket draagt nog steeds velden uit de BOOTP-tijd met namen als next_server en root_path, omdat DHCP het formaat overnam in plaats van te vervangen. En het protocol is ontworpen in een tijd waarin aangenomen werd dat alles op een lokaal netwerk vriendelijk was, en dat is de wortel van het beveiligingsprobleem in sectie 9.

Naar boven

4. DORA en het leven van een lease

Een lease krijgen is een gesprek van vier pakketten, en het heeft een naam die mensen al decennia door certificeringsexamens heen sleept: DORA.

4.1 De vier pakketten

CLIENT                                          SERVER
  |                                                |
  |  1. DISCOVER   broadcast: "is anyone there?"   |
  |  ──────────────────────────────────────────────>  |
  |                                                |
  |  2. OFFER      "you may have 192.168.1.198"    |
  |  <──────────────────────────────────────────────  |
  |                                                |
  |  3. REQUEST    broadcast: "I accept, from you" |
  |  ──────────────────────────────────────────────>  |
  |                                                |
  |  4. ACK        "confirmed, here is everything" |
  |  <──────────────────────────────────────────────  |
StapWat er gebeurt
DISCOVER De client heeft geen adres, dus zendt hij uit naar het hele segment. Hij stuurt zijn hardware-adres mee en een lijst van de opties die hij graag zou willen.
OFFER Elke DHCP-server die het gehoord heeft mag een adres aanbieden. Op een gezond netwerk is er een server; op een kapot netwerk zijn er twee, en dat is het probleem in sectie 9.1.
REQUEST De client kiest een aanbod en zendt zijn acceptatie uit, met de naam van de server die hij gekozen heeft. Dat uitzenden is bewust: het vertelt de servers die hij niet koos dat ze hun aanbod kunnen laten vallen.
ACK De gekozen server bevestigt en stuurt het volledige pakket instellingen. Pas nu stelt de client de interface in.

Het detail dat het onthouden waard is, is waarom REQUEST uitgezonden wordt in plaats van rechtstreeks verstuurd. Het lijkt verspilling, want de client weet al welke server hij wil. Maar als twee servers allebei aangeboden hebben, vertelt alleen een uitzending aan de verliezer dat zijn aanbod afgewezen is, zodat die het adres terug in de voorraad kan zetten in plaats van vast te houden.

4.2 De lijn, en de berichten die DORA weglaat

Alle vier de pakketten reizen over UDP, op twee poorten die niet veranderd zijn sinds voor DHCP bestond:

$ grep -E '^(bootps|bootpc|dhcpv6)' /etc/services
bootps          67/udp
bootpc          68/udp
dhcpv6-client   546/udp
dhcpv6-server   547/udp

Poort 67 is de server, poort 68 is de client. Kijk trouwens naar de namen: het zijn nog steeds bootps en bootpc, voor BOOTP-server en BOOTP-client. Veertig jaar later staan de poorten geregistreerd onder de naam van het protocol dat DHCP verving, en dat is dezelfde erfenis die next_server in het pakket achterliet.

UDP is hier de juiste keuze om een reden die je makkelijk over het hoofd ziet: TCP heeft een werkende IP-configuratie nodig om een handshake af te maken, en op het moment van DISCOVER heeft de client die niet. Het protocol moet werken voordat het netwerk werkt.

Omdat het gewoon UDP op bekende poorten is, kun je het hele gesprek meekijken:

$ sudo tcpdump -ni any 'udp port 67 or udp port 68'

Dit is het laatste redmiddel en het gereedschap dat discussies beslecht. Het laat zien of een DISCOVER de machine daadwerkelijk verlaten heeft, of er iets geantwoord heeft, en vooral hoeveel dingen er geantwoord hebben.

DORA is alleen het gelukkige pad. Het protocol legt nog vier berichten vast, en elk daarvan benoemt een specifieke situatie:

BerichtRichtingBetekent
DECLINE Client naar server "Dat adres is al in gebruik." De client heeft het getest, meestal met ARP, en trof daar iemand aan.
NAK Server naar client "Jouw idee van je adres klopt niet." Meestal omdat de machine naar een ander subnet verhuisd is en zijn oude lease wilde houden.
RELEASE Client naar server "Ik ben klaar met dit adres." Geeft de lease netjes vroegtijdig terug, en daarom maakt netjes afsluiten een adres vrij en de stekker eruit trekken niet.
INFORM Client naar server "Ik heb al een adres, stuur me alleen de instellingen." Wordt gebruikt door statisch ingestelde machines die toch de DNS- en NTP-servers willen.

DECLINE is degene die je in een capture wilt herkennen. Een client die een adres afwijst betekent dat iets anders op het netwerk het al gebruikt, en daar is een korte lijst oorzaken voor: een machine die statisch ingesteld is binnen het leasebereik, een tweede DHCP-server, een verouderde reservering, of een gekloonde virtuele machine die zijn oorspronkelijke adres meedraagt. Alle vier zijn configuratiefouten en geen DHCP-storingen.

4.3 Verlengen: het deel dat eeuwig doorloopt

DORA gebeurt een keer. Daarna besteedt de client de rest van zijn leven aan verlengen, en de timers zijn vastgelegd als breuken van de lease:

PuntTimerWat de client doet
50% van de lease T1, verlengen Vraagt dezelfde server rechtstreeks om verlenging. Lukt meestal, niemand merkt het.
87,5% T2, herbinden De oorspronkelijke server heeft niet geantwoord. Zendt uit en vraagt elke server de lease over te nemen.
100% Verloop Geeft het adres op, breekt de configuratie af, en begint DORA opnieuw vanaf het begin.

Die breuken verklaren het gedrag dat mensen het meest verwart: een DHCP-server kan lang plat liggen voordat iemand het merkt. Elke machine heeft al een geldige lease, en geen van alle heeft iets nodig tot hij 50% van zijn eigen termijn bereikt. Met een lease van 24 uur levert een server die om negen uur 's ochtends uitvalt zijn eerste slachtoffer rond negen uur 's avonds op, en daarna druppelen de storingen een machine tegelijk binnen in plaats van allemaal tegelijk.

Het verklaart ook waarom de leaseduur een echte beslissing is. Korte leases betekenen sneller terughalen en sneller doorwerken van gewijzigde instellingen, ten koste van meer verkeer en een kleiner storingsvenster. Lange leases betekenen het omgekeerde. Een kantoor met vaste werkplekken kan prima dagen gebruiken; een conferentiewifinetwerk dat honderden telefoons per uur van adressen voorziet heeft minuten nodig.

Naar boven

5. Als de server ergens anders staat

Sectie 1 zei dat DHCP werkt door uit te zenden, en uitzendingen blijven binnen hun eigen segment. Dat klopt, en letterlijk genomen zou het betekenen dat elk VLAN, elk filiaal en elke verdieping van een gebouw zijn eigen DHCP-server nodig heeft. Vrijwel geen enkele organisatie doet het zo, dus er ontbreekt duidelijk iets aan het verhaal.

5.1 De relay agent

Het ontbrekende stuk is een DHCP relay agent, en die zit meestal op de router die de twee netwerken scheidt:

  client VLAN 10                          server VLAN 100
       |                                        |
   [ client ] ──broadcast──> [ router ] ──unicast──> [ DHCP server ]
                              relay agent

De relay luistert aan de clientkant naar DHCP-uitzendingen en stuurt ze als gewone unicast-pakketten door naar een server waarvan hij het adres gekregen heeft. Antwoorden komen dezelfde weg terug. De client weet hier niets van; hij zond uit, en hij kreeg antwoord.

Dit is wat centrale DHCP mogelijk maakt. Een server, of een paar, kan elk subnet in een gebouw bedienen, met op elke routerinterface een relay die ernaar wijst.

5.2 giaddr: hoe de server weet welke voorraad hij moet gebruiken

Het pakket doorsturen lost de helft van het probleem op. De andere helft is lastiger: de server ontvangt nu een verzoek dat via unicast van een router kwam, en hij heeft geen idee op welk netwerk de client eigenlijk zit. Zonder dat kan hij niet weten uit welk bereik hij moet uitdelen.

Het antwoord is een enkel veld in het pakket, geerfd van BOOTP en genoemd naar zijn oorspronkelijke doel. RFC 2131 omschrijft giaddr als het "relay agent IP address, used in booting via a relay agent". De relay schrijft zijn eigen adres aan de clientkant erin, en de server leest dat veld om te bepalen welke subnetconfiguratie geldt.

De keten is kort en het onthouden waard, want hier gaat centrale DHCP stuk:

  • De relay stempelt giaddr met het adres van de interface waarop de uitzending binnenkwam.
  • De server vergelijkt giaddr met zijn ingestelde subnetten en kiest die voorraad.
  • Past er geen subnet bij, dan gokt de server niet. Hij blijft stil, en de client valt uiteindelijk terug op een 169.254-adres.

Dat laatste punt levert een van de verbijsterendere DHCP-storingen op: de server draait, de relay stuurt door, pakketten komen aan, en clients op een bepaald VLAN krijgen helemaal niets. Er is niets stuk, de server heeft eenvoudigweg geen voorraad gedefinieerd voor het netwerk dat giaddr noemt. Heeft een nieuw VLAN geen DHCP, dan zijn de twee dingen om te controleren of er een relay op die interface ingesteld is en of de server een subnet voor dat netwerk heeft.

5.3 Optie 82, en weten in welk stopcontact iemand geprikt heeft

Grotere netwerken willen meer dan het subnet. Een switch of relay kan optie 82 meesturen, de relay agent information option die in januari 2001 in RFC 3046 vastgelegd is, die beschrijft waar in het fysieke netwerk het verzoek binnenkwam: welke switch, welke poort, welk circuit.

Daarmee kan een server adressen toewijzen op fysieke locatie, kan een internetaanbieder een abonneelijn herkennen, en kan het netwerk een verzoek weigeren dat binnenkomt op een plek waar het niet vandaan hoort te komen. Het is vooral een zaak voor bedrijven en providers, en het is goed te herkennen als je ooit een leaselog vol circuitidentificatie in plaats van hardware-adressen leest.

Naar boven

6. Je eigen lease lezen op Linux

Alles hierboven is zichtbaar op de machine voor je neus, en naar een echte lease kijken is de snelste manier om het protocol concreet te maken.

6.1 Welke client draai je eigenlijk?

Linux heeft meerdere DHCP-clients en die van jou heb je meestal niet zelf gekozen. Hij kwam mee met de manier waarop je machine netwerken beheert:

BeheerderMeestal opVraag het met
NetworkManager Desktops en laptops nmcli device show
systemd-networkd Servers, containers, cloud-images networkctl status
dhcpcd Alpine, Raspberry Pi OS, minimale systemen dhcpcd -U
dhclient Oudere systemen; onderdeel van de ISC-suite /var/lib/dhcp/*.leases

Zoek uit welke het bij jou is voordat je naar leasebestanden gaat zoeken, want de meeste handleidingen die je online vindt gaan uit van dhclient en een bestand dat jouw systeem misschien niet heeft.

$ systemctl is-active NetworkManager systemd-networkd dhcpcd
active
inactive
inactive

6.2 De lease, in zijn geheel

Op een systeem met NetworkManager drukt dit precies af wat de server overhandigd heeft:

$ nmcli -f DHCP4 device show wlp0s20f3
DHCP4.OPTION[1]:    dhcp_client_identifier = 01:2c:6d:c1:13:67:3a
DHCP4.OPTION[2]:    dhcp_lease_time = 1800
DHCP4.OPTION[3]:    dhcp_server_identifier = 192.168.1.1
DHCP4.OPTION[4]:    domain_name_servers = 192.168.1.1
DHCP4.OPTION[5]:    expiry = 1787411669
DHCP4.OPTION[6]:    ip_address = 192.168.1.198
DHCP4.OPTION[7]:    next_server = 192.168.1.1
DHCP4.OPTION[8]:    ntp_servers = 10.12.0.20
DHCP4.OPTION[9]:    requested_broadcast_address = 1
DHCP4.OPTION[10]:   requested_domain_name = 1
DHCP4.OPTION[11]:   requested_domain_name_servers = 1
DHCP4.OPTION[12]:   requested_domain_search = 1
DHCP4.OPTION[13]:   requested_host_name = 1
DHCP4.OPTION[14]:   requested_interface_mtu = 1
DHCP4.OPTION[15]:   requested_ms_classless_static_routes = 1
DHCP4.OPTION[19]:   requested_rfc3442_classless_static_routes = 1

Er staat meer in die uitvoer dan het op het eerste gezicht lijkt, en het is de moeite waard hem in twee helften te lezen.

De regels die met requested_ beginnen zijn wat de client gevraagd heeft. Die lijst reist mee in het DISCOVER-pakket als de parameter request list, en het is de client die zegt "als je hier toevallig iets van weet, stuur het dan mee". Al het andere is wat de server daadwerkelijk teruggestuurd heeft.

Vergelijk de twee helften en de scheefheid springt eruit. Deze client vroeg om een domeinnaam, een zoekdomein, een MTU en classless static routes. Hij kreeg er niets van. Hij kreeg wel een NTP-server waar hij nooit om gevraagd heeft. Geen van beide kanten doet iets fout: de client vraagt om alles wat hij kan gebruiken, de server stuurt waarmee hij ingesteld is, en de overlap is wat hij is.

De andere velden vertellen ook een verhaal:

  • dhcp_lease_time = 1800 is dertig minuten, en dat is kort. Deze router heeft besloten adressen agressief te hergebruiken, dus verlengen gebeurt elke vijftien minuten.
  • dhcp_server_identifier en domain_name_servers zijn hetzelfde adres. De router is de DHCP-server en de DNS-resolver, wat normaal is op een klein netwerk en betekent dat een uitvallend apparaat allebei meeneemt.
  • expiry is een Unix-tijdstempel. Decodeer hem om precies te weten wanneer deze lease sterft:
    $ date -d @1787411669
    Sat Aug 22 05:14:29 PM CEST 2026
  • next_server is een erfenis van BOOTP, het adres waarvandaan een machine over het netwerk zou opstarten. Niets hier gebruikt het.

6.3 Dynamisch of statisch, in een oogopslag

Je hebt de lease niet altijd nodig. De kernel houdt bij waar een route vandaan komt, en ip route laat het zien:

$ ip route
default via 192.168.88.1 dev eth0 proto static metric 100
default via 192.168.1.1 dev wlp0s20f3 proto dhcp src 192.168.1.198 metric 600

Twee default routes op een machine, uit twee verschillende bronnen. De bekabelde interface is met de hand ingesteld, dus zijn route is proto static. De wifi-interface kreeg zijn route uit een lease, dus die is proto dhcp. De adressen zijn het daarmee eens:

$ ip -4 addr show wlp0s20f3
    inet 192.168.1.198/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp0s20f3

Dat woord dynamic is dezelfde uitspraak vanaf de adreskant: achter dit adres zit een lease met een lopende klok. Een statisch ingestelde interface draagt het niet.

Dit is de snelste eerste controle bij elk onderzoek naar "het netwerk doet raar". Verwachtte je dat een interface statisch was en zegt ip route proto dhcp, dan heb je het probleem gevonden voordat je een configuratiebestand geopend hebt.

Naar boven

7. Een DHCP-server draaien

De meeste kleine netwerken draaien er nooit bewust een: de router doet het, en de enige instelling is een bereik in een webinterface. Zodra je daaruit groeit heb je een keuze te maken, en een van de opties is een valstrik.

7.1 De software kiezen

SoftwareGoed voorLet op
dnsmasq Kleine netwerken, labs, thuisrouters. DHCP en DNS in een klein proces, en hostnamen die het uitdeelt worden automatisch opzoekbaar. Niet gebouwd voor grote of hoogbeschikbare installaties
Kea Alles wat serieus en actueel is. De vervanger van ISC voor hun eigen oudere server, met een databasebackend, een API en echte hoge beschikbaarheid. Ander configuratieformaat; reken erop dat je het leert in plaats van je oude bestand over te zetten
isc-dhcp-server Niets nieuws. End-of-life sinds 5 oktober 2022. Nog steeds verpakt, nog steeds installeerbaar, upstream niet meer onderhouden
udhcpd Embedded systemen, rescue-images, overal waar BusyBox al staat Minimaal van opzet

Die derde rij verdient nadruk, want de verpakking verbergt het. Op een actuele Ubuntu is de versie die je zou installeren precies de laatste die ISC ooit gepubliceerd heeft:

$ apt-cache policy isc-dhcp-server kea-dhcp4-server
isc-dhcp-server:
  Candidate: 4.4.3-P1-4ubuntu2
kea-dhcp4-server:
  Candidate: 2.4.1-3ubuntu0.2

Versie 4.4.3-P1 is geen toeval: het is de laatste onderhoudsrelease, gepubliceerd op de dag dat ISC aankondigde dat de software af was. Distributies leveren hem nog steeds omdat er nog heel veel infrastructuur op draait, en hij werkt nog steeds. Maar hij krijgt geen fixes meer, dus het is niets om nu op te bouwen. Voor een nieuwe installatie is het antwoord dnsmasq als het netwerk klein is, en Kea als dat niet zo is.

7.2 De beslissingen die ertoe doen

Wat je ook draait, dezelfde vier keuzes bepalen het resultaat.

Het bereik. Welke adressen uitgedeeld mogen worden. De fout hier is er het hele subnet van maken, waardoor er niets overblijft voor de servers, printers en switches die vaste adressen nodig hebben. Reserveer een blok aan een van de uiteinden en deel dat nooit uit.

De leaseduur. Behandeld in sectie 4.3. Stem hem af op hoe snel apparaten komen en gaan, niet op een getal dat je in een handleiding zag.

Reserveringen. Een specifiek hardware-adres aan een specifiek IP koppelen, zodat een machine een voorspelbaar adres krijgt zonder statisch ingesteld te zijn. Dit is meestal beter dan statische instelling op het apparaat, want de instelling staat op een plek die jij beheert in plaats van op een machine waar je misschien niet op kunt inloggen. Een printer met een reservering kan verplaatst, vervangen of naar fabrieksinstellingen teruggezet worden en komt nog steeds op hetzelfde adres terug.

De opties. Gateway, DNS, zoekdomein, NTP. Dit zijn de instellingen die op elke machine tegelijk fout staan als je ze hier fout zet, en dat is de echte reden om goed na te denken voordat je ze wijzigt.

7.3 Een netwerk, een server

Het protocol heeft geen manier om te bemiddelen tussen twee servers die adressen aanbieden op hetzelfde segment. Wie het eerst antwoordt wint, per client, per lease. Twee servers met overlappende bereiken geven dus vroeg of laat hetzelfde adres aan twee machines, en de storing die daaruit volgt is grillig, verplaatst zich, en lijkt op van alles behalve DHCP.

Heb je redundantie nodig, draai dan geen twee onafhankelijke servers. Gebruik of een paar dat van elkaar weet, en daar is de hoge-beschikbaarheidsmodus van Kea voor, of splits het bereik zodat de twee servers niet kunnen botsen.

Naar boven

8. De opties: wat er nog meer met je adres meekomt

De instellingen die DHCP draagt zijn genummerd, en een handvol van die nummers verklaart gedrag waar je waarschijnlijk al tegenaan gelopen bent.

OptieDraagtWaarom het uitmaakt
1 Subnetmasker Welke adressen lokaal zijn
3 Router (default gateway) Alles wat niet lokaal is
6 DNS-servers De overdracht naar DNS
15 / 119 Domeinnaam / zoeklijst Korte interne namen
42 NTP-servers De klok
51 / 58 / 59 Leaseduur, T1, T2 De verlengingscyclus
53 Berichttype Welk deel van DORA dit pakket is
55 Parameter request list De requested_-regels uit sectie 6.2
121 Classless static routes Routes voorbij de default gateway

8.1 Optie 6: waar je DNS vandaan komt

Dit is het verband dat mensen het vaakst missen. Je machine heeft zijn DNS-server niet gekozen, en jij ook niet. Hij kwam binnen in de lease, en op een Linux-systeem reist hij automatisch van de DHCP-client naar de resolverconfiguratie:

$ nmcli -f DHCP4 device show wlp0s20f3 | grep domain_name_servers
DHCP4.OPTION[4]:    domain_name_servers = 192.168.1.1

$ resolvectl status | grep -A1 'Current DNS Server'
Current DNS Server: 192.168.1.1
       DNS Servers: 192.168.1.1

Hetzelfde adres op beide plekken, want het tweede is door het eerste gezet. Dit is waarom het DNS-artikel zegt dat /etc/resolv.conf gegenereerd wordt en niet bewerkt: een DHCP-client is een van de dingen die het genereren, en hij overschrijft je aanpassingen bij de volgende verlenging. Wil je andere DNS-servers, wijzig ze dan bij de DHCP-server, of zeg je netwerkbeheerder dat hij de servers uit de lease moet negeren.

8.2 Optie 121: degene die stilletjes niets doet

Optie 3 geeft een client een default gateway. Optie 121 geeft hem een volledige routeringstabel, en zo deelt een netwerk "voor het bereik 10.20.0.0/16 ga je via die andere router" uit zonder iets op de client in te stellen.

Het addertje is dat ondersteuning niet universeel is, en een client die optie 121 niet begrijpt meldt geen fout. Hij negeert de routes eenvoudigweg en gebruikt de default gateway voor alles. Het symptoom is dat een bepaald subnet vanaf sommige machines onbereikbaar is en vanaf andere prima, zonder een foutmelding ergens. Duw je routes via DHCP, controleer dan op elk besturingssysteem of ze daadwerkelijk aangekomen zijn.

8.3 Optie 42 en de klok

De lease in sectie 6.2 bevatte ntp_servers = 10.12.0.20, waar de client nooit om gevraagd heeft en die hij toch kreeg. Tijd is het hebben waard: een machine met een flink verkeerde klok kan geen TLS-certificaat valideren, kan niet tegen Kerberos authenticeren, en produceert logs die met niets te correleren zijn.

Of die optie gebruikt wordt hangt af van de tijddaemon, en verschillende negeren DHCP-servers ten gunste van hun eigen ingestelde pool. Net als bij optie 121 is de storing stil, dus controleer in plaats van aan te nemen.

Naar boven

9. Iets wat de meeste gebruikers niet weten

9.1 DHCP heeft helemaal geen authenticatie

Dit is het ongemakkelijke feit in het hart van het protocol. Een client zendt een verzoek uit en stelt zichzelf in met wat er als eerste antwoordt. Hij kan een legitieme server niet onderscheiden van welke andere machine op het segment dan ook, want er is geen mechanisme om ze uit elkaar te houden. Er is er nooit een ontworpen, omdat in 1993 aangenomen werd dat het lokale netwerk te vertrouwen was.

Het gevolg is dat iedereen die op je netwerk kan prikken de DHCP-server ervan kan worden. En ze hoeven niets kapot te maken om schade aan te richten, want de bruikbare aanval is niet slechte adressen uitdelen. Het is een goed adres met een slechte gateway uitdelen, zodat elk pakket dat elke getroffen machine verlaat eerst via die van hen loopt.

De alledaagse variant is helemaal niet kwaadaardig. Iemand prikt een thuisrouter verkeerd om in een kantoorstopcontact, zijn DHCP-server begint te antwoorden, en een willekeurige groep machines neemt leases van hem aan. De symptomen zijn kenmerkend: sommige machines werken, andere niet, de kapotte machines delen een vreemd adresbereik, en alles ziet er prima uit op de machines die je toevallig als eerste controleert.

De verdedigingen zitten allemaal buiten DHCP zelf, want het protocol heeft niets te bieden:

  • DHCP snooping op beheerde switches, dat DHCP-serverantwoorden weggooit die binnenkomen op poorten waar geen server achter hoort te zitten. Dit is de echte oplossing en het is een switchfunctie, geen serverinstelling.
  • Poortbeveiliging en netwerksegmentatie, zodat een onvertrouwd stopcontact het segment met jouw machines niet kan bereiken.
  • Monitoring: weet welke server hoort te antwoorden, en controleer de dhcp_server_identifier in een lease als er iets vreemds is. Het is een commando, en het noemt de schuldige meteen.

9.2 De voorraad leegtrekken in plaats van vergiftigen

Het spiegelbeeld van een valse server is DHCP starvation, en dat misbruikt dezelfde ontbrekende authenticatie vanaf de andere kant. In plaats van verzoeken te beantwoorden doet de aanvaller ze: duizenden leases geclaimd onder verzonnen hardware-adressen tot de voorraad leeg is.

Daarna werkt er niets meer voor wie nieuw is. Machines die al een lease hebben gaan door, dus het netwerk lijkt gezond voor iedereen aan een bureau, terwijl elke binnenkomende laptop en elke herstartende machine niets krijgt. Het symptoom lijkt op een uitgevallen DHCP-server, en de server is in orde: hij doet precies wat er gevraagd is, een paar duizend keer.

Starvation is ook de opmaat naar de vorige sectie. Trek eerst de echte voorraad leeg, beantwoord daarna de verzoeken die hij niet meer kan bedienen, en clients nemen de configuratie van de aanvaller aan zonder dat er iets ongewoons lijkt te gebeuren.

De verdedigingen zijn dezelfde maatregelen op switchniveau, plus een ding dat je zelf kunt controleren: een voorraad die verdacht vol staat met leases naar hardware-adressen die niemand herkent is het kenmerk, en dat is zichtbaar in de leaselijst van de server zelf.

9.3 Het adres 169.254 betekent dat DHCP mislukt is

Als een machine geen DHCP-server vindt, geeft hij het meestal niet op met niets. Hij geeft zichzelf een adres uit 169.254.0.0/16, het link-local bereik, willekeurig gekozen en gecontroleerd op botsingen.

$ ip -4 addr | grep 169.254

Twee machines die dit allebei doen kunnen met elkaar praten, en verder werkt er niets: geen gateway, geen DNS, geen internet. Op Windows heet hetzelfde mechanisme APIPA, en het symptoom is het beroemde "self-assigned IP address" dat hetzelfde betekent.

Een 169.254-adres is dus geen configuratie om te onderzoeken. Het is een mededeling, en die mededeling luidt "geen enkele DHCP-server heeft me geantwoord". Kijk naar de kabel, de switchpoort, het VLAN en de server, in die volgorde.

9.4 IPv6 gebruikt meestal geen DHCP

Alles hierboven ging over IPv4. IPv6 loste hetzelfde probleem anders op, en dat verschil verrast mensen die DHCPv6 gaan zoeken en het niet aantreffen.

IPv6 heeft SLAAC, stateless address autoconfiguration. Een router kondigt periodiek de netwerkprefix aan, en elke machine bouwt daar zijn eigen adres uit op zonder toestemming te vragen of een lease te hebben. Er is geen server die administratie bijhoudt, want er is niets bij te houden.

$ ip -6 addr show wlp0s20f3
    inet6 fe80::6e5a:efe7:e2b6:1a81/64 scope link noprefixroute

Dat fe80::-adres is het link-local van IPv6 zelf, het equivalent van 169.254, en elke IPv6-interface heeft er altijd een. Hier staat er geen globaal adres naast, wat betekent dat dit netwerk helemaal geen IPv6-prefix aankondigt.

DHCPv6 bestaat, gebundeld in RFC 8415 in november 2018, en wordt gebruikt als je nodig hebt wat SLAAC niet kan: vastgelegde toewijzingen, opties zoals DNS-servers op netwerken waar de router advertisement die niet meedraagt, en prefixdelegatie naar onderliggende routers. Veel netwerken draaien allebei, en daarom kan een IPv6-machine meerdere adressen tegelijk hebben uit verschillende mechanismen.

9.5 Je hostnaam is misschien niet van jou

Het leasegesprek kan een hostnaam in beide richtingen dragen. Een client kan de server vertellen hoe hij zichzelf noemt, en een server kan een client vertellen hoe hij zichzelf zou moeten noemen.

In combinatie met dynamische DNS is dit hoe een machine die op een netwerk aankomt op naam opzoekbaar wordt zonder dat iemand een record aanmaakt: de DHCP-server registreert de naam die hij zojuist uitgedeeld heeft in DNS. dnsmasq doet dit standaard voor de namen die het uitdeelt, en dat is een groot deel van waarom het populair is op kleine netwerken.

Het is ook een stille bron van verwarring. De naam van een machine in DNS kan degene zijn die de DHCP-server gekozen heeft, niet die in /etc/hostname, en die twee kunnen onbeperkt van elkaar verschillen zonder dat er iets mis lijkt.

9.6 Weten waar DHCP ophoudt

DHCP stelt een interface in. Dat is de hele taak, en die eindigt op het moment dat de interface ingesteld is.

SymptoomIs het DHCP?Waar te kijken
Geen adres, of een 169.254-adres Ja Kabel, switchpoort, VLAN, en dan de server
Adres in orde, geen internet Vaak De gateway in de lease, en optie 121-routes
Adres in orde, namen worden niet opgezocht Soms Optie 6, en daarna de resolver zelf
Werkt, en gaat dan met vaste tussenpozen stuk Ja Verlengen op 50% van de lease; de server antwoordt niet
Verkeerd adresbereik op sommige machines Ja Een tweede DHCP-server op het segment
Site laadt traag Nee De applicatie of het pad; DHCP liep een keer, minuten geleden

De vierde rij is het kenmerk dat je uit je hoofd wilt kennen. Alles wat met een vaste cyclus stukgaat, zeker als die de helft is van een rond aantal minuten of uren, is een verlengingsprobleem, en geen enkel onderzoek naar de applicatie vindt dat.

Naar boven

10. Best practices

  • Draai een DHCP-server per netwerksegment. Het protocol kan niet bemiddelen tussen twee, dus twee servers met overlappende bereiken geven vroeg of laat hetzelfde adres aan twee machines. Heb je redundantie nodig, gebruik dan een paar dat van elkaar weet, of splits het bereik.
  • Reserveer een deel van het subnet en deel dat nooit uit. Servers, printers, switches en accesspoints hebben adressen nodig die niet verspringen. Bepaal de grens een keer en schrijf hem op.
  • Kies reserveringen boven statische instelling op het apparaat. De instelling staat op een plek die jij beheert, en het apparaat kan vervangen of teruggezet worden en komt toch goed terug.
  • Stem de leaseduur af op hoe snel apparaten komen en gaan. Dagen voor vaste werkplekken, minuten voor gastenwifi. Bedenk dat de verlengingscyclus op 50% begint, dus een korte lease verkort ook hoe lang een uitgevallen server onzichtbaar blijft.
  • Verlaag de leaseduur voordat je DHCP-opties wijzigt, niet terwijl je ze wijzigt. Elke machine houdt zijn huidige instellingen tot hij verlengt, dus een kortere lease een dag van tevoren betekent dat het hele netwerk de nieuwe gateway of DNS-server binnen minuten oppikt in plaats van over een dag.
  • Zet DHCP snooping aan op beheerde switches. Het is de enige echte verdediging tegen een valse server, en het protocol biedt zelf niets.
  • Weet welke server hoort te antwoorden. Als er iets vreemds is, lees dan dhcp_server_identifier uit de lease van een client. Noemt die iets onverwachts, dan heb je het probleem in een commando gevonden.
  • Repareer DNS uit DHCP niet door /etc/resolv.conf aan te passen. De volgende verlenging overschrijft het. Wijzig het bij de DHCP-server, of stel de client in om die optie te negeren.
  • Controleer of doorgegeven routes en NTP-servers echt aangekomen zijn. Opties 121 en 42 falen stil op clients die ze negeren, en het symptoom is een onbereikbaar subnet of een afdrijvende klok, geen foutmelding.
  • Behandel een 169.254-adres als een diagnose, niet als een fout om omheen te werken. Het betekent dat geen enkele server geantwoord heeft.
  • Bouw niets nieuws op ISC DHCP. Het is end-of-life sinds oktober 2022. Gebruik dnsmasq voor kleine netwerken en Kea voor de rest.
Naar boven

11. Veelgemaakte fouten

11.1 Misverstand tegenover werkelijkheid

MisverstandWerkelijkheid
"DHCP deelt IP-adressen uit." Het deelt een pakket configuratie uit. De gateway, DNS-servers, het zoekdomein en de NTP-servers doen er net zo goed toe, en zijn eerder het ding dat fout staat.
"Mijn machine bezit zijn adres." Hij huurt het. De lease heeft een klok erop en verlengen begint halverwege.
"De DHCP-server ligt plat, dus het netwerk ligt plat." Niet meteen. Elke machine werkt door tot hij 50% van zijn eigen lease bereikt, dus storingen beginnen uren later en komen een machine tegelijk binnen.
"Een 169.254-adres is een verkeerde instelling." Het is de client die meldt dat er helemaal geen DHCP-server geantwoord heeft.
"DHCP is veilig omdat het op mijn lokale netwerk zit." DHCP heeft geen enkele vorm van authenticatie. Wie het eerst antwoordt wint, en daarom bestaat DHCP snooping op de switch.
"Ik heb mijn DNS-server in /etc/resolv.conf gezet." De DHCP-client herschrijft dat bestand bij de volgende verlenging. De instelling moet bij de server veranderen of expliciet door de client genegeerd worden.
"IPv6 gebruikt DHCP op dezelfde manier." IPv6 gebruikt vooral SLAAC, waarbij machines hun eigen adres bouwen uit een router advertisement en geen server iets bijhoudt.
"Een reservering is hetzelfde als een statisch IP." Het resultaat ziet er hetzelfde uit, maar een reservering staat op de server, dus het apparaat kan teruggezet of vervangen worden zonder dat iemand iets herconfigureert.
"isc-dhcp-server is de standaard, hij staat in de repository." Hij is verpakt en end-of-life. De versie die distributies leveren is de laatste die ISC gepubliceerd heeft voordat ze stopten.

11.2 Andere valkuilen om te vermijden

  • Een leasebereik dat het hele subnet beslaat. Vroeg of laat deelt DHCP het adres uit dat je fileserver statisch gebruikt, en dan gaan allebei de machines stuk op manieren die niets met elkaar te maken lijken te hebben.
  • Een optie wijzigen en verwachten dat het nu ingaat. Machines pikken nieuwe instellingen op als ze verlengen, niet als jij het bestand opslaat. De helft van je netwerk kan uren op de oude gateway draaien.
  • Statische adressen binnen het leasebereik. De server weet niet dat ze bestaan en deelt ze aan iemand anders uit. Moet het toch, stel ze dan als reservering in.
  • Aannemen dat de router de enige DHCP-server is. Alles kan er een zijn: een reserve accesspoint in bridgemodus, een virtualisatiehost, de ontwikkel-VM van een collega met een bridged interface.
  • DNS onderzoeken terwijl DHCP de verkeerde resolver uitgedeeld heeft. Controleer waar het resolveradres vandaan kwam voordat je de resolver zelf onderzoekt.
  • Erg lange leases op een netwerk met veel verloop. Een gastennetwerk met een lease van een week raakt door zijn adressen heen, en de storing lijkt op kapotte wifi.
  • De relay vergeten als je een VLAN toevoegt. DHCP is broadcast, dus het gaat geen router over. Een nieuw segment zonder ingestelde relay heeft helemaal geen DHCP, en elke machine erop belandt op 169.254.
  • DHCP de schuld geven terwijl een hostfirewall het opeet. De client heeft nog geen adres en het verkeer is broadcast-UDP op poorten 67 en 68, precies de vorm pakket die een strenge regelset weggooit. Capture eerst met tcpdump om te vinden waar de pakketten stoppen, en kijk daarna naar nft list ruleset. Begin niet met firewallregels wijzigen.
  • Op het beeld van een machine vertrouwen. Met twee servers op een segment wint wie het eerst antwoordt, per client, dus machine A kan volstrekt gezond zijn terwijl machine B ernaast dat niet is.
Naar boven

12. Samenvatting

DHCP is de dienst die alles instelt en waar niemand krediet voor krijgt. Hij loopt een keer als een machine aankomt, verlengt stilletjes zolang die blijft, en is onzichtbaar tot de dag dat hij dat niet is.

  • DHCP lost een kip-en-eiprobleem op met broadcast: een machine zonder adres roept, en wie het hoort antwoordt. Daarom gaat het geen routers over zonder relay.
  • Het deelt veel meer uit dan een adres: gateway, DNS-servers, zoekdomein, NTP-servers en de leaseduur. De DNS-regel veroorzaakt de meest verkeerd gediagnosticeerde storingen.
  • Een adres is een lease, geen bezit. Er zit een klok op en het keert vanzelf terug in de voorraad.
  • DHCP is de derde poging: RARP gaf alleen een adres, BOOTP (RFC 951, 1985) voegde doorsturen en opties toe maar gebruikte een handgeschreven tabel, en DHCP voegde voorraden en leases toe. RFC 2131 uit maart 1997 is nog steeds de specificatie.
  • DORA is de uitwisseling van vier pakketten: Discover, Offer, Request, Acknowledge. REQUEST wordt bewust uitgezonden, zodat servers wier aanbod afgewezen is dat kunnen vrijgeven.
  • Het loopt allemaal over UDP op poorten 67 (server) en 68 (client), nog steeds geregistreerd als bootps en bootpc. Bekijk de hele uitwisseling met tcpdump -ni any 'udp port 67 or udp port 68'.
  • DORA is het gelukkige pad. DECLINE betekent dat het adres al in gebruik is, NAK dat de client om een adres vroeg dat niet bij dit subnet hoort, RELEASE geeft een lease vroegtijdig terug, en INFORM vraagt om instellingen zonder adres.
  • Uitzendingen gaan geen routers over, dus een relay agent stuurt ze door en stempelt zijn eigen adres in giaddr. De server kiest de voorraad op basis van dat veld, en daarom krijgt een VLAN zonder passend subnet stilte in plaats van een foutmelding.
  • Verlengen begint op 50% van de lease en herbinden op 87,5%. Daarom levert een uitgevallen DHCP-server urenlang geen symptomen op en druppelen de storingen daarna een machine tegelijk binnen.
  • Lees je eigen lease met nmcli -f DHCP4 device show, of networkctl status onder systemd-networkd. De requested_-regels zijn wat de client vroeg; al het andere is wat de server werkelijk stuurde.
  • ip route labelt elke route met zijn herkomst. proto dhcp tegenover proto static beantwoordt "is deze interface met de hand ingesteld?" in een commando.
  • Draai een server per segment, reserveer een deel van het subnet, en kies reserveringen boven adressen op apparaten instellen.
  • ISC DHCP is end-of-life sinds oktober 2022. Gebruik dnsmasq voor kleine netwerken en Kea voor grotere.
  • DHCP heeft geen authenticatie. Wie het eerst antwoordt wint, dus een valse server is triviaal eenvoudig en DHCP snooping op de switch is de enige echte verdediging.
  • Een 169.254-adres betekent dat geen enkele server geantwoord heeft. Het is een diagnose, geen instelling.
  • IPv6 gebruikt vooral SLAAC: machines bouwen adressen uit een router advertisement, zonder server en zonder lease. DHCPv6 (RFC 8415) bestaat voor wat SLAAC niet kan.
  • DHCP is waar je machine leert welke DNS-server hij moet vragen. Wat daarna gebeurt staat in het bijbehorende artikel over DNS.

Dit is de checklist die het bewaren waard is als een netwerk zich vreemd gedraagt:

DID DHCP WORK AT ALL
  ip -4 addr                     an address, or 169.254 (nothing answered)
  ip route                       proto dhcp or proto static?

WHAT DID IT ACTUALLY SAY
  nmcli -f DHCP4 device show IF  the whole lease, both halves
  networkctl status IF           the same under systemd-networkd
  dhcp_server_identifier         WHICH server answered: check this first
  dhcp_lease_time                renewal happens at half of it
  date -d @<expiry>          when this lease dies

WHERE DID THE SETTINGS GO
  resolvectl status              DNS servers, should match option 6
  ip route                       gateway, plus any option 121 routes

IF NOTHING ANSWERS AT ALL
  tcpdump -ni any 'udp port 67 or udp port 68'
                                 did the DISCOVER leave? did anything reply?
  relay configured on this VLAN?  broadcasts do not cross routers
  server has a subnet for giaddr? no match means silence, not an error
  host firewall                  broadcast UDP 67/68 is easy to drop

WHEN IT IS INTERMITTENT
  same interval every time       renewal failing at 50% of the lease
  only some machines             a second DHCP server on the segment
  one subnet unreachable         option 121 routes ignored by that client

Een netwerk waarop machines verschijnen, zichzelf correct instellen en blijven werken is geen geluk: het is een server die op elk segment antwoordt, een bereik dat niet botst met iets vasts, een leaseduur die past bij hoe het netwerk gebruikt wordt, en een switch die weigert iets anders te laten antwoorden.

Is een netwerk uitgegroeid tot grillige storingen die van machine naar machine verspringen, of weet niemand meer precies welk apparaat de adressen uitdeelt, dan is dat een middag aandacht van iemand waard voordat het de ochtend wordt waarop iedereen aankomt en niets werkt.

Naar boven
Linux concept: DHCP
Peter Martin
Peter Martin
Joomla Specialist

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.

Gerelateerde artikelen