Linux Systeembeheer/DHCP-server

Uit Wikibooks

Ga naar: navigatie, zoek

Inhoud

[bewerken] Leerdoelen

  • De functie van een DHCP-server begrijpen
  • Een Linux DHCP-server kunnen opzetten

[bewerken] Labo-opdracht: configuratie van een DHCP-server

We willen in een computerlokaal alle desktop-pc's een vast IP-adres geven via een DHCP-server. Bezoekers die met een laptop op het netwerk in het lokaal aansluiten, krijgen een dynamisch toegewezen IP-adres. Het schrijven van een DHCP-configuratie die geschikt is voor deze opstelling is een saai en repetitief werkje dat we best kunnen automatiseren, bijvoorbeeld met een Bash script. Dat is het doel van dit labo.

Als invoer gebruiken we een tekstbestand met de gewenste IP-adrestoewijzingen per pc. Op elke lijn van het bestand staan de gewenste hostnaam, het MAC-adres, het gewenste IP-adres (enkel host-deel ervan) en (eventueel) commentaar, gescheiden door TAB-tekens, bijvoorbeeld:

 server1	00:04:e2:2a:c4:ad	10.0.0.1	Router
 server2	00:04:e2:2a:bf:4a	10.0.0.2	File server
 labo-01	00:04:e2:03:cc:b7	10.0.1.1	Desktop
 labo-02	00:04:e2:2a:bf:45	10.0.1.2	Desktop
 labo-03	00:04:e2:03:cc:70	10.0.1.3	Desktop
 labo-04	00:04:e2:03:cc:94	10.0.1.4	Desktop
 [...]

De volgende algemene instellingen, moeten configureerbaar zijn m.h.v. variabelen:

  • De standaard-locatie van het invoerbestand (zie hierboven) en uitvoerbestand (bijv. /etc/dhcpd.conf)
  • Domeinnaam
  • Het network-mask en broadcast-adres
  • IP-adressen van gateway, en DNS server(s)
  • Bereik van de dynamisch uit te delen IP-adressen (= laagste en hoogste IP)
  • Standaard en maximale lease-tijd

