In diesem Tutorial werden wir einen Nameserver mit bind auf CentOS erstellen. Die Konfiguration halten wir dabei sehr flexibel, dass man diesen sowohl als DNS-Server fürs lokale Netzwerk zuhause, wie auch als „Webhosting-Nameserver“ gebrauchen kann.
Inhalt
Installation & Konfiguration
Zuerst wird wie immer die benötigte Software installiert:
yum install bind bind-utils |
[stextbox id=“note“ caption=“Hinweis zu Debian Linux“]Debian hat beim bind ein etwas anderes Namenschema; anstatt /etc/named, bzw. /var/named sind die Nameserver Konfigurationsdateien in /etc/bind und /var/bind zu finden.
– Es empfiehlt sich hier dies auf die Standardkonvention zu ändern, mittels folgender Zeile in /etc/default/bind9:
OPTIONS=“-u bind -c /etc/named/named.conf“ oder alternativ ein entsprechender symlink anzulgen.[/stextbox]
Nun wollen wir die Verzeichnisstruktur erstellen (und eine ggf. schon vorkonfigurierte entfernen):
mv -v /etc/named /etc/named.orig mkdir -pv /etc/namend/zones mkdir -pv /var/named/{data,slaves} mkdir -pv /var/log/named/ cd /etc/named |
Erstelle nun erst die Datei: /etc/named.conf und gibt folgendes ein:
################################################################################ # DNS Server Config for local domain ################################################################################ # ISP Nameservers # xx.x.17.60 # xx.x.24.162 # xx.x.17.61 # xx.x.24.158 options { version "Bind"; directory "/var/named/data"; #forwarders { xx.x.17.60; xx.x.24.162; xx.x.17.61; xx.x.24.158; }; #forward first; }; include "/etc/rndc.key"; controls { inet 127.0.0.1 port 953 allow { "127.0.0.1"; } keys { "rndckey"; }; }; logging { channel simple_log { file "/var/log/named/named.log" versions 3 size 5m; print-time yes; print-severity yes; print-category yes; }; category default { simple_log; }; }; include "/etc/named/zones.conf"; |
Erklärungen zur Konfiguration
- Options: Hier werden die Grundeinstellungen angegeben, etwa das Konfigurationsverzeichnis, oder den Port auf dem der DNS läuft
- forward first: Hier wird angegeben, dass zuerst die unter forwarders angegebenen externen DNS-Server abgefragt werden sollen; dies macht Sinn, da es die Ressourcen deines Servers schont und du so immer noch auf über die DNS-Server deines Providers gehen kannst, wenn du das möchtest.
- forwarders: Hier kannst du die IP-Adressen der DNS-Server eintragen, die du abfragen möchtest; das sind im Normalfall die DNS-Adressen deines Providers
- controls und include „/etc/rndc.key“;: Die beiden Sektionen controls und key definieren, dass der DNS-Server über ein Programm das ‚rndc‘ heisst ferngesteuert werden kann; da es ab BIND9, der neuesten Version des DNS-Servers nur noch mittels rndc möglich ist die Konfiguration neu zu laden, muss dies angegeben werden. Der Schlüssel, der in der Datei: include „/etc/rndc.key“; steht ist dabei wie ein Passwort, mit dem sich rndc bei BIND authentifizieren kann.
- zone: Hier sind die eigentlichen Zonen im DNS angegeben, was das ist wird später noch erklärt.
rndc Konfigurieren
Nun hast du BIND so konfiguriert, dass er sich über rndc fernstuern lässt, wenn rndc sich bei ihm mit dem obigen „Passwort“, oder key anmeldet. Nun müssen wir aber den selben Schlüssel aber erst erzeugen mit:
rndc-confgen -a |
Nun sollte eine Datei /etc/rndc.key vorhanden sein.
Jetzt muss dieser noch in der rndc.conf Datei eingetragen werden, um es zum laufen zu bringen.
Öffne die Datei: /etc/rndc.conf und gib darin folgendes ein:
################################################################################ # rndc configuration file # ################################################################################ include "/etc/rndc.key"; options { default-key "rndckey"; default-server 127.0.0.1; default-port 953; }; |
Root-Server angeben
Die „root-server“ sind einige in der Welt verteile DNS Server, die für den Reibungslosen Ablauf des DNS Systems sorgen; hier steht, welcher Domainame welche DNS-Einträge hat usw. Du musst nun die Liste dieser Server angeben, damit dein BIND weiss, wo es sich Informationen über die ganzen öffentlichen Domainnamen holen kann, die nicht lokal existieren.
Nun werden wir diese Datei mit den rootservern installieren:
cd /etc/named/zones/ wget ftp://ftp.internic.net/domain/named.cache mv -v named.cache root |
Obwohl diese rootserver Adressen eher selten ändern, solltest du sie von Zeit zu Zeit anpassen, wobei ein- bis zwei mal pro Jahr ausreichend ist.
Unter ftp://ftp.internic.net/domain/named.cache kann man sich diese Datei runter laden.
Über die Eingabe: dig e.root-servers.net . ns kannst du eine aktuelle Liste abrufen.
Zonefiles anlegen
Generiere nun folgende Dateien indem du vi /var/named/dateiname eingibst, den angegebenen Text einfügst und speicherst.
/etc/named/zones.conf
Hier stehen alle definitionen der „Zonen“ also der lokalen Domainnamen drin.
################################################################################ # Zones Configuration # ################################################################################ #========================== Local Zones ======================================= # Rootserver Zone zone "." IN { type hint; file "/etc/named/zones/root"; }; # be authoritative for the localhost- forward-, reverse- , and for the broadcast zone as per RFC 1912 zone "localhost" { type master; file "/etc/named/zones/local/localhost"; }; zone "127.in-addr.arpa" { type master; file "/etc/named/zones/local/127"; }; zone "0.in-addr.arpa" { type master; file "/etc/named/zones/local/0"; }; zone "255.in-addr.arpa" { type master; file "/etc/named/zones/local/255"; }; #========================== Reverse Zones ===================================== zone "1.1.10.in-addr.arpa" IN { type master; file "/etc/named/zones/10.1.1"; }; #========================== Forward Zones ===================================== zone "home.lan" IN { type master; file "/etc/named/zones/home.lan"; allow-query { any; }; }; |
Erklärungen zur Zonen-Konfiguration
Die sog. „root-zone“ haben wir oben schon behandelt, darunter kommen noch einige „standard-zonen“ fürs lokale Netz, die aber nicht weiter interessant sind.
Interessant sind dagegen:
- Reverse Zone
Dies gibt, wie der Name schon sagt eigentlich die Daten für eine „umgelehrte“ DNS-Anfrage an, d.h. wenn du nicht wie normal wissen willst „welche IP-Adresse der Host xyz hat“, sondern, „welchen DNS-Namen die IP xxx.xxx.xxx.xxx hat“. – Die reverse Abfragen sind zwar nicht unbedingt notwendig, es kann aber manchmal ganz nützlich sein, wenn beim DNS „vorwärts und rückwaärts“ aufgelöst werden kann.
- Forward Zone
Dies ist jetzt die normale Zone, hier gibst du ein file an, dass die Angaben enthällt welcher Namen zu welcher IP-Adresse gehört.
Singleline vs. Multiline config
Hier noch ein kleines Wort zum Aufbau der Direktiven:
Du könntest nun z.B. die Direktive zur lokalen Zone (home.lan) entweder in mehrere Zeilen schreiben:
zone "home.lan" IN { type master; file "/etc/named/zones/home.lan"; allow-query { any; }; }; |
oder alles in einer einzigen Zeile:
zone "home.lan" IN { type master; file "/etc/named/zones/home.lan"; allow-query { any; }; }; |
Was für dich schöner ist, sei dir überlassen.
Als Entscheidungsgrundlage kann man z.B: sagen:
- Wenn du nur einen Nameserver für dein lokales Netzwerk machst, der auch nur eine Zone (home.lan) enthält, wirst du dich wahrscheinlich für die Mehrzeilige Konfiguration entscheiden.
- Wenn du stattdessen aber einen Nameserver fürs Webhosting machst, wo du schnell mal ein paar Dutzend- oder gar hunderte solcher Zonen hast, wird die Einzeilige Konfiguration um einiges übersichtlicher.
Erstellen wir aber nun das erste Zone-File:
/etc/named/zones/home.lan
Diese Datei sorgt dafür, dass Hostnamen (z.B. pc01) in ihre IP-Adressen umgewandelt werden (z.B. 10.1.1.10).
; BIND zone for home.lan $TTL 86400 @ IN SOA dns.home.lan. hostmaster.home.lan. ( 2010121601 ; serial number YYMMDDNN 86400 ; Refresh 7200 ; Retry 3600000 ; Expire 3600 ; Min TTL ) IN NS dns.home.lan. IN A 10.1.1.1 gateway IN A 10.1.1.1 dns IN A 10.1.1.3 pc01 IN A 10.1.1.10 pc02 IN A 10.1.1.20 pc03 IN A 10.1.1.30 $ORIGIN home.lan. |
Erklärungen zum Zonefile:
- Die TTL am Anfang gibt die Zeit an, wie lange die DNS Einträge von anderen Nameservern gecached werden darf.
Dieser Wert sollte vor allen bei Hosting-Servern nicht allzuhoch gewählt werden, da man ansonsten sehr lange warten muss, bis Änderungen auch bei den anderen Providern gültig werden. 24 Stunden ist hier ein guter Wert, maximal sollte es jedoch eine Woche sein.
Bei Home-Servern, ist dieser Wert relativ egal, da keine anderen Nameserver mit diesem kommunizieren werden.
- Das @ am Anfang steht Stellvertretend für den Namen der Zone, also in diesem Fall: home.lan
- Die Seriennummer ist dann besonders wichtig, wenn man den Nameserver noch mit einem slave-server sychronisiert, dann muss dieser Wert nämlich bei jeder Änderungen um 1 erhöht werden. Deshalb hat sich die Notation: YY (Jahr) MM (Monat) DD (Tag) und NN (Nummer der Änderung am gleichen Tag) bewährt.
- Dann kommen die eigentlichen DNS-EInträge
- Das $ORIGIN zum Schluss kann im prinzip weg gelassen werden, da bind dies automatisch macht; es bedeutet, dass hinter jedem hostnamen den Namen der Zone (home.lan) eingefügt wird. Das heisst, der Nameserver macht aus dem Eintrag:
pc01 IN A 10.1.1.10 |
folgenden:
pc01.home.lan IN A 10.1.1.10 |
Letzteres ist auch die vollständige Notation. Du kannst natürlich aber auch beide verweden.
Und nun noch die Reverse-Zone im gleichen Muster:
/etc/named/zones/10.1.1
Diese Datei macht das Gegenteil der obigen; sie wandelt IP-Adressen in Hostnamen um.
; BIND reverse zone for home.lan $ORIGIN . $TTL 86400 ; 1 day 1.1.10.in-addr.arpa IN SOA dns.home.lan. root.dns.home.lan. ( 2006081801 ; serial 28800 ; refresh (8 hours) 14400 ; retry (4 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 86400 ; minimum (1 day) ) NS dns.home.lan. 1 IN PTR gateway.home.varco.ch. 3 IN PTR fileserver.home.varco.ch. 10 IN PTR pc01.home.lan. 20 IN PTR pc02.home.lan. 30 IN PTR pc03.home.lan. $ORIGIN 1.1.10.in-addr.arpa. |
Es ist dabei anzumerken, dass hier die IP-Adressen rückwärts geschrieben werden müssen; 10.1.1.1 wird also zu: 1.1.1.10.
Auch hier müsstest du ohne das $ORIGIN anstatt einfach nur:
10 IN PTR pc01.home.lan. |
immer:
10.1.1.10.in-addr.arpa. IN PTR pc01.home.lan. |
schreiben.
Nun erstellen wir noch die Standard loaklen Zonefiles im Verzecihnis local (diese brauchen dich später nicht mehr zu kümmern):
/etc/named/local/localhost
Dies ist die Zone für den lokalen Rechner, also den Nameserver selber.
; BIND zone for localhost $TTL 86400 $ORIGIN localhost. @ 1D IN SOA @ root ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum 1D IN NS @ 1D IN A 127.0.0.1 |
/etc/named/local/127
Und noch die reverse-zone für den localhost
; BIND reverse zone for localhost $TTL 86400 @ IN SOA localhost. root.localhost. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost. |
Konfiguration Testen
Nun hast du alles fertig konfiguriert und kannst den Nameserver neu laden:
/etc/init.d/named reload |
Da Bind sehr anfällig auf Konfigurationsfehler ist, solltest du noch die logfiles überprüfen, ob irgendwo Fehlermeldungen kommen:
(tail -30 /var/log/messages; tail -30 /var/log/syslog) | less |
Ist alles ok, kannst du ein nslookup machen:
nslookup server localhost |
Nun kannst du z.B. „pc01.home.lan“ eingeben, wenn dann sowas wie:
Server: localhost Address: 127.0.0.1#53 Name: pc01.home.varco.ch Address: 10.1.1.10 |
Funktioniert die lokale Konfiguration. Nun noch einen Server „ausserhalb“ des netzwerks testen, z.B. „heise.de“ sollte bringen:
Server: localhost Address: 127.0.0.1#53 Non-authoritative answer: Name: heise.de Address: 193.99.144.80 |
Klappt das, hast du die Konfiguration erfolgreich abgeschlossen und du kannst nslookup mit „exit“ verlassen.
Du hast nun einen funktionierenden Nameserver für dein Netzwerk!
Related Links
|| Link | Beschreibung
[http://www.tldp.org/HOWTO/DNS-HOWTO-1.html|DNS-HOWTO] | Sehr gutes Tutorial um einen DNS Server aufzusetzen
[http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/s1-bind-namedconf.html|RedHat Manual: Bind Konfiguration] | Übersichtliche Beschreibung der wichtigsten Einstellungen
[http://www.debianhowto.de/doku.php/de:howtos:woody:bind|debianhowto.de: Bin9 Installation] | Ein gutes Howto um einen Bin9 Server schnell aufzusetzen
[http://yolinux.com/TUTORIALS/LinuxTutorialWebSiteConfig.html#DNS|yolinux.com: Web server configuration tutorial] | Noch ein etwas älteres Tutorial für Bind 8/9
||