[HowTo] Bind9 Secondary DNS

Sachen die immer wieder gefragt werden.
Antworten
Manuel
Administrator
Beiträge: 6
Registriert: So 8. Okt 2017, 19:40

[HowTo] Bind9 Secondary DNS

Beitrag von Manuel » So 29. Okt 2017, 14:56

In dieser Anleitung möchte ich in einfachen Schritten erklären wie man einen ISP-ähnlichen Sekundären DNS Server mit Bind9 aufsetzt. Weiter setzt diese Anleitung auf dem Howto Bind9 - Primary DNS Service auf.

Ich gehe in meinem Beispiel von folgenden Vorraussetzungen aus:

- vServer von Hetzner
- Debian GNU/Linux 9.0 (Stretch)
- Bind9
- DNSutils
- Domain Reseller-Account, in meinem Falle Providerdomain

Zuerst sollte die Bind9 Konfigurationsdatei in /etc/bind/named.conf angepasst werden. Der "Options" Teil wurde wie folgt angepasst:

Code: Alles auswählen

options {
directory "/etc/bind/slave";
# pid-file "/var/run/bind/named.pid";
notify no;
#allow-notify { IP; };
allow-transfer { MASTER-IP; Andere-IP; };
forwarders { Pri.-DNS-IP };
forward first;
listen-on port 53 { 127.0.0.1; Eigene-IP; };
listen-on-v6 { none; };
allow-query { any;};
auth-nxdomain no; # conform to RFC1035
// version "My version is so secret that I even dont know what Im running on";
// Wer seine Bind Version "verstecken" will, kann die beide // vor version entfernen.
};
Erklärung der Statements:

directory {...}
Zeigt den Pfad auf in dem später die Slave - Zonefiles liegen sollen.

notify [yes] [no]
Damit wird bestimmt ob der Master eine Benachrichtigung an den/die Slave Server senden soll wenn ein Zonefile geupdatet wurde. (Mehr Info´s unter Internet Systems Consortium, Inc.)

allow-transfer { IP }
Hier wird definiert welche Hosts Zonentransfers von diesem Server erhalten dürfen. (Mehr Info´s unter Internet Systems Consortium, Inc.)

forward first
Hier (auskommentiert) würde der DNS-Server zuerst jede DNS Abfrage an einen anderen (in forwarders definierten) DNS-Server weiterleiten und erst dann versuchen die Frage selbst zu beantworten wenn die oder der forwarder nicht antworten kann.

forwarders { [IP] … }
Einstellung um die Forwarders zu definieren.

listen-on port [PORT] { [IP] … }
Das ist die Einstellung auf welchem Port Bind lauscht. Standart ist hier Port 53. Der Bereich [IP] muss in diesem Fall localhost, also 127.0.0.1, sowie die IP - Adresse des Servers enthalten. (Mehr Info´s unter Internet Systems Consortium, Inc.)

listen-on-v6 [PORT] { [IPv6] … }
Ist in diesem Fall deaktiviert, da dieser DNS keine IPv6 Unterstützung haben soll. (Mehr Info´s unter Internet Systems Consortium, Inc.)

allow-query { [IP] … }
Dies ist die Einstellungsmöglichkeit welche Hosts gewöhnliche DNS abfragen machen dürfen. Ich habe hier "any" eingetragen, so kann quasi jeder diesen DNS abfragen. (Mehr Info´s unter Internet Systems Consortium, Inc.)

Soviel zum "Options" Teil der Konfiguration. Ein weiteres Kriterium ist das Logging. Gerade bei der Fehlersuche ist es von großem Vorteil über ein Umfangreiches Log zu verfügen. Um die Standartmässigen Logs ein wenig zu erweitern habe ich in /etc/bind/named.conf weitere Anpassungen vorgenommen:

Code: Alles auswählen

logging {
channel bind9log {
 file "/var/log/named/bind9.log" versions 3 size 10m;
 severity dynamic;
 print-time yes;
 print-severity yes;
 print-category yes;
};
channel security {
 file "/var/log/named/security" versions 2 size 5m;
 severity dynamic;
 print-time yes;
 print-severity yes;
 print-category yes;
};
 category default {bind9log;};
 category security {security;};
 category lame-servers {null;};
};
Zuvor muss allerdings das Verzeichnis /var/log/ named angelegt werden und im Idealfall mit chown bind /var/log/named die entsprechende Berechtigung gesetzt werden. Nun hat man eine Informationsgrundlage die das Troubleshooting erheblich erleichtern kann.

Die Zonen die von vorneherein bei dem Bind9 Paket von Debain enthalten sind, bleiben unverändert:

Code: Alles auswählen

zone "localhost" {type master; file "/etc/bind/db.local";};
zone "127.in-addr.arpa" {type master; file "/etc/bind/db.127";};
zone "0.in-addr.arpa" {type master; file "/etc/bind/db.0";};
zone "255.in-addr.arpa" {type master; file "/etc/bind/db.255";};
Nachdem dieser teil der Konfiguration abgeschlossen ist, geht es mit der Erstellung der Slave-Zonen weiter. Dies ist wesentlich einfacher zu handhaben wie beim Primary DNS. Wie folgt, wird ein Eintrag in der Datei named.conf vorgenommen:

Code: Alles auswählen

zone "domain.tld" {
    type slave;
    file "www.domain.tld";
    masters {
      MASTER-IP;
    };
};
Zone "Domainname" definiert hier den Namen der zu sichernden Zone. Wichtig ist es hier beim Type 'slave' anzugeben, so weiss Bind dass es sich hier nicht um eine Master-Zone handelt (worauf wir ja hinauswollen). Per file ="filename" definieren wir den Dateinamen der Zone, die dann im Verzeichnis wie im Options-Teil (directory) definiert, abgespeichert wird.

Zum Schluss muss natürlich noch angegeben werden, wer der Master-DNS für diese Zone ist. Dies definiert man per masters {IP}.

Hat man den Primary DNS entsprechend konfiguriert, kann man schon jetzt den DNS Service mit /etc/init.d/bind9 restart neustarten. Jetzt sollte der Slave-Server beim Master nach der entsprechend eingerichteten Zone anfragen und sich eine Kopie des Original-Zonefile ziehen. Im Logfile würde das ungefähr so aussehen:

Code: Alles auswählen

06-Oct-2007 16:25:07.140 general: info: zone domain.tld/IN: Transfer started.
06-Oct-2007 16:25:07.141 xfer-in: info: transfer of 'domain.tld/IN' from MASTER-IP#53: connected using SLAVE-IP
06-Oct-2007 16:25:07.142 general: info: zone domain.tld/IN: transferred serial 2007100601
06-Oct-2007 16:25:07.142 xfer-in: info: transfer of 'domain.tld/IN' from MASTER-IP#53: end of transfer
Hier können wir genau erkennen was passiert ist: Der Transfer war erfolgreich.

Antworten