Bind9 DNS-Server

Aus Synology Wiki
Wechseln zu: Navigation, Suche

Hinweis

Diese Anleitung beruht auf der Beschreibung des Forenmitglieds Flutsch. Die Diskussion zum Thema kann im Forum verfolgt werden

Einleitung

Was soll erreicht werden?

Die Diskstation soll ein DNS-Server werden, der eine (oder mehrere) lokale Zonen verwaltet, um die Rechner im LAN mit Namen ansprechen zu können und Anfragen von Webdomains sollen an den Router weitergeleitet werden. Es soll also möglich sein, sowohl lokale als auch Internetdomains aufzulösen.

Ein DNS-Server wird im Paket-Zentrum ab DSM 4.2 auch angeboten.

Voraussetzungen

  • Zugriff auf das NAS per Telnet muss aktiviert sein
  • IPKG muss installiert sein

Vorgehensweise

Installation

Zunächst muss das notwendige Paket "bind" auf der Kommandozeile installiert werden:

ipkg install bind

Steuerung

Nach der Installation muss man die Datei /opt/etc/named/named.conf erstellen. Ist diese Konfigurationsdatei angelegt, kann man den Server starten:

/opt/etc/init.d/S09named start

Weitere Optionen sind:

/opt/etc/init.d/S09named start
/opt/etc/init.d/S09named stop
/opt/etc/init.d/S09named reload
/opt/etc/init.d/S09named status

Konfiguration

Die Konfiguration von bind geschieht prinzipiell in der named.conf Datei, welche standardmäßig unter /opt/etc/named/ zu finden ist. Aus Gründen der Übersichtlichkeit sollte die Konfiguration jedoch nicht völlig in der named.conf passieren. Ich empfehle eine Konfiguration in zwei Dateien. Die named.conf enthält sämtliche globalen Einstellungen und Zonen. Im gleichen Verzeichnis legt man noch eine named.conf.local an, welche die lokalen Zonen enthält.

Neben der Konfiguration in den besagten zwei Dateien benötigt man noch Zonendateien für jede, der in der Konfiguration angelegten Zonen. Diese Zonendateien enthalten sämtliche Einstellungen und Records der betreffenden Zone. Des weiteren benötigt man noch eine rndc.conf und eine rndc.key Datei. Diese beiden Dateien enthalten einen Schlüssel, mit welchem man mit dem bind-Server kommunizieren kann. Die Kommunikation mit Bind erfolgt gesichert über das Loopback-Interface (127.0.0.1) auf Port 953. Das Verzeichnis /opt/etc/named/ und alle darin enthaltenen Dateien gehören zur Gruppe root und speziell dem User root. Die Dateien haben die Rechte 744 - das Verzeichnis selbst hat volle Rechte (777). Im folgenden Abschnitt soll eine Beispielkonfiguration für das oben beschriebene Szenario angegeben und dokumentiert werden. Dieses Dokument erhebt nicht den Anspruch die Bind-Dokumentation oder Fachbücher zu ersetzen. Für weitere Informationen zu bind sind die eben genannten Quellen die erste Wahl.

Konfigurationsdateien

named.conf

# /opt/etc/named/named.conf

# allow requests from these subnets
acl corpnets { 192.168.0.0/24; 127.0.0.1/32; };

options {

	directory "/opt/etc/named";
	allow-query { corpnets; };
	
	auth-nxdomain no;
	query-source address * port 53;
	//listen-on-v6 { any; };
	
	forward first;	
	forwarders {
		192.168.0.2;
	};
};

// prime the server with knowledge of the root servers
zone "." {
	type hint;
	file "root.db";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
	type master;
	file "local.db";
};

zone "127.in-addr.arpa" {
	type master;
	file "127.db";
};

zone "0.in-addr.arpa" {
	type master;
	file "0.db";
};

zone "255.in-addr.arpa" {
	type master;
	file "255.db";
};

# Logging

