Inhalt

4. Eine »einfache« Domain

Dieser Abschnitt beschreibt, wie man seine eigene Domain einrichtet.

4.1 Aber zuerst etwas trockene Theorie

Bevor es wirklich mit diesem Abschnitt losgehen kann, soll anhand eines Beispiels ein wenig auf die theoretische Funktionsweise des DNS eingegangen werden. Diese wichtigen und interessanten Informationen sollten auf jeden Fall gelesen werden. Wer nicht alles lesen möchte, kann es wenigstens einmal überfliegen - bis zu der Beschreibung des Inhalts der named.conf-Datei.

Das DNS ist ein hierarchisches System, in der Form eines Baumes. Die Spitze wird als ».« geschrieben und wird »root« (Wurzel) genannt. Unter dem ».« existieren einige Top Level Domains (TLDs) - die bekanntesten sind ORG, COM, EDU, NET und natürlich DE - es gibt aber noch viele mehr. Wie bei einem Baum gibt es neben der Wurzel auch Äste. Jeder, der sich etwas in den Computerwissenschaften auskennt, erkennt im DNS einen Suchbaum, an dem sich Knoten, Verzweigungen und mehr befinden.

Wenn nach einem Computernamen gesucht wird, taucht die Abfrage an der Spitze rekursiv nach unten wandernd in die Hierarchie ein. Wenn man die Adresse von prep.ai.mit.edu herausfinden will, muss der Nameserver erst einmal herausfinden, welcher Nameserver für die Domain edu zuständig ist. Dazu befragt er einen .-Server, den er dank der root.hints-Datei kennt. Der root-Server listet dann die Server für edu auf:

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

Am Anfang wird ein root-Server befragt:

> server c.root-servers.net.
Default Server:  c.root-servers.net
Address:  192.33.4.12

Hierzu wird die Abfrageart auf NS gesetzt (Nameserver-Einträge):

> set q=ns

Nach edu fragen:

> edu.

Der abschliessende ».« dieser Anfrage ist sehr wichtig. nslookup weiß dadurch, dass edu direkt unter der Wurzel zu finden ist (und nicht unter irgendeiner search-Domain. So wird die Abfrage beschleunigt).

edu     nameserver = A.ROOT-SERVERS.NET
edu     nameserver = H.ROOT-SERVERS.NET
edu     nameserver = B.ROOT-SERVERS.NET
edu     nameserver = C.ROOT-SERVERS.NET
edu     nameserver = D.ROOT-SERVERS.NET
edu     nameserver = E.ROOT-SERVERS.NET
edu     nameserver = I.ROOT-SERVERS.NET
edu     nameserver = F.ROOT-SERVERS.NET
edu     nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET      internet address = 198.41.0.4
H.ROOT-SERVERS.NET      internet address = 128.63.2.53
B.ROOT-SERVERS.NET      internet address = 128.9.0.107
C.ROOT-SERVERS.NET      internet address = 192.33.4.12
D.ROOT-SERVERS.NET      internet address = 128.8.10.90
E.ROOT-SERVERS.NET      internet address = 192.203.230.10
I.ROOT-SERVERS.NET      internet address = 192.36.148.17
F.ROOT-SERVERS.NET      internet address = 192.5.5.241
G.ROOT-SERVERS.NET      internet address = 192.112.36.4

Diese Auflistung bedeutet, dass alle ROOT-SERVERS.NET-Server für EDU. zuständig sind, also kann einer von denen befragt werden. Wir fragen bereits den C-Root-Nameserver. Dann kann die nächste Ebene des Domainnamens herausgefunden werden: mit.edu:

> mit.edu.
Server:  c.root-servers.net
Address:  192.33.4.12

Non-authoritative answer:
mit.edu nameserver = W20NS.mit.edu
mit.edu nameserver = BITSY.mit.edu
mit.edu nameserver = STRAWB.mit.edu

Authoritative answers can be found from:
W20NS.mit.edu   internet address = 18.70.0.160
BITSY.mit.edu   internet address = 18.72.0.3
STRAWB.mit.edu  internet address = 18.71.0.151

strawb, w20ns und bitsy sind alle für mit.edu zuständig. Einer davon wird ausgewählt und es geht eine Ebene tiefer: ai.mit.edu:

> server W20NS.mit.edu.

Die Gross-/Kleinschrift ist bei Rechnernamen unwichtig, aber da ich die Daten per Maus kopiere und hier einfüge, sieht die Ausgabe genau wie auf dem Bildschirm aus.

