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.

Inhalt

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.
[stextbox id=“comment“ caption=“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.[/stextbox]

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

[stextbox id=“warning“ caption=“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.[/stextbox]

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