Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi2:bind

Dies ist eine alte Version des Dokuments!


Vorraussetzung: bind als caching only nameserver

Vorbereiten

CentOS 5

Paket caching-nameserver deinstallieren

Paket system-config-bind installieren Mit

system-config-bind

Default-Konfigurationsdateien erzeugen

CentOS 6

/etc/named.conf :

options {

        // listen-on port 53 { 127.0.0.1; };
        // listen-on-v6 port 53 { ::1; };
        // allow-query     { localhost; };

        dnssec-enable no;
        dnssec-validation no;
        #dnssec-lookaside auto;

1)

eigene Zonen in bind verwalten

Vorwärts-Zone

Zonendatei

Unter Debian und CentOS muß man ein entsprechendes Verzeichnis master für die Zonendateien noch anlegen 2):

Debian :

mkdir /var/cache/bind/master

CentOS 5 :

mkdir /var/named/master

/var/named/master/linuxhotel.de : ( CentOS 5 )

/var/lib/named/master/linuxhotel.de : ( SuSE 10.0)

/var/cache/bind/master/linuxhotel.de : ( Debian 3.1 )

$TTL 2h
linuxhotel.de. IN SOA notebook20.linuxhotel.de. root.notebook20.linuxhotel.de. (
        1             ; Seriennummer
        3h            ; refresh
        1h            ; retry
        1w            ; expire
        1h            ; negative ttl
)

; Nameserver:
linuxhotel.de.                  IN NS notebook20.linuxhotel.de.

; kanonische IP-Adressen:
notebook22.linuxhotel.de.       IN A 192.168.1.222
notebook05.linuxhotel.de.       IN A 192.168.1.205
notebook20.linuxhotel.de.       IN A 192.168.1.220
notebook06.linuxhotel.de.       IN A 192.168.1.206
notebook09.linuxhotel.de.       IN A 192.168.1.209

; Aliase:
peter.linuxhotel.de.            IN CNAME notebook09.linuxhotel.de.
lothar.linuxhotel.de.           IN CNAME notebook05.linuxhotel.de.
heribert.linuxhotel.de.         IN CNAME notebook06.linuxhotel.de.
bjoern.linuxhotel.de.           IN CNAME notebook20.linuxhotel.de.
admin.linuxhotel.de.            IN CNAME notebook22.linuxhotel.de.

Zonendatei überprüfen

CentOS 5
named-checkzone linuxhotel.de. /var/named/master/linuxhotel.de
SuSE 10.0
named-checkzone linuxhotel.de. /var/lib/named/master/linuxhotel.de
Debian 3.1
named-checkzone linuxhotel.de. /var/cache/bind/master/linuxhotel.de

Zonendatei (kurze Schreibweise)

Das Format der Zonendatei 3) läßt es auch zu, diese Datei sehr viel kürzer zu schreiben:

$TTL 2h
@ IN SOA notebook20 root.notebook20 (
        1             ; Seriennummer
        3h            ; refresh
        1h            ; retry
        1w            ; expire
        1h            ; negative ttl
)

; Nameserver:
                 IN NS notebook20

; kanonische IP-Adressen:
notebook22       IN A 192.168.1.222
notebook05       IN A 192.168.1.205
notebook20       IN A 192.168.1.220
notebook06       IN A 192.168.1.206
notebook09       IN A 192.168.1.209

; Aliase:
peter            IN CNAME notebook09
lothar           IN CNAME notebook05
heribert         IN CNAME notebook06
bjoern           IN CNAME notebook20
admin            IN CNAME notebook22

Bei jeder Änderung der Zonendatei sollte die Seriennummer hochgezählt werden.

Zonendatei überprüfen

CentOS 5
named-checkzone -D linuxhotel.de. /var/named/master/linuxhotel.de
SuSE 10.0
named-checkzone -D linuxhotel.de. /var/lib/named/master/linuxhotel.de
Debian 3.1
named-checkzone -D linuxhotel.de. /var/cache/bind/master/linuxhotel.de

Konfigurationsdatei

/etc/named.conf : ( SuSE 10.2 )

/etc/named.conf : ( CentOS )

/etc/bind/named.conf.local : ( Debian 5.0 )

  zone "linuxhotel.de" {
        type master;
        file "master/linuxhotel.de";
  };

Konfigdatei und eingetragene Zonen überprüfen:

named-checkconf -z

bind die Änderung mitteilen:

SuSE 11.1 :

/etc/init.d/named reload

testen

host peter.linuxhotel.de 127.0.0.1
dig peter.linuxhotel.de @127.0.0.1 any