logging {
	channel "named_log" {
		file "named.log" versions 5 size 500k;
		severity dynamic;
		print-category yes;
		print-severity yes;
		print-time yes;
		};

	channel "query_log" {
		file "named-query.log" versions 5 size 500k;
		severity debug;
		print-severity yes;
		print-time yes;
		};

category default { named_log; };
category queries { query_log; };
};

# Local Domains

include "/opt/etc/named/named.conf.local";

Die named.conf ist die Hauptkonfigurationsdatei und liegt in „/opt/etc/named/“. Der erste Eintrag definiert eine ACL (Access Control List) namens Corpnet. Diese Liste enthält IP Bereiche der Form (x.x.x.x/xx) also einer IP nebst Subnet in Byteschreibweise. Das erste Compound ist „options“. Hier werden die globalen Einstellungen des namedaemons festgelegt.

  • Directory legt das Basisverzeichnis fest. Hier sucht bind nach relativen Pfadangaben.
  • Allow-query enthält eine oder mehrere zuvor festgelegte ACLs. Nur diesen festgelegten Adressen oder Adressbereichen ist der Zugriff auf den Server gestattet.
  • Forward first legt fest, dass nicht direkt auflösbare Anfragen erst an einen oder mehrere übergeordnete DNS-Server weitergereicht werden und erst, wenn diese auch kein Ergebnis liefern, wird eine rekursive Abfrage an die Root-Server geschickt.
  • Forwarders legt wiederum eine Liste der zu befragenden Forwarder fest. In unserem Fall sollte dies der Internetrouter sein.

Die zone-Compounds legen die zu verwaltenden Zonen fest. Die Zonen „<name>“ steht dabei für eine Domain, deren IPs verwaltet werden sollen. Die Zonen „<ip-segment>.inaddr. arpa“ stehen für Reverse-Zonen, die IP-Adressen Namen zuordnet. Die Zone „.“ ist hierbei die wichtigste. Sie legt fest, dass alle unbekannten Domains weitergereicht werden sollen (type hint;) und hält für den fall, dass auch der Internetrouter nichts findet eine Liste mit root-Servern bereit, die in diesem Fall rekursiv befragt werden (z.B.: www.heise.de → . → de → heise → www → IP: 193.99.144.80). Ebenfalls wichtig sind die Zonen „localhost“ und „127.in-addr.arpa“, welche für die Auflösung von Localhost in 127.0.0.1 und vice versa zuständig sind. Das Logging Compound erstellt zwei Logfiles. Eine generelle und eine für die Domainanfragen. Beide befinden sich ebenfalls im Basisverzeichnis. Das letzte Statement bindet die named.conf.local ein, in der wir unsere lokalen Zonen definieren können.

named.conf.local

# Do any local configuration here

zone "intranet.lan" {
        # unser BIND ist der Zonenmaster, der die Zone verwaltet
	type master;
        # unser BIND soll übergeordneten DNS Servern von dieser Zone nichts mitteilen
	notify no;
        # Die Zonendatei, welche Informationen zu dieser Zone vorhält
	file "intranet.lan.db";
};

# Die Reverse-Pointer Zone, welche IPs in Namen auflösen kann (nicht zwingend nötig)	
zone "0.168.192.in-addr.arpa" {
	type master;
	notify no;
	file "192.168.0.db";
};

0.db

;
; BIND reverse data file for broadcast zone
;
$TTL	604800
@	IN	SOA	localhost. root.localhost. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	localhost.

127.db

;
; BIND reverse data file for local loopback interface
;
$TTL	604800
@	IN	SOA	localhost. root.localhost. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	localhost.
1.0.0	IN	PTR	localhost.

255.db

;
; BIND reverse data file for broadcast zone
;
$TTL	604800
@	IN	SOA	localhost. root.localhost. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	localhost.

local.db

;
; BIND data file for local loopback interface
;
$TTL	604800
@	IN	SOA	localhost. root.localhost. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	localhost.
@	IN	A	127.0.0.1
@	IN	AAAA	::1

