Installation und Gebrauch des Unbound Name Servers auf Debian Etch

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

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

Das könnte Dich auch interessieren …