PowerDNS Server ist ein unter der GNU General Public License veröffentlichter Nameserver der auf allen verbreiteten Betriebsystemen eingesetzt werden kann. PowerDNS Recursor ist ein rekursiver bzw. caching-only Nameserver der seperat erhältlich ist, aber auch im Hauptpaket enthalten ist.
Verfügbare Backends:
name | Funktion |
---|---|
bind und bind2 | Liest Zonendaten aus einer Zonendatei des weit verbreiteten BIND Nameservers |
db2 | Kann Anfragen aus einer IBM DB2-Datenbank beantworten |
geo | Erlaubt je nach IP-Adressen Bereich oder geographischer Herkunft der IP-Adresse verschiedene Antworten zurückzusenden |
gmysql | Verwendet MySQL als Datenbank |
gpgsql | Verwendet PostgreSQL als Datenbank |
goracle | Verwendet Oracle als Datenbank |
gsqlite | Verwendet SQLite als Datenbank |
ldap | Holt Informationen aus einem hierarchisch strukturierten LDAP-Verzeichnis |
odbc | Greift auf Zoneninformationen in einer von ODBC unterstützten Datenbank zu. Diese Methode ist nur mit Windows als Betriebssystem möglich] |
opendbx | Ein auf Geschwindigkeit, Lastverteilung und Ausfallsicherheit optimiertes Datenbank Backend, das auf der OpenDBX Bibliothek aufbaut und MySQL, PostgreSQL, SQLite, Firebird, Interbase, Microsoft SQL Server und Sybase ASE Datenbanken unterstützt |
pipe | Fragt einen Koprozess nach Antworten auf DNS-Anfragen |
random | Generiert zufällige Antworten (nur zum Testen sinnvoll) |
pdnsutil secure-all-zones pdnsutil rectify-all-zones
https://www.sidn.nl/en/modern-internet-standards/dnssec-on-the-powerdns-authoritative-server
pdnsutil list-all-zones [master|slave|native]
https://real-activities.com/~phrank/host/powerdns.html
Schleife mit „dig -t axfr $Zone @$DNS:
#!/bin/bash axfr_from="127.0.0.1" zone_backup_file="pdns_fullbackup.txt" set -e -o pipefail function cleanup { EXIT_CODE=$? set +e # disable termination on error rm "$exportfile" rm "$exportfile_sorted" exit $EXIT_CODE } trap cleanup EXIT exportfile=$(mktemp) exportfile_sorted=$(mktemp) # old versions: # pdnssec list-all-zones > "$exportfile" pdnsutil list-all-zones > "$exportfile" cat "$exportfile" | grep -v "All zonecount" | sort > "$exportfile_sorted" while read -r zeile ; do dig -t axfr "$zeile" @$axfr_from >> "$zone_backup_file" done < "$exportfile_sorted"
via API:
GET /servers/{server_id}/zones GET /servers/{server_id}/zones/{zone_id}
rec_control wipe-cache $domain
rec_control dump-cache /tmp/dns-cache
Queries loggen (erzeugt viele Logseinträge!):
quiet=no
# show last 50 log entries: journalctl -r -n 50 --no-pager -u pdns-recursor.service
Standardmäßig führen leider Validierungsfehler nicht zu SRVFAIL, dieses Verhalten lässt sich mit der Option dnssec anpassen:
dnssec validate
# listen local-address=0.0.0.0:53 [::]:53 # ACL (example: 1.2.3.4 / 1:2:3::4): allow-from=127.0.0.0/8, 1.2.3.4, ::1/128, fe80::/10, 1:2:3::4
Standardmäßig macht der recursor keine queries via IPv6 („When no address of a certain address family is configured, there are no queries sent with that address family. In the default configuration this means that IPv6 is not used for outgoing queries.“), siehe https://doc.powerdns.com/recursor/settings.html#setting-query-local-address bzw. outgoing.source_address
In einer Dualstack-Konfiguration muss daher der Standard „0.0.0.0“ erweitert werden:
query-local-address=::, 0.0.0.0
anschließend macht der recursor auch IPv6-queries. Test mit (Ziel nur per IPv6 erreichbar): dig AAAA aaaa.v6ns.test-ipv6.com
powerdns config:
dnsdist -c dumpStats()