apt-get install bind9
Die Konfiguration des DNS-Servers ist in mehrere Dateien unterteilt, die
in der Hauptkonfigurationsdatei unter /etc/bind/named.conf
eingebunden werden:
// This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones";
In der Datei named.conf.default-zones
werden die für das funktionieren
des DNS-Servers notwendigen Zonendateien eingebunden, unter anderem die Zone „.“, die
auf die Root-Domain-Name-Server verweist. Hier sollte nichts geändert werden, sondern
nur in den beiden anderen Dateien: named.conf.options
und named.conf.local
.
Hier wird der DNS-Server konfiguriert. Für unseren Fall, dass wir einen simplen Forwarding
DNS-Server aufsetzen wollen muss recht wenig konfiguriert werden. Am Ende soll der
DNS-Server die Anfragen aus dem lokalen Netz beantworten können und alle anderen Anfragen
für die Auflösung von Hostnamen, die ihm nicht bekannt sind, sollen an einen anderen DNS-Server
weitergereicht werden.
In dieser Datei (ganz oben) legen wir zunächst mit einer Access Control List (ACL) die Hosts fest, von denen
Anfragen beantwortet werden dürfen:
acl allowed_clients { localhost; 10.0.100.0/24; }; [...]
Damit haben wir festgelegt, dass Anfragen vom DNS-Server selbt (localhost
) und
von allen Hosts aus dem Netz 10.0.100.0/24
beantwortet werden dürfen.
Dann lege man in dem Abschnitt options
die Forwarder fest, indem man
den Abschnitt forwarders
auskommentiert und die IP-Adressen der DNS-Server
einträgt, die angefragt werden sollen, falls Anfragen nicht im lokalen Netz
beantwortet werden können:
[...] forwarders { <forwarders-IP>; }; [...]
Hier wurden die Public Domain Name Server von Google sowie der Quad9 DNS eingetragen.
Am Ende sieht die Datei so aus:
acl allowed_clients { localhost; 10.0.100.0/24; }; options { directory "/var/cache/bind"; // 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 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. allow-query { allowed_clients; }; forwarders { <forwarders-IP>; }; //======================================================================== // 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; }; };
Hier kommen die Definitionen der lokalen Zonen rein. Die Syntax ist hierbei
genauso wie in der named.conf.default-zones
:
// // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; zone "netlab.local" { type master; file "/etc/bind/db.netlab.local"; }; zone "100.0.10.in-addr.arpa" { type master; file "/etc/bind/db.100.0.10"; };
In den Anführungszeichen stehen die Namen der Zonen. In der erste Zone „netlab.local
“
werden die Namen zu IPs aufgelöst, in der zweiten erfolgt der reverse DNS lookup,
der die IPs wieder zu Namen übersetzt.
Wichtig ist, dass später die Dateien, die hinter den file
-Direktiven
stehen auch wirklich vorhanden sind, die Benennung spielt dabei keine Rolle.
Diese Datei beinhält A-Records, die auf IPv4-Adressen verweisen. IPv6-Adressen werden mit AAAA-Records dargestellt. Hier können ansonsten auch zahlreiche weitere record types eingetragen werden:
; ; netlab.local ; ; ; $TTL 86400 @ IN SOA netlab.local. root.netlab.local. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL ; @ IN NS pi2.netlab.local. gate IN A 10.0.100.1 nas IN A 10.0.100.10 pi1 IN A 10.0.100.11 pi2 IN A 10.0.100.12 pi3 IN A 10.0.100.13 pi4 IN A 10.0.100.14 pi5 IN A 10.0.100.15 pi6 IN A 10.0.100.16
Diese Datei beinhält die sogenannten PTR-Recods (Pointer).
; ; netlab.local reverse lookup file ; ; ; $TTL 86400 @ IN SOA netlab.local. root.netlab.local. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL ; @ IN NS pi2.netlab.local. 1 IN PTR gate.netlab.local. 10 IN PTR nas.netlab.local. 11 IN PTR pi1.netlab.local. 12 IN PTR pi2.netlab.local. 13 IN PTR pi3.netlab.local. 14 IN PTR pi4.netlab.local. 15 IN PTR pi5.netlab.local. 16 IN PTR pi6.netlab.local.
Ist soweit alles konfiguriert, kann man den bind9
-Dienst starten.
Mit einem systemctl
-Kommando starte man den Server und frage gleich mal nach dem Status:
systemctl start bind9 systemctl status bind9 ------------------------------------------------------------------ ● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-02-15 20:17:31 UTC; 6min ago Docs: man:named(8) Main PID: 8311 (named) Tasks: 7 (limit: 4915) CGroup: /system.slice/bind9.service └─8311 /usr/sbin/named -f -u bind Feb 15 20:17:31 bananapim2plus named[8311]: zone 0.in-addr.arpa/IN: loaded serial 1 Feb 15 20:17:31 bananapim2plus named[8311]: zone 100.0.10.in-addr.arpa/IN: loaded serial 1 Feb 15 20:17:31 bananapim2plus named[8311]: zone netlab.local/IN: loaded serial 1 Feb 15 20:17:31 bananapim2plus named[8311]: zone 255.in-addr.arpa/IN: loaded serial 1 Feb 15 20:17:31 bananapim2plus named[8311]: zone localhost/IN: loaded serial 2 Feb 15 20:17:31 bananapim2plus named[8311]: zone 127.in-addr.arpa/IN: loaded serial 1 Feb 15 20:17:31 bananapim2plus named[8311]: all zones loaded Feb 15 20:17:31 bananapim2plus named[8311]: running Feb 15 20:17:31 bananapim2plus named[8311]: zone netlab.local/IN: sending notifies (serial 1) Feb 15 20:17:31 bananapim2plus named[8311]: zone 100.0.10.in-addr.arpa/IN: sending notifies (serial 1)
Sieht gut aus.
Auf dem Server selbst oder auf einem Client kann man nun testen, ob die Namensauflösung auch wirklich funktioniert:
host pi1 10.0.100.13 ------------------------------------------------------------------- Using domain server: Name: 10.0.100.13 Address: 10.0.100.13#53 Aliases: pi1.netlab.local has address 10.0.100.11
Dabei ist das zweite Argument der Nameserver, der um die Namensauflösung gebeten wird.
Rückwärts muss das ganze natürlich auch funktionieren:
host 10.0.100.11 10.0.100.13 ------------------------------------------------------------------- Using domain server: Name: 10.0.100.13 Address: 10.0.100.13#53 Aliases: 11.100.0.10.in-addr.arpa domain name pointer pi1.netlab.local.
Das ist auch zufriedenstellend. Nun muss nur noch das Forwarden der Anfragen funktionieren, indem man um die Auflösung eines Namens außerhalb unseres Netzes bittet:
host google.de 10.0.100.13 ------------------------------------------------------------------- Using domain server: Name: 10.0.100.13 Address: 10.0.100.13#53 Aliases: google.de has address 172.217.17.99 google.de has IPv6 address 2a00:1450:400e:806::2003 google.de mail is handled by 40 alt3.aspmx.l.google.com. google.de mail is handled by 10 aspmx.l.google.com. google.de mail is handled by 50 alt4.aspmx.l.google.com. google.de mail is handled by 30 alt2.aspmx.l.google.com. google.de mail is handled by 20 alt1.aspmx.l.google.com.
Damit ist der DNS-Server betriebsbereit.
Hier hat es geholfen den Parameter dnssec-validation auto
zu no
zu
switchen.