root.db

;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/named.root
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Dec 12, 2008
;       related version of root zone:   2008121200
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30
;
; FORMERLY NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
;
; FORMERLY C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; FORMERLY TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; FORMERLY NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F
;
; FORMERLY NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235
;
; FORMERLY NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; OPERATED BY VERISIGN, INC.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30
;
; OPERATED BY RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1
;
; OPERATED BY ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42   
;
; OPERATED BY WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35
; End of File

intranet.lan.db

;
; BIND reverse data file for local loopback interface
;
$TTL	86400
@	IN	SOA	 intranet.lan. root.intranet.lan. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@		IN	NS	diskstation.intranet.lan.
diskstation	IN	A	192.168.0.1
router		IN	A	192.168.0.2
bridge		IN	A	192.168.0.3
printer		IN	A	192.168.0.4
pap2		IN	A	192.168.0.7
thor		IN	A	192.168.0.10
flutsch		IN	CNAME	thor
www		IN	CNAME	diskstation

192.168.0.db

;
; BIND reverse data file for local loopback interface
;
$TTL	86400
@	IN	SOA	 intranet.lan. root.intranet.lan. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL

			NS	diskstation.intranet.lan.
1			PTR	diskstation.intranet.lan.
2			PTR	router.intranet.lan.
10			PTR	thor.intranet.lan.

Zu den Reverse-Pointern ist zu sagen, wenn man eine Zone „16.172.in-addr.arpa“ definiert, muss man entsprechend in den Pointern nicht nur die letzte Stelle der IP zuordnen, sondern die letzten beiden (ebenfalls in umgekehrter Reihenfolge – z.B. 13.0 für 172.16.0.13). Der Punkt hinter dem Domainnamen ist essenziell, da BIND sonst denkt, es handle sich um einen Host, nicht die komplette Domain.

empty.db

Ob man diese Datei wirklich braucht, weiss ich noch nicht so genau. Zur Sicherheit gebe ich sie mal mit an.

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

zones.rfc1918

Ob man diese Datei wirklich braucht, weiss ich noch nicht so genau. Zur Sicherheit gebe ich sie mal mit an.

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

zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

rndc.conf

/*
 * Copyright (C) 2000, 2001  Internet Software Consortium.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
 * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
 * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

/* $Id: rndc.conf,v 1.1 2002/05/25 02:34:08 mcr Exp $ */

/*
 * Sample rndc configuration file.
 */

options {
        default-server  localhost;
        default-key     "key";
};

server localhost {
        key     "key";
};

key "key" {
        algorithm       hmac-md5;
        secret "akoqcyiuiH1fKoAtRmuemQ==";
};

Diese Datei kann so wie sie hier steht übernommen werden. Sie ist für die Kommunikation mit dem BIND-Server erforderlich. Nur der secret-String muss durch den betreffenden Key (siehe rndc.key) ersetzt werden.

rndc.key

Die Datei rndc.key erstellt man nicht manuell, sondern durch den Aufruf rndc-confgen -a in der Konsole, während man sich jedoch im Basisverzeichnis von BIND befindet. Es wird die Datei rndc.key erstellt, welche man sich mittels cat rndc.key anzeigen lassen kann. Das secret kopiert man nun an die entsprechende Stelle in der rndc.conf.

key "rndc-key" {
	algorithm hmac-md5;
	secret "akoqcyiuiH1fKoAtRmuemQ==";
};

Das Ergebnis

Sind alle Dateien kopiert, und ist der BIND wie oben beschrieben gestartet, sollte man nun einen Nameserver haben, der die lokale Zone intranet.lan verwaltet, sowie die Reverse-Zone für 192.168.0.x. Außerdem leitet er alle Anfragen an den Router weiter, die er nicht auflösen kann. Testen kann man die Installation nun, indem man an einem Client die DS als DNS Server einrichtet und testweise Anfragen mittels nslookup losschickt.