Kennisbank › Dns › BIND: de DNS-server die je zelf draait
dns starter 15 September 2026

BIND: de DNS-server die je zelf draait

BIND: de DNS-server die je zelf draait BIND is de DNS-software die je installeert als je je eigen nameserver wilt draaien, en dit artikel laat je een werkende

Wie een domein host, krijgt vroeg of laat de vraag wie de DNS doet: de registrar, een managed provider, of jijzelf. Zelf draaien betekent volledige controle over zones, TTL's en DNSSEC. Het betekent ook dat je op zondagavond om half twaalf zelf uitzoekt waarom een zone niet resolveert. Dat is de prijs, en die betaal je bewust of niet.

BIND is de oudste nog breed gebruikte implementatie. Het begon als Berkeley Internet Name Domain, geschreven door graduate students aan UC Berkeley met DARPA-financiering, als praktische implementatie van het DNS-concept dat Paul Mockapetris in 1983–1984 ontwikkelde bij USC-ISI. Sinds BIND 9 (oktober 2000) zit het onderhoud bij het Internet Systems Consortium (ISC). Die geschiedenis is niet het punt. Het punt is dat BIND nog steeds de standaard is in de meeste netwerkcurricula, en dat je er vroeg of laat tegenaan loopt.

Vereisten

  • Debian 12 (bookworm) of Ubuntu 24.04 LTS
  • BIND 9.18 — de versie in de standaardrepositories van beide distro's
  • root-toegang of sudo
  • Een domein waarvan je de nameservers mag instellen
  • Minimaal één vast IP-adres
Oudere versies (BIND 8, BIND 4) komen niet aan bod. Die worden niet meer onderhouden en horen niet meer op een productiesysteem.

Stappen

1. Installeer BIND en de tools

```bash sudo apt update sudo apt install -y bind9 bind9utils bind9-doc dnsutils ```

`bind9` is de daemon (`named`), `bind9utils` bevat `named-checkconf` en `named-checkzone`, `dnsutils` geeft je `dig`. Zonder die twee check-tools ga je configuratiefouten pas ontdekken als de server al niet meer antwoordt.

2. Bekijk de standaardconfiguratie voordat je iets aanraakt

```bash cat /etc/bind/named.conf cat /etc/bind/named.conf.options cat /etc/bind/named.conf.local ```

Op Debian en Ubuntu is `named.conf` opgesplitst in drie bestanden. De `options`-file bevat globale instellingen, `local` is bedoeld voor je eigen zones. De meegeleverde `named.conf.default-zones` bevat de root-hints en localhost-zones — die laat je staan.

3. Beperk wie je server mag bevragen

Open `/etc/bind/named.conf.options` en zet een ACL bovenaan:

```bash sudo nano /etc/bind/named.conf.options ```

```conf acl trusted { 127.0.0.1; 192.0.2.0/24; };

options { directory "/var/cache/bind";

recursion no; allow-query { trusted; }; allow-transfer { none; };

listen-on port 53 { 127.0.0.1; 192.0.2.10; }; listen-on-v6 { none; };

dnssec-validation auto; }; ```

`recursion no` is de belangrijkste regel. Een open recursive resolver is een amplificatie-wapen: iedereen kan er misbruik van maken en jouw IP staat in de logs van iemand anders. Zet je deze server alleen als authoritative nameserver neer, dan wil je geen recursion. Wil je hem ook als resolver voor je eigen netwerk gebruiken, zet dan `recursion yes` en houd `allow-recursion { trusted; };` erbij — nooit breder.

`allow-transfer { none; };` blokkeert zone transfers naar willekeurige hosts. Zet hier alleen je secundaire nameserver neer, op IP.

4. Definieer je zone

Open `/etc/bind/named.conf.local`:

```bash sudo nano /etc/bind/named.conf.local ```

```conf zone "example.com" { type master; file "/etc/bind/zones/db.example.com"; allow-transfer { none; }; }; ```

Maak de zones-map aan:

```bash sudo mkdir -p /etc/bind/zones ```

5. Schrijf de zonefile

Kopieer de meegeleverde template als startpunt:

```bash sudo cp /etc/bind/db.local /etc/bind/zones/db.example.com sudo nano /etc/bind/zones/db.example.com ```

```conf $TTL 604800 @ IN SOA ns1.example.com. admin.example.com. ( 2024051501 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. @ IN A 192.0.2.10 ns1 IN A 192.0.2.10 www IN A 192.0.2.10 mail IN A 192.0.2.20 @ IN MX 10 mail.example.com. ```

Twee dingen om te weten. Het serienummer moet je ophogen bij elke wijziging, anders pikken secundaries de update niet op. Het getal `2024051501` is een datum plus volgnummer — geen verplicht formaat, wel een gewoonte die je later niet laat raden wanneer je voor het laatst iets veranderde. De punt achter `ns1.example.com.` is geen typfout: een naam zonder afsluitende punt wordt aangevuld met de zone-naam, en dat is zelden wat je bedoelt.

6. Controleer de configuratie voordat je herstart

```bash sudo named-checkconf sudo named-checkzone example.com /etc/bind/zones/db.example.com ```

De eerste controleert `named.conf` en alles wat het include't. De tweede parseert je zonefile. Beide moeten zonder output of met `zone example.com/IN: loaded serial 2024051501` eindigen. Herstarten zonder deze twee commando's is gokken, en `named` weigert bij een fout soms volledig te starten — dan ligt je hele DNS eruit, niet alleen die ene zone.

7. Herstart en enable de service

```bash sudo systemctl restart named sudo systemctl enable named sudo systemctl status named ```

Status moet `active (running)` tonen. Bij een fout in de zonefile stopt de daemon of negeert de zone stil — de status zegt dan niets nuttigs, de logs wel.

8. Open poort 53 in je firewall

```bash sudo ufw allow 53/tcp sudo ufw allow 53/udp ```

DNS gebruikt UDP voor normale queries en TCP voor zone transfers en grote antwoorden. Beide open, anders krijg je vage timeouts bij sommige queries en niet bij andere.

Verificatie

Vraag je eigen server rechtstreeks:

```bash dig @192.0.2.10 www.example.com A +short ```

Je krijgt het IP-adres terug dat in de zonefile staat. Geen antwoord, of `SERVFAIL`, betekent dat de zone niet geladen is — kijk in `/var/log/syslog` met `sudo journalctl -u named -n 50`.

Controleer daarna of de nameserver van buitenaf bereikbaar is door de NS-records van je domein op te vragen bij de parent:

```bash dig example.com NS +short ```

Zie je `ns1.example.com.` staan, dan is de delegatie bij je registrar goed. Zie je niets, dan moet je daar de nameservers nog instellen — BIND lost dat niet voor je op.

Veelgestelde problemen

`named` start niet na herstart. Negen van de tien keer een syntaxfout in de zonefile of een ontbrekende punt. Draai `sudo named-checkconf` en `sudo named-checkzone` opnieuw; die vertellen je de regel.

Queries van buitenaf time-outen, lokaal werkt alles. Firewall of `listen-on` staat te nauw. Check `sudo ss -lnup | grep :53` — als je IP er niet tussen staat, luistert `named` er niet op.

Zone-updates komen niet door naar de secundaire. Serienummer niet opgehoogd, of `allow-transfer` op de master staat de secundaire niet toe. Beide zijn te zien met `dig @master example.com AXFR`.

Wat je hiermee in handen hebt

Een werkende authoritative nameserver is een begin, geen eindpunt. DNSSEC-ondertekening, TSIG-sleutels voor zone transfers en split-horizon opzet komen er bovenop, en elk daarvan heeft eigen voetangels. Er zijn eenvoudiger DNS-servers dan BIND — Knot DNS en CoreDNS zijn compacter, PowerDNS heeft een database-backend en een prettiger API. Wat BIND heeft is leeftijd, documentatie en het feit dat vrijwel elke netwerkbeheerder die je later aan boord haalt het al eens heeft gezien.

De vraag is niet of BIND de beste keuze is. De vraag is of jij degene wilt zijn die om half twaalf in de logs graaft als een zone niet resolveert.

← Terug naar kennisbank
← Terug naar kennisbank