This document is about PowerDNS 4.X. If you have PowerDNS 3.X, please see the PowerDNS 3.X documentation

All Authoritative Server settings

All PowerDNS Authoritative Server settings are listed here, excluding those that originate from backends, which are documented in the relevant chapters. These settings can be set inside pdns.conf or on the commandline when invoking the pdns binary.

You can use += syntax to set some variables incrementally, but this requires you to have at least one non-incremental setting for the variable to act as base setting. This is mostly useful for include-dir directive.

For boolean settings, specifying the name of the setting without a value means yes.


Allow 8 bit DNS queries.


If set, only these IP addresses or netmasks will be able to perform AXFR.


Allow DNS updates from these IP ranges.


Allow AXFR NOTIFY from these IP ranges. Setting this to an empty string will drop all incoming notifies.


Turning this off requires all notifications that are received to be signed by valid TSIG signature for the zone.


Turning this off requires all supermaster notifications to be signed by valid TSIG signature. It will accept any existing key on slave.


By specifying allow-recursion, recursion can be restricted to netmasks specified. The default is to allow recursion from everywhere. Example: allow-recursion=,,


When notifying a domain, also notify these nameservers. Example: also-notify=, The IP addresses listed in also-notify always receive a notification. Even if they do not match the list in only-notify.


Answer questions for the ANY on UDP with a truncated packet that refers the remote server to TCP. Useful for mitigating reflection attacks.


Enable/disable the REST API.


Static pre-shared authentication key for access to the REST API.


Disallow data modification through the REST API when set.


Seconds to store packets in the PacketCache. See "Packet Cache".


If sending carbon updates, if set, this will override our hostname. Be careful not to include any dots in this setting, unless you know what you are doing. See "PowerDNS Metrics".


Send all available metrics to this server via the carbon protocol, which is used by graphite and metronome. It has to be an address (no hostnames). You may specify an alternate port by appending :port, ex: See "PowerDNS Metrics".


If sending carbon updates, this is the interval between them in seconds. See "PowerDNS Metrics".


If set, chroot to this directory for more security. See "Security settings & considerations".

Make sure that /dev/log is available from within the chroot. Logging will silently fail over time otherwise (on logrotate).

When setting chroot, all other paths in the config (except for config-dir and module-dir) set in the configuration are relative to the new root.

When running on a system where systemd manages services, chroot does not work out of the box, as PowerDNS cannot use the NOTIFY_SOCKET. Either don't chroot on these systems or set the 'Type' of the this service to 'simple' instead of 'notify' (refer to the systemd documentation on how to modify unit-files)


Location of configuration directory (pdns.conf). Usually /etc/powerdns, but this depends on SYSCONFDIR during compile-time.


Name of this virtual configuration - will rename the binary image. See "Virtual hosting".


Debugging switch - don't use.


Operate as a daemon.


The algorithm that should be used for the KSK when running pdnsutil secure-zone. Must be one of:


The default keysize for the KSK generated with pdnsutil secure-zone.


Name to insert in the SOA record if none set in the backend.


Use this soa-edit value for all zones if no SOA-EDIT metadata value is set.


Use this soa-edit value for all signed zones if no SOA-EDIT metadata value is set. Overrides default-soa-edit


Mail address to insert in the SOA record if none set in the backend.


TTL to use when none is provided.


The algorithm that should be used for the ZSK when running pdnsutil secure-zone. Must be one of:


The default keysize for the ZSK generated with pdnsutil secure-zone.


Read additional ZSKs from the records table/your BIND zonefile. If not set, DNSKEY records in the zonefiles are ignored.


Do not allow zone transfers.


Disable the rectify step during an outgoing AXFR. Only required for regression testing.


Do not log to syslog, only to stdout. Use this setting when running inside a supervisor that handles logging (like systemd). Note: do not use this setting in combination with daemon as all logging will disappear.


Do not listen to TCP queries. Breaks RFC compliance.


Number of Distributor (backend) threads to start per receiver thread. See "Authoritative Server Performance".


Synthesise CNAME records from DNAME records as required. This approximately doubles query load. Do not combine with DNSSEC!


Seconds to cache DNSSEC keys from the database. A value of 0 disables caching.


Enable/Disable DNS update (RFC2136) support.


Perform AAAA additional processing. This sends AAAA records in the ADDITIONAL section when sending a referral.


Seconds to cache domain metadata from the database. A value of 0 disables caching.


Enables EDNS subnet processing, for backends that support it.


Entropy source file to use.


