Berkeley Internet Name Domain (BIND)

Debian Swirl

http://www.black-board.net
Es ist nicht gestattet dieses Tutorial losgelöst von dem Namen BlackBoard und der URL zu verbreiten.


Das Tutorial befindet sich noch in der Entwicklung. Wenn du mitwirken möchtest, melde dich hier.
Dies ist ein Aufruf - wenn du Ahnung hast, mach mit!



1. Was ist BIND?


BIND (Berkeley Internet Name Domain) ist eine auf *nix-Systemen weit verbreitete DNS-Software, dient also der Namensauflösung in Netzwerken.

Im folgenden soll nun beschrieben werden, wie man einen lokalen DNS-Server aufsetzt. Dies hat den Vorteil, dass DNS-Abfragen gecachet und so schneller beantwortet werden können. Außerdem lassen sich so auch die Namen der Rechner im lokalen Netzwerk auflösen, sodass nicht jedem Client jeder andere Rechner im Netz mit Hostnamen und IP bekannt sein muss.


2. Installation


Installiert wird BIND mittels

apt-get install bind9

Wie gewohnt werden die benötigten Abhängigkeiten ebenfalls installiert. Ebenfalls empfehlenswert zu installieren ist das Paket dnsutils (für `dig`). Die Konfigurationsdateien, die es zu bearbeiten gilt, befinden sich im Verzeichnis /etc/bind. Der DNS-Daemon hat den Namen `named`.

Der DNS-Server sollte natürlich auch immer auf aktuellem Stand gehalten werden. Dazu ist die Liste der DNS-Rootserver immer aktuell zu halten. Diese befindet sich unter /etc/bind/db.root. Um die Aktualisierung vorzunehmen, habe ich folgendes Script bei mir unter /etc/init.d/dns-update:


/etc/init.d/dns-update

#!/bin/sh

if [ -z "$(ps -A | grep pppd)" ]
then
echo "db.root Update fehlgeschlagen: Keine Internetverbindung hergestellt."
exit 1
fi

cd /etc/bind

dig @e.root-servers.net . ns >db.root.new 2>/dev/null

case `cat db.root.new` in
*NOERROR*)
:;;
*)
echo "$?"
exit 1
;;
esac

mv db.root.new db.root &>/dev/null
/etc/init.d/bind9 reload &>/dev/null

exit 0

Dieses wird ausführbar gemacht und in der Crontab eingetragen:

* * 15 * * /etc/init.d/dns-update

Von nun an wird am 15. jedes Monats die Rootserver-Liste aktualisiert.


3. Konfiguration für einen cachenden Nameserver


Die zuerst abzuarbeitende Datei ist /etc/bind/named.conf.options. Hier werden die globalen Einstellungen von BIND getätigt. Die Datei ist von Haus aus bereits gut dokumentiert.

Eine wichtige Einstellung findet man auch gleich zu Beginn:
query-source address * port 53

Diese Zeile ist auskommentiert, sollte aber aktiviert werden, wenn der BIND hinter einer Firewall betrieben wird. Neuere BIND-Versionen benutzen per Default einen unprivilegierten Port für die Kommunikation mit anderen DNS-Servern. Mittels dieser Einstellung wird aber der Port 53 festgesetzt, den man in der Firewall freigeben sollte.

Außerdem können in der named.conf.options weitere DNS-Server eingetragen werden, an die DNS-Requests weitergeleitet werden, wenn noch kein lokaler Cache-Eintrag vorhanden ist. Hier können beispielsweise die Nameserver des Internetanbieters, den man benutzt, eingetragen werden. Ein Beispiel für 2 T-Online Nameserver:


forwarders {
217.5.115.7;
194.25.2.129;
};

Zu ergänzen ist noch der Unterabschnitt listen-on{}:


listen-on {
192.168.0.0/24;
127.0.0.1;
};

Dieser sorgt dafür, dass BIND auch nur das LAN und den localhost bedient und nicht frei im Internet benutzt werden kann. Die IP-Maske für das LAN muss natürlich angepasst werden.

Als eine weitere Einstellung mit Sicherheitsrelevanz kann im options{}-Abschnitt noch folgendes eingetragen werden:

version "VERSION NOT PROVIDED";

Dies sorgt dafür, dass eine Anfrage mittels

dig @server version.bind chaos txt

nicht die benutzte BIND-Version zurückgibt. Dies erschwert zumindest die Suche nach Exploits, sollten noch nicht geschlossene Sicherheitslücken in BIND bekannt werden. Dennoch ist natürlich darauf zu achten, die BIND-Software immer auf dem neusten Stand zu halten.


4. Konfiguration zur Auflösung der Rechnernamen im lokalen Netz


In der /etc/bind/named.conf befinden sich die einzelnen Zonenabschnitte. Jeder dieser Abschnitte legt die Optionen für bestimmte Netze fest. Vordefiniert sind z.B. schon die Zonen 127.in-addr.arpa (also 127.x.x.x, der localhost) und 255.in-addr.arpa (255.x.x.x, Broadcast).

Hier können jetzt noch Zonen für lokale Netze ergänzt werden. Gesetzt dem Falle, man möchte noch ein lokales Netz der Maske 192.168.0.x verwalten, welches unter der Domain 'olymp' läuft und die Rechner 'zeus' (1), 'hera' (2) und 'athene' (3) beinhaltet, läuft die Konfiguration wie folgt ab:

In der /etc/bind/named.conf sind 2 Zonen zu ergänzen, die erste für DNS-Lookups (einen Rechnernamen zu einer IP auflösen), die zweite für Reverse-Lookups (zu einer bekannten IP den Rechnernamen finden).


