DNS Server im Homelab mit Raspberry Pi und Bind9

VMware vSphere und weitere Produkte aus dem Ökosystem sind sehr stark abhängig von korrekter Namensauflösung im DNS. Ohne DNS geht in der virtuellen Welt gar nichts. Das führt so weit, daß sich unter Troubleshootern das Motto etabliert hat: „Wenn die Ursache nicht DNS sein kann, dann prüfe nochmals DNS.“

Im Unternehmensbereich sind in der Regel DNS Server verschiedenster Art vohanden. Entweder Hardware Appliances mit DNS Funktion, oder ganze Microsoft Active-Directory Server. Wer jedoch ein Homelab einrichten möchte der hat im Büro meist nur einen kleinen DSL-Router mit DHCP Server mit eher schlechter als rechter DNS Funktionalität. Zwar kann man DNS-Server, oder ganze ADS-Domaincontroller in einer VM betreiben, jedoch haben wir hier das Henne-Ei Problem. Die VM startet erst nachdem Cluster und vCenter online sind. Bis dahin passiern ohne DNS wilde Dinge im vSphere Cluster. Gesucht ist also eine kleine, energiesparende, preiswerte und konfigurierbare Hardware-Lösung als DNS Server für das Homelab. Klingt wie die Eierlegende-Wollmilchsau, ist aber mit einem Raspberry Pi gut realisierbar.

Ich werde in diesem Artikel erklären was man hierfür benötigt und wie man ein Subnetz für das Lab konfiguriert.

Raspi als DNS-Server

Für dieses Projekt brauchen wir nicht das allerneueste Modell des Raspberry Pi. Ein Modell Raspi 3b ist hierfür vollkommen ausreichend und auch das Zubehör ist günstig zu bekommen.

Raspberry Pi 3b+ / 1GB / 4-Core / 1,4 GHz35 €
Micro SD Karte 32 GB9 €
Gehäuse (optional)8 €
Netzteil 2,5A (optional)10 €
HDMI Kabel5 €
Stückliste mit Durchschnittspreisen Juli 2020

Für deutlich unter hundert Euro bekommt man somit einen kleinen Server, der darüber hinaus auch noch andere Aufgaben übernehmen kann, wie zum Beispiel die Steuerung der Heim-Automation, oder als Werbeblocker Pi-hole.

Ein paar kleine Dinge sind zu beachten. Prinzipiell kann man den Raspi per USB mit Strom versorgen. Man muss aber darauf achten, dass die Quelle mindestens und zuverlässig 1,2A liefert. Empfohlen werden Stromquellen mit 2,5A. Meine ersten Bootversuche scheiterten, weil mein USB-Netzteil nicht genügend Strom lieferte.

Der Raspi benötigt ein dauerhaftes Boot- und Speichermedium in Form einer Micro-SD Karte. Hier sollte man nicht die allerbilligste Ware nehmen, aber für unter 10 € bekommt man schon 32 GB eines Markenherstellers.

Basissystem Setup

Da es für den Raspi keine Boot-CD oder ähnliches gibt, muss die Micro-SD Karte extern mit dem Betriebsystem betankt werden. Als Betriebsystem kommt beispielsweise Raspberry Pi OS (ehemals Raspbian) in Frage. Dies ist praktisch ein Debian für ARM Architektur. Mit einem kleinen USB auf Mico-SD Adapter, oder einem SD-Kartenslot im PC kann man die Micro-SD Karte mit dem ISO flashen. Ein dafür sehr gut geeignetes Tool ist zum Beispiel balenaEtcher, welches für MacOS, Linux und Windows verfügbar ist. Die Bedienung ist absolut simpel. Image ISO auswählen, Zielmedium auswählen und flashen. Danach die Micro-SD Karte in den Kartenslot des Raspi stecken, Monitor, LAN, Maus und Tastatur anschließen und einschalten. Die Hardware wird automatisch erkannt und das LAN Interface zieht sich eine Adresse über DHCP (falls vorhanden). Der Assistent fragt nach Tastaturlayout, Ländereinstellungen und einem Admin-Benutzer.

