Bereich:  Linux : bind : 

Was soll erreicht werden?

Alle Adressen im Internet und in Intranets sind letztlich IP-Adressen, die üblicherweise numerisch als dotted quad dargestellt werden (z.B. 134.147.222.8). Da diese Adressen alles andere als sprechend und schwer zu behalten sind, wird das sogenannte "Domain Name System" (DNS) eingesetzt, um diesen numerischen IP-Adressen Namen zuzuordnen. So bezeichnen etwa die IP-Adresse 216.239.39.100 und der Name www.google.de den selben Rechner im Internet. Wenn etwa ein Webbrowser eine bestimmte Seite von einem bestimmten Rechner anzeigen soll, dann muss er zunächst die zum Namen gehörige IP-Adresse bestimmen und erst dann kann er Kontakt mit diesem Server aufnehmen. Dazu wird ein Nameserver benutzt, dessen IP-Adresse dem Betriebssystem bekannt ist. In einem lokalen Netzwerk ist es nützlich, einen eigenen Nameserver zu betreiben. Unser Nameserver soll als einheitlicher Nameserver für ein lokales Netzwerk fungieren. Dabei soll er für die Clients:

Dadurch ist es möglich, für alle Rechner im lokalen Netzwerk als Nameserver die IP des eigenen anzugeben (im Beispiel 192.168.0.1), um sowohl echte als auch lokale Namen in IP-Adressen aufzulösen und umgekehrt.

Seitenanfang

Schritte zur Konfiguration des Nameservers

Zunächst müssen die zur Einrichtung eines DNS erforderlichen Pakete installiert werden. In unserem Beispiel benutzen wir das Paket bind8. Zusätzlich empfiehlt es sich, das Paket bindutil zu installieren, das unter anderem Tools zum Testen des DNS enthält (z.B. nslookup). Die verschiedenen Möglichkeiten der Installation (source- oder binary RPMs, Distributionstools wie yast, ...) werden hier nicht erläutert. Aktuelle Versionen der Pakete findet man hier.
Als Nächstes müssen einige Dateien erstellt werden, die der named (das ist der deamon, der als DNS server fungiert) benötigt. Die wichtigste ist die Konfigurationsdatei named.conf, die sich üblicherweise im Verzeichnis /etc findet. Hier werden zunächst unter der Direktive "options" die zentralen Optionen definiert: Das Ausgangsverzeichnis, unterhalb dessen named alle Konfigurationsdateien sucht, wird mit "directory" definiert, und der Nameserver des Providers unter "forwarders":

options {
directory "/var/named";
forwarders {
62.104.113.10;
};
};

Dann werden die einzelnen Zonen, mit denen unser named operiert, angegeben. Eine Zone ist ein Namensbereich, wie etwa der unserer eigenen kleinen Heim-Domäne (im Beispiel "home.mydomain.com"). Am Anfang steht immer die "root" Zone, d.h. die Wurzel des gesamten, weltweiten Namenssystems:

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

Zusammen mit "directory" aus "options" ergibt sich also, dass named eine Datei mit Einträgen für root Nameserver in "/var/named/root.hints" erwartet. Die nächste zone ist für das reverse lookup über das loopback device (immer 127.0.0.1) bestimmt. Damit können wir 127.0.0.1 als Nameserver IP für den Server selbst einrichten (in /etc/resolv.conf):

zone "0.0.127.in-addr.arpa" {
type master;
notify no;
file "127.0.0";
};

Nun folgen noch die eigentlichen Zonen unserer Domäne. Zunächst brauchen wir die Zone für das normale lookup (Name -> IP):

zone "home.mydomain.com" {
type master;
notify no;
file "home.mydomain.com";
};

Zuletzt folgt die Zone für das reverse loolup (IP -> Name). Wie schon bei der Zone für 127.0.0.1 wird im Zonennamen die Reihenfolge der Bytes umgekehrt und "in-addr.arpa" anghängt. Bei den Dateinamen muss das nicht auch so sein, denn die kann man frei wählen:

zone "0.168.192.in-addr.arpa" {
type master;
notify no;
file "192.168.0";
};

Nun können die Zonendateien "root.hints", "127.0.0", "home.mydomain.com" und "192.168.0" erstellt und in /var/named abgelegt werden. Beispiele für die Zonendateien stehen weiter unten. Danach passt man die Konfiguration des Nameservers für den Server selbst an (in /etc/resolv.conf):

search home.mydomain.com
nameserver 127.0.0.1

Zuletzt muss der named gestartet werden. Das geschieht am besten durch ein Standard Start-Stop-Script (oft liegt nach der Installation der Pakete in /etc/initd schon ein Script namens "named" für diesen Zweck vor). Der Aufruf des Scripts sieht etwa so aus:

> /etc/init.d/named start

Wenn alles korrekt konfiguriert ist, sollte "nslookup [Name]" bei bestehender Internetverbindung die IP zu einem beliebigen Namen liefern (ohne Internetverbindung zumindest die Namen des lokalen Netzes). Wenn nicht, hält man mit

> /etc/init.d/named stop

den named wieder an, überprüft alle Einstellungen und versucht es erneut (until SUCCESS ;-)). Wenn alles rund läuft, lässt man den named beim booten der entsprechenden runlevels automatisch starten (SuSE: START_NAMED="yes" in /etc/rc.config).

Seitenanfang

Die Datei <i>named.conf</i>

Mit Hilfe der Kommentare kann man die folgende Konfiguration leicht auf andere Situationen anpassen:

# named.conf für einen einfachen Nameserver in einem lokalen Netzwerk
# Die lokale Domäne heißt "home.mydomain.com".
# Die IP-Adressen der des lokalen Netzes liegen im Bereich 192.168.0.X

# Im Abschnitt "options" werden generelle optionen
# für den named eingestellt:

options {

# Hier wird der Pfad zu den Zonendateien angegeben:

directory "/var/named";

# Der oder die Namesrever des Providers werden als
# forwarder eingetragen. Also muss X.X.X.X durch die
# IP eines "echten" Nameservers ersetzt werden:

forwarders {
X.X.X.X;
};
};

# Die root Zone "." stellt die Wurzel des hierarchisch
# aufgebauten DNS dar. Die Datei "root.hints" enthält
# IP Adressen von root Nameservern:

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

# Die Zone "0.0.127.in-addr.arpa" dient der Zuordnung
# von 127.0.0.1 zu "localhost" (127.0.0.1 verweist immer
# auf den Rechner selbst (loopback)):

zone "0.0.127.in-addr.arpa" {
type master;
notify no;
file "127.0.0";
};

# Die Zone "home.mydomain.com" ist der Namensbereich
# des lokalen Netzwerks (im Beispiel 192.168.0.X). Der
# Name kann im Prinzip frei gewählt werden, solange die
# Domäne nicht schon gleichlautend im Internet benutzt wird.
# Dann nämlich würde man aus dem loklen Netzt statt der
# echten IPs der echten Domäne immer nur die privaten IPs
# der privaten Domäne erhalten und die echte nicht mehr
# erreichen können.
# Mittels dieser Zone kann man zu Namen wie
# ns.home.mydomain.com die dazugehörigen IPs wie
# 192.168.0.1 finden.

zone "home.mydomain.com" {
type master;
notify no;
file "home.mydomain.com";
};

# Die Zone "0.168.192.in-addr.arpa" ist das Pendant
# zu "home.mydomain.com" für das reverse lookup: Mit
# Hilfe dieser Zone kann man zu IPs wie 192.168.0.1
# die dazugehörigen Namen wie ns.home.mydomain.com
# finden. Es handelt sich also um dieselben Rechner,
# aber um eine andere Suchrichtung. Wenn man andere
# IP Adressen in seinem lokalen Netz benutzen möchte,
# muss man den Namen der Zone (und am besten auch der
# zugehörigen Datei) entprechend anpassen
# (z.B. "100.168.192.in-addr.arpa" für 192.168.100.X)

