Benutzer-Werkzeuge

Webseiten-Werkzeuge


dns_server

DNS-Server

Installation

user@host:~#

apt-get install bind9

Konfiguration

Die Konfiguration des DNS-Servers ist in mehrere Dateien unterteilt, die in der Hauptkonfigurationsdatei unter /etc/bind/named.conf eingebunden werden:

/etc/bind/named.conf

// 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.

/etc/named.conf.options

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:

/etc/bind/named.conf.options

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:

/etc/bind/named.conf.options

[...]
         forwarders {
                <forwarders-IP>;
         };
[...]
Hier wurden die Public Domain Name Server von Google sowie der Quad9 DNS eingetragen.

Am Ende sieht die Datei so aus:

/etc/bind/named.conf.options

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; };
};

/etc/named.conf.local

Hier kommen die Definitionen der lokalen Zonen rein. Die Syntax ist hierbei genauso wie in der named.conf.default-zones:

/etc/bind/named.conf.local

//
// 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.

/etc/bind/db.netlab.local

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:

/etc/bind/db.netlab.local

; 
; 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

/etc/bind/db.100.0.10

Diese Datei beinhält die sogenannten PTR-Recods (Pointer).

/etc/bind/db.100.0.10

; 
; 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.

Dienst starten und prüfen

Mit einem systemctl-Kommando starte man den Server und frage gleich mal nach dem Status:

user@host:~#

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:

user@host:~$

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:

user@host:~$

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:

user@host:~$

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.

Troubleshooting

Forwarding funktioniert nicht

Hier hat es geholfen den Parameter dnssec-validation auto zu no zu switchen.

Subdomain einrichten

dns_server.txt · Zuletzt geändert: 2018/09/06 17:04 von admin