29.6. DNS - Domain Name Service

Beigetragen von Chern Lee, Tom Rhodes und Daniel Gerzo.

29.6.1. Überblick

DNS ist das für die Umwandlung von Rechnernamen in IP-Adressen zuständige Protokoll. FreeBSD verwendet dazu BIND (Berkeley Internet Name Domain), die am häufigsten verwendete Implementierung von DNS). Eine Anfrage nach www.FreeBSD.org gibt die IP-Adresse des FreeBSD-Webservers, eine Anfrage nach ftp.FreeBSD.org die IP-Adresse des entsprechenden FTP-Servers zurück. Der umgekehrte Weg ist ebenso möglich, eine IP-Adresse kann also auch in ihren Rechnernamen aufgelöst werden. Um eine DNS-Abfrage durchzuführen, muss auf dem jeweiligen Rechner kein Nameserver installiert sein.

FreeBSD verwendet derzeit in der Voreinstellung BIND9 als DNS-Serversoftware. Unsere Installation bietet Ihnen eine erhöhte Sicherheit, ein neues Dateisystemlayout sowie eine automatisierte chroot(8)-Konfiguration.

Im Internet wird DNS durch ein komplexes System von autoritativen Root-Nameservern, Top Level Domain-Servern (TLD) sowie anderen kleineren Nameservern verwaltet, die individuelle Rechnerinformationen speichern und untereinander abgleichen.

