Send a link

DNS

__ 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


Schließen
note 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

Diese rootserver Adressen ändern von Zeit zu Zeit und du solltest sie regelmässig anpassen.
Unter ftp://ftp.internic.net/domain/named.cache (external link) kann man sich diese Datei runterladen.
Ü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!

Link Beschreibung
DNS-HOWTO (external link) Sehr gutes Tutorial um einen DNS Server aufzusetzen
RedHat Manual: Bind Konfiguration (external link) Übersichtliche Beschreibung der wichtigsten Einstellungen
debianhowto.de: Bin9 Installation (external link) Ein gutes Howto um einen Bin9 Server schnell aufzusetzen
yolinux.com: Web server configuration tutorial (external link) Noch ein etwas älteres Tutorial für Bind 8/9


Diskutieren

Neuen Kommentar posten

Anti-Bot Prüf-Code: Zufälliges Bild
Neuen Kommentar posten
Schließen
note Hinweis
Your comment will have to be approved by the moderator before it is displayed.