DNS-Server

Hier werden wir einen primären und einen sekundären DNS Server aufsetzen.
Es wird davon ausgegangen, dass zwei Server zur Verfügung stehen.

Einleitung

Auf die Grundlagen des DNS-Systems wird hier nicht eingegangen, genauso wenig wie dass man _nebst_ dem Webserver noch zwei Maschinen für die Nameserver haben sollte und es _keine_ gute Idee ist den DNS-Server auf dem gleichen Rechner wie den Webserver zu betreiben.

Das folgende Tutorial zeigt wie man auf RedHat/CentOS schnell einen Hosting tauglichen Nameserver aufsetzen kann.

Hinweise zu anderen Distributionen
Diese Konfiguration kann man praktisch 1:1 auch auf andere Distributionen, z.B. Debian übertragen.
Man muss dann einzig darauf achten, es so einzustellen, dass die Hauptkonfiguration unter: /etc/named/named.conf liegt, sowie die Verzeichnisse /var/log/named, /var/named/data und /var/named/slaves existieren.

Wir werden zuerst den primären Nameserver aufsetzen, dann den sekundären und schlussendlich diese so konfigurieren, dass sie sich aktualisieren.

Als erster installieren wir dazu auf beiden Maschinen bind9:

yum install bind

Primärer und Sekundärer Nameserver

Auf beiden Nameservern sollte man erst den Standort des Haupt-Konfigurationsfiles named.conf anpassen; dies ist Standardmässig unter: /etc/named.conf, da wir aber beim nameserver noch einige weitere Configfiles haben werden macht es Sinn dafür ein eigenes verzeichnis zu verwenden und das file unter: /etc/named/named.conf zu haben.

Dazu fügen wir in die Datei: /etc/sysconfig/named folgende Zeile an:

OPTIONS="-c /etc/named/named.conf"

Dann erstellen wir noch das Basisverzeichnis:

mkdir -pv /etc/named/

Primärer Nameserver

Zuerst erstellen wir die Konfigurationsverzeichnisse für die Zonen, sowie die Reverse-Zonen:

mkdir -p /etc/named/zones

Nun bearbeiten wie die Hauptkonfiguration in /etc/named/named.conf:

options
{
  directory "/var/named/data";
  listen-on { x.x.x.x; };
  listen-on-v6 { none; };
  auth-nxdomain no;                # conform to RFC1035
  allow-transfer { "none"; };
};
 
 
include "/etc/rndc.key";
controls
{
  inet 127.0.0.1 port 953
  allow { 127.0.0.1; } keys { "rndckey"; };
};
 
 
logging
{
  channel simple_log
  {
    file "/var/log/named/named.log" versions 3 size 5m;
    //severity warning;
    //severity debug 10;
    print-time yes;
    print-severity yes;
    print-category yes;
  };
  category default { simple_log; };
};
 
 
include "/etc/named/zones.conf";

Nun müssen wir eine sog. "rndc-key" erstellen:

rndc-keygen > /etc/rndc.key

Das sog. "root-zone" file enthält die Informationen zu den rootservern, das wir erstellen müssen:

vi /etc/named/zones/named.ca

;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC
;       under anonymous FTP as
;           file                /domain/named.cache
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Jan 29, 2004
;       related version of root zone:   2004012900
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
;
; formerly C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; formerly TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; formerly NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; operated by VeriSign, Inc.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
;
; operated by RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
;
; operated by ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; operated by WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
; End of File

Nun erstellen- oder bearbeiten wir die Datei /etc/named/zones.conf, die die Zonefiles konfiguriert.
Hier ist die Konfiguration für einen beispieldomain "example.org" angegeben. Diese muss dann durch die tatsächlichen Domain ersetzt werden, die man verwalten möchte:

zone "example.org" { type master; file "/etc/named/zones/example.org"; };
zone "example.net" { type master; file "/etc/named/zones/example.net"; };
zone "example.com" { type master; file "/etc/named/zones/example.com"; };
# etc...

Dann noch die sog. "reverse" Zonen eintragen; diese wird gebraucht, wenn man nicht die IP über den Domainamen, sondern halt eben umgekehrt den Domainnamen über die IP-Adresse herausfinden möchte.

Diese fügen wir in der selben Datei wie oben (_/etc/named/zones.conf_) unten an:

zone "." IN { type hint; file "/etc/named/zones/named.ca"; };
zone "0.0.127.in-addr.arpa" IN { type master; file "/etc/named/zones/127.0.0"; };
#usw.

