Dieser Abschnitt beschreibt, wie man seine eigene Domain einrichtet.
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.
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.
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.
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.
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.
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.
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.