Namesverwaltung mit DNS

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.

Installation & Konfiguration

Zuerst wird wie immer die benötigte Software installiert:

yum install bind bind-utils
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.

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
||

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.