Forward DNS updates sent to a slave to the master.


Run within a guardian process. See "Guardian".


Directory to scan for additional config files. All files that end with .conf are loaded in order using POSIX as locale.


Which backends to launch and order to query them in. Launches backends. In its most simple form, supply all backends that need to be launched. e.g.


If you find that you need to query a backend multiple times with different configuration, you can specify a name for later instantiations. e.g.:


In this case, there are 2 instances of the gmysql backend, one by the normal name and the second one is called 'server2'. The backend configuration item names change: e.g. gmysql-host is available to configure the host setting of the first or main instance, and gmysql-server2-host for the second one.


If backends are available in nonstandard directories, specify their location here. Multiple files can be loaded if separated by commas. Only available in non-static distributions.


Local IP address to which we bind. It is highly advised to bind to specific interfaces and not use the default 'bind to any'. This causes big problems if you have multiple IP addresses. Unix does not provide a way of figuring out what IP address a packet was sent to when binding to any.


Bind to addresses even if one or more of the local-address's do not exist on this server. Setting this option will enable the needed socket options to allow binding to non-local addresses. This feature is intended to facilitate ip-failover setups, but it may also mask configuration issues and for this reason it is disabled by default.


Fail to start if one or more of the local-address's do not exist on this server.


Local IPv6 address to which we bind. It is highly advised to bind to specific interfaces and not use the default 'bind to any'. This causes big problems if you have multiple IP addresses.


Fail to start if one or more of the local-ipv6 addresses do not exist on this server.


The port on which we listen. Only one port possible.


If set to 'no', informative-only DNS details will not even be sent to syslog, improving performance. Available from 2.5 and onwards.


If set to a digit, logging is performed under this LOCAL facility. See "Operational logging using syslog". Available from 1.99.9 and onwards. Do not pass names like 'local0'!


Amount of logging. Higher is more. Do not set below 3


Tell PowerDNS to log all incoming DNS queries. This will lead to a lot of logging! Only enable for debugging! Set loglevel to at least 5 to see the logs.


Lua script to run before answering a query. This is a feature used internally for regression testing. The API of this functionality is not guaranteed to be stable, and is in fact likely to change.


Turn on master support. See "Modes of operation".


Maximum number of cache entries. 1 million (the default) will generally suffice for most installations.


Maximum number of empty non-terminals to add to a zone. This is a protection measure to avoid database explosion due to long names.


Limit the number of NSEC3 hash iterations


If this many packets are waiting for database attention, consider the situation hopeless and respawn.


Maximum number of signatures cache entries


Maximum time in seconds that a TCP DNS connection is allowed to stay open. 0 means unlimited. Note that exchanges related to an AXFR or IXFR are not affected by this setting.


Allow this many incoming TCP DNS connections simultaneously.


Maximum number of simultaneous TCP connections per client. 0 means unlimited.


Allow this many DNS queries in a single TCP transaction. 0 means unlimited. Note that exchanges related to an AXFR or IXFR are not affected by this setting.


Directory for modules. Default depends on PKGLIBDIR during compile-time.


Seconds to store queries with no answer in the Query Cache. See "Query Cache".


Do not attempt to read the configuration file.


Do not attempt to shuffle query results, used for regression testing.


If this many packets are waiting for database attention, answer any new questions strictly from the packet cache.


On Linux 3.9 and some BSD kernels the SO_REUSEPORT option allows each receiver-thread to open a new socket on the same port which allows for much higher performance on multi-core boxes. Setting this option will enable use of SO_REUSEPORT when available and seamlessly fall back to a single socket when it is not available. A side-effect is that you can start multiple servers on the same IP/port combination which may or may not be a good idea. You could use this to enable transparent restarts, but it may also mask configuration issues and for this reason it is disabled by default.


Domain name from which to query security update notifications. Setting this to an empty string disables secpoll.


This is the server ID that will be returned on an EDNS NSID query.


For type=MASTER zones (or SLAVE zones with slave-renotify enabled) PowerDNS automatically sends NOTIFYs to the name servers specified in the NS records. By specifying networks/mask as whitelist, the targets can be limited. The default is to notify the world. To completely disable these NOTIFYs set only-notify to an empty value. Independent of this setting, the IP addresses or netmasks configured with also-notify and ALSO-NOTIFY domain metadata always receive AXFR NOTIFYs.

