Zum Inhalt

Eigene Domains mit DNS-Manager hosten

Stand: 05/2025
Bind9-Logo
Verwendete Software
- DNS-Manager 1.0.0
- Ubuntu 24.04 LTS
- Bind9 9.18.30
Weitere Dokumentationen:
- LAMP-Stack unter Ubuntu einrichten

Vorwort

Diese Dokumentation beschreibt die Einrichtung des DNS-Managers von Twilight-Networks in einer typischen Umgebung mit Web-Interface und Agenten.

Es sind Grundkenntnisse im Umgang mit Linux erforderlich, da die Vorgehensweise, wie sie hier beschrieben ist, in manchen Teilen abweichen kann. Kein System ist wie das Andere. Die Dokumentation wurde sorgfältig von mir geprüft. Dennoch kann ich keinerlei Haftung für Schäden an Ihrem System oder eine Gewährleistung übernehmen. Bitte verwenden Sie diese Dokumentation auf eigene Gefahr.

Der Aufbau des Systems ist bewusst modular gestaltet: Das Web-Interface dient als zentrale Steuerungsstelle – hier werden DNS-Zonen bearbeitet, Records gepflegt und Deployments ausgelöst. Die eigentliche Arbeit (Dateien schreiben, BIND neu laden etc.) übernehmen sogenannte Agenten, die auf einem oder mehreren DNS-Servern installiert sind.

Das Web-Interface kommuniziert mit den Agenten über eine abgesicherte REST-API. So lassen sich auch entfernte Server oder komplexe Setups (z. B. Master/Slave) zentral verwalten. Web-Interface und Agent können auf demselben Server laufen – müssen es aber nicht. In produktiven Umgebungen ist es oft sinnvoll, diese Rollen zu trennen:

  • Web-Interface: zentrale Verwaltung, Benutzeroberfläche

  • Agent: Zonendateien erzeugen, BIND steuern, lokal deployen

Ein Agent ist pro DNS-Server erforderlich – es können jedoch beliebig viele Agenten gleichzeitig verwendet werden.

Der DNS-Manager ist produktiv erprobt und eignet sich nicht nur für Test- oder interne Umgebungen. Mit ihm lassen sich echte, öffentlich registrierte Domains (z. B. .de, .net, .org) betreiben. Die erzeugten Zonendateien erfüllen dabei alle Anforderungen der DENIC – auch bei strengen DNS-Konformitätsprüfungen.

Das bedeutet:
Domains, die mit dem DNS-Manager verwaltet werden, können ohne Einschränkung bei offiziellen Registraren und Nameserver-Prüfstellen eingesetzt werden.


flowchart LR
    subgraph Webserver
        UI["DNS-Manager Web-Interface"]
    end

    subgraph Agent_Server_1["Nameserver 2"]
        AG1["DNS-Manager Agent"]
        BIND1["BIND9"]
    end

    subgraph Agent_Server_2["Nameserver 1"]
        AG2["DNS-Manager Agent"]
        BIND2["BIND9"]
    end

    UI -->|REST API| AG1
    UI -->|REST API| AG2

    AG1 -->|Zonendateien schreiben| BIND1
    AG2 -->|Zonendateien schreiben| BIND2


Server vorbereiten

Root-Rechte einräumen

Während der gesamten Dokumentation werden Root-Rechte benötigt. Um auf das Voranstellen von sudo zu verzichten, verschaffen Sie sich für die gesamte Sitzung erhöhte Rechte mit:

sudo -i

Update durchführen

Bringen Sie den Server auf den aktuellen Patchstand:

apt update && apt upgrade


Installation Web-Interface

Wichtig!

Das Web-Interface ist die zentrale Steuerungsoberfläche des DNS-Managers. Hier werden Zonen und DNS-Records verwaltet, Änderungen vorgenommen und Deployments angestoßen.
Es kann auf demselben Server wie ein Agent installiert werden – muss aber nicht. In produktiven Umgebungen empfiehlt es sich oft, das Web-Interface und die Agenten zu trennen, z. B. aus Sicherheitsgründen.

Wichtig ist: Ohne mindestens einen Agenten kann das Web-Interface keine Zonendateien generieren oder verteilen.


Software installieren

Da PHP 8.4 nicht im offiziellen Ubuntu-Repository von Ubuntu 24.04 enthalten ist, fügen wir zunächst das bewährte Drittanbieter-Repository ppa:ondrej/php hinzu:

apt install apt-transport-https
LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
apt update

Das Web-Interface und die Zonendatei-Validierung benötigen folgende Pakete und PHP-Module (≥ 8.1):

