DNS-Server BIND9 als Slave einrichten

In den meisten IT-Umgebungen findet man ein Microsoft Active Directory vor. Damit verbunden wird meistens auch der Microsoft DNS-Server auf dem Domain Controller mit installiert. Das liegt zum Einem an der einfachen Administration aber auch das quasi bei der Installation des Active Directory nur ein „Haken“ zu setzen ist. Nach der Grundeinrichtung des DNS-Servers (weitere Forward Zonen, Reverse Zonen für jeden IP-Adressenbereich) ist nicht mehr viel zu tun.

Bei heutigen Planungen wird als Active Directory Namen gerne eine offizielle Domain als Fully-Qualified Host Name (FQDN) gegeben. In meinen Fall wäre es z.B. der Name wydler.eu. Das entspricht inzwischen auch den Best Practice seitens Microsofts, was früher nicht der Fall war.

Sobald Anwendungen, welche im lokalen, geschützten Netzwerk (LAN) installiert sind über das Internet erreichbar sein müssen, muss man sich zwangsweise mit dem Thema Split-DNS auseinandersetzen. Denn die obengenannte Domain wydler.eu ist über einen Anbieter wie z.B. Core Networks registriert. D.h. dessen DNS-Server verwaltet die Domain autoritativ. Damit muss man automatisch die Zone auf zwei DNS-Server pflegen.

Mit den zunehmenden Sicherheitsvorfällen steigt inzwischen auch das Sicherheitsbewusstsein. Damit verbunden werden immer häufiger vorhandene Strukturen um eine DMZ erweitert. Die Kommunikation zwischen Internet und DMZ bzw. DMZ < -> LAN wird jeweils mit einer Firewall geschützt und kontrolliert. In der DMZ werden Applikationen platziert, welche a) sowohl aus dem LAN als auch Internet erreichbar sein müssen b) Proxysysteme welche Anwendungen im LAN veröffentlichen.

Für die Kommunikation vom LAN die DMZ über den jeweiligen FQDN wird einfach im DNS-Server im LAN ein entsprechender A bzw. PTR-Eintrag angelegt. Somit wird bei Anwendungen, welche ein offizielles, gültiges Zertifikat verwenden keinerlei Fehlermeldungen ausgegeben. Andersherum sieht es schon anders aus. Meist wird der Einfachheit halber die jeweilige HOST-Datei des betroffenen Servers in der DMZ modifiziert. Was bei einer geringen Anzahl von Systemen den administrativen Aufwand im Grenzen hält. Gibt es viele Sever in der DMZ, so ist die Verwaltung über die HOSTS-Datei mit hohem Aufwand verbunden und die Übersicht geht schnell verloren.

Hier empfiehlt sich der Einsatz eines DNS-Servers in der DMZ. Dieser wird als Slave konfiguriert und erhält die notwendigen Zonen (Forward & Reserve) automatisch aus dem DNS-Server im LAN (Master). Damit kommt das klassische Design Master-Slave zum Einsatz.

Umgebung
LAN:
– Subnetz: 192.168.122.0/24
– 1x virtuelle Maschine, Windows Server 2012R2 Standard (Active Directory und DNS-Server), 192.168.122.2/24
– Active Directory FQDN: lab01.wydler.eu
– Active Directory NetBios: lab01

DMZ:
– Subnetz: 192.168.123.0/24
– 1x virtuelle Maschine, Ubuntu Server 18.04.1 LTS (BIND9), 192.168.123.12/24

Installation und Konfiguration von BIND9

Installation:

apt-get install bind9 bindutils

/etc/bind/named.conf.options

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.

// Diese DNS-Server werden genutzt, wenn der FQDN nicht vom Slave DNS-Server aufgelöst werden konnte. 
forwarders {
82.96.64.2;
46.101.154.113;
185.121.177.177;
};
 
//========================================================================
// 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; };
};
 
// IP-Adressen der DNS-Server im LAN, welche die DNS-Zonen replizieren dürfen
acl landns {
192.168.122.2;
};
 
// IP-Adressen der DNS-Server im LAN, welche als Master agieren
masters landns {
192.168.122.2;
};

// IP Adresse bzw. Subnetze, welche den DNS Server abfragen duerfen 
acl dmz {
192.168.123.0/24;
127.0.0.1;
};

/etc/bind/named.conf.wydler.eu