zone "0.168.192.in-addr.arpa" {
type master;
notify no;
file "192.168.0";
};
Seitenanfang

Die Zonendateien

Zunächst "/var/named/root.hints" (diese Datei kann ohne Änderungen übernommen werden). Hier und in den anderen Dateien gilt: Punkte (".") sind entscheidend. Eine Abweichung in nur einem Punkt kann Schuld daran sein, dass etwas nicht funktioniert:

.	6D IN NS	G.ROOT-SERVERS.NET.
. 6D IN NS J.ROOT-SERVERS.NET.
. 6D IN NS K.ROOT-SERVERS.NET.
. 6D IN NS L.ROOT-SERVERS.NET.
. 6D IN NS M.ROOT-SERVERS.NET.
. 6D IN NS A.ROOT-SERVERS.NET.
. 6D IN NS H.ROOT-SERVERS.NET.
. 6D IN NS B.ROOT-SERVERS.NET.
. 6D IN NS C.ROOT-SERVERS.NET.
. 6D IN NS D.ROOT-SERVERS.NET.
. 6D IN NS E.ROOT-SERVERS.NET.
. 6D IN NS I.ROOT-SERVERS.NET.
. 6D IN NS F.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4
J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10
K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129
L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12
M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33
A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4
H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53
B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107
C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12
D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90
E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10
I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17
F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241

Als Nächstes folgt "/var/named/127.0.0". Die Syntax der Zonendateien ist kryptisch und scheint auf den ersten Blick recht kompliziert. Für die meisten Situationen sind jedoch nur einfache Anpassungen der Vorlagen erforderlich (eigene Namen und eigene IPs an den entsprechenden Stellen einsetzten):

\$TTL 8H
@ IN SOA ns.home.mydomain.com. hostmaster.home.mydomain.com. (
200203091
8H
2H
1W
8H)
NS ns.home.mydomain.com.

1 PTR localhost.

Die loopback Adresse des Servers ist 127.0.0.1 und der dzugehörige Name angabe "localhost".
Nun zu "/var/named/home.mydomain.com":

\$TTL 8H
@ IN SOA ns.home.mydomain.com. hostmaster.home.mydomain.com. (
200203091
8H
2H
1W
8H)
NS ns.home.mydomain.com.

localhost A 127.0.0.1
ns A 192.168.0.1
einrechner A 192.168.0.2
nochnrecner A 192.168.0.3
undnocheiner A 192.168.0.4

Alle Namen, die hier definiert werden, sind hosts der Domäne home.mydomain.com. Somit hat der Rechner nochnrechner.home.mydomain.com die IP Adresse 192.168.0.3
Zuletzt die reverse Zone "/var/named/192.168.0":

\$TTL 8H
@ IN SOA ns.home.mydomain.com. hostmaster.home.mydomain.com. (
200203091
8H
2H
1W
8H)
NS ns.home.mydomain.com.

1 PTR ns.home.mydomain.com.
2 PTR einrechner.home.mydomain.com.
3 PTR nochnrechner.home.mydomain.com.
4 PTR undnocheiner.home.mydomain.com.

Alle IP Adressen, die hier definiert werden, sind Adressen des Netzes 192.168.0.X. Somit hat die IP 192.168.0.3 den Namen nochnrechner.home.mydomain.com

Seitenanfang

Konfiguration der Clients

Die Clients im lokalen Netz, unabhängig vom verwendeten Betriebssystem, werden so konfiguriert, dass als (einziger) Nameserver die IP Adresse des lokalen Nameservers (also des Rechners, auf dem named läuft) eingetragen wird (im Beispiel 192.168.0.1). Mehr muss nicht getan werden. Wenn ein DHCP Server verwendet wird, dann sollte er so konfiguriert werden, dass er den DHCP Clients diese IP als Nameserver Adresse mitteilt.

Seitenanfang

Diagnosemöglichkeiten bei Problemen

Serverseitig:

Clientseitig:

Seitenanfang