PowerDNS auf Ubuntu 24.04 – DNS-Server im Homelab stabil aufbauen

PowerDNS auf Ubuntu 24.04 – DNS-Server im Homelab stabil aufbauen
Teilen: Markdown

Logbuch

Moin, du da draußen. Heute zerlegen wir PowerDNS auf Ubuntu 24.04. Kein Marketing-Gerede, nur der Weg, wie ich ihn selbst in meinem Homelab gegangen bin. Bei mir managt dat Reverse-DNS für alle VMs im Proxmox-Cluster – sauber, schnell und ohne dass ein externer Dienst mitliest.

PowerDNS ist Authoritative-Server und Recursor in einem Paket, modular aufgebaut und mit Datenbank-Backend statt flachen Zonen-Dateien. Der Vorteil gegenüber BIND9: du änderst Records über API oder pdnsutil, die Änderungen sind sofort live und Replication klappt ohne Kopfschmerzen. Für den Einstieg nehmen wir den Authoritative-Server mit gmysql-Backend – das ist der stabile Anker für Homelabs und kleine bis mittlere Zonen.

Vorbereitung

System klar machen für Port 53

Ubuntu 24.04 bringt systemd-resolved mit, das standardmäßig auf Port 53 lauscht. PowerDNS kann da nicht andocken. Deshalb zuerst den Konflikt beseitigen.

sudo systemctl disable --now systemd-resolved

Danach die Symlink-Datei aufräumen:

sudo rm -f /etc/resolv.conf

Und eine temporäre resolv.conf anlegen, damit das System während der Installation noch Namen auflösen kann:

echo "nameserver 9.9.9.9" | sudo tee /etc/resolv.conf
echo "nameserver 149.112.112.112" | sudo tee -a /etc/resolv.conf

Firewall: Wenn du UFW nutzt (empfohlen im Homelab), öffne die DNS-Ports schon jetzt:

sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw reload

System updaten, damit keine alten Pakete im Weg stehen:

sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

Reboot danach ist sicherer – Kernel und Netzwerk-Stack sollten frisch sein.

MariaDB als Backend

Die Datenbank als Logbuch

PowerDNS braucht ein persistentes Speicher für Zonen und Records. SQLite geht für ganz kleine Setups, aber MariaDB ist skalierbarer und genau das, was ich in Proxmox-Umgebungen einsetze.

sudo apt install mariadb-server mariadb-client -y

Sichere Installation:

sudo mysql_secure_installation

Antworten: Set root-Passwort (stark wählen), remote root deaktivieren, test-DB löschen, anonymous user weg.

Jetzt die PowerDNS-Datenbank anlegen:

sudo mysql -u root -p

Im MySQL-Prompt:

CREATE DATABASE pdns CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'pdns'@'127.0.0.1' IDENTIFIED BY 'DeinStarkesPasswortHier2026!';
GRANT ALL ON pdns.* TO 'pdns'@'127.0.0.1';
FLUSH PRIVILEGES;
EXIT;

Schema importieren. Das Paket pdns-backend-mysql liefert die Datei mit:

sudo apt install pdns-backend-mysql -y

(kommt später mit dem Server)

Vorher schon mal:

sudo mysql -u pdns -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

Falls der Pfad fehlt, check mit dpkg -L pdns-backend-mysql | grep schema.

PowerDNS installieren

Offizielles Repo nutzen

Ubuntu-Pakete sind oft älter. Besser das offizielle PowerDNS-Repo für auth-49 (aktuelle stabile Serie):

curl -fsSL https://repo.powerdns.com/FD380FBB-pub.asc | sudo gpg --dearmor -o /usr/share/keyrings/powerdns-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/powerdns-archive-keyring.gpg] http://repo.powerdns.com/ubuntu noble-auth-49 main" | sudo tee /etc/apt/sources.list.d/pdns.list

Preferences setzen, damit das Repo Vorrang hat:

sudo tee /etc/apt/preferences.d/pdns << EOF
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600
EOF

Dann:

sudo apt update
sudo apt install pdns-server pdns-backend-mysql -y

Während der Installation fragt dbconfig-common nach der DB – du kannst das überspringen, weil wir die Config manuell machen. Wähle No bei der automatischen DB-Konfiguration.

Konfiguration

Die Segel setzen

Hauptkonfig liegt in /etc/powerdns/pdns.conf, aber Backends kommen besser in separate Dateien unter /etc/powerdns/pdns.d/.

Erstelle:

sudo nano /etc/powerdns/pdns.d/gmysql.conf

Inhalt (genau so, mit deinen Werten):

launch+=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=DeinStarkesPasswortHier2026!
gmysql-dnssec=yes
gmysql-ssl=no

Zusätzlich in der Haupt-pdns.conf die wichtigen Schalter aktivieren oder überschreiben:

sudo nano /etc/powerdns/pdns.conf

Wichtige Zeilen (am Ende anhängen oder anpassen):

local-address=0.0.0.0
local-port=53
api=yes
api-key=DeinAPIKeyHierFuerProxmoxOderAdmin
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
webserver-allow-from=127.0.0.1

