29.5. Automatisch netwerk instellen (DHCP)

Geschreven door Greg Sutter.

29.5.1. Wat is DHCP?

DHCP, het Dynamic Host Configuration Protocol, schrijft voor hoe een systeem verbinding kan maken met een netwerk en hoe het de benodigde informatie kan krijgen om met dat netwerk te communiceren. FreeBSD gebruikt de OpenBSD dhclient welke uit OpenBSD†3.7 komt. Alle informatie over dhclient kan zowel voor de ISC als de OpenBSD DHCP-cliŽnt gebruikt worden. De DHCP-server zit bij de ISC-distributie.

29.5.2. Wat behandeld wordt

In dit onderdeel worden de cliŽntcomponenten van de ISC en OpenBSD DHCP-cliŽnt en de servercomponenten van het ISC DHCP-systeem beschreven. Het programma voor de cliŽnt, dhclient, zit standaard in FreeBSD en de server is beschikbaar via de port net/isc-dhcp42-server. Naast de onderstaande informatie, zijn de hulppagina's van dhclient(8), dhcp-options(5) en dhclient.conf(5) bruikbare bronnen.

29.5.3. Hoe het werkt

Als dhclient, de DHCP-cliŽnt, wordt uitgevoerd op een cliŽntmachine, dan begint die met het broadcasten van verzoeken om instellingeninformatie. Standaard worden deze verzoeken op UDP poort 68 gedaan. De server antwoordt op UDP 67 en geeft de cliŽnt een IP-adres en andere relevante netwerkinformatie, zoals een netmasker, router en DNS-servers. Al die informatie komt in de vorm van een DHCP lease en is voor een bepaalde tijd geldig (die is ingesteld door de beheerder van de DHCP-server). Op die manier kunnen IP-adressen voor cliŽnten die niet langer met het netwerk verbonden zijn (stale) automatisch weer ingenomen worden.

DHCP-cliŽnten kunnen veel informatie van de server krijgen. Er staat een uitputtende lijst in dhcp-options(5).

29.5.4. FreeBSD integratie

FreeBSD integreert de OpenBSD DHCP-cliŽnt dhclient volledig. Er is ondersteuning voor de DHCP-cliŽnt in zowel het installatieprogramma als in het basissysteem, waardoor het niet noodzakelijk is om kennis te hebben van het maken van netwerkinstellingen voor het netwerk waar een DHCP-server draait.

DHCP wordt ondersteund door sysinstall. Bij het instellen van een netwerkinterface binnen sysinstall is de tweede vraag: Wil je proberen de interface met DHCP in te stellen? Als het antwoord bevestigend luidt, dan wordt dhclient uitgevoerd en als dat succesvol verloopt, dan worden de netwerkinstellingen automatisch ingevuld.

Voor het gebruiken van DHCP bij het opstarten van het systeem zijn twee instellingen nodig:

  • Het apparaat bpf moet in de kernel gecompileerd zijn. Dit kan door device bpf aan het bestand met kernelinstellingen toe te voegen en de kernel te herbouwen. Meer informatie over het bouwen van een kernel staat in Hoofdstuk†9, De FreeBSD-kernel instellen.

    Het apparaat bpf is al onderdeel van de GENERIC kernel die bij FreeBSD zit, dus als er geen sprake is van een aangepaste kernel, dan hoeft er geen nieuwe gemaakt te worden om DHCP aan te praat te krijgen.

    Opmerking:

    Voor de lezer die bijzonder begaan is met beveiliging, is het belangrijk aan te geven dat bpf ook het apparaat is waardoor pakketsnuffelaars hun werk kunnen doen (hoewel ze nog steeds als root moeten draaien). bpf is noodzakelijk voor DHCP, maar als beveiliging bijzonder belangrijk is, dan hoort bpf waarschijnlijk niet in een kernel te zitten omdat de verwachting dat er in de toekomst ooit DHCP gebruikt gaat worden.

  • Standaard draait de DHCP-synchronisatie op FreeBSD in de achtergrond, of asynchroon. Andere opstartscripten gaan verder terwijl DHCP wordt voltooid, wat het opstarten van het systeem versnelt.

    DHCP in de achtergrond werkt goed als de DHCP-server snel op verzoeken reageert en het DHCP-configuratieproces snel gaat. Op sommige systemen kan het lang duren voordat DHCP klaar is. Als netwerkdiensten proberen te draaien voordat DHCP voltooid is, zullen ze falen. Door DHCP in synchrone modus te draaien wordt dit probleem voorkomen en wordt het opstarten gepauzeerd totdat de DHCP-configuratie voltooid is.

    Gebruik om in de achtergrond verbinding te maken met een DHCP-server terwijl andere opstartscripts verder gaan (asynchrone modus) de waarde DHCP in /etc/rc.conf:

    ifconfig_fxp0="DHCP"

    Gebruik om het opstarten te pauzeren totdat DHCP voltooid is de synchrone modus met waarde SYNDHCP:

    ifconfig_fxp0="SYNDHCP"

    Opmerking:

    Vervang fxp0 zoals getoond in deze voorbeelden met de naam van de interface dat dynamisch geconfigureerd moet worden, zoals getoond in Paragraaf†12.8, “Netwerkkaarten instellen”.

    Als er een andere lokatie voor dhclient wordt gebruikt of als er extra parameters aan dhclient meegegeven moeten worden, dan dient ook iets als het volgende toegevoegd te worden:

    dhclient_program="/sbin/dhclient"
    dhclient_flags=""

