Installation und Gebrauch des Unbound Name Servers auf Debian Etch

Version 1.0
Author: Falko Timme


Unbound ist ein validierender, rekursiver und zwischenspeichernder DNS Resolver, der unter einer BSD Lizenz veröffentlicht ist. Die Version 1.0.0 wurde am 20. Mai 2008 veröffentlicht. Diese Anleitung veranschaulicht, wie man ihn auf Debian Etch installiert und verwendet; inklusive der Erstellung von Zonen für Deine eigenen Domains.

Diese Anleitung ist ohne jegliche Gewähr! Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Installation von Unbound

Da es noch kein Debian Paket gibt, müssen wir Unbound aus den Quellen installieren. Zunächst installieren wir die Voraussetzungen:

apt-get install build-essential libssl-dev

Dann laden wir Unbound runter und installieren es wie folgt:

cd /tmp
wget http://www.unbound.net/downloads/unbound-latest.tar.gz
tar xvfz unbound-latest.tar.gz
cd unbound-1.0.0/
./configure
make
make install

Als Nächstes erstellen wir einen Benutzer und eine Gruppe namens unbound:

groupadd unbound
useradd -d /var/unbound -m -g unbound -s /bin/false unbound

Wir verwenden das Verzeichnis /var/unbound als Home Verzeichnis des Unbound Name Servers - es wird die Unbound Konfiguration beinhalten und Unbound wird darin aus Sicherheitsgründen gechrooted ausgeführt.

Als Nächstes laden wir die Liste der Root Name Server runter:

cd /var/unbound
wget ftp://ftp.internic.net/domain/named.cache

Dann erstellen wir das Verzeichnis /var/unbound/var/run das die Unbound PID Datei unbound.pid enthält, und erstellen einen Symlink /var/run/unbound.pid zu ihr:

mkdir -p /var/unbound/var/run
chown -R unbound:unbound /var/unbound
ln -s /var/unbound/var/run/unbound.pid /var/run/unbound.pid

Um Unbound zu starten/zu stoppen/neu zu starten, benötigen wir ein Init Skript wie dieses:

vi /etc/init.d/unbound


#!/bin/sh
# # unbound This shell script takes care of starting and stopping # unbound (DNS server). exec="/usr/local/sbin/unbound" prog="unbound" config="/var/unbound/unbound.conf" pidfile="/var/run/unbound.pid" rootdir="/var/unbound" case "$1" in start) [ -x $exec ] || exit 5 [ -f $config ] || exit 6 echo -n $"Starting $prog: " # setup root jail if [ -s /etc/localtime ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; if [ ! -e ${rootdir}/etc/localtime ] || /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then cp -fp /etc/localtime ${rootdir}/etc/localtime fi; fi; if [ -s /etc/resolv.conf ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; if [ ! -e ${rootdir}/etc/resolv.conf ] || /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then cp -fp /etc/resolv.conf ${rootdir}/etc/resolv.conf fi; fi; if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/log' /proc/mounts; then [ -d ${rootdir}/dev ] || mkdir -p ${rootdir}/dev ; [ -e ${rootdir}/dev/log ] || touch ${rootdir}/dev/log mount --bind -n /dev/log ${rootdir}/dev/log >/dev/null 2>&1; fi; if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/random' /proc/mounts; then [ -d ${rootdir}/dev ] || mkdir -p ${rootdir}/dev ; [ -e ${rootdir}/dev/random ] || touch ${rootdir}/dev/random mount --bind -n /dev/random ${rootdir}/dev/random >/dev/null 2>&1; fi; # if not running, start it up here start-stop-daemon --start --quiet --pidfile $pidfile --exec $exec -- -c $config echo ;; stop) echo -n $"Stopping $prog: " start-stop-daemon --stop --quiet --oknodo --pidfile $pidfile echo if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/log' /proc/mounts; then umount ${rootdir}/dev/log >/dev/null 2>&1 fi; if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/random' /proc/mounts; then umount ${rootdir}/dev/random >/dev/null 2>&1 fi; ;; restart) start-stop-daemon --stop --quiet --oknodo --pidfile $pidfile start-stop-daemon --start --quiet --pidfile $pidfile --exec $exec -- -c $config ;; reload) start-stop-daemon --stop --signal 1 --quiet --oknodo --pidfile $pidfile --exec $exec ;; force_reload) start-stop-daemon --stop --signal 1 --quiet --oknodo --pidfile $pidfile --exec $exec ;; *) echo $"Usage: $0 {start|stop|restart|reload|force-reload}" exit 2 ;; esac exit 0
Mach das Skript ausführbar und erstelle die System Startup Links dafür:

chmod 755 /etc/init.d/unbound
update-rc.d unbound defaults

Das war's mit der Installation.

2 Konfiguration von Unbound

Nun erstellen wir die Unbound Konfigurationsdatei /var/unbound/unbound.conf. Du findest eine Muster-Konfigurationsdatei in /tmp/unbound-1.0.0/doc/example.conf, die eine Menge Erklärungen enthält. Weiterhin kannst Du Dir  http://www.unbound.net/documentation/unbound.conf.html ansehen, um mehr über die Unbound Konfiguration zu erfahren.

In der folgenden Konfiguration füge ich zwei Zonen für Domains hinzu (example.com und example.net), die ich auf dem Unbound Name Server hosten möchte. Wenn Du mit dem BIND Name Server vertraut sein solltest, kannst Du Dir den Unbound Syntax sehr schnell aneignen. Passe die Zonen nach Belieben an oder lass sie aus wenn Du nur einen lokalen Resolver benötigst:

vi /var/unbound/unbound.conf


server:
verbosity: 1 interface: 0.0.0.0 port: 53 do-ip4: yes do-ip6: yes do-udp: yes do-tcp: yes do-daemonize: yes access-control: 0.0.0.0/0 allow #access-control: 0.0.0.0/0 refuse #access-control: 127.0.0.0/8 allow chroot: "/var/unbound" username: "unbound" directory: "/var/unbound" use-syslog: yes pidfile: "/var/run/unbound.pid" root-hints: "/var/unbound/named.cache" local-zone: "example.com." static local-data: "example.com. 86400 IN NS ns1.hostingcompany.com." local-data: "example.com. 86400 IN NS ns2.hostingcompany.com." local-data: "example.com. 86400 IN SOA ns1.hostingcompany.com. hostmaster.hostingcompany.com. 2008052201 28800 7200 604800 86400" local-data: "example.com. 86400 IN A 1.2.3.4" local-data: "www.example.com. 86400 IN CNAME example.com." local-data: "mail.example.com. 86400 IN A 1.2.3.4" local-data: "example.com. 86400 IN MX 10 mail.example.com." local-data: "example.com. 86400 IN TXT v=spf1 a mx ~all" local-zone: "example.net." static local-data: "example.net. 86400 IN NS ns1.hostingcompany.com." local-data: "example.net. 86400 IN NS ns2.hostingcompany.com." local-data: "example.net. 86400 IN SOA ns1.hostingcompany.com. hostmaster.hostingcompany.com. 2008052201 28800 7200 604800 86400" local-data: "example.net. 86400 IN A 1.2.3.4" local-data: "www.example.net. 86400 IN CNAME example.net." local-data: "mail.example.net. 86400 IN A 1.2.3.4" local-data: "example.net. 86400 IN MX 10 mail.example.net." local-data: "example.net. 86400 IN TXT v=spf1 a mx ~all"
Ich habe hier interface: 0.0.0.0 verwendet, was bedeutet, dass Unbound auf allen Netzwerk Interfaces hört. Weiterhin verwende ich access-control: 0.0.0.0/0 allow, was bedeutet, dass sich jeder mit Unbound verbinden kann. Wenn sich nur localhost verbinden soll, würdest Du stattdessen dies verwenden
[...]
access-control: 0.0.0.0/0 refuse access-control: 127.0.0.0/8 allow [...]
Um zu überprüfen, ob der Syntax Deiner Unbound Konfiguration richtig ist, kannts Du den unbound-checkconf Befehl verwenden:

unbound-checkconf /var/unbound/unbound.conf


server1:~# unbound-checkconf /var/unbound/unbound.conf
unbound-checkconf: no errors in /var/unbound/unbound.conf
server1:~#

Wenn der Syntax in Ordnung ist, kannst Du Unbound schließlich starten:

/etc/init.d/unbound start

Um mehr über Unbound zu erfahren, sieh Dir bitte die Unbound Documentation an.

3 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte