Das FreeBSD-Handbuch
Zurück | Kapitel 29. Netzwerkserver | Weiter

# 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:

- `.` ist die Root-Zone.

- `org.` ist eine Top level Domain (TLD) innerhalb der Root-Zone.

- `example.org.` ist eine Zone innerhalb der `org.`-TLD.

- `1.168.192.in-addr.arpa.` ist die Zone mit allen IP-Adressen des `192.168.1.*`-IP-Adressraums.

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

- Sie anderen verbindliche DNS-Auskünfte erteilen wollen.

- eine Domain, beispielsweise `example.org`, registriert wird, und den zu dieser Domain gehörenden Rechnern IP-Adressen zugewiesen werden müssen.

- ein IP-Adressblock reverse-DNS-Einträge benötigt, um IP-Adressen in Rechnernamen auflösen zu können.

- ein Backup-Nameserver (auch Slaveserver genannt) oder ein zweiter Nameserver auf Anfragen antworten soll.

Ein cachender Nameserver ist notwendig, weil

- ein lokaler DNS-Server Daten zwischenspeichern und daher schneller auf Anfragen reagieren kann als ein entfernter Server.

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 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 (`<admin@example.org>` 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

- Hilfeseiten zu BIND/named: rndc(8), named(8), named.conf(5)

- Offizielle ISC-Seite zu BIND

- Offizielles Forum zu ISC- BIND

- BIND9 FAQs

- O'Reilly DNS and BIND 5th Edition

- RFC1034 - Domain Names - Concepts and Facilities

- RFC1035 - Domain Names - Implementation and Specification

Zurück | Zum Anfang | Weiter
Automatische Netzwerkkonfiguration mit DHCP | Nach oben | Der Apache HTTP-Server

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>.