Nun erstellen wir je eine Beispieldatei für die Namens-Zone und die reverse-zone; den Rest sollte sich daraus ableiten lassen:

/etc/named/zones/example.org
("example.org" ist hier die Domain des DNS Servers, "x.x.x.x" ist dessen IP!)

@                       IN  SOA dns.example.org. postmaster.example.org. (
                                2008061701  ; serial number
                                3600        ; refresh
                                600         ; retry
                                86400       ; expire
                                3600      ) ; minimum TTL
 
;
;  Zone NS records
;
 
@                       NS      dns.example.org.
@                       NS      dns2.example.org.
 
;
;  Zone records
;
@                       A       x.x.x.x
@                       MX      10      mail.example.org
                        MX      10      mail.example.org
example.org.           IN TXT  "v=spf1 mx ptr ~all"
mail.example.org. IN TXT  "v=spf1 a -all"
www                   A       x.x.x.x
 
// Hier lassen sich dann weitere Hosts integrieren

Ein solches file muss dann für jede gehostete Domain gemacht werden.

/etc/named/reverse-zones.conf
<SMALL>Hinweise:<BR>
Dieses file listet alle IPs auf, die auf nahmen aufgelöst werden. Bei vielen verschiednen IP-Ranges macht es evtl. sinn dies in mehrere file pro IP aufzuteilen; im normalfall reicht aber ein file.<BR>
Im reverse Zonefile sind die IPs immer in umgekehrter Reihenfolge, also z.B. statt: "10.0.0.1" ist "1.0.0.10" zu verwenden<BR>
"x, y und z" sind also die letzten Ziffern der IP Adresse, also z.B. 1.0.0.x</SMALL>

$ORIGIN 1.1.10.in-addr.arpa.
$TTL 86400      ; 1 day
 
@                       IN      SOA     dns.example.org. root.dns.example.org. (
                                        2018022101 ; serial
                                        28800      ; refresh (8 hours)
                                        14400      ; retry (4 hours)
                                        3600000    ; expire (5 weeks 6 days 16 hours)
                                        86400      ; minimum (1 day)
                                        )
 
                        IN      NS      dns.example.org.
 
1                       IN      PTR     host1.example.org.
2                       IN      PTR     host2.example.org.
3                       IN      PTR     host3.example.org.

Sekundärer Nameserver

Nun kommen wir also zum Sekundären Nameserver; dieser hat selbst keine Zonen, da er seinen "cache" immer vom primären Nameserver bezieht. – Dieser ist daher auch etwas einfacher aufzusetzen.

Als erstes muss man auf dem primären DNS-Server im der Datei /etc/named/named.conf bei der Option: allow-transfer das "none" mit der IP-Adresse des sekundären Servers– und eine neue option "notify yes" ersetzen:

options
{
  # ggf. weitere optionen
  allow-transfer { x.x.x.x; };
  notify yes;
};
Achtung
Die Unterscheidung zwischen alten und neuen Daten erfolgt ausschliesslich über die Seriennummer im SOA-Header der Zone.
Wenn man beim editieren vergisst, diese zu erhöhen, findet kein Zonentransfer statt und die Slaves arbeiten mit den veralteten Daten weiter.

Nun kann man erst mal alle, für den primären Nameserver beschriebenen Konfigurationsdateien auf den sekundären kopieren. Am einfachsten geht dies mit rsync:

rsync --rsh=/usr/bin/ssh -auq --delete /etc/named/ server2:/etc/named/
rsync --rsh=/usr/bin/ssh -auq --delete /var/named/ server2:/var/named/
rsync --rsh=/usr/bin/ssh -auq --delete /etc/named/named.conf server2:/etc/named/named.conf

Nun passt man die Datei: /etc/named/named.conf auf dem sekundären Server an und ändert den "allow-transfer"-Block in:

allow-notify { x.x.x.x; };

Wobei man das "x.x.x.x" mit der IP-Adresse des primären servers ersetzt.

Die Datei: /etc/named/zones.conf ändert man dann wie folgt ("x.x.x.x" ist die IP des primären servers)t:

zone "domainname" { type slave; masters { x.x.x.x; }; file "/var/named/slaves/example.org"; };
 
zone "0.168.192.in-addr.arpa" { type slave; masters { x.x.x.x; }; file "/var/named/slaves/reverse-zones.slave"; };
//usw.

Das wärs dann auch schon. 😉

Related Links

  • DNS-Server: Gutes Tutorial dazu auf ubunusers.de.
  • zytrax.com: Zone-Transfer: Informationen über bind Zone Transfer

One thought on “DNS-Server”

Schreibe einen Kommentar

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