Server:  W20NS.mit.edu
Address:  18.70.0.160

> ai.mit.edu.
Server:  W20NS.mit.edu
Address:  18.70.0.160

Non-authoritative answer:
ai.mit.edu      nameserver = ALPHA-BITS.AI.MIT.EDU
ai.mit.edu      nameserver = GRAPE-NUTS.AI.MIT.EDU
ai.mit.edu      nameserver = TRIX.AI.MIT.EDU
ai.mit.edu      nameserver = MUESLI.AI.MIT.EDU
ai.mit.edu      nameserver = LIFE.AI.MIT.EDU
ai.mit.edu      nameserver = BEET-CHEX.AI.MIT.EDU
ai.mit.edu      nameserver = MINI-WHEATS.AI.MIT.EDU
ai.mit.edu      nameserver = COUNT-CHOCULA.AI.MIT.EDU
ai.mit.edu      nameserver = MINTAKA.LCS.MIT.EDU

Authoritative answers can be found from:
AI.MIT.EDU      nameserver = ALPHA-BITS.AI.MIT.EDU
AI.MIT.EDU      nameserver = GRAPE-NUTS.AI.MIT.EDU
AI.MIT.EDU      nameserver = TRIX.AI.MIT.EDU
AI.MIT.EDU      nameserver = MUESLI.AI.MIT.EDU
AI.MIT.EDU      nameserver = LIFE.AI.MIT.EDU
AI.MIT.EDU      nameserver = BEET-CHEX.AI.MIT.EDU
AI.MIT.EDU      nameserver = MINI-WHEATS.AI.MIT.EDU
AI.MIT.EDU      nameserver = COUNT-CHOCULA.AI.MIT.EDU
AI.MIT.EDU      nameserver = MINTAKA.LCS.MIT.EDU
ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.32.5
GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.37.6
MUESLI.AI.MIT.EDU       internet address = 128.52.39.7
LIFE.AI.MIT.EDU internet address = 128.52.32.80
BEET-CHEX.AI.MIT.EDU    internet address = 128.52.32.22
MINI-WHEATS.AI.MIT.EDU  internet address = 128.52.54.11
COUNT-CHOCULA.AI.MIT.EDU        internet address = 128.52.38.22
MINTAKA.LCS.MIT.EDU     internet address = 18.26.0.36

Also ist museli.ai.mit.edu ein Nameserver für ai.mit.edu:

> server MUESLI.AI.MIT.EDU
Default Server:  MUESLI.AI.MIT.EDU
Address:  128.52.39.7

Jetzt wird der Typ der Anfrage gewechselt. Der Nameserver wurde gefunden, also wird muesli gefragt, was er alles über prep.ai.mit.edu weiss.

> set q=any
> prep.ai.mit.edu.
Server:  MUESLI.AI.MIT.EDU
Address:  128.52.39.7

prep.ai.mit.edu CPU = dec/decstation-5000.25    OS = unix
prep.ai.mit.edu
        inet address = 18.159.0.42, protocol = tcp
          ftp  telnet  smtp  finger
prep.ai.mit.edu preference = 1, mail exchanger = gnu-life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu      nameserver = beet-chex.ai.mit.edu
ai.mit.edu      nameserver = alpha-bits.ai.mit.edu
ai.mit.edu      nameserver = mini-wheats.ai.mit.edu
ai.mit.edu      nameserver = trix.ai.mit.edu
ai.mit.edu      nameserver = muesli.ai.mit.edu
ai.mit.edu      nameserver = count-chocula.ai.mit.edu
ai.mit.edu      nameserver = mintaka.lcs.mit.edu
ai.mit.edu      nameserver = life.ai.mit.edu
gnu-life.ai.mit.edu     internet address = 128.52.32.60
beet-chex.ai.mit.edu    internet address = 128.52.32.22
alpha-bits.ai.mit.edu   internet address = 128.52.32.5
mini-wheats.ai.mit.edu  internet address = 128.52.54.11
trix.ai.mit.edu internet address = 128.52.37.6
muesli.ai.mit.edu       internet address = 128.52.39.7
count-chocula.ai.mit.edu        internet address = 128.52.38.22
mintaka.lcs.mit.edu     internet address = 18.26.0.36
life.ai.mit.edu internet address = 128.52.32.80

Angefangen bei ».« wurden so der Reihe nach die Nameserver für jede einzelne Ebene des Domainnamens gefunden. Wenn hierzu anstelle der vielen einzelnen Nameserver nur der eigene Nameserver benutzt worden wäre, hätte dieser natürlich alle Informationen zwischengespeichert, die auf der Suche nach dem Rechnernamen aufgetaucht wären; so bräuchte er für eine Weile nicht mehr im Netz nachfragen.