Rückwärts-Zone

Zonendatei

/var/named/master/1.168.192.in-addr.arpa: ( CentOS )

/var/lib/named/master/1.168.192.in-addr.arpa: ( SuSE 10.0 )

/var/cache/bind/master/1.168.192.in-addr.arpa: ( Debian 3.1 )

$TTL 2h
1.168.192.in-addr.arpa. IN SOA notebook20.linuxhotel.de. root.notebook20.linuxhotel.de. (
    2005082401    ; serial
    3h            ; refresh
    1h            ; retry
    1w            ; expire
    1h            ; negative ttl
)  
; Nameserver
1.168.192.in-addr.arpa. IN NS notebook20.linuxhotel.de.

; kanonische IP-Adressen
205.1.168.192.in-addr.arpa. IN PTR notebook05.linuxhotel.de.
220.1.168.192.in-addr.arpa. IN PTR notebook20.linuxhotel.de.
206.1.168.192.in-addr.arpa. IN PTR notebook06.linuxhotel.de.
209.1.168.192.in-addr.arpa. IN PTR notebook09.linuxhotel.de.
222.1.168.192.in-addr.arpa. IN PTR notebook22.linuxhotel.de.

testen

named-checkzone linuxhotel.de /var/lib/named/master/linuxhotel.de
named-checkzone 1.168.192.in-addr.arpa. /var/lib/named/master/1.168.192.in-addr.arpa

Konfigurationsdatei

/etc/named.conf : ( SuSE 10.2 )

/etc/named.conf : ( CentOS )

/etc/bind/named.conf.local : ( Debian 3.1 )

zone "1.168.192.in-addr.arpa" {
      type master;
      file "master/1.168.192.in-addr.arpa";
};

testen

named-checkconf

testen

SuSE 11.1 :

/etc/init.d/named reload

host 192.168.1.222 127.0.0.1
dig -x 192.168.1.222 @127.0.0.1

Interne Anfragen abfangen

Todo: leere Zonendateien für private IP-Adressen anlegen

Debian 5.0

Bei debian 5.0 gibt es dazu /etc/bind/zones.rfc1918, /etc/bind/db.empty und einen Eintrag in /etc/bind/named.conf.local:

//include "/etc/bind/zones.rfc1918";

Muß man je nach eigenen verwendeten privaten Netzen anpassen.

openSuSE 11.4

( noch nicht fertig )

/etc/named.d/zones.rfc1918.conf :

zone "10.in-addr.arpa"      { type master; file "/var/lib/named/db.empty"; };
 
zone "16.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "17.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "18.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "19.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "20.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "21.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "22.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "23.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "24.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "25.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "26.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "27.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "28.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "29.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "30.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };
zone "31.172.in-addr.arpa"  { type master; file "/var/lib/named/db.empty"; };

zone "168.192.in-addr.arpa" { type master; file "/var/lib/named/db.empty"; };

/var/lib/named/db.empty :

; 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     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      localhost.

Zonendateien mit nsupdate bearbeiten

bind konfigurieren

/etc/named.conf : ( SuSE, CentOS )

/etc/bind/named.conf.local : ( Debian )

acl "nsupdate" {
  127.0.0.1;
};

zone "linuxhotel.de" {
        type master;
        allow-update { "nsupdate"; };
        file "master/linuxhotel.de";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        allow-update { "nsupdate"; };
        file "master/1.168.192.in-addr.arpa";
};

bind Konfigurationsdatei prüfen

named-checkconf

bind Schreibzugriff auf Master-Zonendateien geben

Debian:

chown -R bind /var/cache/bind/master

Testen: Eintrag hinzufügen

nsupdate <<EOF
server localhost

update add notebook23.linuxhotel.de 43200 IN A 192.168.1.223

update add 223.1.168.192.in-addr.arpa 43200 IN PTR notebook23.linuxhotel.de
EOF

Trotz nsupdate Zonen mit Editor bearbeiten

rndc freeze linuxhotel.de
vim linuxhotel.de
rndc reload linuxhotel.de
rndc thaw linuxhotel.de

Hilfreich ist vielleicht:

~/.bashrc :

function zvi {
  cd /var/cache/bind/master
  rndc freeze $1
  vim $1
  rndc reload $1
  rndc thaw $1
  cd -
}

bind als slave einrichten

Erst müssen die Slave-Nameserver in der Zonendatei des Masters eingetragen werden:

linuxhotel.de. IN NS notebook04.linuxhotel.de.

Bei SuSE muß noch der Eintrag

notify yes;