apt install bind9-utils
apt install php8.4 php8.4-cli php8.4-common php8.4-mysql php8.4-mbstring php-json

Laden Sie den DNS-Manager aus dem offiziellen GIT-Repository herunter:

git clone https://github.com/Twilight-Networks/dnsmanager.git /usr/share/dnsmanager

Erstellen Sie einen Symlink 'dnsmanager-ui' zu Ihrem Webroot-Verzeichnis:

ln -s /usr/share/dnsmanager/web/ /var/www/html/dnsmanager-ui

Konfiguration erstellen

Sicherheit und Trennung

Die Konfigurationsdateien befinden sich bewusst außerhalb des Webroots.
Damit wird verhindert, dass sensible Daten wie API-Tokens oder Datenbankpasswörter versehentlich öffentlich zugänglich oder überschrieben werden. Zudem entspricht dies gängigen Best Practices in der Linux-Administration, bei denen Konfiguration stets in /etc/ liegt.


Erstellen Sie den Ordner /etc/dnsmanager. Dieser Ordner wird die Konfiguration des UIs und ggf. des Agents enthalten.

mkdir /etc/dnsmanager

Kopieren Sie die Konfigurationsbeispiele, setzen Sie den entsprechenden Symlink und vergeben Sie die notwendigen Rechte auf die Datei:

cp /usr/share/dnsmanager/web/config/ui_config-sample.php /etc/dnsmanager/ui_config.php
ln -s /etc/dnsmanager/ui_config.php /usr/share/dnsmanager/web/config/ui_config.php
chown root:www-data /etc/dnsmanager/ui_config.php
chmod 640 /etc/dnsmanager/ui_config.php

Cronjob für Monitoring aktivieren

Was macht der Cronjob?

Dieser Cronjob sorgt dafür, dass regelmäßig geprüft wird, ob alle DNS-Server erreichbar sind und alles ordnungsgemäß läuft. Die Ergebnisse werden im Web-Interface angezeigt, damit Sie auf einen Blick sehen können, ob es irgendwo ein Problem gibt.


Kopieren Sie die Cronjob-Datei in den Ordner /etc/cron.d:

cp /usr/share/dnsmanager/cron/dnsmanager_monitoring /etc/cron.d/

sudo-Rechte für benötigte BIND-Kommandos vergeben

Info

Damit das Web-Interface bestimmte BIND-Kommandos wie named-checkzone oder rndc reload ausführen darf, werden gezielt dafür nötige Rechte vergeben. Die sudoers-Datei erlaubt genau die Befehle, die das UI für seine Aufgaben braucht – nicht mehr und nicht weniger. Das ist sicherer als das Web-Interface komplett mit Root-Rechten laufen zu lassen.


Kopieren Sie die sudoers-Datei und vergeben Sie die notwendigen Rechte:

cp /usr/share/dnsmanager/sudoers.d/dnsmanager-ui /etc/sudoers.d/
chmod 0440 /etc/sudoers.d/dnsmanager-ui

Apache-Konfiguration einbinden

Info

Diese Konfiguration sorgt dafür, dass das Web-Interface korrekt in Apache eingebunden wird.
Sie stellt sicher, dass:

  • der Symlink (dnsmanager-ui) als Webverzeichnis erkannt wird,
  • .htaccess-Dateien (z. B. für Zugriffsschutz oder URL-Rewriting) verwendet werden dürfen,
  • und Apache die richtigen Berechtigungen für den Zugriff setzt.


Kopieren Sie die Apache-Config-Datei in den entsprechenden Apache-Ordner und aktivieren Sie die Konfiguration:

cp /usr/share/dnsmanager/apache/dnsmanager.conf /etc/apache2/conf-available/
a2enconf dnsmanager
systemctl reload apache2

Datenbankverbindung herstellen

Datenbank-Schema importieren

Importieren Sie das Datenbankschema. Die Datenbank wird unter dem Namen dnsmanager angelegt.

mysql -u root < /usr/share/dnsmanager/sql/dnsmanager_schema.sql

Datenbank-Benutzer erstellen

Erstellen Sie den SQL-Benutzer dnsmanager mit folgenden Rechten.
Ersetzen Sie sicheres_passwort durch ein sicheres Passwort ;-)

CREATE USER 'dnsmanager'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER
ON dnsmanager.* TO 'dnsmanager'@'localhost';
FLUSH PRIVILEGES;

Konfigurationsdatei anpassen

Ergänzen Sie die Datenbankeinstellungen in der Konfig-Datei:

nano /etc/dnsmanager/ui_config.php