Analog zu der Baumstruktur ist jeder ».« im Rechnername eine Verzweigung. Jeder Teil zwischen zwei Punkten ist der Name eines Astes im Baum.

Man »klettert« auf den Baum, indem man den Rechnernamen nimmt (prep.ai.mit.edu) und bei der Wurzel (.) beginnend die Zweige hinabsteigt. Der nächste Zweig in diesem Beispiel wäre edu. Die nächste Ebene erreicht man durch das Umschalten zu dem Nameserver, der diesen Teil des Namens kennt. Als nächstes folgt der mit-Zweig, der an den edu-Zweig anknüpft (zusammen ergibt das mit.edu) und besteigt diesen Zweig wiederum durch Umschalten zu dem Server der die Informationen für mit.edu bereitstellt. Der nächste Zweig lautet ai.mit.edu und erneut wird der Server gewechselt. Jetzt wurde der richtige Server an der richtigen Abzweigung erreicht. Die letzte Aufgabe ist die Abfrage der Informationen zu prep.ai.mit.edu - ziemlich einfach, oder?

Eine Domain, über die wenig gesprochen wird, die aber mindestens genauso wichtig wie alle anderen ist, ist in-addr.arpa. Sie ist wie die »normalen« Domains aufgebaut und erlaubt es uns, den Rechnernamen herauszufinden, wenn nur die IP-Adresse bekannt ist. Eine wichtige Eigenheit muss man allerdings kennen: Die IP-Adressen werden in der in-addr.arpa-Domain verkehrt herum aufgelistet. Wenn man die IP-Adresse 192.128.52.43 hat, arbeitete der named genauso wie im prep.ai.mit.edu-Beispiel: Er sucht nach den arpa.-Servern und dann nach in-addr.arpa.-Servern, 192.in-addr.arpa.-Servern, 128.192.in-addr.arpa.-Servern und nach 52.128.192.in-addr.arpa. Servern. Letztendlich findet er dann die Einträge für 43.52.128.192.in-addr.arpa. Clever, oder? Die Antwort sollte »ja« lauten ;-). Trotzdem wird diese Umkehrung der IP-Nummern jahrelang für Verwirrung sorgen.

Ich habe gerade ein wenig geflunkert. Das DNS arbeitet nicht so wie ich es gerade erklärt habe. Aber die Beschreibung ist nahe genug an der Wahrheit.

4.2 Die eigene Domain

Um eine eigene Domain zu erstellen, wird in dieser HOWTO als Beispiel der Domainname linux.test benutzt. Einzelne Rechner werden zu dieser Domain hinzugefügt. Es wird eine »test«-TLD benutzt, um sicherzustellen, dass niemand »da draussen« durch diese Domain gestört wird.

Eins noch, bevor es losgeht: Es sind nicht alle Zeichen in einem Rechnernamen erlaubt. Diese Einschränkung beinhaltet, dass nur die Buchstaben des englischen Alphabets benutzt werden dürfen: a-z, Ziffern (0-9) und der Bindestrich (»-«). Nochmal, es sollten und dürfen keine anderen Zeichen benutzt werden. Im DNS gibt es keinen Unterschied zwischen Groos- und Kleinbuchstaben - pat.uio.no is identisch mit Pat.UiO.No.

Die erste wichtige Einstellung wurde bereits durch die folgende Zeile in der named.conf gemacht:

zone "0.0.127.in-addr.arpa" {
        type master;
        file "pz/127.0.0";
};

Zu beachten ist, dass der ».« am Ende der Domainnamen in dieser Datei fehlt. Die Einstellungen definieren die Zone 0.0.127.in-addr.arpa, dass unser Server der Haupt-(Master)Server dafür ist und dass die Daten in einer Datei mit dem Namen pz/127.0.0 gespeichert werden. Auch diese Datei existiert bereits:

@       IN    SOA     ns.linux.test. hostmaster.linux.test. (
                      1       ; Serial
                      8H      ; Refresh
                      2H      ; Retry
                      1W      ; Expire
                      1D)     ; Minimum TTL
                      NS      ns.linux.test.
1                     PTR     localhost.

