BIND

Aus wiki.archlinux.de
(Weitergeleitet von Bind)

Hier wird beschrieben, wie ein DNS (Domain Name System) Server so installiert wird, das er in einem Netzwerk Hostnames in IP-Adressen auflösen kann (und umgekehrt). Anfragen, die dieser DNS Server nicht beantworten kann sollen an einen anderen DNS Server weitergeleitet werden (z.B. an den im Heimrouter oder an einen vom ISP)

Situation des Beispielnetzwerkes

  • 192.168.1.0/24 ist das Subnetz
  • 192.168.1.20 ist der Nameserver auf dem Bind eingerichtet werden soll (Hostname namesrv)
  • 192.168.1.1 HostA
  • 192.168.1.2 HostB
  • 192.168.1.3 HostC
  • 192.168.1.4 HostD
  • HostD hat einen Webserver, der unter www.home erreichbar sein soll
  • Die Interne Domain lautet home

Installation

BIND ist als bind in extra verfügbar, und kann von dort mittels Pacman installiert werden.

# BIND an sich
pacman -S bind

# Dieses Paket enthält dig, host, nslookup, usw.
pacman -S bind-tools

Konfiguration

Die Hauptkonfigurationsdatei liegt unter /etc/named.conf, dort ist auch schon ein mögliche Konfiguration zu sehen.

  //
  // /etc/named.conf
  //
  options {
     directory "/etc/namedb"; //in var liegt das nicht so gut wegen Backup
     forwarders { [IP von anderem DNS Server]; [IP von anderem DNS Server]; };
     forward first; //Macht sinn, wenn die meisten Anfragen sowieso nicht selber beantwortet werden können
     listen-on { 127.0.0.1; 192.168.1.20; };
     pid-file "/var/run/named/named.pid";
     datasize default;
  };
  //Zonen
  //Forwärtsauflösen (Forward) (localhost -> 127.0.0.1)
  zone "localhost" IN {
     type master;
     file "localhost.zone";
     allow-transfer { any; };
  };
  //Rückwärtsauflösung (Reverse) (127.0.0.1 -> localhost)
  // 0.0.127 stammt vom Netzwerk 127.0.0.0
  zone "0.0.127.in-addr.arpa" IN {
     type master;
     file "127.0.0.zone";
     allow-transfer { any; };
  };
  zone "." IN {
     type hint;
     file "root.hint";
  };
  //Forwärts auflösen
  zone "home" {
     type master;
     file "home.zone";
  };
  //Rückwärts auflösen, das hier verwendete Netzwerk ist 192.168.1.0/24 
  //bei 172.16.0.0/16 wäre die Zone 16.172.in-addr.arpa
  zone "1.168.192.in-addr.arpa" {
     type master;
     file "1.168.192.in-addr.arpa.zone";
  };
  //logging aus dem Beispiel übernommen
  logging {
     channel xfer-log {
        file "/var/log/named.log";
        print-category yes;
        print-severity yes;
        print-time yes;
        severity info;
     };
     category xfer-in { xfer-log; };
     category xfer-out { xfer-log; };
     category notify { xfer-log; };
  };

Konfiguration der Zonen

  # mkdir /etc/namedb
  # cp /var/named/* /etc/namedb
  # rm -r /var/named #den braucht man jetzt nicht mehr

Damit ist die Zone für localhost schon fertig. Jetzt kommt die Zone für das Netzwerk

  $TTL    3600 ; Gueltigkeitsdauer (Sekunden) einer DNS Abfrage vom Client
  @       IN      SOA     namesrv.home. root.namesrv.home.  (
     20101014    ; Serial (im Format JJJJMMTT)
     3600        ; Refresh
     900         ; Retry
     3600000     ; Expire
     3600 )      ; Minimum
  ; Die Punkte am Ende des vollen Hostnames sind wichtig
  ; root.namesrv.home ist der Ansprechpartner für die Zone (root@namesrv.home)
  
  NS namesrv.home. ; Name der Nameservers. Immer die Punkte am Ende beachten
  namesrv A     192.168.1.20
  HostA   A     192.168.1.1
  HostB   A     192.168.1.2
  HostC   A     192.168.1.3
  HostD   A     192.168.1.4
  www     CNAME HostA

A Steht für eine Hosteintrag, CNAME ist ein Alias auf einen Canonicalname, also auf einen Hosteintrag. Es kann theoretisch auch ein Hostname auf mehrere IP Adressen zeigen. Das macht z.B. bei Laptos Sinn, die über Kabel und WLAN verbunden sind und die Benutzer das auch gerne mal wechseln.

  $TTL    3600 ;Gueltigkeitsdauer einer DNS Anfrage vom Client (in Sekunden)
  @       IN      SOA     namesrv.home. root.namesrv.home.  (
                               20101014 ; Serial (im Format JJJJMMTT)
                               3600     ; Refresh
                               900      ; Retry
                               3600000  ; Expire
                               3600 )   ; Minimum
       NS      namesrv.home. ; Name der Nameservers. Immer die Punkte am Ende beachten
  1   PTR HostA.home.
  2   PTR HostB.home.
  3   PTR HostC.home.
  4   PTR HostD.home.
  20  PTR namesrv.home.

In dieser Datei werden Pointer (PTR) hinterlegt, die vom Hostanteil der IP-Adresse auf einen Namen zeigen. Damit kann man dann aus IP Adressen wieder an die Name kommen. Bei Class B hat der Hostanteil dann einen Punkt, z.B. 1.2 von 172.16.1.2 (Das könnte bitte noch jemand bestätigen, dass das tatsächlich in der Reihenfolge muss)

Named Autostart

Dazu wird in der /etc/rc.conf named in das DEAMON Array eingetragen

  DAEMONS=(... named ...)

Named starten

  # /etc/rc.d/named start

Client-konfiguration

Nameserver dem System bekanntmachen, per DHCP muss im DHCP Server die IP Adresse des Nameservers (hier 192.168.1.20) eingetragen werden und eine Domain (hier home) manuell geht das über die /etc/resolv.conf

  domain home
  nameserver 192.168.1.20

Test

Forward Lookup

  # nslookup HostA
  Server:	192.168.1.20
  Address:	192.168.1.20#53
  
  Name:	namesrv.home
  Address: 192.168.1.1

Reverse Lookup

 # nslookup 192.168.1.20
  Server:	192.168.1.20
  Address:	192.168.1.20#53
  
  1.1.168.192.in-addr.arpa	name = HostA.home.

Jetzt noch den Alias überprüfen

  # nslookup www.home
  Server:	192.168.1.20
  Address:	192.168.1.20#53
  
  www.home	canonical name = HostA.home.
  Name:	HostA.home
  Address: 192.168.1.1