DNS Server                          [1.0]

                                                                  DNS-Server [1.1] [1.2.1] [1.2.2] [1.2.3]

Das Domain Name System = DNS heutzutage ein wichtiger Dienst im TCP/IP basierendem Netzwerk. Es ist quasi wie ein weltweit umfassendes "Register" in dem nach Namen im Netzwerk gesucht werden kann und die entsprechende Registernummer (IP) für einen Verbindungsaufbau zu finden. Bei dem Netzwerk kann es sich um das WWW Netz handeln oder einfach um ein Hausinternes-Netzwerk. Ziel ist es, mit dem entsprechenden Ansprechpartner nicht über seine IP-Adresse sondern einfach über seinen Namen eine Kommunikation aufbauen zu können. 

(ganz grobe Verallgemeinerung!)

1. Installation DNS-Server

Die ganze Angaben zur Installation und zur Konfiguration basieren auf einen Ubuntu 14.04 Server!

Ich gehe hier auf den DNS-Server "bind" ein der Universität Berkeley (USA) Anfang der 80ziger Jahre entwickelt wurde. Inzwischen wird dieser DNS-Server "BIND" vom

Internet System Consortium weiterentwickelt. Dies ist leider nur eine und einfache Methode einen Hausinternen-DNS Server in Betrieb zu nehmen. Reicht aber im Normalfall für einen einfachen Gebrauch vollkommen aus. Für große Firmennetze ist das Grundprinzip identisch nur sind noch eine Menge andere Einträge vonnöten.

Terminal-Eingabe

apt-get install bind9

 

Folgendes Verzeichnis wird angelegt

/etc/bind

├── bind.keys

├── db.0

├── db.127

├── db.255

├── db.empty                                            <- Dummy-Datei

├── db.local

├── db.root

├── named.conf

├── named.conf.default-zones

├── named.conf.local                            <- userbezogene Zoneneinträge

├── named.conf.options

├── rndc.key

└── zones.rfc1918

/etc/default/bind9

 

 

apt-get install dnsutils

Programme wie dig und nslookup zu Überprüfung von DNS-Funktionalität!


2. Konfiguration des DNS-Server

2.1 Vorbereitende Maßnahmen:

hostname -f      -- > centrum.test-centrum.local

hostname -d     -- > test-centrum.local

Diese Information liefert uns die /etc/hosts Datei.

Ferner erfahren wir durch den Befehl named -v die Version des DNS-Servers.

Aktuelle Version zur Zeit: BIND 9.9.5-3ubuntu0.1-Ubuntu (Extended Support Version)

 

Als nächstes editieren wir die Datei: nano /etc/bind/named.conf.options 

und aktivieren :

 //forwarders {        

 //               0.0.0.0;

 //        };

durch folgende Änderung:

 forwarders {

                192.168.0.248;             <--- feste IP des Rechners, auf dem DNS Server laufen soll

         };

Als letze vorbereitende Maßnahme editieren wir noch : nano /etc/default/bind9


# run resolvconf?

RESOLVCONF=no

# startup options for the server

OPTIONS="-4 -u bind"    <----- der Eintrag -4 wurde ergänzt


Da im Hausinternen-Netzwerk in Regel noch IP4 zum Einsatz kommt, kann mach die Option um den Parameter '-4' ergänzen, hierdurch wird die Performance der späteren Names-Auflösung beschleunigt.

Jetzt endlich kommt man zu eigentlichen Konfiguration. Dafür sind folgende Dateien von Bedeutung:

 

1.  /etc/bind/named.conf.local

In dieser Datei müssen Sie ihre eigenen (usereignenen) festgelegten Zonendateien dem DNS-Server bekannt gemacht werden

Bei mir sieht die Datei wie folgt aus:

//

// Do any local configuration here

//

// Consider adding the 1918 zones here, if they are not used in your

// organization

//include "/etc/bind/zones.rfc1918";

 

// Eigene Zonendefinition

// Zone zur Auflösung 'Name nach IP-Adresse' 'forward'

zone "test-centrum.local" {                                        <--- Domainname 'test-centrum.local'  $ORIGIN

   type master;

   file "/etc/bind/db.centrum";                                   <--- Datei: db.Dateiname und Pfad

};

 

// Zone zur Auflösung 'IP-Adresse nach Name' 'reverse'

