Build my own public DNS Servers on CentOS 7 and BIND

Hallo zusammen,

Mein Provider www.netstream.ch gibt die NetVS Plattform per ende August auf. Auf dieser Plattform habe ich bisher meine DNS Einträge gehostet. Nun muss also was neues her. Warum nicht gleich die eigenen DNS Server hochziehen - ich habe ja fünf Public IP's zur Verfügung.

Ich habe mich dazu entschieden, ein BIND DNS Server auf CentOS7 zu installieren.

http://wiki.centos.org/Manuals/ReleaseNotes/CentOS7

Installation CentOS 7

In den folgenden Screenshot zeige ich eine Zusammenfassung der wichtigsten Einstellungen bei der Installation von CentOS 7

Bei der Software-Auswahl kann man bereits den DNS Server auswählen

Auf dem Hauptbildschirm unter "Netzwerk & Hostname" kann der Hostname eingetragen werden. Die weiteren Netzwerkeinstellungen erreicht man über "konfigurieren"

Wichtig ist das Häcklein "Automatisch mit diesem Netzwerk verbinden, wenn es verfügbar ist" - somit wird das Netzwerk beim Systemstart automatisch gestartet.

Die restlichen Einstellungen wie IP, Subnet, Gateway und DNS können in der Registerkarte "IPv4 Einstellungen" gemacht werden.

Während bereits installiert wird, kann man noch das Root Passwort festlegen

Zwei neue Features von CentOS 7 sind der wechsel auf Systemd und Firewalld

Mit dem folgenden Befehl wird der named.service (BIND) zukünftig automatisch gestartet.

systemctl enable named.service

Mit dem folgenden Befehl kann man die Konfiguration überprüfen

systemctl list-unit-files

Mit folgenden Kommandos können die Dienste (Unter Linux nennt man Services/Dienste dann "deamon") starten und stoppen

systemctl start named.service
systemctl restart named.service
systemctl stop named.service

Der FirewallD hat mich halb wahnsinnig gemacht.

Ich konnte die Regeln der Firewall mit den folgenden iptables Befehlen hinzufügen. Aber jeder Neustart des Systems oder des Firewalld (systemctl restart firewalld.service) hat die Regeln wieder entfernt.

iptables -A IN_public_allow -i ens192 -p tcp --dport 53 -j ACCEPT
iptables -A IN_public_allow -i ens192 -p udp --dport 53 -j ACCEPT

Erst als ich die Regeln über das "Firewall-cmd" hinzugefügt habe. Bleiben die Regeln bestehen.

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

Allenfalls muss man hierzu noch die Konfiguration vom Firewalld anpassen

/etc/firewalld/firewalld.conf
CleanupOnExit=yes auf no setzen

Überprüfen kann man die Firewall Regeln mit folgendem Befehl

iptables -L

Nach der Installation müssen noch die Updates installiert werden

yum update

Da ich die Linux Server auf meinem ESXi Server laufen lasse, habe ich noch die VMware Tools installiert

http://blog.icewolf.ch/archive/2014/03/19/install-vmware-tools-on-centos-6-5.aspx

Konfiguration von BIND DNS Server

Nun muss die Zonendatei erstellt werden.

vi /var/named/serveralive.ch

Die Zonendatei sieht dann so aus

$ORIGIN serveralive.ch.
$TTL 3H
@       IN SOA  ns1.icewolf.ch.     hostmaster.icewolf.ch.  (
                                        2014072404      ; serial
                                        12H             ; refresh
                                        1H              ; retry
                                        2W              ; expire
                                        3H )            ; minimum
                IN      NS      ns1.icewolf.ch.
                IN      NS      ns2.icewolf.ch.
                IN      MX      10      mail.icewolf.ch.
                IN      TXT     "v=spf1 mx -all"

ns1             IN      A       80.238.215.82
ns2             IN      A       80.238.215.83
@               IN      A       80.238.215.86
www             IN      A       80.238.215.86
autodiscover    IN      CNAME   autodiscover.icewolf.ch.

Nun muss man die Zonendatei noch der Gruppe "named" zuordnen

chgrp named /var/named/serveralive.ch

Anschliessend muss die Zonendatei der BIND Konfiguration hinzugefügt werden.

vi /etc/named.conf

Dabei müssen die folgenden Optionen angepasst werden:

IP Adresse auf welcher der DNS Server arbeiten soll.

listen-on port 53 [ 127.0.0.1;172.21.175.8; };
Recursion ausschalten, wenn es sich um einen Authorativen DNS Server handelt, ansonsten kann der DNS Server für DNS aplfication Attacks verwendet werden
recursion=no
Nun fehlt nur noch die Referenz zur Zonendatei und welche IP's einen Zonentransfer durchführen dürfen
zone "bhend-metallbau.ch" IN {
        type master;
        file "bhend-metallbau.ch";
        allow-transfer { 172.21.175.9; };
        allow-query { any; };
        allow-update{none;};
};

Nach der Anpassung muss der Bind Service neu gestartet werden.

systemctl restart named.service

Danach sollte man die Logs des Services prüfen

cat /var/named/data/named.run

Auf dem Slave muss natürlich ebenfalls die Zone eingerichtet werden

zone "bhend-metallbau.ch" IN {
  type slave;
  file "slaves/bhend-metallbau.ch";
  masters {172.21.175.8;};
};

Nun kann man das mit nslookup überprüfen

nslookup -type=SOA bhend-metallbau.ch 172.21.175.8

Als letzter Schritt ist dann die Anpassung beim Registrar notwendig. Im falle von .ch Domains ist das www.switch.ch

Grüsse
Andres Bohren