DNS/Bind9 für Einsteiger
From LUGUM
Inhaltsverzeichnis |
Einleitung
Diese Anleitung soll dabei helfen einen eigenen DNS (Domain Name System) im lokalen Netzwerk aufzusetzen. Dies macht Sinn, wenn man mehrere Rechner in seinem LAN hat und Zentrale Namensauflößung machen möchte ohne auf jedem Rechner per Hand die /etc/hosts Datei zu Pflegen.
Wie das [Domain Name System] funktioniert kann man [hier] nochmal genau nachlesen.
Der Vorteil vom DNS ist, das die Antwort davon Abhängig ist, welchen DNS man fragt. Deswegen ist es möglich einen Internen DNS-Server aufzusetzen, der die Anfragen von den lokalen Clients beantwortet ohne das dieser ein Teil vom öffentlichen DNS ist.
Dies Funktioniert folgendermaßen:
Der Client fragt den Lokalen DNS, dieser schaut in seiner eigenen Datenbank nach ob er Antworten kann, wenn er nicht Antworten kann fragt er bei den regulären DNS Servern nach und gibt dann die Anwort zurück.
Bind9
bind9 (Berkeley Internet Name Domain Version 9) ist ein populärer Internet Domain Name Server, dessen Konfiguration ich hier beschreiben möchte.
Folgene Konfigurationsdateien sind wichtig:
/etc/bind/named.conf
/etc/bind/named.conf.local
/etc/bind/named.conf.options
sowie die Zonendateien und /var/cache/bind
/etc/bind/named.conf
In dieser Datei werden die Standart-Zonen angelegt die es auf jedem Rechner gibt, darunter die für localhost sowie für die root Zone (.). In der root Zone sind die 13 Nameserver aufgelistet, inkl Ip-Adressen. Diese Datei ist sehr wichtig, denn ohne diese funktionieren die Auflößungen nicht.
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/etc/bind/db.root";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
// zone "com" { type delegation-only; };
// zone "net" { type delegation-only; };
// From the release notes:
// Because many of our users are uncomfortable receiving undelegated answers
// from root or top level domains, other than a few for whom that behaviour
// has been trusted and expected for quite some length of time, we have now
// introduced the "root-delegations-only" feature which applies delegation-only
// logic to all top level domains, and to the root domain. An exception list
// should be specified, including "MUSEUM" and "DE", and any other top level
// domains from whom undelegated responses are expected and trusted.
// root-delegation-only exclude { "DE"; "MUSEUM"; };
include "/etc/bind/named.conf.local";
/etc/bind/named.conf.options
In dieser Datei wird das lokale Verzeichnis eingestellt, unter dem die Zonefiles liegen, auf welchen Ports der bind hört, ob an einen anderen DNS weitergeleitet wird und von wo aus der DNS abgefragt wird Die forwarders sind dabei sehr Wichtig, denn hier werden die DNS-Server vom Provider eingetragen. Dies ist sehr zu empfehlen, da die Provider DNS diverse Anfragen schon im Cache haben und darauf viel schneller Antworten können, als es der Lokale könnte, wenn er alle DNS Server selbst abfragen würde. mit forward first; bewirkt das der bind die unter forwarders eingetragenen Nameserver zuerst abfragt, und erst wenn er von diesen keine Antwort bekommt, selbst versucht die Namen aufzulößen.
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers 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 8.1 and later use an unprivileged
// port by default.
query-source address * port 53;
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
forwarders {
217.237.151.161; //( div Server der Telekom )
217.237.150.33;
217.237.151.225;
217.5.100.185;
194.25.2.129;
194.25.2.132;
194.25.2.130;
194.25.2.131;
194.25.2.133;
194.25.2.134;
};
forward first;
allow-query {192.168.0/24; 127.0.0.1;};
notify no;
auth-nxdomain no; # conform to RFC1035
};
/etc/bind/named.conf.local
Ab hier wird es Interresant. Diese Datei wird dazu benutzt eingene Zonen zu erstellen mit denen wir die Namen auflößen können. include "/etc/bind/zones.rfc1918"; ist dafür sorgt dafür, das locale Netzwerk Ip-Bereich nicht weitergereicht werden, sondern lokal aufgelößt werden.
Also folgene Bereiche:
10.0.0.0 - 10.255.255.255 (10/8 prefix) 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
Diese Konfiguration kann aber überschrieben werden mit eigenen Einträgen wir z.B.
zone "0.168.192.in-addr.arpa" {
type master;
file "192.168.0.zone";
};
Dies ist eine Zone die ein IP-Adresse in ihren Namen auflößt auch genannt "reverse lookup zone". type master; sagt aus, das dieser DNS für diese Zone zuständig ist. file "192.168.0.zone"; gibt an wo die Konfigurationsdatei für diese Zone liegt wobei der Ordner schon in der /etc/bind/named.conf.options mit der Option directory "/var/cache/bind"; gesetzt wurde und nicht mit angegeben werden muss.
zone "foobar.homelinux.net" {
type master;
file "foobar.homelinux.net.zone";
};
Gibt das gleiche an, nur für die Domäne foobar.homelinux.net.
Als drittes gibt es noch die Möglichkeit, an einen anderen DNS zu verweisen, der für die Domain zuständig ist. Das wird dann folgendermaßen gemacht:
zone "lan" {
type forward;
forwarders { 192.168.0.170;};
};
Und hier ist eine Komplette Beispiel-config:
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
include "/etc/bind/zones.rfc1918";
zone "0.168.192.in-addr.arpa" {
type master;
file "192.168.0.zone";
};
zone "foobar.homelinux.net" {
type master;
file "foobar.homelinux.net.zone";
};
zone "lan.foobar.homelinux.net" {
type forward;
forwarders { 192.168.0.170;};
};
/var/cache/bind/192.168.0.zone
In dieser Zone wird die Auflößung von IP zu Name gemacht. Wobei diese Zonen eigentlich immer mit dem Header anfangen.
$TTL 1W
@ IN SOA ns.foobar.homelinux.net. root.foobar.homelinux.net. (
2003010403 ; serial
8H ; refresh
2H ; retry
1W ; expiry
11h) ; minimum
Hierbei sollte man den folgende Werte anpassen:
ns.foobar.homelinux.net. bedeutet, das für diese Zone der ns = name server .foobar.homelinux.net. zuständig ist. wobei der . am ende sehr wichtig ist, sonst bezieht sich das ganze nicht auf ns.foobar.homelinux.net. sonder auf ns.foobar.homelinux.net.0.168.192.in-addr.arpa was doch zu Problemen führen könnte. Allerdings ist es bei 10 gewollt damit daraus 10.0.168.192.in-addr.arpa vom bind gemacht wird, was uns eine menge Schreibarbeit abnimmt.
root.foobar.homelinux.net. bedeutet das der Administrator der Zone unter root@foobar.homelinux.net erreichbar ist, wobei man das @ dabei selbst an die richtige Stelle setzen muss.
Die serial ist eine eindeutige Zahl die nach jeder Änderung der Datei um 1 erhöhrt werden muss, damit auch die anderen DNS ggf die Zone aktualisieren. Es hat sich Eingebürgert, dass sie aus aktuellem Datum und einer 2 stelligen Zahl gebildet wird. Die anderen Angaben sind für anderen Nameserver wichtig und sagen wie lange sie die Zone cachen dürfen bevor sie überprüfen müssen, ob sich was geändert hat.
Als erstes wird gesetzt welcher NS für die Zone zuständig ist, danach wird die eigentliche Auflößung eingetragen.
$TTL 1W
@ IN SOA ns.foobar.homelinux.net. root.foobar.homelinux.net. (
2003010403 ; serial
8H ; refresh
2H ; retry
1W ; expiry
11h) ; minimum
IN NS ns
IN NS ns.foobar.homelinux.net.
1 IN PTR foobar.homelinux.net.
3 IN PTR ps.foobar.homelinux.net.
5 IN PTR fileserver.foobar.homelinux.net.
8 IN PTR schleppi.foobar.homelinux.net.
10 IN PTR win2k.foobar.homelinux.net.
170 IN PTR lan.foobar.homelinux.net.
/var/cache/bind/foobar.homelinux.net.zone
Der Header ist identisch mit der einer "192.168.0.zone", allerdings wird hier der IN A Eintrag genutzt, der dem Namen eine IP zuweist. der IN MX ist der Eintrag, der den "Mail Exchanger" also den zuständigen Mailserver für diese domäne zuweißt. IN CNAME macht eine weiterleitung auf einen anderen DNS-Namen
$TTL 1W
@ IN SOA ns.foobar.homelinux.net. root.foobar.homelinux.net. (
2003010901 ; serial
8H ; refresh
2H ; retry
1W ; expiry
11h) ; minimum
IN NS ns.foobar.homelinux.net.
IN MX 10 foobar.homelinux.net.
IN A 192.168.0.1
ns IN A 192.168.0.1
debian IN A 192.168.0.1
test IN A 192.168.0.1
debian.test IN A 192.168.0.1
fileserver IN A 192.168.0.5
walnus IN A 192.168.0.10
wlan IN A 192.168.0.50
zeiss IN A 192.168.0.170
*.zeiss IN A 192.168.0.170
laber IN CNAME lug-untermain.de
Andreas Kraus lug@ak1301.de