Bindet auf allen Interfaces, aktiviert die API (später nützlich für Proxmox SDN) und den internen Webserver zum Testen.

Berechtigungen schärfen:

sudo chown root:pdns /etc/powerdns/pdns.d/gmysql.conf
sudo chmod 640 /etc/powerdns/pdns.d/gmysql.conf

Service starten und erste Zone anlegen

sudo systemctl restart pdns
sudo systemctl enable pdns
sudo systemctl status pdns

Sollte active (running) zeigen.

Logs checken:

sudo journalctl -u pdns -f

Jetzt die erste Zone mit pdnsutil:

pdnsutil create-zone example.local ns1.example.local

SOA und NS anpassen:

pdnsutil edit-zone example.local

Oder direkt per Command:

pdnsutil add-record example.local @ SOA ns1.example.local hostmaster.example.local 2026040601 3600 1800 1209600 3600
pdnsutil add-record example.local @ NS ns1.example.local
pdnsutil add-record example.local @ A 192.168.10.10

Für Reverse-DNS (wichtig für Proxmox):

Erst die Zone anlegen, z. B. für 10.168.192.in-addr.arpa

pdnsutil create-zone 10.168.192.in-addr.arpa

Dann PTR-Records:

pdnsutil add-record 10.168.192.in-addr.arpa 10 PTR vm01.example.local

Das ist exakt der Punkt, wo bei mir die Proxmox-SDN-Zonen automatisch PTRs schreiben.

Testen

Mit dig und dig +short

Von einem anderen Rechner:

dig @deine-server-ip example.local

Sollte die A-Record liefern.

Reverse:

dig -x 192.168.10.10 @deine-server-ip

Lokaler Test auf dem Server:

pdnsutil check-zone example.local
Fallstricke

Wo der Rumpf leckt

  1. Port 53 noch besetztss -tlnp | grep :53 zeigt systemd-resolved? Dann nochmal disable und reboot.
  2. DB-Verbindung fehlschlägt – Falsches Passwort oder User nur für localhost statt 127.0.0.1. Log zeigt gmysql connection failed.
  3. Permission denied auf Config – pdns läuft als User pdns, deshalb 640 und chown root:pdns.
  4. API-Key vergessen – Für Proxmox SDN brauchst du den api-key in pdns.conf und den gleichen Key im Proxmox SDN → DNS Plugin.
  5. Firewall auf dem Router – Viele vergessen UDP 53 im Upstream-Firewall.
  6. DNSSEC aktiv, aber kein Key – gmysql-dnssec=yes ohne Keys führt zu Fehlern bei Queries. Entweder DNSSEC komplett deaktivieren oder pdnsutil secure-zone example.local und Keys publishen.
  7. Ubuntu 24.04 Netplan – Wenn du eine statische IP hast, stell sicher, dass /etc/netplan/*.yaml keinen DNS-Eintrag hat, der auf resolved zeigt.
  8. Performance – Bei >500 Zonen cache-size in pdns.conf hochsetzen (default 20k reicht erstmal).

Proxmox-Integration

Reverse-DNS für VMs

In Proxmox unter DatacenterSDNOptions → DNS den PowerDNS-Eintrag anlegen: URL http://pdns-ip:8081/api/v1/servers/localhost, API-Key wie oben, server-id localhost. Dann in der Zone die DNS- und Reverse-DNS-Server auf diesen Eintrag zeigen. Ab da registrieren neue VMs automatisch A und PTR. Funktioniert seit Proxmox 8.x sauber.

Recursor optional

Für vollen DNS-Stack

Wer auch resolving will, installiert zusätzlich pdns-recursor und konfiguriert /etc/powerdns/recursor.conf mit forward-zones oder allow-from. Im Homelab reicht meist der Authoritative plus unbound oder systemd-resolved als Forwarder.

Sicherheit und Wartung

  • API nur von localhost oder mit IP-Restriktion.
  • pdns.conf: disable-axfr=no nur wenn Slave-Zonen nötig.
  • Logs rotieren mit logrotate.
  • Backup: mysqldump -u pdns -p pdns > pdns_backup.sql

Updates: apt upgrade pdns-server – der Daemon lädt neue Config ohne Downtime nach Restart.

Das war der komplette Aufbau. Von null auf laufendem DNS-Server in unter 30 Minuten, wenn die DB sauber läuft. Danach hast du einen Server, der 10.000 Queries pro Sekunde packt, ohne dass du jemals wieder auf Cloud-DNS angewiesen bist.

Bei mir läuft das seit über einem Jahr im Cluster – Reverse-DNS für 40 VMs, interne Zonen für Services, alles über pdnsutil oder später PowerDNS-Admin, wenn die GUI gewünscht ist.

Logbucheintrag beendet.

Diskurs: Mastodon Bluesky
Quellverweise: Official PowerDNS Installation Guide PowerDNS Repositories Ubuntu 24.04 systemd-resolved Proxmox SDN PowerDNS
Tags: #PowerDNS #Ubuntu24.04 #MySQL #DNSSEC #Linux #DNSHomelab #ProxmoxSDN

Vorheriger

BenQ MA270S: Mac-getrimmter Segler oder brauchbarer Lotse für Linux-Gewässer?