De DHCP-server, dhcpd, zit bij de port net/isc-dhcp42-server in de Portscollectie. Deze port bevat de ISC DHCP-server en documentatie.

29.5.5. Bestanden

  • /etc/dhclient.conf

    Voor dhclient is een instellingenbestand /etc/dhclient.conf nodig. Dat bestand bevat meestal alleen maar commentaar, omdat de standaardinstellingen redelijk zinvol zijn. Dit bestand wordt beschreven in dhclient.conf(5).

  • /sbin/dhclient

    dhclient is statisch gelinkt en staat in /sbin. Er staat meer informatie over dhclient in dhclient(8).

  • /sbin/dhclient-script

    dhclient-script is het FreeBSD-specifieke DHCP-cliŽnt instellingenscript. Het wordt beschreven in dhclient-script(8), maar het is niet nodig het te wijzigen om goed te werken.

  • /var/db/dhclient.leases.interface

    De DHCP-cliŽnt houdt in dit bestand een database bij van geldige leases, die naar een logboekbestand worden geschreven. In dhclient.leases(5) staat een iets uitgebreidere beschrijving.

29.5.6. Verder lezen

Het DHCP-protocol staat volledig beschreven in RFC 2131. Er is nog een bron van informatie ingesteld op http://www.dhcp.org/.

29.5.7. Een DHCP-server installeren en instellen

29.5.7.1. Wat behandeld wordt

In dit onderdeel wordt beschreven hoe een FreeBSD systeem zo ingesteld kan worden dat het opereert als DHCP-server door gebruik te maken van de ISC (Internet Systems Consortium) implementatie van de DHCP-server.

De server wordt niet geleverd als deel van FreeBSD en om deze dienst aan te bieden dient de port net/isc-dhcp42-server geÔnstalleerd te worden. In Hoofdstuk†5, Applicaties installeren: pakketten en ports staat meer informatie over de Portscollectie.

29.5.7.2. DHCP-serverinstallatie

Om een FreeBSD systeem in te stellen als DHCP-server moet het apparaat bpf(4) in de kernel zijn opgenomen. Om dit te doen dient device bpf aan het bestand met kernelinstellingen toegevoegd te worden en dient de kernel herbouwd te worden. Meer informatie over het bouwen van kernels staat in Hoofdstuk†9, De FreeBSD-kernel instellen.

Het apparaat bpf is al onderdeel van de GENERIC kernel die bij FreeBSD, dus het is meestal niet nodig om een aangepaste kernel te bouwen om DHCP aan de praat te krijgen.

Opmerking:

Het is belangrijk te vermelden dat bpf ook het apparaat is waardoor pakketsnuffelaars kunnen werken (hoewel de programma's die er gebruik van maken wel bijzondere toegang nodig hebben). bpf is verplicht voor DHCP, maar als beveiliging van belang is, dan is het waarschijnlijk niet verstandig om bpf in een kernel op te nemen alleen omdat er in de toekomst misschien ooit DHCP gebruikt gaat worden.

Hierna dient het standaardbestand dhcpd.conf dat door de port net/isc-dhcp42-server is geÔnstalleerd gewijzigd te worden. Standaard is dit /usr/local/etc/dhcpd.conf.sample en dit bestand dient gekopieerd te worden naar /usr/local/etc/dhcpd.conf voordat de wijzigingen worden gemaakt.

29.5.7.3. De DHCP-server instellen

dhcpd.conf is opgebouwd uit declaraties over subnetten en hosts en is wellicht het meest eenvoudig te beschrijven met een voorbeeld:

option domain-name "example.com";1
option domain-name-servers 192.168.4.100;2
option subnet-mask 255.255.255.0;3

default-lease-time 3600;4
max-lease-time 86400;5
ddns-update-style none;6

subnet 192.168.4.0 netmask 255.255.255.0 {
  range 192.168.4.129 192.168.4.254;7
  option routers 192.168.4.1;8
}

host mailhost {
  hardware ethernet 02:03:04:05:06:07;9
  fixed-address mailhost.example.com;10
}

1

Deze optie geeft het domein aan dat door cliŽnten als standaard zoekdomein wordt gebruikt. In resolv.conf(5) staat meer over wat dat betekent.

2

Deze optie beschrijft een door komma's gescheiden lijst met DNS-servers die de cliŽnt moet gebruiken.

3

Het netmasker dat aan de cliŽnten wordt voorgeschreven.

4

Een cliŽnt kan om een bepaalde duur vragen die een lease geldig is. Anders geeft de server aan wanneer de lease vervalt (in seconden).

5

Dit is de maximale duur voor een lease die de server toestaat. Als een cliŽnt vraagt om een langere lease, dan wordt die wel verstrekt, maar is de maar geldig gedurende max-lease-time seconden.

6

Deze optie geeft aan of de DHCP-server moet proberen de DNS-server bij te werken als een lease is geaccepteerd of wordt vrijgegeven. In de ISC implementatie is deze optie verplicht.

7

Dit geeft aan welke IP-adressen in de groep met adressen zitten die zijn gereserveerd om uitgegeven te worden aan cliŽnten. Alle IP-adressen tussen de aangegeven adressen en die adressen zelf worden aan cliŽnten uitgegeven.

8

Geeft de default gateway aan die aan de cliŽnten wordt voorgeschreven.

9

Het hardware MAC-adres van een host, zodat de DHCP-server een host kan herkennen als die een verzoek doet.

10

Geeft een host aan die altijd hetzelfde IP-adres moet krijgen. Hier kan een hostnaam gebruikt worden, omdat de DHCP-server de hostnaam zelf opzoekt voordat de lease-informatie terug wordt gegeven.

Wanneer u klaar bent met het schrijven van uw dhcpd.conf, dient u de DHCP-server in /etc/rc.conf aan te zetten, door het volgende toe te voegen:

dhcpd_enable="YES"
dhcpd_ifaces="dc0"

Vervang de interfacenaam dc0 door de interface (of interfaces, gescheiden door witruimtes) waarop uw DHCP-server moet luisteren naar DHCP-verzoeken van cliŽnten.

Daarna kunt u doorgaan met het starten van de server door het volgende commando te geven:

# service isc-dhcpd start

Als er later wijzigingen in de instellingen gemaakt moeten worden, dan is het belangrijk te onthouden dat het sturen van een SIGHUP signaal naar dhcpd niet resulteert in het opnieuw laden van de instellingen, zoals voor de meeste daemons geldt. Voor deze daemon dient een signaal SIGTERM gestuurd te worden om het proces te stoppen. Daarna dient de daemon met het hiervoor beschreven commando weer gestart worden.

29.5.7.4. Bestanden

  • /usr/local/sbin/dhcpd

    dhcpd is statisch gelinkt en staat in /usr/local/sbin. In de hulppagina voor dhcpd(8) die meekomt met de port staat meer informatie over dhcpd.

  • /usr/local/etc/dhcpd.conf

    dhcpd heeft een instellingenbestand, /usr/local/etc/dhcpd.conf, nodig voordat de daemon diensten aan cliŽnten kan leveren. Het bestand moet alle informatie bevatten die aan cliŽnten gegeven moet worden en de informatie die nodig is voor het draaien van de dienst. Dit instellingenbestand staat beschreven in de hulppagina voor dhcpd.conf(5) die meekomt met de port.

  • /var/db/dhcpd.leases

    De DHCP-server houdt in dit bestand een database bij met leases die zijn uitgegeven en die naar een logboek worden geschreven. In de hulppagina dhcpd.leases(5) die bij de port zit wordt dit uitvoeriger beschreven.

  • /usr/local/sbin/dhcrelay

    dhcrelay wordt in uitgebreidere omgevingen gebruikt waar de ene DHCP-server een verzoek van een cliŽnt naar een andere DHCP-server op een ander netwerk doorstuurt. Als deze functionaliteit nodig is, kan die beschikbaar komen door de port net/isc-dhcp42-relay te installeren. De hulppagina voor dhcrelay(8) die bij de port zit bevat meer details.

All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.