Het resulterende configuratiebestand moet conform de syntaxis van /etc/dhcpd.conf zijn en makkelijk leesbaar (commentaar, indentatie, ...). Er is een deel met de vaste instellingen voor het hele netwerk (routers, subnet masker, broadcast-adres, lease-tijd en bereik van IP adressen. Daarna volgen de toewijzingen van IP-adressen per pc. Afhankelijk van het MAC-adres wordt een vast IP toegekend en een hostnaam ("fully qualified", d.w.z. met de domeinnaam er bij). Merk op dat Linux-hosts deze hostnaam zullen aanvaarden en gebruiken, maar dat Windows pc's deze optie negeren.

Verifieer de werking van je script door een opstelling te maken met een DHCP-server en een client. In het geval van fysieke pc's verbind je die best met een cross-overkabel, losgekoppeld van het netwerk. Je kan ook op een virtueel netwerk testen, maar zorg dan wel dat de virtuele DHCP-server (gesimuleerd door de virtualisatiesoftware) uit staat.

[bewerken] Het bash-script

Het bash-script

#!/bin/bash
#opzetten van een dhcp server
#VARIABELEN -------------------------------
dhcpMap=/etc/dhcp
dhcpFile=$dhcpMap/dhcpd.conf
#vaste adressen
IPRANGE="10.0"
GATEWAY="$IPRANGE.0.1"
SUBNET="255.0.0.0"
DNSSERVER1="$IPRANGE.0.2"
DNSSERVER2="$IPRANGE.0.3"
ROUTERADDRESS="$IPRANGE.0.1"
BROADCAST="10.255.255.255"
#lease times dhcp
LEASETIME="3600"
MAXTIME="8000"
#END-VARIABELEN ----------------------------

#Generated script
(
cat << EOF
#Deze DHCP-configuratie is automatisch aangemaakt door Michel Coene en Jeroen Noterman
#Maak geen manuele wijzigingen!

#Algemene instellingen
#Geen dynamic dns

ddns-update-style none;#set a Dynamic DNS update style
authorative;#De dhcp-server mag IP's uitdelen


#info over de lease time
default-lease-time $LEASETIME;#De client krijgt standaard een ip adres toegewezen voor deze duur
max-lease-time $MAXTIME;#dit is de maximum duur dat een adres verkregen kan worden zonder hernieuwd te worden
option routers $ROUTERADDRESS;#het adres van de router
option domain-name-servers $DNSSERVER1;#de adressen van de DNS servers
option domain-name-servers $DNSSERVER2; option broadcast-address $BROADCAST;#het broadcast adres
option subnet-mask $SUBNET;#het subnet mask van het netwerk

#info over het subnet waarin onze PC's moeten komen
subnet $IPRANGE.0.0 netmask $SUBNET {#een subnet definieren
#de range specifieren
range $IPRANGE.3.1 $IPRANGE.3.30;
}
#subnet $IPRANGE.0.0: dit specifieert welk subnet aangemaakt kan worden (10.0.0.0)
#netmask $SUBNET: specifieert het subnetmask voor het aan te maken subnet
#range $IPRANGE.3.1 $IPRANGE.3.30: de dhcp-server kan ip's uitdelen binnen deze range

#Individuele adrestoewijzingen voor klaspc's
EOF
) > $dhcpFile

#LEZEN FILE ---------------------------------------------------------------------
#lezen van de file met mac-adressen in en daar ip's aan toewijzen
awk -v iprange="$IPRANGE" '{ sub(/\r$/,""); print "host " $1 " { hardware ethernet " $2 "; fixed-address " iprange "." $3 "; option host-name " $4 "; }" }' $1 >> $dhcpFile
#END-LEZEN FILE -----------------------------------------------------------------

#awk wordt gebruikt om een tekstfile in te lezen. De optie -v staat ervoor dat de variabele wordt toegewezen voordat het programma uitgevoerd wordt. Hier wordt als substring een spatie/vrije ruimte gebruikt. Via print wordt alles zogezegd terug gegeven, hier is dat dus in de variabele gestopt.

#host = uitleg welke computer het is (bv. PCBaas, PCWerknemer1)
#hardware ethernet = om de computer te identificeren via het mac-adres
#fixed-address = een vast ip-adres toewijzen aan die computer met het hierboven beschreven mac-adres
#option host-name = om een hostname toe te wijzen aan de bewuste computer
#vast ip zetten voor de dhcp server + dhcp server opstarten
ifconfig eth0 $IPRANGE.0.10 netmask $SUBNET up

echo ' Add this line to /etc/sysconfig/iptables'
echo ' -A INPUT -m state --state NEW -m udp -p udp --dport 67:68 -j ACCEPT'
echo ' then do: service iptables restart'
echo ' then start your dhcp server with: service dhcpd start'


[bewerken] Resultaat: /etc/dhcp/dhcpd.conf

Resulterende DHCP-configuratie:
#Deze DHCP-configuratie is automatisch aangemaakt door Michel Coene en Jeroen Noterman
#Maak geen manuele wijzigingen!

#Algemene instellingen
#Geen dynamic dns
ddns-update-style none;--> set a dynamic dns-update style
#dhcpserver mag ip's uitdelen
authorative;

#info over de lease time
default-lease-time 3600;
max-lease-time 8000;
#adres van de router instellen
option routers 10.0.0.1;
#adres van de DNS server
option domain-name-servers 10.0.0.2;
option domain-name-servers 10.0.0.3;
#broadcast adres
option broadcast-address 10.255.255.255;
#subnet mask
option subnet-mask 255.0.0.0;

#info over het subnet waarin onze PC's moeten komen
subnet 10.0.0.0 netmask 255.0.0.0 {
#de range specifieren
range 10.0.3.1 10.0.3.30;
}

#Individuele adrestoewijzingen voor klaspc's host l419a-01 { hardware ethernet 00:04:e2:03:cc:b7; fixed-address 10.0.1.1; }
host l419a-02 { hardware ethernet 00:04:e2:2a:bf:45; fixed-address 10.0.1.2; }
host l419a-03 { hardware ethernet 00:04:e2:03:cc:70; fixed-address 10.0.1.3; }
host l419a-04 { hardware ethernet 00:04:e2:03:cc:94; fixed-address 10.0.1.4; }
host l419a-05 { hardware ethernet 00:04:e2:2a:c5:05; fixed-address 10.0.1.5; }
host l419a-06 { hardware ethernet 00:04:e2:2a:c5:14; fixed-address 10.0.1.6; }
host l419a-07 { hardware ethernet 00:04:e2:03:cc:52; fixed-address 10.0.1.7; }
host l419a-08 { hardware ethernet 00:04:e2:2a:c5:16; fixed-address 10.0.1.8; }
host l419a-09 { hardware ethernet 00:04:e2:2a:c5:19; fixed-address 10.0.1.9; }
host l419a-10 { hardware ethernet 00:04:e2:2a:c5:00; fixed-address 10.0.1.10; }
host l419a-11 { hardware ethernet 00:04:e2:2a:be:d0; fixed-address 10.0.1.11; }
host l419a-12 { hardware ethernet 00:04:e2:2a:c5:0f; fixed-address 10.0.1.12; }
host l419a-13 { hardware ethernet 00:04:e2:2a:c7:69; fixed-address 10.0.1.13; }
host l419a-14 { hardware ethernet 00:04:e2:2a:c5:12; fixed-address 10.0.1.14; }
host l419a-15 { hardware ethernet 00:04:e2:2a:bf:1a; fixed-address 10.0.1.15; }
host l419a-16 { hardware ethernet 00:04:e2:03:cc:35; fixed-address 10.0.1.16; }
host l419a-17 { hardware ethernet 00:04:e2:2a:bf:15; fixed-address 10.0.1.17; }
host l419a-18 { hardware ethernet 00:04:e2:2a:be:c0; fixed-address 10.0.1.18; }
host l419a-19 { hardware ethernet 00:04:e2:2a:c4:3d; fixed-address 10.0.1.19; }
host l419a-20 { hardware ethernet 00:04:e2:2a:c5:03; fixed-address 10.0.1.20; }
host l419b-01 { hardware ethernet 00:04:e2:2a:be:d8; fixed-address 10.0.2.1; }
host l419b-02 { hardware ethernet 00:04:e2:2a:c4:ad; fixed-address 10.0.2.2; }
host l419b-03 { hardware ethernet 00:04:e2:2a:bf:50; fixed-address 10.0.2.3; }
host l419b-04 { hardware ethernet 00:04:e2:2a:c5:22; fixed-address 10.0.2.4; }
host l419b-05 { hardware ethernet 00:04:e2:2a:c5:1d; fixed-address 10.0.2.5; }
host l419b-06 { hardware ethernet 00:04:e2:2a:c7:5f; fixed-address 10.0.2.6; }
host l419b-07 { hardware ethernet 00:04:e2:2a:c5:1c; fixed-address 10.0.2.7; }
host l419b-08 { hardware ethernet 00:04:e2:2a:bf:4c; fixed-address 10.0.2.8; }
host l419b-09 { hardware ethernet 00:04:e2:2a:c7:5b; fixed-address 10.0.2.9; }
host l419b-10 { hardware ethernet 00:04:e2:2a:bd:9b; fixed-address 10.0.2.10; }
host l419b-11 { hardware ethernet 00:04:e2:2a:c5:17; fixed-address 10.0.2.11; }
host l419b-12 { hardware ethernet 00:04:e2:2a:c5:08; fixed-address 10.0.2.12; }
host l419b-13 { hardware ethernet 00:04:e2:2a:be:9c; fixed-address 10.0.2.13; }
host l419b-14 { hardware ethernet 00:04:e2:2a:c4:f7; fixed-address 10.0.2.14; }
host l419b-15 { hardware ethernet 00:04:e2:2a:c4:f4; fixed-address 10.0.2.15; }
host l419b-16 { hardware ethernet 00:04:e2:2a:c5:09; fixed-address 10.0.2.16; }
host l419b-17 { hardware ethernet 00:04:e2:2a:bb:6c; fixed-address 10.0.2.17; }
host l419b-18 { hardware ethernet 00:04:e2:2a:bf:4a; fixed-address 10.0.2.18; }
host l419b-19 { hardware ethernet 00:04:e2:03:cb:27; fixed-address 10.0.2.19; }
host l419b-20 { hardware ethernet 00:04:e2:2a:c7:57; fixed-address 10.0.2.20; }

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.
Persoonlijke instellingen