Egal ob erste Idee, konkrete Herausforderung oder einfach Neugier – wir hören zu und bringen die richtigen Antworten mit. Meldet euch, wir freuen uns drauf!

Follow us

Drag

Blog Details

DNS (BIND9) per REST API verwalten

Images
Authored by
Jens
Date Released
September 29, 2025
Comments
Keine Kommentare

Die Verwaltung von DNS Resource Records (RR) bedeutet in klassischen BIND-Setups oft: Zone-Dateien und Konfigurationen manuell bearbeiten – inklusive aller Details wie Serial-Nummern und Reloads. Das funktioniert, ist aber alles andere als benutzerfreundlich.

Bei Hyperscalern wie AWS, GCP oder Diensten wie Cloudflare läuft das anders: Wir bekommen ein übersichtliches Dashboard, einfache Oberflächen – und im Hintergrund sprechen diese Tools mit DNS-Servern über REST-APIs.

Aber wie funktioniert das genau? Und noch wichtiger: Wie bauen wir unsere eigene REST-Management-API für einen selbst gehosteten DNS-Server wie BIND9?

Das fertige Projekt gibt es auf GitHub: fivesecde/fivesec-dns-bind-rest-api

DNS und BIND – die Grundlagen

Das Domain Name System (DNS) ist einer der Grundpfeiler des Internets. Ohne DNS müssten wir uns IP-Adressen wie Telefonnummern merken, um Websites aufzurufen.

  • Forward Lookup: Domain → IP-Adresse

  • Reverse Lookup: IP-Adresse → Domain

In BIND sind diese Funktionen in Forward- und Reverse-Zonen implementiert.

Beispiel: Klassische BIND-Konfiguration

Das manuelle Bearbeiten dieser Dateien ist mühsam, fehleranfällig und skaliert nicht, sobald DNS-Änderungen häufiger anfallen.

zone "example.com" {
    type master;
    file "/etc/bind/zones/db.example.com";
    allow-update { key ddns-key; };
};

Dynamische Updates mit TSIG

Statt Dateien direkt zu editieren, unterstützt BIND dynamische Updates nach [RFC 2136]. Damit lassen sich Records zur Laufzeit hinzufügen, ändern oder löschen – ganz ohne händisches Anpassen der Zone-Files.

Damit nicht jeder beliebige Client Änderungen einspielen kann, gibt es TSIG Keys (Transaction Signatures). Diese basieren auf HMAC und authentifizieren die Requests.

BIND9 in Docker Compose betreiben

Um BIND9 einfach test- und reproduzierbar laufen zu lassen, bietet sich ein Docker-Setup an. Das macht die Installation schlank, Updates unkompliziert und erlaubt es, Konfigurationen sauber über Volumes zu mounten.

services:
bind:
image: ubuntu/bind9:latest
container_name: bind
ports:
- "5553:53/udp"
- "5553:53/tcp"
volumes:
- ./bind/named.conf:/etc/bind/named.conf
- ./bind/named.conf.local:/etc/bind/named.conf.local
- ./bind/named.conf.options:/etc/bind/named.conf.options
- ./bind/zones:/var/lib/bind/zones
- ./bind/ddns.key:/etc/bind/keys/ddns.key:ro
restart: unless-stopped
user: "100:101"

DNS per REST API verwalten

Damit wir BIND9 so komfortabel steuern können wie Cloudflare oder AWS Route53, bauen wir eine REST API mit Spring Boot.

Die Basis bildet die Java-Bibliothek dnsjava – ein ausgereiftes Toolkit für DNS-Operationen (Queries, Updates, Zone Transfers). Damit lassen sich dynamische Updates sehr einfach an BIND9 senden.

Quellcode: GitHub – DnsUpdateClientComponent

Beispiel: Ein REST-Endpunkt POST /api/v1/dns ruft im Hintergrund addARecord() auf und legt damit automatisch einen neuen A-Record an.

Vorteile des Ansatzes

Mit Docker, TSIG-gesicherten Updates und einer Spring Boot REST API entsteht:

– Eine self-hosted Alternative zu Cloudflare/AWS DNS APIs
Automatisierung & CI/CD-Integration von DNS-Änderungen
– Basis für ein eigenes DNS-Management-Dashboard

DNS muss nicht altmodisch sein. Mit ein paar modernen Komponenten lässt sich BIND9 so einfach verwalten wie bei den großen Cloud-Anbietern.

Share:

Lass uns reden – und dein Projekt starten.