Derzeit wird BIND vom Internet Software Consortium (http://www.isc.org/) verwaltet.

29.6.2. Begriffsbestimmungen

Um dieses Dokument besser verstehen zu können, müssen einige DNS-spezifische Begriffe genauer definiert werden.

Begriff Bedeutung
Forward-DNS Rechnernamen in IP-Adressen umwandeln.
Origin (Ursprung) Die in einer bestimmten Zonendatei beschriebene Domäne.
named, BIND, Nameserver Gebräuchliche Namen für das unter FreeBSD verwendete BIND-Nameserverpaket.
Resolver Ein Systemprozess, durch den ein Rechner Zoneninformationen von einem Nameserver anfordert.
Reverse-DNS Das Gegenteil von Forward-DNS; die Umwandlung von IP-Adressen in Rechnernamen
Root-Zone Der Beginn der Internet-Zonenhierarchie. Alle Zonen befinden sich innerhalb der Root-Zone. Dies ist analog zu einem Dateisystem, in dem sich alle Dateien und Verzeichnisse innerhalb des Wurzelverzeichnisses befinden.
Zone Eine individuelle Domäne, Unterdomäne, oder ein Teil von DNS, der von der gleichen Autorität verwaltet wird.

Es folgen nun einige Zonenbeispiele:

Wie man an diesen Beispielen erkennen kann, befindet sich der spezifischere Teil eines Rechnernamens auf der linken Seite der Adresse. example.org. beschreibt einen Rechner also genauer als org., während org. genauer als die Root-Zone ist. Jeder Teil des Rechnernamens hat Ähnlichkeiten mit einem Dateisystem, in dem etwa /dev dem Wurzelverzeichnis untergeordnet ist.

29.6.3. Gründe für die Verwendung eines Nameservers

Es gibt zwei Arten von Nameservern: Autoritative Nameserver sowie zwischenspeichernde (cachende) Nameserver.

Ein autoritativer Nameserver ist notwendig, wenn

Ein cachender Nameserver ist notwendig, weil

Wird nach www.FreeBSD.org gesucht, leitet der Resolver diese Anfrage an den Nameserver des ISPs weiter und nimmt danach das Ergebnis der Abfrage entgegen. Existiert ein lokaler, zwischenspeichernder DNS-Server, muss dieser die Anfrage nur einmal nach außen weitergeben. Für alle weiteren Anfragen ist dies nicht mehr nötig, da diese Information nun lokal gespeichert ist.

29.6.4. Wie funktioniert DNS?

Unter FreeBSD wird der BIND-Daemon als named bezeichnet.

Datei Beschreibung
named Der BIND-Daemon.
rndc(8) Das Steuerprogramm für named.
/etc/namedb Das Verzeichnis, in dem sich die Zoneninformationen für BIND befinden.
/etc/namedb/named.conf Die Konfigurationsdatei für named.

Je nachdem, wie eine Zone auf dem Server konfiguriert wurde, finden sich die zur Zone gehörendenden Dateien in den Unterverzeichnissen master, slave, oder dynamic des Verzeichnisses /etc/namedb. Diese Dateien enthalten die DNS-Informationen, die der Nameserver für die Beantwortung von Anfragen benötigt.

29.6.5. BIND starten

Da BIND automatisch installiert wird, ist die Konfiguration relativ einfach.

In der Voreinstellung wird ein in einer chroot(8)-Umgebung betriebener named-Server zur einfachen Namensauflösung eingerichtet. Um den Server manuell zu starten, verwenden Sie den folgenden Befehl:

# /etc/rc.d/named forcestart

Um den named-Daemon beim Systemstart automatisch zu starten, fügen Sie folgende Zeile in /etc/rc.conf ein:

named_enable="YES"

/etc/namedb/named.conf bietet zahlreiche Konfigurationsoptionen, die in diesem Dokument nicht alle beschrieben werden können. Wollen Sie die Startoptionen von named unter FreeBSD anpassen, sollten Sie sich die named_*-Flags in der Datei /etc/defaults/rc.conf sowie die Manualpage zu rc.conf(5) näher ansehen. Zusätzliche Informationen bietet Ihnen auch der Abschnitt Abschnitt 11.7 des Handbuchs.

29.6.6. Konfigurationsdateien

Die Konfigurationsdateien von named finden sich unter /etc/namedb und müssen in der Regel an Ihre Bedürfnisse angepasst werden. Es sei denn, Sie benötigen nur einen einfachen Resolver. Ein Großteil der Konfigurationsarbeiten erfolgt dabei in diesem Verzeichnis.

29.6.6.1. make-localhost verwenden

Um eine Master-Zone für den lokalen Rechner zu erstellen, wechseln Sie in das Verzeichnis /etc/namedb und führen dort den folgenden Befehl aus:

# sh make-localhost

Wenn es keine Probleme gab, sollte nun eine neue Datei im Unterverzeichnis master vorhanden sein. Diese heißt entweder localhost.rev (für den lokalen Domain-Namen) oder localhost-v6.rev (wenn Sie IPv6 einsetzen). Als Standardkonfigurationsdatei wird dabei named.conf verwendet.

29.6.6.2. /etc/namedb/named.conf

// $FreeBSD$
//
// Refer to the named.conf(5) and named(8) man pages, and the documentation
// in /usr/share/doc/bind9 for more details.
//
// If you are going to set up an authoritative server, make sure you
// understand the hairy details of how DNS works.  Even with
// simple mistakes, you can break connectivity for affected parties,
// or cause huge amounts of useless Internet traffic.

options {
        directory   "/etc/namedb";
    pid-file    "/var/run/named/pid";
    dump-file   "/var/dump/named_dump.db";
    statistics-file "/var/stats/named.stats";

// If named is being used only as a local resolver, this is a safe default.
// For named to be accessible to the network, comment this option, specify
// the proper IP address, or delete this option.
    listen-on   { 127.0.0.1; };

// If you have IPv6 enabled on this system, uncomment this option for
// use as a local resolver.  To give access to the network, specify
// an IPv6 address, or the keyword "any".
//  listen-on-v6    { ::1; };

// In addition to the "forwarders" clause, you can force your name
// server to never initiate queries of its own, but always ask its
// forwarders only, by enabling the following line:
//
//      forward only;

// If you've got a DNS server around at your upstream provider, enter
// its IP address here, and enable the line below.  This will make you
// benefit from its cache, thus reduce overall DNS traffic in the
Internet.
/*
        forwarders {
                127.0.0.1;
        };
*/

Um vom Cache Ihres Internetproviders zu profitieren, können hier forwarders aktiviert werden. Normalerweise sucht ein Nameserver das Internet rekursiv ab, bis er die gesuchte Antwort findet. Durch diese Option wird stets der Nameserver Ihres Internetproviders zuerst abgefragt, um von dessen Cache zu profitieren. Wenn es sich um einen schnellen, viel benutzten Nameserver handelt, kann dies zu einer Geschwindigkeitssteigerung führen.

Warnung: 127.0.0.1 funktioniert hier nicht. Ändern Sie diese Adresse in einen Nameserver Ihres Einwahlproviders.

        /*
         * If there is a firewall between you and name servers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND versions 8 and later
     * use a pseudo-random unprivileged UDP port by default.
         */
        // query-source address * port 53;
};

// If you enable a local name server, don't forget to enter 127.0.0.1
// first in your /etc/resolv.conf so this server will be queried.
// Also, make sure to enable it in /etc/rc.conf.

zone "." {
        type hint;
        file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
        type master;
        file "master/localhost.rev";
};

// RFC 3152
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA" {
    type master;
    file "master/localhost-v6.rev";
};