zone "0.168.192.in-addr.arpa" {                               <---- IP-Adressen Kreis      $ORIGIN

   type master;

   file "/etc/bind/db.0.168.192";                               <---- Datei: db.Dateiname und Pfad

};

 

Die Filenamen und Pfadangaben sind frei wählbar, sie sollten aber der Lesbarkeit wegen sinnvolle Namen innehaben. 

2. /etc/bind/db.centrum

Diese Datei muss aus einer 'Dummy-Datei' erstellt werden. Dazu kopieren Sie die Datei 'db.empty' und vergeben ihr den neuen Namen 'db.centrum'.

 

db.centrum hat folgenden Inhalt:

; BIND reverse data file for empty rfc1918 zone

;

; DO NOT EDIT THIS FILE - it is used for multiple zones.

; Instead, copy it, edit named.conf, and use that copy.

;

$TTL    86400

@       IN      SOA     localhost. root.localhost. (

                                                1          ; Serial

                               604800         ; Refresh

                                 86400         ; Retry

                           2419200         ; Expire

                                       86400 )       ; Negative Cache TTL

;

@       IN      NS      localhost.


Folgende Einträge bzw. Änderungen sind vorzunehmen.


$TTL    86400

;                                |      DomainName    |  Mailadresse Veranwortliche |

@       IN      SOA     test-centrum.local. root.test-centrum.local. (

                                                               1         ; Serial

                                                    604800         ; Refresh

                                                      86400         ; Retry

                                                 2419200         ; Expire

                                                     86400 )       ; Negative Cache TTL

;

                IN      NS      centrum.test-centrum.local.

centrum IN      A       192.168.0.248

;

; Ab hier die RechnerNamen einfügen

;

ns1       IN      CNAME   centrum

rech1   IN      A              192.168.0.200


3. /etc/bind/db.0.168.192

Diese Datei sollte aus einer 'Dummy-Datei' erstellt werden. Dazu kopieren die Datei 'db.empty' in 'db.0.168.192' um.

Ich bin etwas bequem und habe als Vorlage für die 'Reverse' Datei die 'Forward' Datei 'db.centrum' verwendet.


; BIND reverse data file for empty rfc1918 zone

;

; DO NOT EDIT THIS FILE - it is used for multiple zones.

; Instead, copy it, edit named.conf, and use that copy.

;

$TTL    86400

@       IN      SOA     test-centrum.local. root.test-centrum.local. (

                                                                1         ; Serial

                                                    604800         ; Refresh

                                                      86400         ; Retry

                                                 2419200         ; Expire

                                                     86400 )       ; Negative Cache TTL

;

@       IN      NS      centrum.test-centrum.local.

;

; Ab hier die IPAdressen einfügen

;

248     IN      PTR     centrum.test-centrum.local.

200     IN      PTR     rech1.test-centrum.local.

Die Syntax der Datei erscheint einem zuerst recht kompliziert. Aber bei der Einrichtung eines Hauseigenen-DNS Server gibt es nur ein paar grundlegende Punkte die man wissen oder beachten muss.

2.2 Aufbau der Zonen-Datei 'Forward'

2.2.1 $TTL 86400 

Die 'Time To Live' der Zone beträgt 86400 Sek oder 1440 Min oder 24 Std.

Die TTL Option gibt an wie lange eine schon erfolgte Namensauflösung in einem speziellen Cache vorgehalten wird. Dies hat zum einen den Vorteil das bei einer erneuten Anfrage des selben Namens die Anwortzeit scheller wird und der DNS-Server entastet wird. Zum anderen kann durch das Caching von Namensauflösungen ein kurzzeitiger Ausfall des DNS-Servers überbrückst werden. Das geht aber nur mit Namen, die sich schon im Cache befinden, neue Namen können bei einem Ausfall des DNS-Servers natürlich nicht in den Cache gelangen.  

 

2.2.2 SOA

Der 'Start Of Authority' enthält technische Angaben zur Steuerung für die Zone wie z.B.: Seriennummer oder Timer.


2.2.2.1 '@'

Das Symbol '@' hat hier nicht die Bedeutung für eine E-Mail sondern dient hier als Platzhalter für den Zonennamen (Domainnamen) oder auch als $ORIGIN bezeichnet. 

Den $ORIGIN oder Platzhalter-Inhalt findet man in der Datei 'named.conf.local'.

Bei meiner Beispiel-DNS-Server sieht das ganze so aus:

