FreeBSD – DNS en DHCP

Hoewel de Fritz!Box redelijk te configureren valt met betrekking tot DNS en DHCP, is het toch lastig om hostnamen te koppelen aan bijvoorbeeld een MAC adres en hier dan een vast IP adres aan toe te kennen. Door gebruik te maken van dns/dnsmasq is het mogelijk om zowel de DNS alsook de DHCP functionaliteit beschikbaar te maken.

Installatie

We voegen dns/dnsmasq toe aan de lijst van port packages welke gebouwd moeten worden met poudriere en configureren het port package. Hierbij gebruiken we alle defaults.

# poudriere options -j 12amd64 dns/dnsmasq

Na het bouwen kunnen we het port package installeren.

# pkg update && pkg install dns/dnsmasq

Configuratie

De configuratie staat in het bestand /usr/local/etc/dnsmasq.conf en bevat al een voorbeeld configuratie. Deze verwijderen we en beginnen vanaf scratch.

Als eerste stellen we ons eigen domein in en forceren dat dit altijd gebruikt wordt. Ook zorgen we ervoor dat niet-publieke IP adressen niet doorgestuurd worden naar de upstream DNS servers.

# Hosts zonder domein worden niet doorgestuurd
domain-needed

# Niet-routeerbare IP adressen worden genegeerd
bogus-priv

# Forceer eigen domein wanneer het niet wordt gebruikt
domain=home.lan
expand-hosts
local=/home.lan/

Vervolgens stellen we de IP adressen in waarop dnsmasq moet luisteren naar requests.

# Luister naar requests op IP adres 127.0.0.1 (localhost) en 172.16.123.11 (server IP)
listen-address=127.0.0.1
listen-address=172.16.123.11

# Luister op alle interfaces
bind-interfaces

Als laatste vertellen we dnsmasq welke upstream DNS servers gebruikt moeten worden.

# Upstream DNS - Google en OpenDNS
strict-order
server=8.8.8.8
server=208.67.220.220
server=8.8.4.4
server=208.67.222.222

Tot zover de DNS configuratie en kunnen we verder met de DHCP configuratie. Hiervoor stellen we IP adresbereik in van waaruit de IP adressen uitgedeeld worden. Verder definiƫren we ook de opties voor de DHCP client zoals DNS server en router.

# DHCP
dhcp-range=172.16.123.100,172.16.123.200,255.255.255.0,24h
dhcp-option=option:router,172.16.123.1
dhcp-option=option:dns-server,172.16.123.11

# Bewaar DHCP leases
dhcp-leasefile=/var/db/dnsmasq/dnsmasq.leases

Normaal gesproken kun je er als DHCP client niet van uit gaan dat je altijd hetzelfde IP adres krijgt toegewezen. Op basis van het MAC adres kunnen we dit echter wel forceren door voor elk MAC adres een dhcp-host regel toe te voegen.

dhcp-host=xx:xx:xx:xx:xx:xx,<ip-adres>

Voor alle belangrijke systemen, zoals de Fritz!Box, de WiFi versterkers en de computers, heb ik een regel toegevoegd zodat ze altijd hetzelfde IP adres krijgen toegewezen. Voor mobiele telefoons en de tablets heb ik dit niet gedaan.

Tot slot hebben we nog de mogelijkheid om aan een IP adres een host naam te koppelen. Dit kan dus alleen voor systemen welke een vast IP adres hebben. We maken een bestand /usr/local/etc/hosts waarin we deze koppeling vastleggen.

# Localhost
127.0.0.1 localhost

# Overige hosts
<ip-adres> <host naam> <host alias>

In de dnsmasq configuratie voegen we de volgende regel toe om de koppeling daadwerkelijk te gebruiken.

# Hosts file
addn-hosts=/usr/local/etc/hosts

We kunnen de configuratie testen met het commando:

# dnsmasq --test

Service starten

Omdat het niet gewenst is om meerdere DHCP servers op 1 netwerk te hebben, moeten we eerst de DHCP server in de Fritz!Box uitzetten. Let op dat alleen de IPv4 DHCP server wordt uitgezet.

Om gebruik te maken van onze eigen DNS service moet het bestand /etc/resolv.conf aangepast worden.

# Search local domain
search local
nameserver 172.16.123.11

Vervolgens kunnen we de dnsmasq service opstarten.

# service dnsmasq onestart

Hernieuw de DHCP leases op de verschillende computers of verbreek eventjes de WiFi verbinding van mobiele apparaten om te controleren dat een nieuw IP adres wordt toegekend. Bezoek ook een aantal websites om te zien dat externe hosts nog benaderbaar zijn en gebruik tools als dig of nslookup om te zien of zowel het juiste IP adres wordt gevonden voor een host naam en ook onze eigen DNS server wordt gebruikt.

Als alles correct functioneert voegen we nog een regel toe aan /etc/rc.conf zodat de service automatisch wordt opgestart bij het starten van de server. Ook definiƫren we de naam van het configuratiebestand.

# - DNS cache and DHCP server
dnsmasq_enable="YES"
dnsmasq_conf="/usr/local/etc/dnsmasq.conf"

Referenties