Wichtig ist der ».« am Ende von jedem kompletten Domainnamen in dieser Datei - im Gegensatz zu der named.conf-Datei von oben. Es gibt Leute, die jede Zonendatei mit einem $ORIGIN-Statement beginnen, aber das ist überflüssig. Der Ursprung (origin) einer Zonendatei (der Punkt an dem sich die Domain in der DNS-Hierarchie befindet) wird durch den Zonen-Abschnitt in der named.conf-Datei definiert. In diesem Fall ist das 0.0.127.in-addr.arpa.

Die gerade erstellte Zonen-Datei enthält 3 Eintragungen (»resource records« (RRs)). Einen NS RR und einen PTR RR. SOA ist die Abürzung für »Start Of Authority«. Der Klammeraffe »@« ist ein spezielles Zeichen und steht für den Ursprung dieser Domain. Die »domain«-Zeile für diese Datei definiert den Ursprung als 0.0.127.in-addr.arpa, also steht in der ersten Zeile ausgeschrieben:

0.0.127.in-addr.arpa.   IN      SOA ...

NS ist der Name-Server RR. Am Anfang der Zeile fehlt das »@«. Man kann sich diese »Tipparbeit« sparen, weil bereits die vorhergehende Zeile mit »@« anfing. Die NS-Zeile könnte also auch so geschrieben werden:

0.0.127.in-addr.arpa.   IN      NS      ns.linux.test

Hierdurch erfärt das DNS den Rechner, der als Nameserver für die Domain 0.0.127.in-addr.arpa fungiert: ns.linux.test. »ns« ist der übliche Name für einen Nameserver - genauso wie Web-Server normalerweise www.irgendetwas heissen. Trotzdem kann natürlich auch jeder beliebige andere Name benutzt werden.

Als letzter Eintrag bedeutet die PTR-Zeile, dass der Rechner mit der Adresse 1 im Subnetz 0.0.127.in-addr.arpa (also 127.0.0.1) localhost heisst.

Der SOA-Eintrag steht am Anfang von jeder Zonendatei. Ihn sollte es in jeder Datei nur ein einziges mal geben. Dieser Eintrag beschreibt die Ursprungszone (linux.test), wer für den Inhalt der Domaindaten dieser Zone verantwortlich ist (hostmaster@linux.test) - man sollte hier seine eigene E-Mail-Adresse einfügen oder besser den üblichen Alias »hostmaster« erzeugen. Ausserdem ist die Versionsnummer dieser Zonendatei enthalten (Seriennummer: 1) und diverse weitere Einstellungen, die mit dem Caching und Secondary (Zweit-)Nameservern zu tun haben. Wenn die Einstellungen der Felder (refresh, retry, expire und minimum) aus der HOWTO übernommen werden, sollte man auf der sicheren Seite sein.

Jetzt wird der named neu gestartet (der Befehl hierfür ist ndc restart) und die Einstellungen werden mit nslookup kontrolliert:

$ nslookup

Default Server:  localhost
Address:  127.0.0.1

> 127.0.0.1
Server:  localhost
Address:  127.0.0.1

Name:    localhost
Address:  127.0.0.1

Also ist nslookup in der Lage, den Namen localhost mit der IP-Adresse 127.0.0.1 herauszufinden - hervorragend.

Um jetzt zurück zur Hauptsache - der linux.test-Domain zu kommen, wird ein neuer »Zonen«-Abschnitt in die named.conf eingefügt:

zone "linux.test" {
        notify no;
        type master;
        file "pz/linux.test";
};

Am Ende des Domainnamens in der named.conf-Datei wird kein ».« geschrieben.

In die linux.test-Zonendatei werden jetzt irgendwelche Testdaten eingefügt:

;
; Zonendatei für linux.test
;
; Die komplette Zonendatei
;
@       IN      SOA     ns.linux.test. hostmaster.linux.test. (
                        199802151       ; Datum + Seriennummer #
                        8H              ; refresh, Sekunden
                        2H              ; retry, Sekunden
                        1W              ; expire, Sekunden
                        1D )            ; minimum, 
;
                NS      ns              ; Rechnername des Nameserver
                MX      10 mail.linux.test      ; erster Mailserver
                MX      20 mail.friend.test.    ; zweiter Mailserver
;
localhost       A       127.0.0.1
ns              A       192.168.196.2
mail            A       192.168.196.4

