[1.0] [2.0] [3.0] [3.1] [4.0] [5.0]
5.0 DNS: Master – Slave
Auch in einem eigenen (kleinem) Netzwerk kann die Ausfallsicherheit des DNS-Server einem Administrator das Leben erheblich vereinfachen und man kann auch an EDV-Freien Tagen ohne Furcht anderen Dingen frönen. Es stlett sich nur die Frage wie?
Man kann dabei zwei Wege einschlagen.
1. Möglichkeit
Es wird ein 2. DNS-Server auf einer anderen Hardware (z.B.: Raspberry Pi) eingerichtet. Dies geschieht indem man zum einen den DNS-Server ganz normal installiert. Zum Schluß wird das Verzeichnis ‚/etc/bind/‚ vom ersten DNS-Server in das Verzeichnis des 2. DNS-Server (z.B.: Raspberry Pi) kopiert.
Wichtig hierbei ist darauf zu achten, das die Versionen der beiden Bind-Name DNS Server identisch sind.
Anzeige der Version: ‚named -v‚
Es muss nur darauf geachtet das die beiden DNS-Server immer auf dem gleichen Stand gehalten werden. Dies ist in einem kleinen Netzwerk zwar recht einfach zu händeln, aber mit der Zeit kann es doch recht lästig werden.
2. Möglichkeit
Die Einführung eines zweiten DNS-Server als ‚Slave‘ System. Auch hier muss als erstes ein zweiter DNS-Server auf einem anderen Server-System installiert werden. Im zweiten Schritt wird dieser DNS-Server nicht als ‚Master‘ sondern als ‚Slave‘ konfiguriert. Durch diese Maßnahme der Konfiguration werden aktiv vom Master die Zonendateien auf den Slave übertragen. Der Administrator muss nicht mehr die Dateien (Zonen) von zwei DNS-Servern pflegen. Dies ist eine enorme Erleichterung und eine Verringerung der Fehleranfälligkeit.
Ein Punkt ist jedoch von ganz großer Bedeutung.
Das Mischen von DNS-Server Versionen ist zwar möglich, aber ab der Version 9.9 des DNS-Servers hat sich das Dateiformat der Zonendatei beim dem Slave geändert. Leider wird diese Tatsache in vielen Anleitungen für DNS-Slave einfach verschwiegen oder es wird der Einfachheit nur mit Bind bis Version 9.8 gearbeitet!
Dieses neue Dateiformat nennt sich „RAW binary“ und ist nicht mehr so einfach zu lesen, bzw. zu editieren, da es sich um ein kompaktes Fileformat handelt indem sämtliche Kommentare beim Transferierung vom Master zum Slave verloren gehen. Damit es wieder überhaupt einigermaßen lesbar wird, wird ab der Version 9.9 ein Programm beigelegt, das dieses „RAW“-Format in ein lesbares „Text“-Format konvertiert. Dieses Konvertierungsprogramm kann die Zonendateien von „RAW -> Text“ oder von „Text -> RAW“ konvertieren.
Programm heißt:
„RAW -> TEXT“
named-compilezone -f raw -F text -o example.net.text example.net example.net.raw
„TEXT -> RAW“
named-compilezone -f text -F raw -o example.net.raw example.net example.net.text
Hier ein Beispiel aus meinem Netzwerk:
z.B.: named-compilezone -f raw -F text -o db.intern.lan.text intern.lan db.intern.lan
Damit diese Konvertierung entfallen kann und die Zonendateien in Textform abgespeichert werden, muss in der Datei:
named.conf bzw. named.conf.option folgende Zusatz hinzugefügt werden:
‚masterfile-format text;‚
Hier ein Beispiel des Master – Slave DNS-Systems, wie ich es in meinem Netzwerk einsetze:
Dateien des Masters:
Raspberry PI mit OS:
BIND-DNS:
named -v -> BIND 9.8.4-rpz2+rl005.12-P1
/etc/bind/named.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// This is the primary configuration file for the BIND DNS server named. // // If you are just adding zones, please do that in /etc/bind/named.conf.local // // named.conf // ---------- include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/rndc.key"; logging { channel default-log { file "/var/log/dns_query.log" versions 3 size 20m; print-time yes; severity debug 3; print-severity yes; }; category default { default-log; }; }; |
/etc/bind/named.conf.options
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// ------------------ // named.conf.options // ------------------ options { directory "/var/cache/bind"; forwarders { 192.168.0.99; 192.168.0.98; 8.8.8.8; 8.8.4.4; }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; allow-query { internes-lan; }; }; acl "internes-lan" { 192.168.0.0/24; }; |
/etc/bind/named.conf.local
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// ------------------ // named.conf.local // ------------------ acl "slaves" { 192.168.0.98; }; zone "intern.lan" { type master; file "/etc/bind/zones/db.intern.lan"; allow-transfer { slaves; key rndc-key ;}; also-notify { 192.168.0.98; }; notify yes; }; zone "0.168.192.in-addr.arpa" { type master; file "/etc/bind/zones/db.rev.0.168.192"; allow-transfer { slaves; key rndc-key ;}; also-notify { 192.168.0.98; }; notify yes; }; |
Zonen-Dateien – Master:
/etc/bind/zones/db.intern.lan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
; ; BIND data file for local loopback interface ; db.intern.lan = forwarder datei ; $TTL 3600 @ IN SOA dns-server.intern.lan. root.intern.lan. ( 201705062 ; Serial 360 ; Refresh 990 ; Retry 360 ; Expire 3600) ; Negative Cache TTL ; ; eMail Server @ IN MX 10 email.intern.lan. email IN A 192.168.0.248 @ IN NS dns-server.intern.lan. @ IN NS dns-server-backup.intern.lan. ; -------------------------------------- ; - Ab hier die RechnerNamen eintragen - ; -------------------------------------- dns-server IN A 192.168.0.99 dns-server-backup IN A 192.168.0.98 dns-1 IN CNAME dns-server dns-2 IN CNAME dns-server-backup gw-firewall IN A 192.168.0.250 email-srv-1 IN CNAME email ; -------------------------------------- ; - NAS Geraete - ; -------------------------------------- uwe-server-01 IN A 192.168.0.245 server-1 IN CNAME uwe-server-01 |
/etc/bind/zones/db.rev.0.168.192
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
; ; BIND data file for local loopback interface ; db.rev.0.168.192 = reverse zone ; $TTL 604800 @ IN SOA dns-server.intern.lan. root.localhost. ( 201705051 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS dns-server.intern.lan. @ IN NS dns-server-backup.intern.lan 99 IN PTR dns-server.intern.lan. 98 IN PTR dns-server-backup.intern.lan ; -------------------------------------- ; - Server - ; -------------------------------------- 250 IN PTR gw-firewall. 248 IN PTR email.intern.lan. ; -------------------------------------- ; - NAS Geräte - ; -------------------------------------- 245 IN PTR uwe-server-01. |
Dateien des Slaves:
Raspberry PI mit OS: ubuntu 16.04
BIND-DNS:
named -v -> BIND 9.10.3-P4-Ubuntu
/etc/bind/named.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// This is the primary configuration file for the BIND DNS server named. // // If you are just adding zones, please do that in /etc/bind/named.conf.local // // named.conf // ---------- include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/rndc.key"; logging { channel default-log { file "/var/log/dns_query.log" versions 3 size 20m; print-time yes; severity debug 3; print-severity yes; }; category default { default-log; }; }; |
/etc/bind/named.conf.options
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// ------------------- // named.conf.options // ------------------- options { // // directory "/var/cache/bind"; // Umlenkung auf ein anderes Verzeichnis! directory "/etc/bind/zones"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 forwarders { 192.168.0.98 // 192.168.0.250 Hostdatei des Gateways 192.168.0.250; 8.8.8.8; 8.8.4.4; }; //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; allow-notify { 192.168.0.99; 192.168.0.98; }; allow-transfer { 192.168.0.98; 192.168.0.99; }; allow-update { 192.168.0.98; 192.168.0.99; }; notify yes; // // Kann man an dieser Stelle einfügen oder aber // /etc/bind/named.conf.local innerhalb einer Zone! // Dann muß man es für jede Zone explizit angeben! // RAW -> Text automatische konvertierung masterfile-format text; }; |
/etc/bind/named.conf.local
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//----------------- // named.conf.local //------------------ zone "intern.lan" { type slave; masters { 192.168.0.99 key rndc-key ; }; // Alternative: // masterfile-format text; // file "/etc/bind/zones/db.intern.lan"; notify yes; allow-transfer { none; }; }; zone "0.168.192.in-addr.arpa" { type slave; masters { 192.168.0.99 key rndc-key ; }; // Alternative: // masterfile-format text; // file "/etc/bind/zones/db.rev.0.168.192"; notify yes; allow-transfer { none; }; }; |
Zonen-Dateien – Slave:
z.B.:
/etc/bind/zones/db.intern.lan
(transfer-Datei von Master -> Slave im Format: Text)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
$ORIGIN . $TTL 3600 ; 1 hour intern.lan IN SOA dns-server.intern.lan. root.intern.lan. ( 201705062 ; serial 360 ; refresh (6 minutes) 990 ; retry (16 minutes 30 seconds) 360 ; expire (6 minutes) 3600 ; minimum (1 hour) ) NS dns-server.intern.lan. NS dns-server-backup.intern.lan. MX 10 email.intern.lan. $ORIGIN intern.lan. $ORIGIN . $TTL 3600 ; 1 hour intern.lan IN SOA dns-server.intern.lan. root.intern.lan. ( 201705062 ; serial 360 ; refresh (6 minutes) 990 ; retry (16 minutes 30 seconds) 360 ; expire (6 minutes) 3600 ; minimum (1 hour) ) NS dns-server.intern.lan. NS dns-server-backup.intern.lan. MX 10 email.intern.lan. $ORIGIN intern.lan. dns-1 CNAME dns-server dns-2 CNAME dns-server-backup dns-server A 192.168.0.99 dns-server-backup A 192.168.0.98 email A 192.168.0.248 email-srv-1 CNAME email gw-firewall A 192.168.0.250 uwe-server-01 A 192.168.0.245 |
/etc/bind/zones/db.rev.0.168.192
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ORIGIN . $TTL 604800 ; 1 week 0.168.192.in-addr.arpa IN SOA dns-server.intern.lan. root.localhost. ( 201705051 ; serial 604800 ; refresh (1 week) 86400 ; retry (1 day) 2419200 ; expire (4 weeks) 604800 ; minimum (1 week) ) NS dns-server.intern.lan. $ORIGIN 0.168.192.in-addr.arpa. 245 PTR uwe-server-01. 247 PTR time. PTR uvr-rechnung. 248 PTR email.intern.lan. 250 PTR gw-firewall. 98 PTR dns-server-backup. 99 PTR dns-server.intern.lan. |
Quellen und Literaturhinweise:
Die Literatur zu diesem thema ist leider etwas veraltet, aber trotzdem ist sehr lehrreich. Stand der Literatur ca. 2007, leider wird dieses Thema nur noch stiefmütterlich behandelt. Aktuelle Ergänzungen sind leider nur noch übers Internet zu bekommen. Aber mit dem gefundenem Wissen sollte man recht vorsichtig bzw. umsichtig umgehen.
Linux Version und Bind Version muss genauestens überprüft werden.
Dies gilt natürlich auch für meine eigene Publikation.
- DNS & Bind GE-PACKT von Johannes Franken , Verlag mitp
- DNS/DHCP Grundlagen und Praxis von Konstatinos Agouros,
Verlag Opensource Press - DNS und Bind von Paul Albitz, Cricket Liu, Verlag O’Reilly
- Pro DNS and Bind Auflage 10 von Ron Altchison (aktuelle Wissensstand)
- Linux-Administrationshandbuch von Nemeth-Snyder-Hein,
open source library, Verlag Addison-Wesley - Zytrax DNS
- Bind9.net
- ISC FTP
- Internet Systems Consortium