====== PowerDNS authoritative ======
[[wpde>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.
===== Links =====
* [[http://www.poweradmin.org/|poweradmin]] - ein web interface für PowerDNS
* [[https://github.com/PowerDNS-Admin/PowerDNS-Admin|PowerDNS-Admin]] / https://powerdnsadmin.org ([[https://github.com/PowerDNS-Admin/PowerDNS-Admin/issues/1318|Ankündigung des neuen maintainers]])
* [[http://sourceforge.net/projects/izidns/|izidns]] ein web interface für PowerDNS (basiert auf PowerAdmin)
* [[https://git.faked.org/jan/powerdns-adblock/|powerdns adblock]]
* [[https://blog.powerdns.com/2016/01/19/efficient-optional-filtering-of-domains-in-recursor-4-0-0/|Efficient & optional filtering of domains in Recursor 4.0.0]]
===== backends =====
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) |
===== Verwaltung =====
==== CLI ====
https://makarainen.net/PowerDNS-pdnsutil-cheat-sheet
==== ansible ====
* [[https://github.com/kpfleming/ansible-powerdns-auth]]
* https://github.com/stuvusIT/pdns-authoritative-api
* [[https://jpmens.net/2015/04/15/managing-master-slave-zones-on-powerdns-with-ansible/|Managing master/slave zones on PowerDNS with Ansible]]
==== Web ====
* [[https://github.com/PowerDNS-Admin/PowerDNS-Admin|PowerDNS-Admin]]
* [[https://www.poweradmin.org/|Poweradmin]]
===== dnssec =====
[[https://doc.powerdns.com/authoritative/backends/generic-mysql.html#gmysql-dnssec|gmysql-dnssec=yes]]
pdnsutil secure-all-zones
pdnsutil rectify-all-zones
https://www.sidn.nl/en/modern-internet-standards/dnssec-on-the-powerdns-authoritative-server
===== zone export =====
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}
https://doc.powerdns.com/authoritative/http-api/zone.html
===== Lua =====
* [[https://doc.powerdns.com/recursor/lua-scripting/hooks.html|Intercepting queries with Lua]]
* [[https://av.tib.eu/media/44248|Dynamic answer generation with Lua]]
====== PowerDNS recursor ======
===== recursor flush zone =====
rec_control wipe-cache $domain
===== recursor dump cache into file =====
rec_control dump-cache /tmp/dns-cache
===== query log =====
Queries loggen (erzeugt viele Logseinträge!):
quiet=no
# show last 50 log entries:
journalctl -r -n 50 --no-pager -u pdns-recursor.service
===== dnssec validierung =====
Standardmäßig führen leider Validierungsfehler nicht zu SRVFAIL, dieses Verhalten lässt sich mit der Option [[https://docs.powerdns.com/recursor/dnssec.html#validate|dnssec]] anpassen:
dnssec validate
===== IPv6 config =====
==== Dual-stack listen ====
# 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
==== IPv6 ausgehend benutzen ====
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. [[https://doc.powerdns.com/recursor/yamlsettings.html#setting-yaml-outgoing-source-address|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''
====== dnsdist ======
===== Statistiken anzeigen =====
powerdns config:
* controlSocket("127.0.0.1")
* setKey("your_secret_key")
dnsdist -c
dumpStats()
===== Split-DNS =====
- switch pools via lua (depending on source IP of client)
- rewrite queries with static values (lua)
- delegate to a different (internal?) DNS-Server depending on asked domain