Zwei Anmerkungen müssen über den SOA-Eintrag gemacht werden. ns.linux.test muss ein Rechner mit einem gültigen A-Record sein. Es ist nicht erlaubt, einen CNAME-Eintrag im SOA-Abschnitt zu benutzen. Der Name muss übrigens nicht »ns« lauten, es kann auch jeder andere gültige Rechnername sein. Ausserdem liest sich hostmaster.linux.test als hostmaster@linux.test - dies sollte ein Alias oder eine Mailbox sein, die von den DNS-Administratoren regelmässig gelesen wird. Alle E-Mails, die sich auf das DNS beziehen, werden an diese Adresse geschickt. Genauso wie der Rechnername nicht unbedingt ns sein muss, kann auch hier eine andere gültige E-Mail-Adresse benutzt werden, aber oft wird davon ausgegangen, dass auch die »hostmaster«-Adresse existiert und gelesen wird.

Es gibt in dieser Datei noch einen neuen RR-Typen - den MX oder Mail eXchanger. Dieser Eintrag liefert Mailservern die Adresse zurück, an die E-Mails geliefert werden sollen, die nach jemandem@linux.test geschickt werden. In diesem Fall nach mail.linux.test oder mail.friend.test. Die Nummer vor den Mail-Einträgen ist die Priorität, mit der die Mailserver ausgewählt werden. Der RR mit der kleinsten Nummer (10) ist der erste, an den versucht wird, E-Mails zu schicken. Wenn das nicht klappt, kann die E-Mail an einen Server mit einer höheren Prioritätsnummer geschickt werden - zum Beispiel einen Not-Mailserver mail.friend.test, der hier die Priorität 20 hat.

Der named wird mit Hilfe von ndc restart neu gestartet und die Ergebnisse werden wie immer mit nslookup begutachtet:

$ nslookup
> set q=any
> linux.test
Server:  localhost
Address:  127.0.0.1

linux.test
        origin = ns.linux.test
        mail addr = hostmaster.linux.test
        serial = 199802151
        refresh = 28800 (8 hours)
        retry   = 7200 (2 hours)
        expire  = 604800 (7 days)
        minimum ttl = 86400 (1 day)
linux.test     nameserver = ns.linux.test
linux.test     preference = 10, mail exchanger = mail.linux.test.linux.test
linux.test     preference = 20, mail exchanger = mail.friend.test
linux.test     nameserver = ns.linux.test
ns.linux.test  internet address = 192.168.196.2
mail.linux.test        internet address = 192.168.196.4

Bei genauerer Betrachtung sollte man einen Fehler entdecken. Die Zeile

linux.test     preference = 10, mail exchanger = mail.linux.test.linux.test

ist falsch. Sie sollte

linux.test     preference = 10, mail exchanger = mail.linux.test

lauten.

Ich habe diesen Fehler mit Absicht eingebaut, um davon zu lernen :-). In der Zonendatei findet man den Fehler in der Zeile

                MX      10 mail.linux.test      ; Erster Mailserver

Es fehlt ein Punkt oder das »linux.test« ist zuviel. Wenn ein Rechnername in der Zonendatei nicht mit einem Punkt endet, wird die Ursprungszone an den Namen angehängt. Dadurch entsteht die Verdoppelung linux.test.linux.test. Also ist die richtige Schreibweise entweder

                MX      10 mail.linux.test.     ; Erster Mailserver

oder

                MX      10 mail                 ; Erster Mailserver

Ich benutze die zweite Variante - es ist weniger Tipparbeit. Es gibt einige Bind-Experten, denen diese Arbeitsweise nicht gefällt und andere, die es ebenso machen. Nochmal: In einer Zonendatei sollte die Domain entweder ausgeschrieben und mit einem Punkt beendet werden oder sie sollte komplett weggelassen werden - in diesem Fall wird der Ursprung angehängt.

Ich muss noch einmal betonen, dass in der named.conf-Datei kein ».« hinter dem Domainnamen sein darf. Man glaubt garnicht, wie oft ein Punkt zuviel oder zuwenig Fehler verursacht und die Leute an den Rand des Wahnsinns bringt.

Und jetzt folgt eine neue Zonendatei mit einigen zusätzlichen Einträgen:

;
; Zonendatei fürlinux.test
;
; die komplette Zonendatei
;
@       IN      SOA     ns.linux.test. hostmaster.linux.test. (
                        199802151       ; aktuelles Datum + Seriennummer
                        8H              ; refresh, Sekunden
                        2H              ; retry, Sekunden
                        1W              ; expire, Sekunden
                        1D )            ; minimum, Sekunden
;
                TXT     "Linux.Test, die DNS-Einführung"
                NS      ns              ; Rechnername des Nameservers
                NS      ns.friend.test.
                MX      10 mail         ; erster Mailserver
                MX      20 mail.friend.test. ; zweiter Mailserver

localhost       A       127.0.0.1