// NB: Do not use the IP addresses below, they are faked, and only
// serve demonstration/documentation purposes!
//
// Example slave zone config entries.  It can be convenient to become
// a slave at least for the zone your own domain is in.  Ask
// your network administrator for the IP address of the responsible
// primary.
//
// Never forget to include the reverse lookup (IN-ADDR.ARPA) zone!
// (This is named after the first bytes of the IP address, in reverse
// order, with ".IN-ADDR.ARPA" appended.)
//
// Before starting to set up a primary zone, make sure you fully
// understand how DNS and BIND works.  There are sometimes
// non-obvious pitfalls.  Setting up a slave zone is simpler.
//
// NB: Don't blindly enable the examples below. :-)  Use actual names
// and addresses instead.

/* An example master zone
zone "example.net" {
    type master;
        file "master/example.net";
};
*/

/* An example dynamic zone
key "exampleorgkey" {
    algorithm hmac-md5;
    secret "sf87HJqjkqh8ac87a02lla==";
};
zone "example.org" {
    type master;
    allow-update {
        key "exampleorgkey";
    };
    file "dynamic/example.org";
};
*/

/* Examples of forward and reverse slave zones
zone "example.com" {
    type slave;
    file "slave/example.com";
    masters {
        192.168.1.1;
    };
};
zone "1.168.192.in-addr.arpa" {
    type slave;
    file "slave/1.168.192.in-addr.arpa";
    masters {
        192.168.1.1;
    };
};
*/ 

Hierbei handelt es sich um Slave-Einträge für eine Reverse- und Forward-DNS-Zone, die in der Datei named.conf definiert sind.

Für jede neue Zone muss ein zusätzlicher Eintrag in named.conf erstellt werden.

Ein einfacher Eintrag für eine Zone example.org könnte beispielsweise so aussehen:

zone "example.org" {
        type master;
        file "master/example.org";
};     

Die Option type legt fest, dass es sich um eine Master-Zone handelt, deren Zoneninformationen sich in der Datei /etc/namedb/master/example.org befinden. Diese Datei wird durch die Option file festgelegt.

zone "example.org" {
        type slave;
        file "slave/example.org";
};     

Hier handelt es sich um einen Slaveserver, der seine Informationen vom Masterserver der betreffenden Zone bezieht und diese in der angegebenen Datei speichert. Wenn der Masterserver nicht erreichbar ist, verfügt der Slaveserver über die transferierten Zoneninformationen und kann diese an andere Rechner weitergeben.

29.6.6.3. Zonendateien

Die in der Datei /etc/namedb/master/example.org definierte Zonendatei für example.org könnte etwa so aussehen:

     $TTL 3600        ; 1 hour
      example.org.    IN      SOA      ns1.example.org. admin.example.org. (
      2006051501      ; Serial
      10800           ; Refresh
      3600            ; Retry
      604800          ; Expire
      86400           ; Minimum TTL
      )

      ; DNS Servers
      IN      NS      ns1.example.org.
      IN      NS      ns2.example.org.

      ; MX Records
      IN      MX 10   mx.example.org.
      IN      MX 20   mail.example.org.

      IN      A       192.168.1.1

      ; Machine Names
      localhost       IN      A       127.0.0.1
      ns1             IN      A       192.168.1.2
      ns2             IN      A       192.168.1.3
      mx              IN      A       192.168.1.4
      mail            IN      A       192.168.1.5

      ; Aliases
      www             IN      CNAME   @

Beachten Sie, dass jeder mit einem “.” endende Rechnername ein exakter Rechnername ist, während sich alles ohne einen abschließenden “.” auf den Ursprung bezieht. www steht daher für www.Ursprung. In unserer fiktiven Zonendatei ist example.org. der Ursprung, daher steht www für www.example.org.

Eine Zonendatei hat folgenden Aufbau:

recordname      IN recordtype   value

Die am häufigsten verwendeten DNS-Einträge sind:

SOA

Start der Zonenautorität

NS

Ein autoritativer Nameserver

A

Eine Rechneradresse

CNAME

Der kanonische Name eines Alias

MX

Mail Exchanger

PTR

Ein (bei Reverse-DNS verwendeter) Domain Name Pointer

example.org. IN SOA ns1.example.org. admin.example.org. (
                        2006051501      ; Serial
                        10800           ; Refresh after 3 hours
                        3600            ; Retry after 1 hour
                        604800          ; Expire after 1 week
                        86400 )         ; Minimum TTL of 1 day
example.org.

Der Name der Domäne und damit der Ursprung dieser Zonendatei.

