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”