gw              A       192.168.196.1
                HINFO   "Cisco" "IOS"
                TXT     "Der Router"

ns              A       192.168.196.2
                MX      10 mail
                MX      20 mail.friend.test.
                HINFO   "Pentium" "Linux 2.0"
www             CNAME   ns

donald          A       192.168.196.3
                MX      10 mail
                MX      20 mail.friend.test.
                HINFO   "i486"  "Linux 2.0"
                TXT     "DEK"

mail            A       192.168.196.4
                MX      10 mail
                MX      20 mail.friend.test.
                HINFO   "386sx" "Linux 1.2"

ftp             A       192.168.196.5
                MX      10 mail
                MX      20 mail.friend.test.
                HINFO   "P6" "Linux 2.1.86"

Es gib hier wieder einige neue RRs: HINFO (Host INFOrmation - Rechnerinformation) besteht aus zwei Teilen - es gehört zum guten Ton, beide Teile anzugeben. Der erste Teil ist die Hardare bzw. die CPU des Systems, der zweite Teil enthält den Namen der Software oder des Betriebssystems des Rechners. Der Rechner mit dem Namen »ns« enthält eine Pentium CPU und läuft mit Linux 2.0. CNAME (Canonical Name) ist eine Möglichkeit, einem Rechner mehrere Namen zuzuweisen. Also ist www ein Alias für ns.

Die Benutzung von CNAME-Einträgen ist ein wenig kontrovers. Unter Berücksichtigung der folgenden Regeln, sollte es keine Probleme geben. MX, CNAME oder SOA-Einträge dürfen niemals auf einen CNAME-Eintrag verweisen, sondern nur auf A-Records. Aus diesem Grund ist das folgende nicht erlaubt:

blabar          CNAME   www                     ; NEIN!

Die richtige Variante lautet:

blabar          CNAME   ns                      ; JA!

Man kann davon ausgehen, dass ein CNAME kein gültiger Rechnername für eine E-Mail-Adresse ist: webmaster@www.linux.test ist nach den obigen Einstellungen eine ungültige Adresse. Auch wenn ein Test auf dem eigenen Rechner keine Schwierigkeiten macht, kann man mit Sicherheit erwarten, dass es immer ein paar Mail-Admins gibt, die diese Regel durchboxen. Ein Weg zur Vermeidung dieses Problems ist es, nur A-Einträge zu benutzen (und natürlich andere wie zum Beispiel MX,...):

www             A       192.168.196.2

Eine Handvoll der alten Bind-Magier empfehlen ebenfalls, niemals CNAME zu benutzen. Die Grundsatzdiskussion »warum oder warum nicht« gehört aber nicht in diese HOWTO.

Was man aber auch sehen kann, ist dass diese HOWTO und viele andere Sites diese Regeln nicht befolgen.

Die neuen Einstellungen der Bind-Datenbank werden mit ndc reload geladen - der named liest daraufhin seine Konfigurationsdateien neu ein.

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

> ls -d linux.test

Das bewirkt eine Auflistung aller Einträge. Als Ergebnis erhält man:

[localhost]
$ORIGIN linux.test.
@                       1D IN SOA       ns hostmaster (
                                        199802151       ; Seriennummer
                                        8H              ; refresh
                                        2H              ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                        1D IN NS        ns
                        1D IN NS        ns.friend.test.
                        1D IN TXT       "Linux.Test, die DNS-Einfuehrung"
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.test.
gw                      1D IN A         192.168.196.1
                        1D IN HINFO     "Cisco" "IOS"
                        1D IN TXT       "The router"
mail                    1D IN A         192.168.196.4
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.test.
                        1D IN HINFO     "386sx" "Linux 1.0.9"
localhost               1D IN A         127.0.0.1
www                     1D IN CNAME     ns
donald                  1D IN A         192.168.196.3
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.test.
                        1D IN HINFO     "i486" "Linux 1.2"
                        1D IN TXT       "DEK"
ftp                     1D IN A         192.168.196.5
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.test.
                        1D IN HINFO     "P6" "Linux 1.3.59"
ns                      1D IN A         192.168.196.2
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.test.
                        1D IN HINFO     "Pentium" "Linux 1.2"

Sehr schön - man erkennt sofort die Ähnlichkeit zu der Zonendatei selbst. Mal sehen, was nur für www ausgegeben wird:

> set q=any
> www.linux.test.
Server:  localhost
Address:  127.0.0.1

www.linux.test canonical name = ns.linux.test
linux.test     nameserver = ns.linux.test
linux.test     nameserver = ns.friend.test
ns.linux.test  internet address = 192.168.196.2

In anderen Worten: Der richtige Name von www.linux.test ist ns.linux.test. Außerdem werden zusätzliche Informationen über ns ausgegeben - genug um eine Verbindung aufzubauen, wenn man ein Programm wäre.

4.3 Die umgekehrte Zone (Reverse Zone)

Jetzt können Programme also die Rechnernamen der Domain linux.test in die für sie nötigen IP-Adressen umwandeln. Zusätzlich wird aber noch eine Zone benötigt, die die Umwandlung von IP-Adressen in Rechnernamen ermögicht - eine umgekehrte oder »reverse« Zone. Die Rechnernamen werden von vielen Programmen (z.B. FTP, IRC, WWW und anderen) zur Entscheidung darüber herangezogen, ob sie mit einem reden wollen oder nicht - und falls sie es möchten, welche Priorität man erhält. Um vollen Zugang zu allen Internetdiensten zu bekommen ist eine umgekehrte Zone nötig.

Hierzu wird noch etwas in die named.conf eingefügt:

zone "196.168.192.in-addr.arpa" {
        notify no;
        type master;
        file "pz/192.168.196";
};

Dieser Eintrag ist dem 0.0.127.in-addr.arpa-Eintrag sehr ähnlich - auch der Inhalt der Zonendatei ist gleich:

@       IN      SOA     ns.linux.test. hostmaster.linux.test. (
                        199802151 ; Seriennummer, Datum + Seriennnummer
                        8H      ; Refresh
                        2H      ; Retry
                        1W      ; Expire
                        1D)     ; Minimum TTL
                NS      ns.linux.test.

1               PTR     gw.linux.test.
2               PTR     ns.linux.test.
3               PTR     donald.linux.test.
4               PTR     mail.linux.test.
5               PTR     ftp.linux.test.

Jetzt wird der named neu gestartet (ndc restart) und die gerade gemachten Einstellungen werden mit nslookup überprüft:

> 192.168.196.4
Server:  localhost
Address:  127.0.0.1

Name:    mail.linux.test
Address:  192.168.196.4

So, das sieht OK aus. Jetzt werden nochmal alle Einstellungen ausgegeben und gecheckt:

> ls -d 196.168.192.in-addr.arpa
[localhost]
$ORIGIN 196.168.192.in-addr.arpa.
@                       1D IN SOA       ns.linux.test. hostmaster.linux.test. (
                                        199802151       ; serial
                                        8H              ; refresh
                                        2H              ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                        1D IN NS        ns.linux.test.
1                       1D IN PTR       gw.linux.test.
2                       1D IN PTR       ns.linux.test.
3                       1D IN PTR       donald.linux.test.
4                       1D IN PTR       mail.linux.test.
5                       1D IN PTR       ftp.linux.test.
@                       1D IN SOA       ns.linux.test. hostmaster.linux.test. (
                                        199802151       ; serial
                                        8H              ; refresh
                                        2H              ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

Das sieht sehr gut aus. Wenn die Ausgabe allerdings nicht mit der obigen übereinstimmt, muss man in der syslog-Datei nach Fehlermeldungen suchen. Wie das gemacht wird, habe ich ganz am Anfang dieses Abschnitts erklärt.

4.4 Warnungen

Es gibt noch ein paar Dinge, die gesagt werden sollten. Die IP-Adressen, die in den obigen Beispielen benutzt wurden, stammen aus einem der »privaten Netze«. Sie dürfen nicht öffentlich im Internet benutzt werden. Darum sind sie ideal für die Benutzung in einer HOWTO. Der zweite Punkt ist die notify no;-Zeile. Sie veranlaßt den named dazu, seine Zweit-(Secondary)-Server nicht über Änderungen in den Zonendateien zu informieren. Denn der Bind Version 8 kann die anderen Server, die in den NS-Einträgen einer Zonendatei stehen, über Neuerungen in einer Zone informieren. Das ist für den täglichen Gebrauch sehr praktisch, aber für private Zonen-Experimente sollte diese Option abgeschaltet werden. Wir wollen doch nicht das Internet mit unserem Experiment belästigen, oder?

Ausserdem ist die Domain natürlich nur ein Test - genauso wie alle Adressen, die sie beinhaltet. Ein reales Beispiel aus einer existierenden Domain ist im nächsten Kapitel zu sehen.

4.5 Warum Reverse Lookups nicht funktionieren.

Es gibt ein paar Probleme mit Namensauflösungen, wenn die Adressen rückwärts aufgeschlüsselt werden sollen, die zwar selten aber dennoch auftreten. Bevor ich darauf eingehe, sollte überprüft werden, ob die Reverse Lookups auf dem eigenen Rechner funktionieren. Wenn nicht - zurück an den Anfang und den Fehler beheben.

Ich werde hier im Detail auf zwei Probleme eingehen, wie sie auftreten können, wenn von ausserhalb des eigenen Netzes auf den Nameserver zugegriffen wird.

Die reverse-Zone wurde nicht delegiert.

Wenn man von einen Serviceprovider einen Netzwerkbereich und einen Domainnamen bekommt, wird der Domainname normalerweise automatisch delegiert. Eine Delegierung ist der NS-Eintrag, der einen von einem Nameserver zum nächsten weiterleitet, wie es in dem oberen Theorie-Abschnitt erklärt wurde. Das wurde doch gelesen und verstanden? Wenn die reversen-Zonen noch nicht funktionieren, zurück an den Anfang und nochmals genau lesen.

Die reverse Zone muss nämlich ebenfalls delegiert werden. Wenn man das 192.168.196-Netz mit der Domain linux.test vom Provider zugeteilt bekommen hat, muss dieser auch NS-Einträge für die reversen-Zonen eintragen - genauso wie für die »normalen« Zonen. Wenn man die Kette von in-addr.arpa zurück zum eigenen Netz verfolgt, wird man ansonsten ein Loch in der Kette finden. Üblicherweise ist diese Lücke beim eigenen Serviceprovider zu finden. Wenn dieses Loch gefunden wird, kontaktiert man am besten seinen Provider, damit dieser den Fehler behebt.

Man besitzt ein klassenloses Subnetz.

Dieser Punkt ist ein etwas schwieriger Punkt, aber Subnetze ohne Klasse sind in der letzten Zeit sehr wichtig geworden und vermutlich hat man davon eins, es sei denn man gehört zu einer mittelgrossen Firma.

Klassenlose Subnetze halten das Internet in diesen Tagen überhaupt noch am Leben. Bereits vor einigen Jahren gab es viele Probleme damit, dass die IP-Adressen knapp wurden. Die netten Leute im IETF (der Internet Engineering Task Force, die das Internet »verwalten") steckten Ihre Köpfe zusammen und lösten das Problem. Und mussten dafür einen Preis bezahlen - den Preis, dass man kleinere Netze als die der Klasse »C« bekommen kann - und dadurch kann einiges schiefgehen. Dazu kann ich nur raten unter

http://www.acmebw.com/askmrdns/00007.htm
nach einer guten Erklärung dieses Problems und wie man damit umgeht, zu fragen.

Gelesen? Ich werde hier nicht weiter darauf eingehen.

Der erste Teil des Problems ist, dass der eigene ISP die Techniken verstanden haben muss, die dort erklärt werden. Nicht alle kleinen ISPs verstehen es und setzen es auch um. Wenn dem so ist, muss man ihnen das eventuell erklären und vor allem sehr ausdauernd sein. Damit das funktioniert, sollte man allerdings sicher sein, dass man selber das Ganze verstanden hat ;-). Erst dann wird der Provider auch eine schöne reverse Zone auf seinem Server einrichten, die man mit nslookup überprüfen kann.

Der zweite und letzte Teil dieses Problems ist, dass man die Technik, die dahinter steht, richtig verstehen muss. Jeder der noch unsicher ist, sollte auf die Seite zurückgehen und es noch einmal lesen. Dann kann man sich daran machen, die eigene Klassenlose reverse-Zone einzurichten, wie es dort beschrieben wird.

Eine Falle wartet hier allerdings immernoch. Alte Resolver-Programme werden nicht in der Lage sein, dem CNAME-Trick in der resolve-Kette zu folgen und werden die Rechner nicht aufschlüsseln können. Das kann dann dazu führen, dass der Dienst den Rechner in eine falsche Zugriffsklasse einordnet und einem den Zugriff verweigert oder ähnliches. Wenn man auf so einen Service stößt, bleibt als einzige Möglichkeit (die ich kenne), dass der ISP einen PTR-Eintrag direkt in die klassenlose Zonen-Datei schreibt - als Ersatz für den CNAME-Trick.

Einige ISPs bieten andere Wege, um dieses Problem zu behandeln, an. Ein Beispiel können WWW-basierte Formulare sein, in die man seine reversen-Einträge machen kann oder andere automatisierte Systeme.


Inhalt