ns1.example.org.

Der primäre/autoritative Nameserver dieser Zone.

admin.example.org.

Die für diese Zone verantwortliche Person. Das Zeichen “@” wird dabei ersetzt ( wird also zu admin.example.org).

2006051501

Die Seriennummer der Datei. Sie muss stets inkrementiert werden, wenn die Zonendatei geändert wird. Viele Administratoren bevorzugen ein JJJJMMTTRR-Format, um die Seriennummer festzulegen. 2006051501 steht also für den 15.05.2006, die beiden letzten Stellen für die erste Modifikation der Zonendatei an diesem Tag. Die Seriennummer ist von großer Bedeutung, da Slaveserver daran eine aktualisierte Zonendatei erkennen können.

     IN NS           ns1.example.org.

Ein NS-Eintrag. Jeder Nameserver, der für eine Zone verantwortlich ist, muss über einen solchen Eintrag verfügen.

     localhost       IN      A       127.0.0.1
      ns1             IN      A       192.168.1.2
      ns2             IN      A       192.168.1.3
      mx              IN      A       192.168.1.4
      mail            IN      A       192.168.1.5

Der Eintrag A bezieht sich auf Rechnernamen. ns1.example.org würde also zu 192.168.1.2 aufgelöst werden.

     IN      A       192.168.1.1

Diese Zeile weist die IP-Adresse 192.168.1.1 dem aktuellen Ursprung, in unserem Fall also example.org, zu.

     www             IN CNAME        @

Der Eintrag für den kanonischen Namen wird dazu verwendet, Aliase für einen Rechner zu vergeben. Im Beispiel ist www ein Alias für den “Master”-Rechner localhost.example.org oder 192.168.1.1). Durch die Option CNAME können Aliasnamen vergeben werden. Ein Rechnername kann aber auch abwechselnd verschiedenen Rechnern zugewiesen werden.

     IN MX   10      mail.example.org.

Die Option MX legt fest, welcher Mailserver für eintreffende Mails der Zone verantwortlich ist. mail.example.org ist der Rechnername des Mailservers, der eine Priorität von 10 hat.

Es können auch mehrere Mailserver mit verschiedener Priorität (10, 20, ...) vorhanden sein. Ein Mailserver, der eine Mail an example.org verschicken will, verwendet zuerst den MX mit der höchsten Priorität (das heißt den mit der niedrigsten Prioritätsnummer), danach den mit der nächsthöheren Priorität. Und dies solange, bis die E-Mail zugestellt werden kann.

Für (bei Reverse-DNS verwendete) in-addr.arpa-Zonendateien wird das gleiche Format verwendet. Der einzige Unterschied besteht in der Verwendung der Option PTR an Stelle der Optionen A und CNAME.

     $TTL 3600

      1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. (
      2006051501      ; Serial
      10800           ; Refresh
      3600            ; Retry
      604800          ; Expire
      3600 )          ; Minimum

      IN      NS      ns1.example.org.
      IN      NS      ns2.example.org.

      1       IN      PTR     example.org.
      2       IN      PTR     ns1.example.org.
      3       IN      PTR     ns2.example.org.
      4       IN      PTR     mx.example.org.
      5       IN      PTR     mail.example.org.

Durch diese Datei werden den Rechnernamen der fiktiven Domäne IP-Adressen zugewiesen.

29.6.7. Zwischenspeichernde (cachende) Nameserver

Ein cachender Nameserver ist für keine Zonen verantwortlich. Er stellt lediglich eigene Anfragen und speichert deren Ergebnisse ab. Um einen solchen Nameserver einzurichten, gehen Sie wie gewohnt vor, allerdings definieren Sie keine Zonen.

29.6.8. Sicherheit

Obwohl BIND die am meisten verwendete (und kontrollierte) Implementierung von DNS darstellt, werden dennoch manchmal neue Sicherheitsprobleme entdeckt.

Zwar startet FreeBSD named automatisch in einer chroot(8)-Umgebung, es gibt aber noch weitere Sicherheitsmechanismen, mit denen Sie potentielle DNS-Serviceattacken erschweren können.

Es ist daher eine gute Idee, die Sicherheitshinweise von CERT zu lesen sowie die Mailingliste FreeBSD security notifications zu abonnieren, um sich über Sicherheitsprobleme im Zusammenhang mit dem Internet und FreeBSD zu informieren.

Tipp: Tritt ein Problem auf, kann es nie schaden, die Quellen zu aktualisieren und named neu zu kompilieren.

29.6.9. Weitere Informationsquellen

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.