zone "wydler.eu" in {
type slave;
file "/var/cache/bind/db.lab01.wydler.eu";
allow-query { dmz; };
allow-transfer {landns; };
masters { landns; };
};
 
zone "122.168.192.in-addr.arpa" in {
type slave;
file "/var/cache/bind/db.192.168.122.0";
allow-query { dmz; };
allow-transfer { landns; };
masters { landns; };
};

cat /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";
 
include "/etc/bind/named.conf.lab01.wydler.eu";

Konfiguration des Windows DNS Servers

Wenn es mehrere DNS-Server in der DMZ gibt, welche als Slave agieren sollen, sind hier alle IP-Adressen einzutragen.

Die Meldung „Auflösung nicht möglich“ kommt daher, wenn in der Forward-Lookupzone der A-Eintrag für den DNS-Server in der DMZ fehlt.


Diese Schritte sind für jede Zone (egal welches Typs) zu wiederholen.

Anmerkungen

  • Regelwerk der Firewall zwischen den Sicherheitszonen LAN und DMZ ergänzen.
  • Regeln der Firewall auf den jeweiligen Server anpassen.
  • Für eine einwandfreie Kommunikation der DNS-Server ist eine bidirektionale Kommunikation notwendig (Port 53/UDP).
  • Reverse-Lookupzone für den IP-Adressbereich der DMZ im Microsoft DNS-Server anlegen und pflegen. Somit funktioniert die Namensauflösung auch rückwärts.
  • Gibt es mehrere Microsoft DNS-Server im LAN, sind die obigen Schritte (Konfiguration des Windows DNS Servers) pro Server und Zone zu wiederholen. Die Benachrichtigung wird immer auf dem Server ausgelöst, auf dem die Änderung durchgeführt wurde.

Testlauf
Zuerst den Dienst BIND9 neu starten, damit die geänderte Konfiguration geladen und aktiv wird.

service bind9 restart

Anschließend kann die Funktionalität geprüft werden.

service bind9 status
bind9.service - BIND Domain Name Server
Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-12-26 16:23:02 CET; 3 days ago
Docs: man:named(8)
Main PID: 733 (named)
Tasks: 4 (limit: 453)
CGroup: /system.slice/bind9.service
└─733 /usr/sbin/named -f -u bind
 
Dez 30 13:54:49 ns01 named[733]: zone lab01.wydler.eu/IN: transferred serial 18548
Dez 30 13:54:49 ns01 named[733]: transfer of 'lab01.wydler.eu/IN' from 192.168.122.2#53: Transfer status: success
Dez 30 13:54:49 ns01 named[733]: transfer of 'lab01.wydler.eu/IN' from 192.168.122.2#53: Transfer completed: 3 messages, 1012 records, 39516 bytes, 0.007 secs (5645142 bytes/sec)
Dez 30 13:54:49 ns01 named[733]: zone lab01.wydler.eu/IN: sending notifies (serial 18548)
Dez 30 14:06:58 ns01 named[733]: zone lab01.wydler.eu/IN: Transfer started.
Dez 30 14:06:58 ns01 named[733]: transfer of 'lab01.wydler.eu/IN' from 192.168.122.2#53: connected using 192.168.123.12#41409
Dez 30 14:06:58 ns01 named[733]: zone lab01.wydler.eu/IN: transferred serial 18549
Dez 30 14:06:58 ns01 named[733]: transfer of 'lab01.wydler.eu/IN' from 192.168.122.2#53: Transfer status: success
Dez 30 14:06:58 ns01 named[733]: transfer of 'lab01.wydler.eu/IN' from 192.168.122.2#53: Transfer completed: 1 messages, 24 records, 591 bytes, 0.005 secs (118200 bytes/sec)
Dez 30 14:06:58 ns01 named[733]: zone lab01.wydler.eu/IN: sending notifies (serial 18549)

Nun kann der Slave DNS-Server in der DMZ von dortigem Server genutzt werden. Damit er seinen Zweck auch erfüllt, müssen die Einträge der HOSTS-Datei noch entfernt werden. Anderenfalls fällt die fehlerhafte Konfiguration erst auf, wenn es einen DNS-Namen nicht mehr gibt oder unter einer anderen IP-Adresse erreichbar ist.

Viel Spaß beim Ausprobieren. 🙂