Konfiguration eines Secondary DNS mit Plesk
Einleitung
Aufgabe war es, einen kleinen Debian basierten DNS Server von außen zugänglich, aber trotzdem maximal sicher aufzubauen. Der Server sollte als Secondary DNS hinter einem anderen DNS Server funktionieren, der über Plesk verwaltet wird.
Es gibt die Möglichkeit, einfach einen zweiten Server mit Plesk aufzusetzen und diesem die gleiche Konfiguration im DNS anzulegen und ihn als Secondary zu konfigurieren. Das automatische Anlegen vollständig neuer Domains auf dem zweiten Plesk ist damit nicht gelöst und das Setup ist für den Anwendungsfall zu "groß".
Für die Synchronization wurde daher das Plesk Plugin "Slave DNS Manager" verwendet.
(https://docs.plesk.com/en-US/obsidian/administrator-guide/dns/secondary-dns-server.79004/)
Die Absicherung der Installation findet sich dann hier: Absicherung eines DNS Servers mit nftables
Installation
Betriebssystem
Es wurde ein durch den Hoster bereitgestelltes Debian minimal Image verwendet. Auf dem System ist also DEBIAN 13 mit minimaler Konfiguration installiert.
BIND auf dem Secondary installieren
sudo apt update
sudo apt install bind9 bind9-utils dnsutils
Dienst prüfen:
systemctl status bind9
systemctl status named
(Je nach Distribution und Version)
RNDC-Schlüssel erzeugen
Der Plesk-Server muss auf dem Secondary dynamisch neue Zonen anlegen können.
Dafür wird rndc über TCP-Port 953 verwendet.
Auf dem Secondary:
openssl rand -base64 32
Beispielausgabe:
XrF7kLWbINlRpO6D7BmqbAOu8kX8+F8fAHY7Qn1xVOM=
Diesen Wert sicher speichern. Er wird anschließend auf beiden Seiten verwendet.
BIND für dynamisch angelegte Secondary-Zonen konfigurieren
allow-new-zones aktivieren
Auf Debian befindet sich der vorhandene options-Block normalerweise in:
/etc/bind/named.conf.options
Innerhalb des bereits vorhandenen Blocks ergänzen:
options {
directory "/var/cache/bind";
allow-new-zones yes;
recursion no;
allow-query { any; };
listen-on { any; };
listen-on-v6 { any; };
};
Wichtig: Keinen zweiten separaten options-Block anlegen, sondern den vorhandenen erweitern.
Plesk benötigt allow-new-zones yes, weil die Erweiterung neue Zonen über rndc addzone auf dem Secondary erzeugt.
RNDC-Key und Controls konfigurieren
Datei anlegen:
sudo nano /etc/bind/plesk-secondary.conf
Inhalt:
key "plesk-primary" {
algorithm hmac-sha256;
secret "XrF7kLWbINlRpO6D7BmqbAOu8kX8+F8fAHY7Qn1xVOM="; # Hier das korrekte Secret einsetzen!
};
controls {
inet 198.51.100.20 port 953
allow {
203.0.113.10;
127.0.0.1;
}
keys {
"plesk-primary";
};
};
Dabei ersetzen:
198.51.100.20 = IP des Secondary
203.0.113.10 = öffentliche IP des Plesk-Primary
Die Konfiguration in /etc/bind/named.conf einbinden:
include "/etc/bind/plesk-secondary.conf";
Beispielsweise am Ende der Datei:
sudo nano /etc/bind/named.conf
Rechte einschränken:
sudo chown root:bind /etc/bind/plesk-secondary.conf
sudo chmod 640 /etc/bind/plesk-secondary.conf
Konfiguration prüfen:
sudo named-checkconf
Wenn keine Ausgabe erscheint, ist die Syntax korrekt.
BIND neu starten:
sudo systemctl restart bind9
Port prüfen:
sudo ss -lntp | grep ':953'
Erwartet wird ein Listener auf der Secondary-IP:
198.51.100.20:953
Slave DNS Manager in Plesk installieren
In Plesk:
Erweiterungen →
Erweiterungskatalog →
Slave DNS Manager →
Installieren
Danach:
Erweiterungen →
Meine Erweiterungen →
Slave DNS Manager →
Add Slave
Eintragen:
IP address: 198.51.100.20
Port: 953
Secret: XrF7kLWbINlRpO6D7BmqbAOu8kX8+F8fAHY7Qn1xVOM=
(Beispiel)
Je nach Version fragt die Erweiterung möglicherweise zusätzlich den Key-Namen ab:
plesk-primary
Plesk fügt die Secondary-IP automatisch zur Transfer-ACL der verwalteten Zonen hinzu. Bei Änderungen verwendet die Erweiterung intern unter anderem:
rndc addzonerndc refreshrndc delzone
Dadurch werden sowohl neue Zonen als auch Änderungen und Löschungen auf den Secondary übertragen.
Bestehende Zonen synchronisieren
Im Slave DNS Manager anschließend die Funktion verwenden:
Resync
Dadurch werden bereits vorhandene aktive DNS-Zonen auf dem Secondary angelegt.
Auf dem Secondary währenddessen das Log beobachten:
sudo journalctl -u named -f
Auf dem Plesk-Server schreibt der DNS-Dienst relevante Fehler unter anderem nach:
/var/log/plesk/messages
Beide Nameserver in der Plesk-DNS-Vorlage hinterlegen
Unter:
Tools & Einstellungen →
DNS-Vorlage
sollten mindestens folgende NS-Einträge enthalten sein:
<domain>. NS ns1.example.net.
<domain>. NS ns2.example.net.
Außerdem müssen die Hostnamen selbst auflösbar sein:
ns1.example.net. A 203.0.113.10
ns2.example.net. A 198.51.100.20
Bei bestehenden Domains kann die DNS-Vorlage über die jeweilige DNS-Konfiguration angewendet werden.
Wichtig: Plesk unterscheidet zwischen automatisch aus der Vorlage übernommenen und manuell veränderten Einträgen.
Registrar und Glue Records konfigurieren
Die NS-Einträge innerhalb der eigenen Zone reichen nicht aus. Beim Registrar der jeweiligen Domain müssen ebenfalls beide Nameserver eingetragen werden:
ns1.example.net
ns2.example.net
Falls sich die Nameserver innerhalb der von ihnen verwalteten Domain befinden, beispielsweise:
example.net wird von ns1.example.net und ns2.example.net verwaltet
müssen beim Registrar sogenannte Glue Records beziehungsweise Host Records registriert werden:
ns1.example.net → 203.0.113.10
ns2.example.net → 198.51.100.20
Ohne diese Glue Records entsteht bei der Auflösung eine zyklische Abhängigkeit.
Synchronisation testen
SOA-Serial vergleichen
Primary:
dig @203.0.113.10 example.org SOA +short
Secondary:
dig @198.51.100.20 example.org SOA +short
Die SOA-Serial muss auf beiden Servern identisch sein.
Beispiel:
ns1.example.net. hostmaster.example.org. 2026062503 10800 3600 604800 10800
Testeintrag in Plesk anlegen
In Plesk:
Domains →
example.org →
DNS →
Eintrag hinzufügen
Beispielsweise:
Typ: TXT
Name: secondary-test
Wert: sync-ok
Danach direkt beide Server abfragen:
dig @203.0.113.10 secondary-test.example.org TXT +short
dig @198.51.100.20 secondary-test.example.org TXT +short
Beide müssen liefern:
"sync-ok"
Autoritative Nameserver kontrollieren
dig example.org NS +short
Erwartet:
ns1.example.net.
ns2.example.net.
Direkte Autoritätsprüfung:
dig @203.0.113.10 example.org SOA +norecurse
dig @198.51.100.20 example.org SOA +norecurse
In beiden Antworten sollte das aa-Flag gesetzt sein.
Häufige Fehler
Secondary erscheint als erreichbar, Zonen fehlen aber
Prüfen:
named-checkconf
journalctl -u named --since "10 minutes ago"
Typische Ursachen:
allow-new-zones yes;fehlt- RNDC-Key stimmt nicht überein
- TCP 953 ist blockiert
- Secondary kann den Primary nicht über TCP 53 erreichen
- BIND darf nicht in sein Zonenverzeichnis schreiben
- Plesk-DNS-Zone ist deaktiviert
permission denied beim Anlegen der Zone
Debian:
sudo chown bind:bind /var/cache/bind
sudo chmod 750 /var/cache/bind
Auf RHEL-/AlmaLinux-Systemen kann zusätzlich SELinux relevant sein:
sudo setsebool -P named_write_master_zones 1
Nur UDP 53 geöffnet
Autoritative DNS-Server benötigen auch TCP 53. Zonentransfers laufen grundsätzlich über TCP, und größere DNS-/DNSSEC-Antworten können ebenfalls TCP erfordern.
Manuelle Änderung auf dem Secondary
Nicht durchführen. Der Secondary übernimmt die Zone erneut vom Primary und überschreibt lokale Änderungen.
Alle DNS-Daten düfen ausschließlich in Plesk gepflegt werden.
No comments to display
No comments to display