# Bind

Bind ist der DNS-Server unter Linux. Hier nun die Basis-Einrichtung.

## Installation

Bind kann mit folgenden Befehlen installiert werden:

``` bash
sudo apt-get update
sudo apt-get install bind9
```

## Zone

Nach dem Bind installiert ist, kann man die erste Zone anlegen. Eine Zone besteht aus zwei Dateien. \<note warning\>Die Domainnamen MÜSSEN immer mit einem Punkt abgeschlossen werden!\</note\>

### Domainnamen

Die erste Datei beinhalte die Umwandlung von Domainnamen zu einer IP-Adresse. Am besten nutze man die Vorhandene Blanko-Datei.

``` bash
sudo cp /etc/bind/db.empty /etc/bind/db.holzfeind.ch
```

Im nächsten Schritt muss die Datei den eigenen Bedürfnissen angepasst werden, hier nun ein Beispiel:

``` bind
; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL    86400
@   IN  SOA htpc.holzfeind.ch. root.localhost. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
              86400 )   ; Negative Cache TTL
;
@   IN  NS  dns.holzfeind.ch.

htpc                            IN      A       172.16.10.5
dns                             IN      A       172.16.10.5
vm                              IN      A       172.16.10.6
fw                              IN      A       172.16.10.1
sw                              IN      A       172.16.10.7
```

### Revers

Als nächster Schritt wird die Revers-Datei erstllt, diese dient der Umwandlung von IP-Adressen in Domainnamen. Am besten nutze man die Vorhandene Blanko-Datei.

``` bash
sudo cp /etc/bind/db.empty /etc/bind/db.10.16.172
```

oder die zuvor erstellt Domainnamen-Datei

``` bash
sudo cp /etc/bin/db.holzfeind.ch /etc/bind/db.10.16.172
```

Auch hier müssen die Daten den eigenen Bedürfnissen angepasst werden. Hier nun ein entsprechendes Beispiel:

``` bind
; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL    86400
@   IN  SOA htpc.holzfeind.ch. root.localhost. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
              86400 )   ; Negative Cache TTL
;
@   IN  NS  dns.holzfeind.ch.

1       IN      PTR     fw.holzfeind.ch.
5       IN      PTR     dns.holzfeind.ch.
5       IN      PTR     htpc.holzfeind.ch.
6       IN      PTR     vm.holzfeind.ch.
7       IN      PTR     sw.holzfeind.ch.
```

### Abschluss

Zum Abschluss müssen die zwei Zonen-Dateien noch dem DNS-Server bekannt gemacht werden, hier für erweitert man die Datei `/etc/bind/named.conf.local` um folgende Einträge:

``` bind
zone "holzfeind.ch" {
    type master;
    file "/etc/bind/db.holzfeind.ch";
    };
zone "10.16.172.in-addr.arpa" {
    type master;
    file "/etc/bind/db.10.16.172";
    };
```

## DNS-Cache

Sobald der DNS-Server läuft, besteht auch die Möglichkeit diesen als DNS-Cache zu konfigurieren. Hier für wird folgendes Vorgehen empfohlen:\
1. DNS-Root-Server Informationen beziehen und speichern:

``` bash
dig @A.ROOT-SERVERS.NET > /etc/bind/db.root
```

2\. DNS-Root-Server-Eintrag erstellen (zum Teil auch schon vorhanden, `/etc/bind/named.conf.default-zones`).

``` bind
zone "." {
    type hint;
    file "/etc/bind/db.root";
};
```

3\. Update-Script erstellen (Pfad: `/etc/cron.weekly/`

``` bash
#! /bin/bash
#
# Aktualisierung der db.root
#

# Aktuelle Liste generieren
dig @A.ROOT-SERVERS.NET > /etc/bind/db.root

# Konfiguration Laden
/usr/sbin/service bind9 reload
```

4\. Script ausführbar machen.

``` bash
chmod +x /etc/cron.weekly/bind-root-update.sh
```

5\. Bind neustarten

``` bash
service bind9 restart
```

## Anfrage loggen

Um die Auflösung der Adressen zu loggen kann folgende Einstellung vorgenommen werden:

``` bash
rndc querylog
```

Die Daten werden anschliessen in die Datei `/var/log/syslog` oder `/var/log/message` geschrieben.