DHCP Server
Omdat ik zelf graag de controle heb over hoe mijn IP adressen toegedeeld worden en daarnaast mijn huidige provider (Ziggo) mij beperkt in de instellingen, heb ik ervoor gekozen om zelf een eigen DHCP Server in te richten. Wat kan je hier beter voor gebruiken dan een Raspberry Pi? Onderstaande is een beschrijving van de installatie op een Raspberry Pi met Raspbian.
Installatie van de software
De eerste stap is het installeren van de software:
sudo apt-get install isc-dhcp-server
De volgende stap is ervoor zorgen dat je Raspberry Pi een statisch IP adres heeft. Een werkinstructie is hier te vinden.
Configureren van de DHCP Server
De volgende stap is het configureren van de DHCP Server. Hiervoor bewerken we het volgende bestand
sudo nano /etc/default/isc-dhcp-server
Zoek in dit bestand naar het volgende onderdeel (staat waarschijnlijk onderaan in het bestand)
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="eth0"
Wijzig INTERFACES=”eth0″ naar de juiste interface, waarop je de DHCP Service de verzoeken wil laten versturen. De Raspberry Pi heeft maar één interface, dus dit moet eth0 zijn.
Nu moeten we het eigenlijke DHCP configuratiebestand wijzigen.
sudo nano /etc/dhcp/dhcpd.conf
Het merendeel van het bestand is gecommenteerd (#) en bevat hulpvolle voorbeelden. We gaan op zoek naar
# option definitions common to all supported networks... option domain-name "home"; #//Randomly chosen the name home as this is my home network. option domain-name-servers 172.16.20.62; #//This is the router in my network that handles DNS
De Raspberry Pi zal als DHCP ser ver in mijn thuis LAN Netwerk gaan draaien. Hiervoor hetb ik onderstaande commentaar weggehaald bij de “authoritative” regel.
# If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be un-commented. authoritative;
In het volgende onderdeel staat geconfigureerd, hoe de IP Adressen worden uitgegeven, wat de default Gateway is voor de cliënten, welke DNS server(s) word(en) aangeboden, etc…
subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.51 192.168.0.99; range 192.168.0.151 192.168.0.199; option domain-name-servers 62.179.104.196, 213.46.228.196; option routers 192.168.0.1; option broadcast-address 192.168.0.255; default-lease-time 7200; max-lease-time 36000; }
Ik heb gekozen voor twee verschillende bereiken in mijn configuratie. Dit hem ik gedaan, omdat ik bepaalde IP Adressen niet door de DHCP Server wil laten gebruiken. Deze worden later als zogenaamde “Vaste IP Adressen” voor bepaalde cliënten gedefinieerd. Je kunt in principe zoveel bereiken definiëren als dat nodig is.
Vaste IP Adressen toewijzen
Om vaste ip adressen te definiëren, gaan we verder naar beneden in het configuratie bestand. Daar vind je een stuk vergelijkbaar aan dit voorbeeld.
#host disney { # hardware ethernet 08:00:07:26:c0:a5; # fixed-address 130.211.198.204; #}
Je kunt aan de hand van dit voorbeeld, zoveel vaste ip adressen definiëren als dat je zelf nodig hebt.
host machine1 { hardware ethernet XX:XX:XX:XX:XX:XX; fixed-address 192.168.0.100; } host machine2 { hardware ethernet XX:XX:XX:XX:XX:XX; fixed-address 192.168.0.101; } host machine3 { hardware ethernet XX:XX:XX:XX:XX:XX; fixed-address 192.168.0.102; } host machine4 { hardware ethernet XX:XX:XX:XX:XX:XX; fixed-address 192.168.0.103; }
Wanneer er een apparaat zich aanbiedt met het gedefinieerde MAC adres, dan wordt automatisch het ingestelde vaste ip adres aan dit apparaat uitgedeeld.
Deze ip adressen komen uit een reeks die ge-exclude zijn uit de gedefinieerde reeksen op de DHCP Server in bovenstaande configuratie.
DNS Server configuratie
Om ervoor te zorgen dat de ip adressen worden vertaald naar namen, maken we gebruik van DNS. De DNS Servers worden aangeboden vanuit het bestand “/etc/resolv.conf”. Aangezien dit bestand automatisch wordt aangemaakt, gaan alle wijzigingen die in dit bestand worden gemaakt verloren, wanneer de DHCP Server opnieuw wordt gestart. De instellingen moeten daarom gemaakt worden in “/etc/resolvconf.conf”
sudo nano /etc/resolvconf.conf
Wijzig dit bestand en vul hier de primaire en secundaire DNS server in. In mijn voorbeeld zijn dit de servers van Ziggo.
# Configuration for resolvconf(8) # See resolvconf.conf(5) for details resolv_conf=/etc/resolv.conf # If you run a local name server, you should uncomment the below line and # configure your subscribers configuration files below. #name_servers=127.0.0.1 # Primary DNS Server name_servers=62.179.104.196 # Secondary DNS Server name_servers_append=213.46.228.196 # Mirror the Debian package defaults for the below resolvers # so that resolvconf integrates seemlessly. dnsmasq_resolv=/var/run/dnsmasq/resolv.conf pdnsd_conf=/etc/pdnsd.conf unbound_conf=/var/cache/unbound/resolvconf_resolvers.conf
Automatisch starten DHCP Server
Nu moeten we nog zorgen dat de DHCP Server automatisch start na het opstarten van de Raspberry Pi. Hiervoor voeren we onderstaande commando uit:
sudo update-rc.d isc-dhcp-server start
Voer nu onderstaand commando handmatig uit, om te testen of alles goed is ingesteld:
sudo service isc-dhcp-server start
Wanneer je geen foutmeldingen krijgt en weer netjes op de prompt terug komt, is alles goed. Het kan ook zijn dat er een foutmelding komt, zoals onderstaande:
Job for isc-dhcp-server.service failed. See 'systemctl status isc-dhcp-server.service' and 'journalctl -xn' for details.
In bijna alle gevallen heb je ergens een typefout gemaakt. Controleer vooral het onderdeel met de vaste ip adressen en kijk of je hier geen typefouten heb gemaakt, of bijvoorbeeld een ; bent vergeten.
Als de DHCP Server zonder foutmeldingen start starten we de Raspberry Pi opnieuw op, om te controleren of het automatisch opstarten van de DHCP Server ook goed werkt. Nadat de Raspberry Pi opnieuw is opgestart, controleren we dit met het commando:
sudo service isc-dhcp-server status
Wanneer alles goed is, krijg je iets zoals onderstaand resultaat:
isc-dhcp-server.service - LSB: DHCP server Loaded: loaded (/etc/init.d/isc-dhcp-server) Active: active (running) since Tue 2017-10-31 09:50:38 CET; 5s ago Process: 4045 ExecStop=/etc/init.d/isc-dhcp-server stop (code=exited, status=0/SUCCESS) Process: 4222 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=0/SUCCESS) CGroup: /system.slice/isc-dhcp-server.service └─4228 /usr/sbin/dhcpd -q -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid eth0 Oct 31 09:50:36 raspberrypi dhcpd[4227]: Internet Systems Consortium DHCP Server 4.3.1 Oct 31 09:50:36 raspberrypi dhcpd[4227]: Copyright 2004-2014 Internet Systems Consortium. Oct 31 09:50:36 raspberrypi dhcpd[4227]: All rights reserved. Oct 31 09:50:36 raspberrypi dhcpd[4227]: For info, please visit https://www.isc.org/software/dhcp/ Oct 31 09:50:36 raspberrypi dhcpd[4227]: Wrote 0 deleted host decls to leases file. Oct 31 09:50:36 raspberrypi dhcpd[4227]: Wrote 0 new dynamic host decls to leases file. Oct 31 09:50:36 raspberrypi dhcpd[4227]: Wrote 0 leases to leases file. Oct 31 09:50:36 raspberrypi dhcpd[4228]: Server starting service. Oct 31 09:50:38 raspberrypi isc-dhcp-server[4222]: Starting ISC DHCP server: dhcpd. Oct 31 09:50:38 raspberrypi systemd[1]: Started LSB: DHCP server.
Controleren uitgegeven leases
Om te controleren of en welke ip adressen er worden uitgedeeld, kan je onderstaande commando geven
sudo cat /var/lib/dhcp/dhcpd.leases
Je krijgt nu een overzicht van welke ip adressen er zijn uitgedeeld, zoals in onderstaand voorbeeld:
# The format of this file is documented in the dhcpd.leases(5) manual page. # This lease file was written by isc-dhcp-4.3.1 server-duid "\000\001\000\001!\212\365\334\270'\3537l\245"; lease 192.168.0.64 { starts 2 2017/10/31 08:54:58; ends 2 2017/10/31 10:54:58; cltt 2 2017/10/31 08:54:58; binding state active; next binding state free; rewind binding state free; hardware ethernet 5c:96:56:2b:56:a3; uid "\001\\\226V+V\243"; } lease 192.168.0.68 { starts 2 2017/10/31 08:58:31; ends 2 2017/10/31 10:58:31; cltt 2 2017/10/31 08:58:31; binding state active; next binding state free; rewind binding state free; hardware ethernet 28:18:78:4d:95:4b; uid "\001(\030xM\225K"; client-hostname "Domotica Dashboard"; } lease 192.168.0.51 { starts 2 2017/10/31 08:58:58; ends 2 2017/10/31 18:58:58; cltt 2 2017/10/31 08:58:58; binding state active; next binding state free; rewind binding state free; hardware ethernet 38:c9:86:6f:1f:a3; uid "\0018\311\206o\037\243"; client-hostname "AppleWatch"; }
Als alles goed is gegaan, heb je nu een werkende DHCP Server in je eigen netwerk!