Note: Even if NOTIFYs are limited by a netmask, PowerDNS first has to resolve all the hostnames to check their IP addresses against the specified whitelist. The resolving may take considerable time, especially if those hostnames are slow to resolve. If you do not need to NOTIFY the slaves defined in the NS records (e.g. you are using another method to distribute the zone data to the slaves), then set only-notify to an empty value and specify the notification targets explicitly using also-notify and/or ALSO-NOTIFY domain metadata to avoid this potential bottleneck.


Do out of zone additional processing. This means that if a malicious user adds a '.com' zone to your server, it is not used for other domains and will not contaminate answers. Do not enable this setting if you run a public DNS service with untrusted users.

The docs had previously indicated that the default was "no", but the default has been "yes" since 2005.


If this is enabled, ALIAS records are expanded (synthesised to their A/AAAA) during outgoing AXFR. This means slaves will not automatically follow changes in those A/AAAA records unless you AXFR regularly!

If this is disabled (the default), ALIAS records are sent verbatim during outgoing AXFR. Note that if your slaves do not support ALIAS, they will return NODATA for A/AAAA queries for such names.


PowerDNS Authoritative Server attempts to not send out notifications to itself in master mode. In very complicated situations we could guess wrong and not notify a server that should be notified. In that case, set prevent-self-notification to "no".


Seconds to store queries with an answer in the Query Cache. See "Query Cache".


The IP address to use as a source address for sending queries. Useful if you have multiple IPs and PowerDNS is not bound to the IP address your operating system uses by default for outgoing packets.


Source IP address for sending IPv6 queries.


Boolean, hints to a backend that it should log a textual representation of queries it performs. Can be set at runtime.


Maximum number of milliseconds to queue a query. See "Authoritative Server Performance".


Number of receiver (listening) threads to start. See "Authoritative Server Performance" for tuning details.


Seconds to store recursive packets in the PacketCache. See "Packet Cache".


If set, recursive queries will be handed to the recursor specified here. See "Recursion".


Number of AXFR slave threads to start.


If set, change group id to this gid for more security. See "Security settings & considerations".


If set, change user id to this uid for more security. See "Security settings & considerations.


Turn on slave support. See "Modes of operation".


On a master, this is the amounts of seconds between the master checking the SOA serials in its database to determine to send out NOTIFYs to the slaves. On slaves, this is the number of seconds between the slave checking for updates to zones.


This setting will make PowerDNS renotify the slaves after an AXFR is received from a master. This is useful when using when running a signing-slave.


Tell PowerDNS how many threads to use for signing. It might help improve signing speed by changing this number.


Default SOA expire.


Default SOA minimum ttl.


Default SOA refresh.


Default SOA retry.


Where the controlsocket will live. The default depends on LOCALSTATEDIR during compile-time (usually /var/run or /run). See "Controlsocket".

This path will also contain the pidfile for this instance of PowerDNS called by default. See config-name and Virtual Hosting how this can differ.


Address to bind to for TCP control.


Port to bind to for TCP control.


Limit TCP control to a specific client range.


Password for TCP control.


Maximum time in seconds that a TCP DNS connection is allowed to stay open while being idle, meaning without PowerDNS receiving or sending even a single byte.


Enable the Linux-only traceback handler.


IP address of incoming notification proxy


EDNS0 allows for large UDP response datagrams, which can potentially raise performance. Large responses however also have downsides in terms of reflection attacks. Up till PowerDNS Authoritative Server 3.3, the truncation limit was set at 1680 bytes, regardless of EDNS0 buffer size indications from the client. Beyond 3.3, this setting makes our truncation limit configurable. Maximum value is 65535, but values above 4096 should probably not be attempted.


When queried for its version over DNS (dig chaos txt version.bind @pdns.ip.address), PowerDNS normally responds truthfully. With this setting you can overrule what will be returned. Set the version-string to full to get the default behaviour, to powerdns to just make it state served by PowerDNS - The anonymous setting will return a ServFail, much like Microsoft nameservers do. You can set this response to a custom value as well.


Start a webserver for monitoring. See "Performance Monitoring". Before 4.1.0, it was necessary to enable the webserver to use the REST API, this is no longer the case.


IP Address for webserver/API to listen on. See "Performance Monitoring".


Webserver/API access is only allowed from these subnets.


The plaintext password required for accessing the webserver. See "Performance Monitoring".


The port where webserver/API will listen on. See "Performance Monitoring".


If the webserver should print arguments. See "Performance Monitoring".


If a PID file should be written. Available since 4.0.


Specifies the maximum number of received megabytes allowed on an incoming AXFR/IXFR update, to prevent resource exhaustion. A value of 0 means no restriction.