Unbound

Unbound ist ein einfacher DNS-Resolver, der seinen Einsatz vor allem in FreeBSD findet. Durch seine einfache Konfiguration und modularen Aufbau, welches ihm zu bspw. DNSSEC verhilft, findet er gerade in kleinen Netzwerken seinen Platz, da der Einsatz von Bind meist "drüber" ist. Unbound hat aber auch Schattenseiten.

Zwar ist es möglich Zonen einzurichten, aber Unbound ist dafür nicht konzipiert worden, was sich durch  unzuverlässige DNS-Antworten für die eigenen Zonen sowie die fehlende Implementierung für das  Master-Slave-Setup (Primary-, und Secondary-DNS) zeigt. Ein weiteres Problem besteht darin, dass er nicht mit DHCP arbeiten kann, was für dynamische Updates der Clients wichtig ist (RFC 2136).

Seine Aufgabe ist vor allem der Resolver, aber das wiederum kann er ziemlich gut.

 

Die Installation

Sie gestaltet sich wie immer recht einfach durch die Paketmanager der jeweiligen Distribution. In diesem Beispiel ist es wieder Debian Stretch. Die folgende Zeile installiert Unbound:

apt-get install unbound -y

Das war es aber auch schon.

 

Die Konfiguration

Ich weiche etwas vom Debianstandart ab und mache mir meine eigene Konfigurationsdatei Zunächst erstellen wir eine Kopie der originalen Konfigurationsdatei und dann erstellen wir unsere eigene und füllen sie mit dem folgenden Code, der in blau dargestellt ist:

cp /etc/unbound/unbound.conf /etc/unbound/unbound.conf.old

vi /etc/unbound/unbound.conf

 

server:
        verbosity: 1
        # Horcht auf allen Netzwerkinterfaces
        interface: 0.0.0.0
        # Horcht auf Port 53 UDP
        port: 53
        # IPv4 und IPv6 sind aktiviert mit tcp und udp
        do-ip4: yes
        do-ip6: yes
        do-udp: yes
        do-tcp: yes
        # Als Daemon starten
        do-daemonize: yes
        # Erlaubt Zugriff von allen Netzwerkinterfaces
        access-control: 0.0.0.0/0 allow
        #access-control: 0.0.0.0/0 refuse
        #access-control: 127.0.0.0/8 allow
        # Benutzer und chroot festlegen
        chroot: "/var/unbound"
        username: "unbound"
        directory: "/var/unbound"
        use-syslog: yes
        pidfile: "/var/run/unbound.pid"
        root-hints: "/var/unbound/named.cache"

Fehlt uns nur noch die Liste der Root-Nameserver. Dazu erstellen wir, falls noch nicht existiert, das Verzeichnis und holen uns dann die Liste der Root-Nameserver per wget.

mkdir -p /var/unbound

wget https://www.internic.net/domain/named.root \
-O /var/unbound/named.cache

 

Die eigene Zone einrichten

Unbound bietet die Möglichkeit seine eigenen Zonen einzurichten für die er selbst autoritativ antwortet. Beschränkt man sich auf wenige Zonen, so ist nichts gegen den Einsatz einzuwenden. Für den kleinen Betrieb sollte das aber kein Problem sein.

Öffnen wir wieder die Datei /etc/unbound/unbound.conf und fügen nun die Zonen-Informationen hinzu. Je Zone, die man haben möchte, fügt man immer einen solchen Block ein:

local-zone: "silvesterlangen.localnet." static
local-data: "silvesterlangen.localnet. 86400 IN NS unbound.silvesterlangen.localnet."

local-data: "silvesterlangen.localnet. 86400 IN SOA unbound.silvesterlangen.localnet. \ hostmaster.silvesterlangen.localnet. 2008052201 28800 7200 604800 86400"

local-data: "silvesterlangen.localnet. 86400 IN A 1.2.3.4"
local-data: "www.silvesterlangen.localnet. 86400 IN CNAME unbound.silvesterlangen.localnet."
local-data: "mail.silvesterlangen.localnet. 86400 IN A 1.2.3.4"
local-data: "silvesterlangen.localnet. 86400 IN MX 10 mail.silvesterlangen.localnet."
local-data: "unbound.silvesterlangen.localnet. 86400 IN TXT v=spf1 a mx ~all"

Der Ansicht wegen habe ich die Zeilen nicht eingerückt und dafür die Schrift noch etwas verkleinert. Hinter der dritten Zeile steht ein \ was bedeutet, dass diese Zeile um die folgende Zeile erweitert werden muss. Jede Zeile beginnt immer mit einem local-data:

 

Ein bisschen Ordnung muss sein

Braucht man nur eine, zwei oder drei eigene Zonen, dann kann man sie problemlos in die unbound.conf speichern. Braucht man aber vielleicht 10 oder mehr (Achtung: zu viele Zonen machen Probleme!), dann sollte man schon für etwas Ordnung sorgen. Im besten Fall speichert man die Zonen-Informationen in eigene Dateien und legt sie gesondert in einem Ordner ab.

Im Verzeichnis /etc/unbound/ gibt es noch den Ordner "unbound.d" worin sich möglicherweise einige .conf-Dateien verstecken. Diese benennt man am besten um, dass sie nicht auf .conf enden.

Danach legt man einfach eine neue Datei an. Die benennt man dann einfach so wie die Zone selbst auch tatsächlich heißt. In meinem Beispiel wäre das also "silvesterlangen.localnet.conf" oder als weiteres Beispiel "familielangen.de.conf". Dort speichert man dann die Zonen-Informationen (hochscrollen bitte).

Damit die gesonderten Zone-Files von Unbound berücksichtigt werden, muss in die unbound.conf noch eine Zeile hinzugefügt werden. Danach Unbound einfach neu starten.

include: "/etc/unbound/unbound.conf.d/*.conf"

/etc/init.d/unbound restart oder systemctl restart unbound

 

Wie prüfe ich jetzt die Funktion?

Wie man sie immer prüft. :-) Mit dig @127.0.0.1 silvesterlangen.localnet beispielsweise.