Anzupassende Parameter:
[...]
/** ---------------------------------------
 *  Datenbank-Konfiguration
 * --------------------------------------- */
define('DB_HOST', 'localhost');            // Hostname des Datenbankservers
define('DB_NAME', 'dnsmanager');           // Name der verwendeten Datenbank
define('DB_USER', 'root');                 // Datenbank-Benutzername
define('DB_PASS', 'init01');               // Datenbank-Passwort
[...]



Installation Agent

Wichtig!

Ein Agent ist die Komponente, die auf dem eigentlichen DNS-Server installiert wird und für das Schreiben, Validieren und Aktivieren der Zonendateien zuständig ist.

Er kommuniziert über eine REST-API mit dem Web-Interface und führt dort angeforderte Aktionen aus – etwa das Erzeugen von Zonendateien oder das Ausführen von rndc reload. Pro Nameserver ist genau ein Agent nötig. Web-Interface und Agent können auf demselben Server laufen, aber auch verteilt betrieben werden.

Der DNS-Manager kann im Prinzip beliebig viele Agenten gleichzeitig verwalten. So lassen sich mehrere Server (z. B. primär/sekundär oder geografisch verteilt) zentral steuern.


Software installieren

apt install bind9

Laden Sie den DNS-Manager aus dem offiziellen GIT-Repository herunter:

git clone https://github.com/Twilight-Networks/dnsmanager.git /usr/share/dnsmanager

Erstellen Sie einen Symlink 'dnsmanager-agent' zu Ihrem Webroot-Verzeichnis:

ln -s /usr/share/dnsmanager/agent/ /var/www/html/dnsmanager-agent

Konfiguration erstellen

Sicherheit und Trennung

Die Konfigurationsdateien befinden sich bewusst außerhalb des Webroots.
Damit wird verhindert, dass sensible Daten wie API-Tokens oder Datenbankpasswörter versehentlich öffentlich zugänglich oder überschrieben werden. Zudem entspricht dies gängigen Best Practices in der Linux-Administration, bei denen Konfiguration stets in /etc/ liegt.


Erstellen Sie den Ordner /etc/dnsmanager. Dieser Ordner wird die Konfiguration des Agents enthalten.

mkdir /etc/dnsmanager

Kopieren Sie die Beispiele für die Konfiguriation und den API-Key únd setzen Sie den entsprechenden Symlink:

cp /usr/share/dnsmanager/agent/config/api_config-sample.php /etc/dnsmanager/api_config.php
ln -s /etc/dnsmanager/api_config.php /usr/share/dnsmanager/agent/config/api_config.php
cp /usr/share/dnsmanager/agent/config/api_tokens-sample.php /etc/dnsmanager/api_tokens.php
ln -s /etc/dnsmanager/api_tokens.php /usr/share/dnsmanager/agent/config/api_tokens.php

Vergeben Sie die notwendigen Rechte auf die Dateien:

chown root:www-data /etc/dnsmanager/api_*
chmod 640 /etc/dnsmanager/api_*

sudo-Rechte für benötigte BIND-Kommandos vergeben

Info

Damit das Web-Interface bestimmte BIND-Kommandos wie named-checkzone oder rndc reload ausführen darf, ohne nach einem Passwort zu fragen, werden gezielt dafür nötige Rechte vergeben. Die sudoers-Datei erlaubt genau die Befehle, die das UI für seine Aufgaben braucht – nicht mehr und nicht weniger. Das ist sicherer als das Web-Interface komplett mit Root-Rechten laufen zu lassen.


Kopieren Sie die sudoers-Datei und vergeben Sie die notwendigen Rechte:

cp /usr/share/dnsmanager/sudoers.d/dnsmanager-agent /etc/sudoers.d/
chmod 0440 /etc/sudoers.d/dnsmanager-agent

Apache-Konfiguration einbinden

Kopieren Sie die Apache-Config-Datei in den entsprechenden Apache-Ordner und aktivieren Sie die Konfiguration:

cp /usr/share/dnsmanager/apache/dnsmanager-agent.conf /etc/apache2/conf-available/
a2enconf dnsmanager-agent
systemctl reload apache2

Bind konfigurieren

Info

In diesem Abschnitt wird BIND so vorbereitet, dass der DNS-Manager später korrekt damit arbeiten kann. Der Agent generiert automatisch Zonendateien, die im Ordner /etc/bind/zones abgelegt werden – deshalb müssen an dieser Stelle die passenden Schreibrechte gesetzt werden.

Außerdem wird die Datei zones.conf über ein include in BIND eingebunden. Diese Datei wird dynamisch vom DNS-Manager erzeugt und enthält alle aktiven Zonen. Ohne diese Einbindung würde BIND die verwalteten Domains später nicht laden.


