FreeBSD handboek
Terug | Hoofdstuk 30. Netwerkdiensten | Volgende

# 30.5. Automatisch netwerk instellen (DHCP)

Geschreven door Greg Sutter.

## 30.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.

## 30.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.

## 30.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).

## 30.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.

  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.

  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.

## 30.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`

  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.

## 30.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/.

## 30.5.7. Een DHCP-server installeren en instellen

### 30.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 staat meer informatie over de Portscollectie.

### 30.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.

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.

### 30.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";
    option domain-name-servers 192.168.4.100;
    option subnet-mask 255.255.255.0;

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

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

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

  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.
  Deze optie beschrijft een door komma's gescheiden lijst met DNS-servers die de cliënt moet gebruiken.
  Het netmasker dat aan de cliënten wordt voorgeschreven.
  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).
  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.
  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.
  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.
  Geeft de default gateway aan die aan de cliënten wordt voorgeschreven.
  Het hardware MAC-adres van een host, zodat de DHCP-server een host kan herkennen als die een verzoek doet.
  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:

    # /usr/local/etc/rc.d/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.

### 30.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.

Terug | Begin | Volgende
Netwerkinformatiesysteem (NIS/YP) | Omhoog | Domeinnaamsysteem (DNS)