in der Datei /etc/named.conf eingetragen werden, oder die Zeile ganz entfernt oder auskommentiert werden.

testen: funktioniert der Master

openSuSE 12.3
cd /var/lib/named/master
named-checkzone -i local -D linuxhotel.de linuxhotel.de
rndc reload linuxhotel.de
tail /var/log/messages
dig @127.0.0.1 linuxhotel.de NS

Slave konfigurieren

Vorraussetzung: Master funktioniert

dig @<IP-des-Masters> linuxhotel.de AXFR

Ausgabe muss mindestens 2 NS Records enthalten:

  1. den eigenen Rechner
  2. den Master

/etc/named.conf : ( CentOS 5.3 )

zone "linuxhotel.de" {
        type slave;
        file "slaves/linuxhotel.de";
        masters { 192.168.1.220; };
};
zone "1.168.192.in-addr.arpa" {
        type slave;
        file "slaves/1.168.192.in-addr.arpa";
        masters { 192.168.1.220; };
};

/etc/named.conf : ( SuSE 10.0 )

/etc/bind/named.conf.local : ( Debian )

zone "linuxhotel.de" {
        type slave;
        file "slave/linuxhotel.de";
        masters { 192.168.1.220; };
};
zone "1.168.192.in-addr.arpa" {
        type slave;
        file "slave/1.168.192.in-addr.arpa";
        masters { 192.168.1.220; };
};

bind Schreibzugriff auf Slave-Zonendateien geben

Debian:

mkdir /var/cache/bind/slave
chown bind /var/cache/bind/slave

testen: funktioniert der Slave?

OpenSuSE 12.3

rcnamed restart
tail /var/log/messages
ls /var/lib/named/slave/{linuxhotel.de,1.168.192.in-addr.arpa}
dig @127.0.0.1 linuxhotel.de AXFR

Zonentransfer signieren

Schlüsselpaar erstellen: 4)

cd
dnssec-keygen -a hmac-md5 -b 512 -n HOST zonentransfer

Dadurch werden zwei Dateien erstellt:

ls Kzonentransfer.+157+*

Die darin angegebenen Schlüssel und Verschlüsselungsverfahren müssen in die Konfigurationsdateien von master und slave eingetragen werden.

master

/etc/named.conf : ( CentOS 5, Debian 5.0 )

key "zonentransfer" {
        algorithm hmac-md5;
        secret "Ur7+TU8m24L9q24AWgNd4g==";
};

zone "linuxhotel.de" {
        type master;
        file "master/linuxhotel.de";
        allow-transfer { key zonentransfer; };
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "master/1.168.192.in-addr.arpa";
        allow-transfer { key zonentransfer; };
};

testen

Todo: Achtung: unsicher da so der Schlüssen in ps ax Ausgabe und in der history landet. Mit -k wäre sicherer

dig @192.168.53.103 signed03.dnslab.org AXFR -y "zonentransfer:Ur7+TU8m24L9q24AWgNd4g=="

slave

/etc/named.conf : ( CentOS 5, Debian 5.0 )

key "zonentransfer" {
      algorithm hmac-md5;
      secret "Ur7+TU8m24L9q24AWgNd4g==";
};

server 192.168.1.220 {
      keys { zonentransfer; };
};

zone "linuxhotel.de" {
        type slave;
        file "slaves/linuxhotel.de";
        masters { 192.168.1.220; };
};

zone "1.168.192.in-addr.arpa" {
        type slave;
        file "slaves/1.168.192.in-addr.arpa";
        masters { 192.168.1.220; };
};

Subdomains delegieren

Übergeordneter DNS

/etc/named.conf.local : ( Debian 5.0 )

/etc/named.conf : ( CentOS 5 )

zone "linuxhotel.de" IN {
        type master;
        file "master/linuxhotel.de";
        forwarders      { };
};

/var/named/master : ( CentOS 5 )

sub05.linuxhotel.de.        IN NS ns1.sub05.linuxhotel.de.
ns1.sub05.linuxhotel.de.    IN A 192.168.150.110
named-checkzone -i local -D linuxhotel.de /var/named/master/linuxhotel.de

Subdomain DNS

Wie oben, unter „eigene Zonen in bind verwalten“

Bind absichern

rekursive Abfragen verbieten

/etc/bind/named.conf.options ( Debian )

/etc/bind/named.conf ( SuSE )

acl friendly {
  192.168.1.0/24;          // 
};

options {
  allow-recursion { friendly; };
};

5)

Zonentransfer verbieten

/etc/bind/named.conf.options ( Debian )