Ordner für Zonendateien erstellen und Rechte setzen

Erstellen Sie den Ordner /etc/bind/zones und vergeben Sie die notwendigen Rechte:

mkdir /etc/bind/zones
chown www-data:www-data /etc/bind/zones

BIND-Zonenkonfiguration einbinden

Editieren Sie die Datei named.conf.local und fügen Sie folgenden Parameter hinzu:

nano /etc/bind/named.conf.local

Anzupassende Parameter:
[...]
include "/etc/bind/zones/zones.conf";

Bind neustarten

Starten Sie bind9 neu, damit die Konfiguration angewendet wird:

systemctl reload bind9



Domain hosten

Web-Interface aufrufen

Rufen Sie das Web-Interface auf und melden Sie sich an:
(Der Standard-Admin lautet admin mit Passwort admin123)

https://example.com/dnsmanager-ui/


DNS-Manager Admin login


Nameserver anlegen

Wählen Sie im linken Menü den Punkt Server aus und klicken Sie anschließend auf + Neuer Server, vergeben Sie die entsprechenden Parameter und generieren Sie einen API-Key:

DNS-Manager Add Server


Editieren Sie auf dem entsprechenden Server die Datei /etc/dnsmanager/api_tokens.php und tragen Sie den API-Key ein.

nano /etc/dnsmanager/api_tokens.php

Anzupassende Parameter:
[...]
return [
    '1234567890abcdefghijklmnopqrstuvwxyz', // Beispieltoken
    // Weitere gültige Tokens hier ergänzen, jeweils als 64-stellige Hex-Zeichenkette
];
[...]


Zone anlegen

Info

Beim Anlegen einer neuen Zone werden, abhängig vom Zonen- bzw. Servernamen bei Bedarf automatisch Glue Records (A/AAAA für Nameserver) sowie NS-Einträge korrekt gesetzt – insbesondere dann, wenn die Nameserver in der eigenen Zone liegen.

Das spart Zeit, reduziert Fehler und erfüllt die Anforderungen vieler Registrare bereits beim ersten Deployment.

Wählen Sie im linken Menü den Punkt Zonen aus und klicken Sie anschließend auf + Neue Zone, vergeben Sie die entsprechenden Parameter und weisen Sie den Master-Server zu:


DNS-Manager Add Zone


Klicken Sie anschließend im linken Menü auf Veröffentlichen um die neue Zone auf den Nameserver auszurollen:

DNS-Manager Deploy Zone


DNS-Records setzen

Info

Einige Record-Typen (z. B. PTR, DKIM, SRV) enthalten spezielle Logiken oder automatische Ergänzungen – je nach gewähltem Typ werden Felder dynamisch angezeigt, vorausgefüllt oder auf Gültigkeit geprüft. Der DNS-Manager unterstützt Sie dabei, gültige und konforme Einträge zu erstellen – auch ohne tiefes DNS-Fachwissen.


Klicken Sie unter Zonen auf Einträge um DNS-Records für eine bestimmte Zone zu setzen.
Auch hier rollen Sie Konfiguration mit einem Klick auf Veröffentlichen aus:

DNS-Manager Add Record


Predelegation Check (DENIC)

Wichtig!

Bevor eine .de-Domain bei einem Registrar eingetragen werden kann, verlangt die DENIC eine sogenannte Predelegation-Prüfung. Dabei wird sichergestellt, dass die eingetragenen Nameserver korrekt erreichbar sind, gültige Zonendaten ausliefern und den technischen Anforderungen entsprechen.

Diesen Check können Sie vorab selbst durchführen – direkt über das DENIC NAST-Tool. Geben Sie dort Ihre Domain sowie mindestens zwei Nameserver ein. Wenn die Konfiguration korrekt ist, erscheint die Meldung „Prüfung erfolgreich“ – wie in den folgenden Beispielen zu sehen.

Sobald die Prüfung erfolgreich war, können Sie Ihre Nameserver beim gewünschten Registrar (z. B. IONOS, INWX, Hetzner etc.) hinterlegen. Die Zone wird dann live und öffentlich erreichbar.


Tragen Sie im Formular die entsprechenden Parameter ein und starten Sie die Prüfung.

DNS-Manager Denis Nast


Wenn alles richtig eingerichtet ist, kann die Domain bzw. die DNS-Zone beim gewünschten Registrar hinterlegt werden.

DNS-Manager Denis Nast



Abschluss

Wenn alle Tests erfolgreich waren, ist der DNS-Manager in Verbindung mit BIND9 einsatzbereit.