Für das Basissetup ist ein angeschlossener Monitor sinnvoll, später können Änderungen ohne Peripherie über SSH vorgenommen werden.

Basiskonfiguration

Als erstes sollten wir die neuesten Patches einspielen. Unter Debian/Ubuntu geht das sehr komfortabel mit dem Paketmanager apt. Dazu müssen zunächst die Updatequellen befragt werden. Alle administrativen Arbeiten benötigen das sudo Kommando, um mit erhöhten Rechten zu agieren.

pi@raspberrypi:~ $ sudo apt-get update
Get:1 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
Get:2 http://archive.raspberrypi.org/debian buster InRelease [32.6 kB]
Get:3 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13.0 MB]
Get:4 http://archive.raspberrypi.org/debian buster/main armhf Packages [330 kB]
Get:5 http://raspbian.raspberrypi.org/raspbian buster/contrib armhf Packages [58.7 kB]
Get:6 http://raspbian.raspberrypi.org/raspbian buster/non-free armhf Packages [104 kB]
Fetched 13.5 MB in 9s (1,485 kB/s)
Reading package lists… Done

Der zweite Schritt besteht darin, die neuen Patches zu installieren und dabei automatisch Paketabhängigkeiten zu erfüllen.

sudo apt-get upgrade

Es folgt eine Längere Paketliste, für die ein Update empfohlen wird. Unten ist exemplarisch ein solcher Dialog dargestellt. Man bestätigt die Nachfrage mit [y] und läßt apt den Rest erledigen. Der Vorgang kann durchaus einige Minuten dauern.

Statische IP vergeben

Für das Homelab benötigen wir ein eigenes Subnet, welches der Raspi-DNS bedienen soll. Ich habe dafür 10.0.10.0/24 gewählt. Dies wird das Netz für die Hosts, das vCenter und Infrastruktur. Gateway ist die 10.0.10.1 und der DNS Server soll daraus eine statische IP Adresse 10.0.10.2 bekommen. Neben DNS soll der Raspi auch als Zeitserver im LAN fungieren.

sudo nano /etc/dhcpcd.conf

In der Konfigurationsdatei den Eintrag # Example static IP configuration suchen. Darunter folgende Zeilen eingeben, bzw. den Kommentar (#) entfernen.

# Example static IP configuration:
interface eth0
static ip_address=10.0.10.2/24
static routers=10.0.10.1
static domain_name_servers=10.0.10.2 fd51:42f8:caae:d92e::1

Einstellungen mit [Ctrl] + [o] schreiben und den Editor mit [Ctrl] + [x] verlassen. Danach den Raspi neu starten.

sudo reboot

Raspi als Zeitquelle konfigurieren

Sudo apt-get install ntp

Die erfolgreiche Installation kann man mit dem sntp Befehl prüfen:

pi@raspberrypi:/etc $ sntp --version
sntp 4.2.8p12@1.3728-o (1)

Die Upstream Zeitserver können in der Datei ntp.conf eingesehen und nach Wunsch angepasst werden.

sudo nano /etc/ntp.conf

Hier ist es empfehlenswert, die Poolserver durch regionale Poolserver zu ersetzen. Für Europa findet man die Adressen auf der Seite des NTP-Pool Projekts. Es werden folgende Poolserver hinzugefügt:

server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org

Die Konfiguration mit [Ctrl] + [o] sichern und den Editor mit [Ctrl] + [x] verlassen. Danach muss der NTP Dienst neu gestartet werden.

sudo service ntp restart

Test der Konfiguration mit:

sudo service ntp status

Dass der Dienst auch auf Anfragen von extern antwortet, kann man zum Beispiel von einem Windows PC mit dem w32tm Kommando testen.

w32tm /stripchart /computer:10.0.10.2 /dataonly /samples:5

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.