zone "test-centrum.local" {                       <---- "test-centrum.local" = $ORIGIN

   type master;

   file "/etc/bind/db.centrum";

};

Das wichtigste ist jedoch die Berücksichtigung des Punktes "." nach einem Namen.

Welche Konsequenzen das Vergessen, zeigt das folgende Beispiel:

test-centrum.local. ---> Umsetzung nach test-centrum.local ohne das $ORIGIN angehängt wird.

test-centrum.local ---> Umsetzung nach test-centrum.local.test-centrum.local ist so in der Regel nicht gewünscht.


2.2.2.2 eMail-Adresse

Neben dem Domain-Namen muß auch ein Verantwortlicher der Zonendatei angegeben werden. Fehlt diese Angabe so kann es zu mehr als dubiosen Fehlermeldungen des DNS-Servers kommen. Hierbei ist darauf zu achten, das das Symbol '@' nicht in der Konfigurationsdatei verwendet werden darf!

statt root@test-centrum.local   muss man das Symbol '@' durch einen Punkt ersetzen, also

root.test.centrum.local .

Normalerweise gibt verwendet man an dieser Stelle ein 'Dummy-Postfach' und nicht eine real existierende eMail-Adresse. Will man es doch machen so geht geschieht das folgendermaßen:

uwe.von.royen@test-centrum.local  --> uwe\.von\.royen.test-centrum.local .

Punkte vor dem '@' werden aufleglöst durch '\.' .

2.2.2.3 Seriennummer

Die Seriennummer hat eigentlich nur eine Signalfunktion für einen Master und Save DNS-Server.Auf dem Master muss ein Eintrag existieren woran der Slave erkennen kann, das sich die Datenbank auf dem Master verändert hat. und eine neue Synchronisation erfolgen muss. Betreibt man sein Netzwerk nur mit einem Master DNS-Server macht eine recht simple Seriennummer ( hier in meinem Beispiel '1') Sinn, in einem größeren Netzwerk ist es besser wie folgt die Seriennummer zu erzeugen:  

YYYYMMDDVV

     │     │    │   └──    ldf. Zahl 1 bis n        

     │     │    └────    Tag                             2015013101 z.B.

     │     └──────     Monat

    └─────────     Jahr

2.2.2.4 Refresh 
Sekundenabstand, in dem die Slaves anfragen, ob sich etwas geändert hat (Empfehlung laut Ripe-203: 86400 ≙ 24 Stunden)
2.2.2.5 Retry 
Sekundenabstand, in denen ein Slave wiederholt, falls sein Master nicht antwortet (Empfehlung laut Ripe-203: 7200 ≙ 2 Stunden)
2.2.2.6 Expire 
wenn der Master auf einen Zonentransfer-Request nicht reagiert, deaktiviert ein Slave nach dieser Zeitspanne in Sekunden die Zone (Empfehlung laut Ripe-203: 3600000 ≙ 1000 Stunden)
2.2.2.7 TTL 
Time to Live für Negatives Caching (Empfehlung laut Ripe-203: 172800 ≙ 2 Tage). Ursprünglich hatte dieses Feld die Bedeutung eines Minimum-TTL-Werts für alle Resource Records der Zone und wurde in der Praxis als Standardwert verwendet, wenn bei einem Resource Record kein TTL-Wert angegeben war; diese Bedeutung wurde mit  abgeschafft.
Ergänzung:
Wird der TTL Wert nicht im SOA Record angeben, sondern so als individuelle TTL-Wert ( nicht zu Verwechseln mit dem globalen $TTL ) für bestimmte Resource Records vergeben, so muß der TTL Wert unbedingt vor 'IN' stehen! Dieser neue TTL-Wert ist dann für alle nachfolgenden Einträge gültig, bis ein neuer Wert gesetzte wird oder ein neuer SOA Record in der Zonen-Datei auftaucht. Der TTL Wert wird in Sekunden angegeben, Sie können aber auch die Einheiten m=Minuten, h=Stunden, d=Tage, w=Woche verwenden.
z.B.:
...

www  20m       A    192.168.1.2          ; ab hier gilt TTL=20  ??? ist unklar!!! Siehe Regel 10

     test              A    1.2.3.4                   ; TTL=20 aus vorherigem Eintrag

...

2.2.2.8 IN

      Klasse 'IN' für Internet-Adresse.

      Das Kennzeichnung 'IN' braucht eigentlich nur im ersten Resourcen Record (RR)
      angegeben werden.