zone "olymp" {
type master;
file "/etc/bind/db.olymp";
};

zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.0";
};

Die referenzierten Dateien müssen natürlich auch noch erstellt werden. Zu beachten ist, dass diese Dateien keine Leerzeilen enthalten dürfen. Möchte man der Übersichtlichkeit halber welche einfügen, so sind diese mit einem Semikolon zu beginnen.

Der Kopf der beiden Dateien beinhaltet Informationen für DNS-Clients.

  • $TTL
    Time To Live, dieser Wert gibt an, wie lange die Einträge gecachet werden, bevor eine erneute Anfrage gestellt werden muss.
  • SOA
    Start Of Authority, dies ist der DNS-Master-Server, sollte hier also auf den Rechner gesetzt werden, auf dem der BIND installiert wird, bevor eine erneute Abfrage gestartet werden muss. Die 2. Angabe ist die Adresse eines Mailservers.
  • Serial
    Hier ist eine ID einzutragen. Wird die Datei aktualisiert, sollte der Wert inkrementiert werden, um anzuzeigen, dass die Angaben aktualisiert wurden. Praktischerweise kann man hier also das Datum in rückwärtiger Schreibweise ohne Trennzeichen eintragen (also z.B. 20060301).
  • Refresh
  • Retry
  • Expire
    Diese Angaben sind für Slave-DNS-Server, werden hier aber nicht weiter behandelt.

db.olymp

$TTL 1W
@ IN SOA zeus. root.zeus. (
20050521 ; Serial
1D ; Refresh
4H ; Retry
8W ; Expire
1W ) ; minimum
;
IN NS localhost ; Nameserver
IN NS localhost. ; also der lokale Rechner
localhost IN A 127.0.0.1 ; localhost
zeus IN A 192.168.0.1 ; zeus
hera IN A 192.168.0.2 ; hera
athene IN A 192.168.0.3 ; athene
blubb IN A 192.168.0.3 ; zweiter Name auf gleicher IP
extern IN A 213.123.132.231 ; externer Rechner

Es wird also jedem Hostnamen genau eine IP zugeordnet. Es können allerdings auch mehrere Hostnamen auf die gleiche IP verweisen. Außerdem können hier auch externe Rechner eingetragen werden. Ein Aufruf von extern.olymp würde auf 213.123.132.231 verweisen.


db.192.168.0

$TTL 2D
@ IN SOA zeus. root.zeus. (
20050521 ; Serial
1D ; Refresh
2H ; Retry
1W ; Expire
2D ) ; minimum
;
IN NS zeus.olymp ; Nameserver
IN NS zeus.olymp. ; also der lokale Rechnername
1 IN PTR zeus.olymp ; 192.168.0.1
2 IN PTR hera.olymp ; 192.168.0.2
3 IN PTR athene.olymp ; 192.168.0.3

Hier wird jedem benötigten x aus 192.168.0.x ein Hostname zugewiesen.

Ist die Konfiguration abgeschlossen, muss BIND mittels
/etc/init.d/bind9 reload
mitgeteilt werden, dass die Einstellungen neu eingelesen werden.


5. Funktionstest


Nun kann die Funktion des DNS-Servers getestet werden. Um die Cache-Funktion zu testen, lässt man eine beliebige Domain auflösen:

dig -x web.de

In der viertletzten Zeile der Ausgabe sollte etwas in der Form

;; Query time: 279 msec

stehen. Diese Anfrage dauerte also 279 Millisekunden. Startet man nun die gleiche Abfrage noch einmal, sollte dieser Wert signifikant niedriger liegen. Diese Abfrage wurde also schon lokal aufgelöst.

Ebenso sollte eine Abfrage nach dem Rechner 'zeus' jetzt von jedem Rechner im lokalen Netzwerk funktionieren:

nslookup zeus.olymp

Ein Reverse-Lookup ist auch möglich mittels

nslookup 192.168.0.2


6. Einrichtung auf den Clients


Für *nix-Clients ist die Einrichtung simpel. Die zu verwendenden Nameserver werden in der Datei /etc/resolv.conf abgelegt. Hier entfernt man einfach alle bereits eingetragenen Nameserver und ersetzt dies mit:

nameserver 192.168.0.1

bzw. der IP des Servers, auf dem der DNS-Dienst installiert wurde. Praktischerweise sollte man natürlich auch auf dem Server selbst die resolv.conf anpassen und dort den localhost eintragen.

Achtung: Bei der Interneteinwahl kann es passieren, dass die /etc/resolv.conf mit DHCP-Angaben des ISPs überschrieben wird. Es ist daher zu empfehlen, den Einwahldienst entsprechend zu konfigurieren, dass die DNS-Angaben des ISPs nicht übernommen werden. Für den pppoe lautet die benötigte Einstellung

DNSTYPE=NOCHANGE

in der /etc/ppp/pppoe.conf.

Windows2000- oder XP-Clients können natürlich (ebenso wie Clients jedes anderen Betriebssystems) mit BIND bedient werden. Hierzu fügt man einfach die DNS-Server-IP unter "Systemsteuerung -> Netzwerk- und DFÜ-Verbindungen -> LAN-Verbindung -> Eigenschaften -> Internetprotokoll (TCP/IP) -> Eigenschaften ->  Folgende DNS-Serveradressen verwenden" hinzu.


7. Links


Verfasser

LX

Letzte Aktualisierung 19.06.2006 von LX