====== 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