2.2.2.9 NS

      NS steht als Kennzeichen für einen NameServer.

      IP-Adressen sind in NS-Records nicht erlaubt!
      Wird ein eigener Nameserver verwendet,  dessen Hostname "centrum.test-centrum.local"
      lauten soll, muss ein zusätzlich passenden A-Record definieren.

2.2.2.10 A oder AAAA

     Mit dem A-Record wird dem einem Namen im DNS-Server eine IPv4-Adresse zugeordnet.

     Mit dem AAAA-Record ("quad-A")geschieht die Zuordnung einer IPv6-Adresse.

2.2.2.11 CNAME

     CNAME-Record weist einem Namen ein weiteren Namen (Alias) zu.

     Die Abkürzung CNAME steht für  "canonical name" (canonical = anerkannt, bezeichnet also
     den primären, quasi echten Namen).

2.2.2.12 PTR

     Der PTR (Pointer) - Resourcen Record ordnet einer IP-Adresse ein oder mehrere Namen
     zu.Sie sind praktisch als Umkehrzuweisung (reverse) ein Name mehrere IP-Adressen zu.

     Praktisch die Umkehrung zum A-Record.

2.2.2.13 MX

     Der MX-Resourcen Record muss man nicht kann man aber in einem eigenen Homenetz-
     Werk haben. Es zeigt einen eigenen E-Mail-Server an, der nicht unbedingt im öffentlichen
     Internet bekannt sein muß, aber recht gute Dienste im eigene Homenetz = Intranetz leisten
     kann. Er dient als zentraler Anlaufpunkt für E-Mail der stellvertretend z.B von T-Online die
     E-Mail für alle User abholen und versenden kann. Der eigene E-Mail Server verteilt dann im
     Intranet die E-Mail an die entsprechenden User. 

     Die Abkürzung MX steht für "mail exchange" und gibt die Adresse bzw. Namen des
     zuständigen Mail-Servers an. Der oder die Einträge eines MX-Records müssen immer auf
     einen A-Record verweisen! 

    Beispiele:

        domain.tld.   IN   MX   10 mail.variomedia.de. <---- öffentlicher Mail-Server

       *.domain.tld. IN   MX   10 mail.variomedia.de.

    oder

       mail            A    212.227.144.210                          <---- öffentlicher Mail-Server

       example.com.   MX    10 mail.example.com

       example.com.   MX    20 backupmail.provider.com

 

     oder wie in meinem Beispiel wo der Mail-Server in einer Intranet-Umgebung steht:

     ....

    ;

                    IN      NS      centrum.test-centrum.local.

                    IN      MX     10 mail.test-centrum.local.

    mail        IN      A        192.168.0.200

    centrum IN      A        192.168.0.248

    ...

Der Wert 10  gibt die Priorität des Mail-Servers an. Der Eintrag macht besonders bei mehren Mail-Server innerhalb einer Zone Sinn. Je niedrigen die Zahl desto höher die Priorität mit der ein Mail-Server die Mails zur Verarbeitung weitergeleitet bekommt. 

3. Beispiele für Optimierung der Zoneneinträge   

DNS Server [1.1] [1.2.1] [1.2.2] [1.2.3]   

hier geht es weiter ...

Wichtige Links:

bind9                           Internet System Consortium 

bind                              http://de.wikipedia.org/wiki/BIND               

DNS Server                 http://wiki.ubuntuusers.de/DNS-Server_Bind

                                     Domain Name System

                                     Aufbau einer Zonendatei 

                                     DNS-Caching

                                     SOA Zone

                                     Zonenaufbau und Beispiele

                                     MX-Resourcen Record

DNS & BIND Bücher  DNS und BIND im IPv6 - kurz & gut 

                          DNS und BIND  4. Auflage super Buch!

                                   

Download
Kurze Befehlsreferenz DNS
Kurzakte DNS.pdf
Adobe Acrobat Dokument 180.3 KB
Download
Leider etwas veraltetes Buch was noch nicht bind8/9 berücksichtigt, aber die Grundlagen gelten noch immer und es sind diese bind-Versionen immer noch im Einsatz.
OReilly-DNS-and-BIND-1998.pdf
Adobe Acrobat Dokument 3.0 MB
Download
bind9-administration.pdf
Adobe Acrobat Dokument 1.3 MB