1. Installation der Software
Ich habe die Version 9.2.2 von BIND verwendet. Wenn man allerdings mal ab und zu freshmeat liest, dann wird einen auffallen, das BIND ziemlich oft dort mit neuen Versionen auftaucht. BIND kann man unter http://www.isc.org/products/BIND/bind9.html runterladen. So sollte die Installation erfolgen:
www:# cd /usr/src/ www:/usr/src# tar xfz /von/wo/auch/immer/bind-9.2.2.tar.gz www:/usr/src# cd bind-9.2.2 www:/usr/src/bind-9.2.2# ./configure www:/usr/src/bind-9.2.2# make www:/usr/src/bind-9.2.2# make installBei meiner Uralt-Debian-Version (2.1) mit Kernel 2.2.17 tauchte folgender Fehler beim make auf:
unix/os.o: In function 'linux_keepcaps': /usr/src/bind-9.2.2/bin/named/unix/os.c:249: undefined reference to 'prctl' make[2]: *** [named] Error 1 make[2]: Leaving directory /usr/src/bind-9.2.2/bin/named' make[1]: *** [subdirs] Error 1 make[1]: Leaving directory /usr/src/bind-9.2.2/bin' make: *** [subdirs] Error 1Wenn dies auftreten sollte, dann die Datei /usr/src/bind-9.2.2/bin/named/unix/os.c folgendermaßen ändern (Ausschnitt ab Zeile 249):
if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) < 0) { if (errno != EINVAL) isc__strerror(errno, strbuf, sizeof(strbuf)); ns_main_earlyfatal("prctl() failed: %s", strbuf); } else { non_root_caps = ISC_TRUE; if (getuid() != 0) non_root = ISC_TRUE; } }---Ende vorher---
/* if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) < 0) { if (errno != EINVAL) isc__strerror(errno, strbuf, sizeof(strbuf)); ns_main_earlyfatal("prctl() failed: %s", strbuf); } else { */ non_root_caps = ISC_TRUE; if (getuid() != 0) non_root = ISC_TRUE; /* } */ }---Ende nachher---
Was dieses bewirkt? Laut http://www.they.com/doc/bind9/changelog steht ab Kernel 2.3.99 eine Funktion zur Verfügung, die BIND als nicht-root laufen läßt, da ich aber Kernel 2.2.17 habe und dieser diese Option nicht zu unterstützen scheint, habe ich somit die ganze Abfrage einfach auskommentiert. BIND muß jetzt allerdings unbedingt unter dem User root laufen! Dies ist unter Sicherheitsaspekten nicht so toll... Vielleicht sollte ich so langsam doch mal auf eine aktuelle Distro umsteigen ;)
2. Konfiguration der Dateien
Es müssen etliche Dateien konfiguriert werden, bevor der DNS-Server läuft:
/etc/host.conf - hier wird eingetragen, was zuerst zur DNS-Auflösung benutzt werden soll (/etc/hosts oder der DNS-Server)
order hosts,bind multi on/etc/resolv.conf - hier wird eingestellt, was DNS-Kurznamen anzuhängen ist (hier: marty44.net) und welcher DNS-Server zur Abfrage benutzt werden soll (natürlich der, den wir gerade konfigurieren ;) )
search marty44.net nameserver 192.168.44.1/etc/named.conf - ist eine Datei vom DNS-Server. Hier wird als erstes eingestellt, wo die Zonendaten liegen (unter /var/named). Danach folgen die DNS-Server, die abgefragt werden sollen, wenn sie der eigene DNS-Server nicht weis (forwarders { ... }). Als nächstes wird die Rootzone (.) definiert, genauere Angaben über sie findet man in der Datei named.root. Weiter geht es mit der Zone localhost für die Auflösung von einen DNS-Namen in eine IP und die Zone für die Auflösung einer IP in einen DNS-Namen (0.0.127.in-addr.arpa). Das selbe dann nochmal für marty44.net.
options { directory "/var/named"; forwarders { 195.185.185.195; 212.185.255.231; }; };Es müssen noch zwei Verzeichnisse angelegt werden:zone "." { type hint; file "named.root"; };
zone "localhost" IN { type master; file "pz/localhost"; allow-update { none; }; };
zone "0.0.127.in-addr.arpa" { type master; file "pz/0.0.127"; allow-update { none; }; };
zone "marty44.net" IN { type master; file "pz/marty44"; };
zone "44.168.192.in-addr.arpa" { type master; file "pz/44.168.192"; };
www:# mkdir /var/named www:# mkdir /var/named/pzDie Datei mit den Root Nameservern wird mit Hilfe des dig Tools heruntergeladen:
www:# cd /var/named www:/var/named# dig @e.root-servers.net . ns > named.rootDie Datei kann auch von ftp://ftp.rs.internic.net/domain/named.root heruntergeladen werden, allerdings sollte man immer den Weg über das dig Tool nehmen.
Jetzt brauchen wir noch 4 Zonendateien unter /var/named/pz
/var/named/pz/0.0.127
$TTL 24h 0.0.127.in-addr.arpa. IN SOA localhost. marty.marty44.net. ( 2002062901 3h 1h 1w 1h ) IN NS w3.marty44.net. 1 IN PTR localhost./var/named/pz/44.168.192
$TTL 3h 44.168.192.in-addr.arpa. IN SOA w3.marty44.net. marty.marty44.net. ( 2002062901 3h 1h 1w 1h ) IN NS w3.marty44.net. 1 IN PTR w3.marty44.net. 2 IN PTR vdr.marty44.net. 3 IN PTR moehre.marty44.net. 4 IN PTR nc.marty44.net. 29 IN PTR o2.marty44.net. 44 IN PTR marty.marty44.net. 55 IN PTR indy.marty44.net. 254 IN PTR h254.marty44.net./var/named/pz/localhost
$TTL 24h localhost. IN SOA localhost. marty.marty44.net. ( 2002062901 3h 1h 1w 1h ) IN NS w3.marty44.net. localhost IN A 127.0.0.1/var/named/pz/marty44
$TTL 3h marty44.net. IN SOA w3.marty44.net. marty.marty44.net. ( 2002062901 3h 1h 1w 1h ) IN NS w3.marty44.net. w3 IN A 192.168.44.1 dns IN CNAME w3 martyserver IN CNAME w3 irc IN CNAME w3 gw IN CNAME w3 dhcpserver IN CNAME w3 vdr IN A 192.168.44.2 moehre IN A 192.168.44.3 nc IN A 192.168.44.4 o2 IN A 192.16.44.29 marty IN A 192.168.44.44 indy IN A 192.168.44.55 www IN A 81.88.34.44 h254 IN A 192.168.44.2543. Starten des Servers
4. Testen des Servers
Wenn der Server läuft, pingt man einfach eine Adresse an, wenn der Name aufgelöst wird zu einer IP, funktioniert er ;)
5. Start-Stop-Script
Wenn der DNS-Server beim Booten automatisch gestartet werden soll, legt man folgendes Script an:
/etc/init.d/bind
#!/bin/sh #Abschließend müssen noch die symbolischen Links gesetzt werden:
# Start and Stop bind DNS-Servercase "$1" in start) echo "Starting DNS-Server bind" /usr/local/sbin/named ;; stop) echo "Stopping DNS-Server bind" killall named ;; *) echo "Usage: /etc/init.d/bind {start|stop}" exit 1 ;; esac
exit 0
# cd /etc/rc0.d /etc/rc0.d# ln -s ../init.d/bind K21bind /etc/rc0.d# cd ../rc1.d /etc/rc1.d# ln -s ../init.d/bind K21bind /etc/rc1.d# cd ../rc2.d /etc/rc2.d# ln -s ../init.d/bind S19bind /etc/rc2.d# cd ../rc6.d /etc/rc6.d# ln -s ../init.d/bind K21bindDiese Seite stellt nur Basisinformationen zur Verfügung. Es gibt noch dutzende von anderen Einstellungen sowie Möglichkeiten (zum Beispiel dynamisches DNS mit DHCP), was man mit BIND so alles anstellen kann. Zu empfehlen ist das Buch "DNS und BIND" von Paul Albitz und Cricket Liu.
zurück zur Linux-Übersicht
Letzte Aktualisierung dieser Seite: 13. November 2006