Installation eines lokalen DNS Servers (CentOS)

Einleitung

DNS steht für Domain Name System und dient dazu, Rechnernamen in IP-Adressen zu übersetzen.  Im nachfolgenden Beitrag wir beschrieben, wie zwei DNS Server unter CentOS aufgesetzt werden.

Benötigte Pakete

Wir installieren BIND als Nameserver.

yum update
yum install bind bind-utils

Konfiguration

Die Konfiguration erfolgt in mehreren Dateien. Zunächst werden grundlegende Einstellungen in /etc/named.conf vorgenommen. Hier ist eine beispielhafte Konfiguration, die einige Kommentare enthält:

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {

        // 192.168.1.10 - Nameservers
        listen-on port 53 { 127.0.0.1; 192.168.1.10; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

        // welche Anfragen werden verarbeitet?
        allow-query     { localhost; 192.168.1.0/24; };

        // 192.168.1.11 - Slave-DNS-Servers
        allow-transfer  { localhost; 192.168.1.11; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone"krausix.local" IN {
        type master;
        file "forward.krausix";
        allow-update { none; };
};
zone"1.168.192.in-addr.arpa" IN {
        type master;
        file "reverse.krausix";
        allow-update { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Nun müssen die in der Konfiguration angegebenen Zone Files erstellt werden.

Zone Files erstellen

forward lookup zone – /var/named/forward.krausix

Die forward lookup zone dient zum Auflösen von Domainnamen zu IP-Adressen.  Wir erstellen die Datei /var/named/forward.krausix mit folgendem Inhalt:

$TTL 86400
@   IN  SOA     ns1.krausix.local. root.krausix.local. (
        2014072701  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          ns1.krausix.local.
@       IN  NS          ns2.krausix.local.
@       IN  A           192.168.1.1
@       IN  A           192.168.1.10
@       IN  A           192.168.1.11
gw      IN  A           192.168.1.1
ns1     IN  A           192.168.1.10
ns2     IN  A           192.168.1.11

Nun muss noch die reverse lookup zone konfiguriert werden.

Reverse lookup zone – /var/named/reverse.krausix

Die reverse lookup zone dient dem umgekehrten Weg, hiermit werden also zu IP-Adressen Domainnamen zugeordnet. Wir erstellen die Daten /var/named/reverse.krausix:

$TTL 86400
@   IN  SOA     ns1.krausix.local. root.krausix.local. (
        2014072701  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          ns1.krausix.local.
@       IN  NS          ns2.krausix.local.
@       IN  PTR         krausix.local.
gw      IN  A           192.168.1.1
ns1     IN  A           192.168.1.10
ns2     IN  A           192.168.1.11

1       IN  PTR         gw.krausix.local.
10      IN  PTR         ns1.krausix.local.
11      IN  PTR         ns2.skrausix.local.

Hiermit ist die Konfiguration abgeschlossen. Wenn keine Tippfehler unterlaufen sind, kann BIND nun gestartet werden.

Firewall anpassen

Damit Anfragen nicht geblockt werden, muss die Firewall noch entsprechend angepasst werden.

firewall-cmd --permanent --zone=public --add-port=53/tcp
firewall-cmd --permanent --zone=public --add-port=53/udp

Weiter gehts mit Start und Test…

Start und Test

Zunächst wird der DNS Server gestartet und so konfiguriert, dass er auch nach einem Reboot erneut gestartet wird.

systemctl start named.service
systemctl enable named.service

Abschließend kann ein Test erfolgen:

# Konfiguration prüfen
named-checkconf /etc/named.conf 
named-checkzone skraus.local /var/named/forward.skraus
named-checkzone skraus.local /var/named/reverse.skraus 

# Namen auflösen
dig ns1.krausix.local

# IP auflösen 
dig -x 192.168.1.10

Funktioniert dies, geht es weiter mit dem Slave DNS Server.

Slave DNS Server

Die Konfiguration erfolgt analog der oben beschriebenen Konfiguration des Masters, lediglich bei IP-Adresse und Zonenkonfiguration gibt es geringfügige Abweichungen. Hier /etc/named.conf:

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {

        // 192.168.1.11 - Slave Nameservers
        listen-on port 53 { 127.0.0.1; 192.168.1.11; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

        // welche Anfragen werden verarbeitet?
        allow-query     { localhost; 192.168.1.0/24; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone"krausix.local" IN {
        type slave;
        file "slaves/forward.krausix";
        masters { 192.168.1.10; };
};
zone"1.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/reverse.krausix";
        masters { 192.168.1.10; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Damit ist die Konfiguration vollständig. Da die Zonen des Masters genutzt werden, müssen keine Zonefiles erstellt werden.

 Start und Test

Auch für Firewalling, Start und Test kann wie oben beschrieben verfahren werden. Um nach dem Start zu prüfen, ob der Transfer funktioniert, kann in /var/log/messages nachgesehen werden oder das Slave Verzeichnis geprüft werden, dort liegen nach dem Start die Zonefiles:

ls /var/named/slaves/
forward.krausix  reverse.krausix

Have fun!

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.