/etc/bind/named.conf ( SuSE )

acl internal {
  127.0.0.1/32;           // localhost
};

acl friendly {
  internal;
  192.168.1.204;          // slave DNS
};

options {
  allow-transfer { friendly; };
};

Oder, alternativ, nur für eine Zone:

/etc/bind/named.conf.local ( Debian )

/etc/bind/named.conf ( SuSE )

zone "linuxhotel.de" {
    type master;
    file "master/linuxhotel.de";
    allow-transfer { friendly; };
};

IPv6 ausschalten

/etc/bind/named.options : ( Debian 4.0 )

options {

        listen-on-v6 { none; };
};

bind in chroot

  • Bei SuSE ist das automatisch so,
  • bei RedHat 6 gibt es ein Paket bind-chroot,
  • bei debian sarge muß man noch etwas Hand anlegen:

/etc/default/bind9:

CHROOT="/var/lib/bind"
OPTIONS="-u bind -t $CHROOT"
 
test -d $CHROOT/var/run        || mkdir -p $CHROOT/var/run
test -d $CHROOT/var/run/bind   || mv /var/run/bind $CHROOT/var/run
test -e /var/run/bind          || ln -s $CHROOT/var/run/bind /var/run/bind
 
test -d $CHROOT/var/cache      || mkdir -p $CHROOT/var/cache
test -d $CHROOT/var/cache/bind || mv /var/cache/bind $CHROOT/var/cache
test -e /var/cache/bind        || ln -s $CHROOT/var/cache/bind /var/cache/bind
 
test -d $CHROOT/dev            || mkdir -p $CHROOT/dev
test -c $CHROOT/dev/null       || mknod $CHROOT/dev/null c 1 3
test -c $CHROOT/dev/random     || mknod $CHROOT/dev/random c 1 8
chmod 666 $CHROOT/dev/random $CHROOT/dev/null
 
test -d $CHROOT/etc            || mkdir -p $CHROOT/etc
test -d $CHROOT/etc/bind       && rm -r $CHROOT/etc/bind
cp -a /etc/bind $CHROOT/etc

Ab Debian lenny reicht:

/etc/default/bind9 :

OPTIONS="-u bind -t /var/lib/named"

Beim nächsten restart läuft bind in einer chroot-Umgebung. Überprüfen: 6) /etc/init.d/bind9 restart

ls /proc/`pgrep named`/root

Zonendatei für Subnetz per Skript erzeugen

#!/bin/bash
NAMESERVER=$(hostname -f)
SUBNET=192.168.1
 
cat <<HEAD
\$TTL 2h
@ IN SOA $NAMESERVER. root.$NAMESERVER. (
        $(date '+%Y%m%d')01             ; Seriennummer
        3h            ; refresh
        1h            ; retry
        1w            ; expire
        1h            ; negative ttl
)
 
  IN NS $NAMESERVER.
 
HEAD
 
for ip in $(seq 1 254)
do
  getent hosts $SUBNET.$ip | ( read ip name && echo -e "$name.\tIN\tA\t$ip" | expand -t '34 37 43 ' )
done

Fehlersuche

dnstop

querylogging

todo: nicht getestet

Achtung: macht bind sehr langsam

logging {
  channel query_log {
    file "/var/named/query.log" versions 10 size 50M;
    severity debug;
    print-time yes;
    enable querylogging
  };
};
rndc querylog
rndc status | grep "query logging"
tail /var/log/daemonlog

Rekursive Anfrage

dig +trace www.wupperrafting.de.

http://www.zonecut.net/dns/

Dokus & Links

1)
mehr zu allow-query weiter unten im Kapitel „Bind absichern“ und natürlich unter
man named.conf
2)
oder man legt die Zonendateien direkt in /var/cache/bind bzw. /var/named ab
4)
Todo: eigentlich sollte das immer mit -n HOST funktionieren. Aber ich hatte Situationen, wo ich
dnssec-keygen -a hmac-md5 -b 128 -n ZONE zonentransfer
benutzt habe
5)
oder, wenn man einen rein rekursiven, also einen nicht autoritativen, Nameserver ohne eigene Zonendateien betreibt sogar:
options {
  allow-query { friendly; };
};
6)
Anders als in manchen HowTos beschrieben ist es nicht notwendig /dev/log ins chroot zu legen und den Syslog anzupassen. named macht erst einen connect mit /dev/log und erst danach chroot.
lpi2/bind.1377686018.txt.gz · Zuletzt geändert: 2014/02/14 14:48 (Externe Bearbeitung)