]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/recursordist/docs/settings.rst
rec: Use a bounded load-balancing algo to distribute queries
[thirdparty/pdns.git] / pdns / recursordist / docs / settings.rst
1 PowerDNS Recursor Settings
2 ==========================
3 Each setting can appear on the command line, prefixed by '--', or in the configuration file.
4 The command line overrides the configuration file.
5
6 **Note**: Settings marked as 'Boolean' can either be set to an empty value, which means on, or to 'no' or 'off' which means off.
7 Anything else means on.
8
9 As an example:
10
11 - ``serve-rfc1918`` on its own means: do serve those zones.
12 - ``serve-rfc1918=off`` or ``serve-rfc1918=no`` means: do not serve those zones.
13 - Anything else means: do serve those zones.
14
15 .. _setting-allow-from:
16
17 ``allow-from``
18 --------------
19 - IP ranges, separated by commas
20 - Default: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
21
22 Netmasks (both IPv4 and IPv6) that are allowed to use the server.
23 The default allows access only from :rfc:`1918` private IP addresses.
24 Due to the aggressive nature of the internet these days, it is highly recommended to not open up the recursor for the entire internet.
25 Questions from IP addresses not listed here are ignored and do not get an answer.
26
27 .. _setting-allow-from-file:
28
29 ``allow-from-file``
30 -------------------
31 - Path
32
33 Like `allow-from`_, except reading from file.
34 Overrides the `allow-from`_ setting. To use this feature, supply one netmask per line, with optional comments preceded by a "#".
35
36 .. _setting-any-to-tcp:
37
38 ``any-to-tcp``
39 --------------
40 - Boolean
41 - Default: no
42
43 Answer questions for the ANY type on UDP with a truncated packet that refers the remote server to TCP.
44 Useful for mitigating ANY reflection attacks.
45
46 .. _setting-api-config-dir:
47
48 ``api-config-dir``
49 ------------------
50 .. versionadded:: 4.0.0
51
52 - Path
53 - Default: unset
54
55 Directory where the REST API stores its configuration and zones.
56
57 .. _setting-api-key:
58
59 ``api-key``
60 -----------
61 .. versionadded:: 4.0.0
62
63 - String
64 - Default: unset
65
66 Static pre-shared authentication key for access to the REST API.
67
68 .. _setting-api-readonly:
69
70 ``api-readonly``
71 ----------------
72 .. versionchanged:: 4.2.0
73 This setting has been removed.
74
75 - Boolean
76 - Default: no
77
78 Disallow data modification through the REST API when set.
79
80 .. _setting-api-logfile:
81
82 ``api-logfile``
83 ---------------
84 .. versionchanged:: 4.2.0
85 This setting has been removed.
86
87 - Path
88 - Default: unset
89
90 Location of the server logfile (used by the REST API).
91
92 .. _setting-auth-can-lower-ttl:
93
94 ``auth-can-lower-ttl``
95 ----------------------
96 - Boolean
97 - Default: no
98
99 Authoritative zones can transmit a TTL value that is lower than that specified in the parent zone.
100 This is called a 'delegation inconsistency'.
101 To follow :rfc:`RFC 2181 section 5.2<2181#section-5.2>` and :rfc:`5.4 <2181#section-5.4>` to the letter, enable this feature.
102 This will mean a slight deterioration of performance, and it will not solve any problems, but does make the recursor more standards compliant.
103 Not recommended unless you have to tick an 'RFC 2181 compliant' box.
104
105 .. _setting-auth-zones:
106
107 ``auth-zones``
108 --------------
109 - Comma separated list of 'zonename=filename' pairs
110
111 Zones read from these files (in BIND format) are served authoritatively.
112 DNSSEC is not supported. Example:
113
114 .. code-block:: none
115
116 auth-zones=example.org=/var/zones/example.org, powerdns.com=/var/zones/powerdns.com
117
118 .. _setting-carbon-interval:
119
120 ``carbon-interval``
121 -------------------
122 - Integer
123 - Default: 30
124
125 If sending carbon updates, this is the interval between them in seconds.
126 See :doc:`metrics`.
127
128 .. _setting-carbon-namespace:
129
130 ``carbon-namespace``
131 --------------------
132 .. versionadded:: 4.2.0
133
134 - String
135
136 Change the namespace or first string of the metric key. The default is pdns.
137
138 .. _setting-carbon-ourname:
139
140 ``carbon-ourname``
141 ------------------
142 - String
143
144 If sending carbon updates, if set, this will override our hostname.
145 Be careful not to include any dots in this setting, unless you know what you are doing.
146 See :ref:`metricscarbon`.
147
148 .. _setting-carbon-instance:
149
150 ``carbon-instance``
151 --------------------
152 .. versionadded:: 4.2.0
153
154 - String
155
156 Change the instance or third string of the metric key. The default is recursor.
157
158 .. _setting-carbon-server:
159
160 ``carbon-server``
161 -----------------
162 - IP address
163
164 If set to an IP or IPv6 address, will send all available metrics to this server via the carbon protocol, which is used by graphite and metronome. Moreover you can specify more than one server using a comma delimited list, ex: carbon-server=10.10.10.10,10.10.10.20.
165 You may specify an alternate port by appending :port, for example: ``127.0.0.1:2004``.
166 See :doc:`metrics`.
167
168 .. _setting-chroot:
169
170 ``chroot``
171 ----------
172 - Path to a Directory
173
174 If set, chroot to this directory for more security.
175 See :doc:`security`
176
177 Make sure that ``/dev/log`` is available from within the chroot.
178 Logging will silently fail over time otherwise (on logrotate).
179
180 When using ``chroot``, all other paths (except for `config-dir`_) set in the configuration are relative to the new root.
181
182 When using ``chroot`` and the API (`webserver`_), `api-readonly`_ **must** be set and `api-config-dir`_ unset.
183
184 When running on a system where systemd manages services, ``chroot`` does not work out of the box, as PowerDNS cannot use the ``NOTIFY_SOCKET``.
185 Either do not ``chroot`` on these systems or set the 'Type' of this service to 'simple' instead of 'notify' (refer to the systemd documentation on how to modify unit-files).
186
187 .. _setting-client-tcp-timeout:
188
189 ``client-tcp-timeout``
190 ----------------------
191 - Integer
192 - Default: 2
193
194 Time to wait for data from TCP clients.
195
196 .. _setting-config-dir:
197
198 ``config-dir``
199 --------------
200 - Path
201
202 Location of configuration directory (``recursor.conf``).
203 Usually ``/etc/powerdns``, but this depends on ``SYSCONFDIR`` during compile-time.
204
205 .. _setting-config-name:
206
207 ``config-name``
208 ---------------
209 - String
210 - Default: unset
211
212 When running multiple recursors on the same server, read settings from :file:`recursor-{name}.conf`, this will also rename the binary image.
213
214 .. _setting-cpu-map:
215
216 ``cpu-map``
217 -----------
218 .. versionadded:: 4.1.0
219
220 - String
221 - Default: unset
222
223 Set CPU affinity for worker threads, asking the scheduler to run those threads on a single CPU, or a set of CPUs.
224 This parameter accepts a space separated list of thread-id=cpu-id, or thread-id=cpu-id-1,cpu-id-2,...,cpu-id-N.
225 For example, to make the worker thread 0 run on CPU id 0 and the worker thread 1 on CPUs 1 and 2::
226
227 cpu-map=0=0 1=1,2
228
229 The number of worker threads is determined by the :ref:`setting-threads` setting.
230 If :ref:`setting-pdns-distributes-queries` is set, an additional thread is started, assigned the id 0,
231 and is the only one listening on client sockets and accepting queries, distributing them to the other worker threads afterwards.
232
233 Starting with version 4.2.0, the thread handling the control channel, the webserver and other internal stuff has been assigned
234 id 0 and more than one distributor thread can be started using the :ref:`setting-distributor-threads` setting, so the distributor
235 threads if any are assigned id 1 and counting, and the other threads follow behind.
236
237 This parameter is only available on OS that provides the `pthread_setaffinity_np()` function.
238
239 .. _setting-daemon:
240
241 ``daemon``
242 ----------
243 - Boolean
244 - Default: no
245
246 .. versionchanged:: 4.0.0
247
248 Default is now "no", was "yes" before.
249
250 Operate in the background.
251
252 .. _setting-delegation-only:
253
254 ``delegation-only``
255 -------------------
256 - Domains, comma separated
257
258 Which domains we only accept delegations from (a Verisign special).
259
260 .. _setting-disable-packetcache:
261
262 ``disable-packetcache``
263 -----------------------
264 - Boolean
265 - Default: no
266
267 Turn off the packet cache. Useful when running with Lua scripts that can
268 not be cached.
269
270 .. _setting-disable-syslog:
271
272 ``disable-syslog``
273 ------------------
274 - Boolean
275 - Default: no
276
277 Do not log to syslog, only to stdout.
278 Use this setting when running inside a supervisor that handles logging (like systemd).
279 **Note**: do not use this setting in combination with `daemon`_ as all logging will disappear.
280
281 .. _setting-distribution-load-factor:
282
283 ``distribution-load-factor``
284 ----------------------------
285 .. versionadded:: 4.1.12
286
287 - Double
288 - Default: 0.0
289
290 If `pdns-distributes-queries`_ is set and this setting is set to another value
291 than 0, the distributor thread will use a bounded load-balancing algorithm while
292 distributing queries to worker threads, making sure that no thread is assigned
293 more queries than distribution-load-factor times the average number of queries
294 currently processed by all the workers.
295 For example, with a value of 1.25, no server should get more than 125 % of the
296 average load. This helps making sure that all the workers have roughly the same
297 share of queries, even if the incoming traffic is very skewed, with a larger
298 number of requests asking for the same qname.
299
300 .. _setting-distributor-threads:
301
302 ``distributor-threads``
303 -----------------------
304 .. versionadded:: 4.2.0
305
306 - Integer
307 - Default: 1 if `pdns-distributes-queries`_ is set, 0 otherwise
308
309 If `pdns-distributes-queries`_ is set, spawn this number of distributor threads on startup. Distributor threads
310 handle incoming queries and distribute them to other threads based on a hash of the query, to maximize the cache hit
311 ratio.
312
313 .. _setting-dnssec:
314
315 ``dnssec``
316 ----------
317 .. versionadded:: 4.0.0
318
319 - One of ``off``, ``process-no-validate``, ``process``, ``log-fail``, ``validate``, String
320 - Default: ``process-no-validate``
321
322 Set the mode for DNSSEC processing:
323
324 off
325 ^^^
326 No DNSSEC processing whatsoever.
327 Ignore DO-bits in queries, don't request any DNSSEC information from authoritative servers.
328 This behaviour is similar to PowerDNS Recursor pre-4.0.
329
330 process-no-validate
331 ^^^^^^^^^^^^^^^^^^^
332 Respond with DNSSEC records to clients that ask for it, set the DO bit on all outgoing queries.
333 Don't do any validation.
334
335 process
336 ^^^^^^^
337 Respond with DNSSEC records to clients that ask for it, set the DO bit on all outgoing queries.
338 Do validation for clients that request it (by means of the AD- bit or DO-bit in the query).
339
340 log-fail
341 ^^^^^^^^
342 Similar behaviour to ``process``, but validate RRSIGs on responses and log bogus responses.
343
344 validate
345 ^^^^^^^^
346 Full blown DNSSEC validation. Send SERVFAIL to clients on bogus responses.
347
348 .. _setting-dnssec-log-bogus:
349
350 ``dnssec-log-bogus``
351 --------------------
352 - Boolean
353 - Default: no
354
355 Log every DNSSEC validation failure.
356 **Note**: This is not logged per-query but every time records are validated as Bogus.
357
358 .. _setting-dont-query:
359
360 ``dont-query``
361 --------------
362 - Netmasks, comma separated
363 - Default: 127.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 169.254.0.0/16, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fc00::/7, fe80::/10, 0.0.0.0/8, 192.0.0.0/24, 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 240.0.0.0/4, ::/96, ::ffff:0:0/96, 100::/64, 2001:db8::/32
364
365 The DNS is a public database, but sometimes contains delegations to private IP addresses, like for example 127.0.0.1.
366 This can have odd effects, depending on your network, and may even be a security risk.
367 Therefore, the PowerDNS Recursor by default does not query private space IP addresses.
368 This setting can be used to expand or reduce the limitations.
369
370 Queries to addresses for zones as configured in any of the settings `forward-zones`_, `forward-zones-file`_ or `forward-zones-recurse`_ are performed regardless of these limitations.
371
372 .. _setting-ecs-add-for:
373
374 ``ecs-add-for``
375 ---------------
376 .. versionadded:: 4.2.0
377
378 - Comma separated list of netmasks
379 - Default: 0.0.0.0/0, ::, !127.0.0.0/8, !10.0.0.0/8, !100.64.0.0/10, !169.254.0.0/16, !192.168.0.0/16, !172.16.0.0/12, !::1/128, !fc00::/7, !fe80::/10
380
381 List of requestor netmasks for which the requestor IP Address should be used as the :rfc:`EDNS Client Subnet <7871>` for outgoing queries. Outgoing queries for requestors that do not match this list will use the `ecs-scope-zero-address`_ instead.
382 Valid incoming ECS values from `use-incoming-edns-subnet`_ are not replaced.
383
384 Regardless of the value of this setting, ECS values are only sent for outgoing queries matching the conditions in the `edns-subnet-whitelist`_ setting. This setting only controls the actual value being sent.
385
386 This defaults to not using the requestor address inside RFC1918 and similar "private" IP address spaces.
387
388 .. _setting-ecs-ipv4-bits:
389
390 ``ecs-ipv4-bits``
391 -----------------
392 .. versionadded:: 4.1.0
393
394 - Integer
395 - Default: 24
396
397 Number of bits of client IPv4 address to pass when sending EDNS Client Subnet address information.
398
399 .. _setting-ecs-ipv6-bits:
400
401 ``ecs-ipv6-bits``
402 -----------------
403 .. versionadded:: 4.1.0
404
405 - Integer
406 - Default: 56
407
408 Number of bits of client IPv6 address to pass when sending EDNS Client Subnet address information.
409
410 .. _setting-ecs-minimum-ttl-override:
411
412 ``ecs-minimum-ttl-override``
413 ----------------------------
414 - Integer
415 - Default: 0 (disabled)
416
417 This setting artificially raises the TTLs of records in the ANSWER section of ECS-specific answers to be at least this long.
418 While this is a gross hack, and violates RFCs, under conditions of DoS, it may enable you to continue serving your customers.
419 Can be set at runtime using ``rec_control set-ecs-minimum-ttl 3600``.
420
421 .. _setting-ecs-scope-zero-address:
422
423 ``ecs-scope-zero-address``
424 --------------------------
425 .. versionadded:: 4.1.0
426
427 - IPv4 or IPv6 Address
428 - Default: empty
429
430 The IP address sent via EDNS Client Subnet to authoritative servers listed in
431 `edns-subnet-whitelist`_ when `use-incoming-edns-subnet`_ is set and the query has
432 an ECS source prefix-length set to 0.
433 The default is to look for the first usable (not an ``any`` one) address in
434 `query-local-address`_ then `query-local-address6`_. If no suitable address is
435 found, the recursor fallbacks to sending 127.0.0.1.
436
437 .. _setting-edns-outgoing-bufsize:
438
439 ``edns-outgoing-bufsize``
440 -------------------------
441 .. versionchanged:: 4.2.0
442 Before 4.2.0, the default was 1680
443
444 - Integer
445 - Default: 1232
446
447 .. note:: Why 1232?
448
449 1232 is the largest number of payload bytes that can fit in the smallest IPv6 packet.
450 IPv6 has a minimum MTU of 1280 bytes (:rfc:`RFC 8200, section 5 <8200#section-5>`), minus 40 bytes for the IPv6 header, minus 8 bytes for the UDP header gives 1232, the maximum payload size for the DNS response.
451
452 This is the value set for the EDNS0 buffer size in outgoing packets.
453 Lower this if you experience timeouts.
454
455 .. _setting-edns-subnet-whitelist:
456
457 ``edns-subnet-whitelist``
458 -------------------------
459 - Comma separated list of domain names and netmasks
460 - Default: (none)
461
462 List of netmasks and domains that :rfc:`EDNS Client Subnet <7871>` should be enabled for in outgoing queries.
463
464 For example, an EDNS Client Subnet option containing the address of the initial requestor (but see `ecs-add-for`_) will be added to an outgoing query sent to server 192.0.2.1 for domain X if 192.0.2.1 matches one of the supplied netmasks, or if X matches one of the supplied domains.
465 The initial requestor address will be truncated to 24 bits for IPv4 (see `ecs-ipv4-bits`_) and to 56 bits for IPv6 (see `ecs-ipv6-bits`_), as recommended in the privacy section of RFC 7871.
466
467 By default, this option is empty, meaning no EDNS Client Subnet information is sent.
468
469 .. _setting-entropy-source:
470
471 ``entropy-source``
472 ------------------
473 - Path
474 - Default: /dev/urandom
475
476 PowerDNS can read entropy from a (hardware) source.
477 This is used for generating random numbers which are very hard to predict.
478 Generally on UNIX platforms, this source will be ``/dev/urandom``, which will always supply random numbers, even if entropy is lacking.
479 Change to ``/dev/random`` if PowerDNS should block waiting for enough entropy to arrive.
480
481 .. _setting-etc-hosts-file:
482
483 ``etc-hosts-file``
484 ------------------
485 - Path
486 - Default: /etc/hosts
487
488 The path to the /etc/hosts file, or equivalent.
489 This file can be used to serve data authoritatively using `export-etc-hosts`_.
490
491 .. _setting-export-etc-hosts:
492
493 ``export-etc-hosts``
494 --------------------
495 - Boolean
496 - Default: no
497
498 If set, this flag will export the host names and IP addresses mentioned in ``/etc/hosts``.
499
500 .. _setting-export-etc-hosts-search-suffix:
501
502 ``export-etc-hosts-search-suffix``
503 ----------------------------------
504 - String
505
506 If set, all hostnames in the `export-etc-hosts`_ file are loaded in canonical form, based on this suffix, unless the name contains a '.', in which case the name is unchanged.
507 So an entry called 'pc' with ``export-etc-hosts-search-suffix='home.com'`` will lead to the generation of 'pc.home.com' within the recursor.
508 An entry called 'server1.home' will be stored as 'server1.home', regardless of this setting.
509
510 .. _setting-forward-zones:
511
512 ``forward-zones``
513 -----------------
514 - 'zonename=IP' pairs, comma separated
515
516 Queries for zones listed here will be forwarded to the IP address listed. i.e.
517
518 .. code-block:: none
519
520 forward-zones=example.org=203.0.113.210, powerdns.com=2001:DB8::BEEF:5
521
522 Multiple IP addresses can be specified and port numbers other than 53 can be configured:
523
524 .. code-block:: none
525
526 forward-zones=example.org=203.0.113.210:5300;127.0.0.1, powerdns.com=127.0.0.1;198.51.100.10:530;[2001:DB8::1:3]:5300
527
528 Forwarded queries have the 'recursion desired' bit set to 0, meaning that this setting is intended to forward queries to authoritative servers.
529
530 **IMPORTANT**: When using DNSSEC validation (which is default), forwards to non-delegated (e.g. internal) zones that have a DNSSEC signed parent zone will validate as Bogus.
531 To prevent this, add a Negative Trust Anchor (NTA) for this zone in the `lua-config-file`_ with ``addNTA("your.zone", "A comment")``.
532 If this forwarded zone is signed, instead of adding NTA, add the DS record to the `lua-config-file`_.
533 See the :doc:`dnssec` information.
534
535 .. _setting-forward-zones-file:
536
537 ``forward-zones-file``
538 ----------------------
539 - Path
540
541 Same as `forward-zones`_, parsed from a file. Only 1 zone is allowed per line, specified as follows:
542
543 .. code-block:: none
544
545 example.org=203.0.113.210, 192.0.2.4:5300
546
547 Zones prefixed with a '+' are forwarded with the recursion-desired bit set, for which see `forward-zones-recurse`_.
548 Default behaviour without '+' is as with `forward-zones`_.
549
550 .. versionchanged:: 4.0.0
551
552 Comments are allowed, everything behind '#' is ignored.
553
554 The DNSSEC notes from `forward-zones`_ apply here as well.
555
556 .. _setting-forward-zones-recurse:
557
558 ``forward-zones-recurse``
559 -------------------------
560 - 'zonename=IP' pairs, comma separated
561
562 Like regular `forward-zones`_, but forwarded queries have the 'recursion desired' bit set to 1, meaning that this setting is intended to forward queries to other recursive servers.
563
564 The DNSSEC notes from `forward-zones`_ apply here as well.
565
566 .. _setting-gettag-needs-edns-options:
567
568 ``gettag-needs-edns-options``
569 -----------------------------
570 .. versionadded:: 4.1.0
571
572 - Boolean
573 - Default: no
574
575 If set, EDNS options in incoming queries are extracted and passed to the :func:`gettag` hook in the ``ednsoptions`` table.
576
577 .. _setting-hint-file:
578
579 ``hint-file``
580 -------------
581 - Path
582
583 If set, the root-hints are read from this file. If unset, default root hints are used.
584
585 .. _setting-include-dir:
586
587 ``include-dir``
588 ---------------
589 - Path
590
591 Directory to scan for additional config files. All files that end with .conf are loaded in order using ``POSIX`` as locale.
592
593 .. _setting-latency-statistic-size:
594
595 ``latency-statistic-size``
596 --------------------------
597 - Integer
598 - Default: 10000
599
600 Indication of how many queries will be averaged to get the average latency reported by the 'qa-latency' metric.
601
602 .. _setting-local-address:
603
604 ``local-address``
605 -----------------
606 - IP addresses, comma separated
607 - Default: 127.0.0.1
608
609 Local IPv4 or IPv6 addresses to bind to.
610 Addresses can also contain port numbers, for IPv4 specify like this: ``192.0.2.4:5300``, for IPv6: ``[::1]:5300``.
611
612 **Warning**: When binding to wildcard addresses, UNIX semantics mean that answers may not be sent from the address a query was received on.
613 It is highly recommended to bind to explicit addresses.
614
615 .. _setting-local-port:
616
617 ``local-port``
618 --------------
619 - Integer
620 - Default: 53
621
622 Local port to bind to.
623 If an address in `local-address`_ does not have an explicit port, this port is used.
624
625 .. _setting-log-timestamp:
626
627 ``log-timestamp``
628 -----------------
629
630 .. versionadded:: 4.1.0
631
632 - Bool
633 - Default: yes
634
635 When printing log lines to stdout, prefix them with timestamps.
636 Disable this if the process supervisor timestamps these lines already.
637
638 .. note::
639 The systemd unit file supplied with the source code already disables timestamp printing
640
641 .. _setting-non-local-bind:
642
643 ``non-local-bind``
644 ------------------
645 - Boolean
646 - Default: no
647
648 Bind to addresses even if one or more of the `local-address`_'s do not exist on this server.
649 Setting this option will enable the needed socket options to allow binding to non-local addresses.
650 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.
651
652 .. _setting-loglevel:
653
654 ``loglevel``
655 ------------
656 - Integer between 0 and 9
657 - Default: 6
658
659 Amount of logging.
660 Higher is more, more logging may destroy performance.
661 It is recommended not to set this below 3.
662
663 .. _setting-log-common-errors:
664
665 ``log-common-errors``
666 ---------------------
667 - Boolean
668 - Default: no
669
670 Some DNS errors occur rather frequently and are no cause for alarm.
671
672 ``log-rpz-changes``
673 -------------------
674 .. versionadded:: 4.1.0
675
676 - Boolean
677 - Default: no
678
679 Log additions and removals to RPZ zones at Info (6) level instead of Debug (7).
680
681 .. _setting-logging-facility:
682
683 ``logging-facility``
684 --------------------
685 - Integer
686
687 If set to a digit, logging is performed under this LOCAL facility.
688 See :ref:`logging`.
689 Do not pass names like 'local0'!
690
691 .. _setting-lowercase-outgoing:
692
693 ``lowercase-outgoing``
694 ----------------------
695 - Boolean
696 - Default: no
697
698 Set to true to lowercase the outgoing queries.
699 When set to 'no' (the default) a query from a client using mixed case in the DNS labels (such as a user entering mixed-case names or `draft-vixie-dnsext-dns0x20-00 <http://tools.ietf.org/html/draft-vixie-dnsext-dns0x20-00>`_), PowerDNS preserves the case of the query.
700 Broken authoritative servers might give a wrong or broken answer on this encoding.
701 Setting ``lowercase-outgoing`` to 'yes' makes the PowerDNS Recursor lowercase all the labels in the query to the authoritative servers, but still return the proper case to the client requesting.
702
703 .. _setting-lua-config-file:
704
705 ``lua-config-file``
706 -------------------
707 - Filename
708
709 If set, and Lua support is compiled in, this will load an additional configuration file for newer features and more complicated setups.
710 See :doc:`lua-config/index` for the options that can be set in this file.
711
712 .. _setting-lua-dns-script:
713
714 ``lua-dns-script``
715 ------------------
716 - Path
717 - Default: unset
718
719 Path to a lua file to manipulate the Recursor's answers. See :doc:`lua-scripting/index` for more information.
720
721 .. _setting-maintenance-interval:
722
723 ``lua-maintenance-interval``
724 ----------------------------
725 .. versionadded:: 4.1.4
726
727 - Integer
728 - Default: 1
729
730
731 The interval between calls to the Lua user defined `maintenance()` function in seconds.
732 See :ref:`hooks-maintenance-callback`
733
734 .. _setting-max-cache-bogus-ttl:
735
736 ``max-cache-bogus-ttl``
737 -----------------------
738 .. versionadded:: 4.2.0
739
740 - Integer
741 - Default: 3600
742
743 Maximum number of seconds to cache an item in the DNS cache (negative or positive) if its DNSSEC validation failed, no matter what the original TTL specified, to reduce the impact of a broken domain.
744
745 .. _setting-max-cache-entries:
746
747 ``max-cache-entries``
748 ---------------------
749 - Integer
750 - Default: 1000000
751
752 Maximum number of DNS cache entries.
753 1 million per thread will generally suffice for most installations.
754
755 .. _setting-max-cache-ttl:
756
757 ``max-cache-ttl``
758 -----------------
759 - Integer
760 - Default: 86400
761
762 Maximum number of seconds to cache an item in the DNS cache, no matter what the original TTL specified.
763
764 .. versionchanged:: 4.1.0
765
766 The minimum value of this setting is 15. i.e. setting this to lower than 15 will make this value 15.
767
768 .. _setting-max-mthreads:
769
770 ``max-mthreads``
771 ----------------
772 - Integer
773 - Default: 2048
774
775 Maximum number of simultaneous MTasker threads.
776
777 .. _setting-max-packetcache-entries:
778
779 ``max-packetcache-entries``
780 ---------------------------
781 - Integer
782 - Default: 500000
783
784 Maximum number of Packet Cache entries.
785 1 million per thread will generally suffice for most installations.
786
787 .. _setting-max-qperq:
788
789 ``max-qperq``
790 -------------
791 - Integer
792 - Default: 50
793
794 The maximum number of outgoing queries that will be sent out during the resolution of a single client query.
795 This is used to limit endlessly chasing CNAME redirections.
796
797 .. _setting-max-negative-ttl:
798
799 ``max-negative-ttl``
800 --------------------
801 - Integer
802 - Default: 3600
803
804 A query for which there is authoritatively no answer is cached to quickly deny a record's existence later on, without putting a heavy load on the remote server.
805 In practice, caches can become saturated with hundreds of thousands of hosts which are tried only once.
806 This setting, which defaults to 3600 seconds, puts a maximum on the amount of time negative entries are cached.
807
808 .. _setting-max-recursion-depth:
809
810 ``max-recursion-depth``
811 -----------------------
812 - Integer
813 - Default: 40
814
815 Total maximum number of internal recursion calls the server may use to answer a single query.
816 0 means unlimited.
817 The value of `stack-size`_ should be increased together with this one to prevent the stack from overflowing.
818
819 .. versionchanged:: 4.1.0
820
821 Before 4.1.0, this settings was unlimited.
822
823 .. _setting-max-tcp-clients:
824
825 ``max-tcp-clients``
826 -------------------
827 - Integer
828 - Default: 128
829
830 Maximum number of simultaneous incoming TCP connections allowed.
831
832 .. _setting-max-tcp-per-client:
833
834 ``max-tcp-per-client``
835 ----------------------
836 - Integer
837 - Default: 0 (unlimited)
838
839 Maximum number of simultaneous incoming TCP connections allowed per client (remote IP address).
840
841 .. _setting-max-tcp-queries-per-connection:
842
843 ``max-tcp-queries-per-connection``
844 ----------------------------------
845 .. versionadded:: 4.1.0
846
847 - Integer
848 - Default: 0 (unlimited)
849
850 Maximum number of DNS queries in a TCP connection.
851
852 .. _setting-max-total-msec:
853
854 ``max-total-msec``
855 ------------------
856 - Integer
857 - Default: 7000
858
859 Total maximum number of milliseconds of wallclock time the server may use to answer a single query.
860
861 .. _setting-max-udp-queries-per-round:
862
863 ``max-udp-queries-per-round``
864 ----------------------------------
865 .. versionadded:: 4.1.4
866
867 - Integer
868 - Default: 10000
869
870 Under heavy load the recursor might be busy processing incoming UDP queries for a long while before there is no more of these, and might therefore
871 neglect scheduling new ``mthreads``, handling responses from authoritative servers or responding to :doc:`rec_control <manpages/rec_control.1>`
872 requests.
873 This setting caps the maximum number of incoming UDP DNS queries processed in a single round of looping on ``recvmsg()`` after being woken up by the multiplexer, before
874 returning back to normal processing and handling other events.
875
876 .. _setting-minimum-ttl-override:
877
878 ``minimum-ttl-override``
879 ------------------------
880 - Integer
881 - Default: 0 (disabled)
882
883 This setting artificially raises all TTLs to be at least this long.
884 While this is a gross hack, and violates RFCs, under conditions of DoS, it may enable you to continue serving your customers.
885 Can be set at runtime using ``rec_control set-minimum-ttl 3600``.
886
887 .. _setting-new-domain-tracking:
888
889 ``new-domain-tracking``
890 -----------------------
891 .. versionadded:: 4.2.0
892
893 - Boolean
894 - Default: no (disabled)
895
896 Whether to track newly observed domains, i.e. never seen before. This
897 is a probablistic algorithm, using a stable bloom filter to store
898 records of previously seen domains. When enabled for the first time,
899 all domains will appear to be newly observed, so the feature is best
900 left enabled for e.g. a week or longer before using the results. Note
901 that this feature is optional and must be enabled at compile-time,
902 thus it may not be available in all pre-built packages.
903 If protobuf is enabled and configured, then the newly observed domain
904 status will appear as a flag in Response messages.
905
906 .. _setting-new-domain-log:
907
908 ``new-domain-log``
909 ------------------
910 .. versionadded:: 4.2.0
911
912 - Boolean
913 - Default: yes (enabled)
914
915 If a newly observed domain is detected, log that domain in the
916 recursor log file. The log line looks something like::
917
918 Jul 18 11:31:25 Newly observed domain nod=sdfoijdfio.com
919
920 .. _setting-new-domain-lookup:
921
922 ``new-domain-lookup``
923 ---------------------
924 .. versionadded:: 4.2.0
925
926 - Domain Name
927 - Example: nod.powerdns.com
928
929 If a domain is specified, then each time a newly observed domain is
930 detected, the recursor will perform an A record lookup of "<newly
931 observed domain>.<lookup domain>". For example if 'new-domain-lookup'
932 is configured as 'nod.powerdns.com', and a new domain 'xyz123.tv' is
933 detected, then an A record lookup will be made for
934 'xyz123.tv.nod.powerdns.com'. This feature gives a way to share the
935 newly observed domain with partners, vendors or security teams. The
936 result of the DNS lookup will be ignored by the recursor.
937
938 .. _setting-new-domain-db-size:
939
940 ``new-domain-db-size``
941 ----------------------
942 .. versionadded:: 4.2.0
943
944 - Integer
945 - Example: 67108864
946
947 The default size of the stable bloom filter used to store previously
948 observed domains is 67108864. To change the number of cells, use this
949 setting. For each cell, the SBF uses 1 bit of memory, and one byte of
950 disk for the persistent file.
951 If there are already persistent files saved to disk, this setting will
952 have no effect unless you remove the existing files.
953
954 .. _setting-new-domain-history-dir:
955
956 ``new-domain-history-dir``
957 --------------------------
958 .. versionadded:: 4.2.0
959
960 - Path
961
962 This setting controls which directory is used to store the on-disk
963 cache of previously observed domains.
964
965 The default depends on ``LOCALSTATEDIR`` when building the software.
966 Usually this comes down to ``/var/lib/pdns-recursor/nod`` or ``/usr/local/var/lib/pdns-recursor/nod``).
967
968 The newly observed domain feature uses a stable bloom filter to store
969 a history of previously observed domains. The data structure is
970 synchronized to disk every 10 minutes, and is also initialized from
971 disk on startup. This ensures that previously observed domains are
972 preserved across recursor restarts.
973 If you change the new-domain-db-size setting, you must remove any files
974 from this directory.
975
976 .. _setting-new-domain-whitelist:
977
978 ``new-domain-whitelist``
979 ------------------------
980 .. versionadded:: 4.2.0
981
982 - List of Domain Names, comma separated
983 - Example: xyz.com, abc.com
984
985 This setting is a list of all domains (and implicitly all subdomains)
986 that will never be considered a new domain. For example, if the domain
987 'xyz123.tv' is in the list, then 'foo.bar.xyz123.tv' will never be
988 considered a new domain. One use-case for the whitelist is to never
989 reveal details of internal subdomains via the new-domain-lookup
990 feature.
991
992 .. _setting-new-domain-pb-tag:
993
994 ``new-domain-pb-tag``
995 ---------------------
996 .. versionadded:: 4.2.0
997
998 - String
999 - Default: pnds-nod
1000
1001 If protobuf is configured, then this tag will be added to all protobuf response messages when
1002 a new domain is observed.
1003
1004 .. _setting-network-timeout:
1005
1006 ``network-timeout``
1007 -------------------
1008 - Integer
1009 - Default: 1500
1010
1011 Number of milliseconds to wait for a remote authoritative server to respond.
1012
1013 .. _setting-nsec3-max-iterations:
1014
1015 ``nsec3-max-iterations``
1016 ------------------------
1017 .. versionadded:: 4.1.0
1018
1019 - Integer
1020 - Default: 2500
1021
1022 Maximum number of iterations allowed for an NSEC3 record.
1023 If an answer containing an NSEC3 record with more iterations is received, its DNSSEC validation status is treated as Insecure.
1024
1025 .. _setting-packetcache-ttl:
1026
1027 ``packetcache-ttl``
1028 -------------------
1029 - Integer
1030 - Default: 3600
1031
1032 Maximum number of seconds to cache an item in the packet cache, no matter what the original TTL specified.
1033
1034 .. _setting-packetcache-servfail-ttl:
1035
1036 ``packetcache-servfail-ttl``
1037 ----------------------------
1038 - Integer
1039 - Default: 60
1040
1041 Maximum number of seconds to cache a 'server failure' answer in the packet cache.
1042
1043 .. versionchanged:: 4.0.0
1044
1045 This setting's maximum is capped to `packetcache-ttl`_.
1046 i.e. setting ``packetcache-ttl=15`` and keeping ``packetcache-servfail-ttl`` at the default will lower ``packetcache-servfail-ttl`` to ``15``.
1047
1048 .. _setting-pdns-distributes-queries:
1049
1050 ``pdns-distributes-queries``
1051 ----------------------------
1052 - Boolean
1053 - Default: yes
1054
1055 If set, PowerDNS will have only 1 thread listening on client sockets, and distribute work by itself over threads by using a hash of the query,
1056 maximizing the cache hit ratio. Starting with version 4.2.0, more than one distributing thread can be started using the `distributor-threads`_
1057 setting.
1058 Improves performance on Linux.
1059
1060 .. _settting-public-suffix-list-file:
1061
1062 ``public-suffix-list-file``
1063 ---------------------------
1064 .. versionadded:: 4.2.0
1065
1066 - Path
1067 - Default: unset
1068
1069 Path to the Public Suffix List file, if any. If set, PowerDNS will try to load the Public Suffix List from this file instead of using the built-in list. The PSL is used to group the queries by relevant domain names when displaying the top queries.
1070
1071 .. _setting-query-local-address:
1072
1073 ``query-local-address``
1074 -----------------------
1075 - IPv4 Address, comma separated
1076 - Default: 0.0.0.0
1077
1078 Send out local queries from this address, or addresses, by adding multiple addresses, increased spoofing resilience is achieved.
1079
1080 .. _setting-query-local-address6:
1081
1082 ``query-local-address6``
1083 ------------------------
1084 - IPv6 addresses, comma separated
1085 - Default: unset
1086
1087 Send out local IPv6 queries from this address or addresses.
1088 Disabled by default, which also disables outgoing IPv6 support.
1089
1090 .. _setting-quiet:
1091
1092 ``quiet``
1093 ---------
1094 - Boolean
1095 - Default: yes
1096
1097 Don't log queries.
1098
1099 .. _setting-reuseport:
1100
1101 ``reuseport``
1102 -------------
1103 - Boolean
1104 - Default: no
1105
1106 If ``SO_REUSEPORT`` support is available, allows multiple processes to open a listening socket on the same port.
1107
1108 Since 4.1.0, when ``pdns-distributes-queries`` is set to false and ``reuseport`` is enabled, every thread will open a separate listening socket to let the kernel distribute the incoming queries, avoiding any thundering herd issue as well as the distributor thread being a bottleneck, thus leading to much higher performance on multi-core boxes.
1109
1110 .. _setting-rng:
1111
1112 ``rng``
1113 -------
1114
1115 - String
1116 - Default: auto
1117
1118 Specify which random number generator to use. Permissible choises are
1119 - auto - choose automatically
1120 - sodium - Use libsodium ``randombytes_uniform``
1121 - openssl - Use libcrypto ``RAND_bytes``
1122 - getrandom - Use libc getrandom, falls back to urandom if it does not really work
1123 - arc4random - Use BSD ``arc4random_uniform``
1124 - urandom - Use ``/dev/urandom``
1125 - kiss - Use simple settable deterministic RNG. **FOR TESTING PURPOSES ONLY!**
1126
1127 .. note::
1128 Not all choises are available on all systems.
1129
1130 .. _setting-root-nx-trust:
1131
1132 ``root-nx-trust``
1133 -----------------
1134 - Boolean
1135 - Default: yes
1136
1137 If set, an NXDOMAIN from the root-servers will serve as a blanket NXDOMAIN for the entire TLD the query belonged to.
1138 The effect of this is far fewer queries to the root-servers.
1139
1140 .. versionchanged:: 4.0.0
1141
1142 Default is 'yes' now, was 'no' before 4.0.0
1143
1144 .. _setting-security-poll-suffix:
1145
1146 ``security-poll-suffix``
1147 ------------------------
1148 - String
1149 - Default: secpoll.powerdns.com.
1150
1151 Domain name from which to query security update notifications.
1152 Setting this to an empty string disables secpoll.
1153
1154 .. _setting-serve-rfc1918:
1155
1156 ``serve-rfc1918``
1157 -----------------
1158 - Boolean
1159 - Default: yes
1160
1161 This makes the server authoritatively aware of: ``10.in-addr.arpa``, ``168.192.in-addr.arpa``, ``16-31.172.in-addr.arpa``, which saves load on the AS112 servers.
1162 Individual parts of these zones can still be loaded or forwarded.
1163
1164 .. _setting-server-down-max-fails:
1165
1166 ``server-down-max-fails``
1167 -------------------------
1168 - Integer
1169 - Default: 64
1170
1171 If a server has not responded in any way this many times in a row, no longer send it any queries for `server-down-throttle-time`_ seconds.
1172 Afterwards, we will try a new packet, and if that also gets no response at all, we again throttle for `server-down-throttle-time`_ seconds.
1173 Even a single response packet will drop the block.
1174
1175 .. _setting-server-down-throttle-time:
1176
1177 ``server-down-throttle-time``
1178 -----------------------------
1179 - Integer
1180 - Default: 60
1181
1182 Throttle a server that has failed to respond `server-down-max-fails`_ times for this many seconds.
1183
1184 .. _setting-server-id:
1185
1186 ``server-id``
1187 -------------
1188 - String
1189 - Default: The hostname of the server
1190
1191 The reply given by The PowerDNS recursor to a query for 'id.server' with its hostname, useful for in clusters.
1192 When a query contains the :rfc:`NSID EDNS0 Option <5001>`, this value is returned in the response as the NSID value.
1193
1194 This setting can be used to override the answer given to these queries.
1195 Set to "disabled" to disable NSID and 'id.server' answers.
1196
1197 Query example (where 192.0.2.14 is your server):
1198
1199 .. code-block:: sh
1200
1201 dig @192.0.2.14 CHAOS TXT id.server.
1202 dig @192.0.2.14 example.com IN A +nsid
1203
1204 ``setgid``, ``setuid``
1205 ----------------------
1206 - String
1207 - Default: unset
1208
1209 PowerDNS can change its user and group id after binding to its socket.
1210 Can be used for better :doc:`security <security>`.
1211
1212 .. _setting-signature-inception-skew:
1213
1214 ``signature-inception-skew``
1215 ----------------------------------
1216 .. versionadded:: 4.1.5
1217
1218 - Integer
1219 - Default: 60
1220
1221 Allow the signature inception to be off by this number of seconds. Negative values are not allowed.
1222
1223 .. versionchanged:: 4.2.0
1224
1225 Default is now 60, was 0 before.
1226
1227 .. _setting-single-socket:
1228
1229 ``single-socket``
1230 -----------------
1231 - Boolean
1232 - Default: no
1233
1234 Use only a single socket for outgoing queries.
1235
1236 .. _setting-snmp-agent:
1237
1238 ``snmp-agent``
1239 --------------
1240 .. versionadded:: 4.1.0
1241
1242 - Boolean
1243 - Default: no
1244
1245 If set to true and PowerDNS has been compiled with SNMP support, it will register as an SNMP agent to provide statistics and be able to send traps.
1246
1247 .. _setting-snmp-master-socket:
1248
1249 ``snmp-master-socket``
1250 ----------------------
1251 .. versionadded:: 4.1.0
1252
1253 - String
1254 - Default: empty
1255
1256 If not empty and ``snmp-agent`` is set to true, indicates how PowerDNS should contact the SNMP master to register as an SNMP agent.
1257
1258 .. _setting-socket-dir:
1259
1260 ``socket-dir``
1261 --------------
1262 - Path
1263
1264 Where to store the control socket and pidfile.
1265 The default depends on ``LOCALSTATEDIR`` or the ``--with-socketdir`` setting when building (usually ``/var/run`` or ``/run``).
1266
1267 When using `chroot`_ the default becomes to ``/``.
1268
1269 ``socket-owner``, ``socket-group``, ``socket-mode``
1270 ---------------------------------------------------
1271 Owner, group and mode of the controlsocket.
1272 Owner and group can be specified by name, mode is in octal.
1273
1274 .. _setting-spoof-nearmiss-max:
1275
1276 ``spoof-nearmiss-max``
1277 ----------------------
1278 - Integer
1279 - Default: 20
1280
1281 If set to non-zero, PowerDNS will assume it is being spoofed after seeing this many answers with the wrong id.
1282
1283 .. _setting-stack-size:
1284
1285 ``stack-size``
1286 --------------
1287 - Integer
1288 - Default: 200000
1289
1290 Size of the stack per thread.
1291
1292 .. _setting-statistics-interval:
1293
1294 ``statistics-interval``
1295 -----------------------
1296 .. versionadded:: 4.1.0
1297
1298 - Integer
1299 - Default: 1800
1300
1301 Interval between logging statistical summary on recursor performance.
1302 Use 0 to disable.
1303
1304 .. _setting-stats-api-blacklist:
1305
1306 ``stats-api-blacklist``
1307 -----------------------
1308 .. versionadded:: 4.2.0
1309
1310 - String
1311 - Default: "cache-bytes, packetcache-bytes, ecs-v4-response-bits-*, ecs-v6-response-bits-*"
1312
1313 A list of comma-separated statistic names, that are disabled when retrieving the complete list of statistics via the API for performance reasons.
1314 These statistics can still be retrieved individually by specifically asking for it.
1315
1316 .. _setting-stats-carbon-blacklist:
1317
1318 ``stats-carbon-blacklist``
1319 --------------------------
1320 .. versionadded:: 4.2.0
1321
1322 - String
1323 - Default: "cache-bytes, packetcache-bytes, ecs-v4-response-bits-*, ecs-v6-response-bits-*"
1324
1325 A list of comma-separated statistic names, that are prevented from being exported via carbon for performance reasons.
1326
1327 .. _setting-stats-rec-control-blacklist:
1328
1329 ``stats-rec-control-blacklist``
1330 -------------------------------
1331 .. versionadded:: 4.2.0
1332
1333 - String
1334 - Default: "cache-bytes, packetcache-bytes, ecs-v4-response-bits-*, ecs-v6-response-bits-*"
1335
1336 A list of comma-separated statistic names, that are disabled when retrieving the complete list of statistics via `rec_control get-all`, for performance reasons.
1337 These statistics can still be retrieved individually.
1338
1339 .. _setting-stats-ringbuffer-entries:
1340
1341 ``stats-ringbuffer-entries``
1342 ----------------------------
1343 - Integer
1344 - Default: 10000
1345
1346 Number of entries in the remotes ringbuffer, which keeps statistics on who is querying your server.
1347 Can be read out using ``rec_control top-remotes``.
1348
1349 .. _setting-stats-snmp-blacklist:
1350
1351 ``stats-snmp-blacklist``
1352 ------------------------
1353 .. versionadded:: 4.2.0
1354
1355 - String
1356 - Default: "cache-bytes, packetcache-bytes, ecs-v4-response-bits-*, ecs-v6-response-bits-*"
1357
1358 A list of comma-separated statistic names, that are prevented from being exported via SNMP, for performance reasons.
1359
1360 .. _setting-tcp-fast-open:
1361
1362 ``tcp-fast-open``
1363 -----------------
1364 .. versionadded:: 4.1.0
1365
1366 - Integer
1367 - Default: 0 (Disabled)
1368
1369 Enable TCP Fast Open support, if available, on the listening sockets.
1370 The numerical value supplied is used as the queue size, 0 meaning disabled.
1371
1372 .. _setting-threads:
1373
1374 ``threads``
1375 -----------
1376 - Integer
1377 - Default: 2
1378
1379 Spawn this number of threads on startup.
1380
1381 .. _setting-trace:
1382
1383 ``trace``
1384 ---------
1385 - Boolean
1386 - Default: no
1387
1388 If turned on, output impressive heaps of logging.
1389 May destroy performance under load.
1390
1391 .. _setting-udp-source-port-min:
1392
1393 ``udp-source-port-min``
1394 -----------------------
1395 .. versionadded:: 4.2.0
1396
1397 - Integer
1398 - Default: 1024
1399
1400 This option sets the low limit of UDP port number to bind on.
1401
1402 In combination with `udp-source-port-max`_ it configures the UDP
1403 port range to use. Port numbers are randomized within this range on
1404 initialization, and exceptions can be configured with `udp-source-port-avoid`_
1405
1406 .. _setting-udp-source-port-max:
1407
1408 ``udp-source-port-max``
1409 -----------------------
1410 .. versionadded:: 4.2.0
1411
1412 - Integer
1413 - Default: 65535
1414
1415 This option sets the maximum limit of UDP port number to bind on.
1416
1417 See `udp-source-port-min`_.
1418
1419 .. _setting-udp-source-port-avoid:
1420
1421 ``udp-source-port-avoid``
1422 -------------------------
1423 .. versionadded:: 4.2.0
1424
1425 - String
1426 - Default: 11211
1427
1428 A list of comma-separated UDP port numbers to avoid when binding.
1429 Ex: `5300,11211`
1430
1431 See `udp-source-port-min`_.
1432
1433 .. _setting-udp-truncation-threshold:
1434
1435 ``udp-truncation-threshold``
1436 ----------------------------
1437 .. versionchanged:: 4.2.0
1438 Before 4.2.0, the default was 1680
1439
1440 - Integer
1441 - Default: 1232
1442
1443 EDNS0 allows for large UDP response datagrams, which can potentially raise performance.
1444 Large responses however also have downsides in terms of reflection attacks.
1445 This setting limits the accepted size.
1446 Maximum value is 65535, but values above 4096 should probably not be attempted.
1447
1448 To know why 1232, see the note at :ref:`setting-edns-outgoing-bufsize`.
1449
1450 .. _setting-unique-response-tracking:
1451
1452 ``unique-response-tracking``
1453 ----------------------------
1454 .. versionadded:: 4.2.0
1455
1456 - Boolean
1457 - Default: no (disabled)
1458
1459 Whether to track unique DNS responses, i.e. never seen before combinations
1460 of the triplet (query name, query type, RR[rrname, rrtype, rrdata]).
1461 This can be useful for tracking potentially suspicious domains and
1462 behaviour, e.g. DNS fast-flux.
1463 If protobuf is enabled and configured, then the Protobuf Response message
1464 will contain a flag with udr set to true for each RR that is considered
1465 unique, i.e. never seen before.
1466 This feature uses a probabilistic data structure (stable bloom filter) to
1467 track unique responses, which can have false positives as well as false
1468 negatives, thus it is a best-effort feature. Increasing the number of cells
1469 in the SBF using the unique-response-db-size setting can reduce FPs and FNs.
1470
1471 .. _setting-unique-response-log:
1472
1473 ``unique-response-log``
1474 -----------------------
1475 .. versionadded:: 4.2.0
1476
1477 - Boolean
1478 - Default: no (disabled)
1479
1480 Whether to log when a unique response is detected. The log line
1481 looks something like:
1482
1483 Oct 24 12:11:27 Unique response observed: qname=foo.com qtype=A rrtype=AAAA rrname=foo.com rrcontent=1.2.3.4
1484
1485 .. _setting-unique-response-db-size:
1486
1487 ``unique-response-db-size``
1488 ---------------------------
1489 .. versionadded:: 4.2.0
1490
1491 - Integer
1492 - Example: 67108864
1493
1494 The default size of the stable bloom filter used to store previously
1495 observed responses is 67108864. To change the number of cells, use this
1496 setting. For each cell, the SBF uses 1 bit of memory, and one byte of
1497 disk for the persistent file.
1498 If there are already persistent files saved to disk, this setting will
1499 have no effect unless you remove the existing files.
1500
1501 .. _setting-unique-response-history-dir:
1502
1503 ``unique-response-history-dir``
1504 -------------------------------
1505 .. versionadded:: 4.2.0
1506
1507 - Path
1508
1509 This setting controls which directory is used to store the on-disk
1510 cache of previously observed responses.
1511
1512 The default depends on ``LOCALSTATEDIR`` when building the software.
1513 Usually this comes down to ``/var/lib/pdns-recursor/udr`` or ``/usr/local/var/lib/pdns-recursor/udr``).
1514
1515 The newly observed domain feature uses a stable bloom filter to store
1516 a history of previously observed responses. The data structure is
1517 synchronized to disk every 10 minutes, and is also initialized from
1518 disk on startup. This ensures that previously observed responses are
1519 preserved across recursor restarts. If you change the
1520 unique-response-db-size, you must remove any files from this directory.
1521
1522 .. _setting-unique-response-pb-tag:
1523
1524 ``unique-response-pb-tag``
1525 --------------------------
1526 .. versionadded:: 4.2.0
1527
1528 - String
1529 - Default: pnds-udr
1530
1531 If protobuf is configured, then this tag will be added to all protobuf response messages when
1532 a unique DNS response is observed.
1533
1534 .. _setting-use-incoming-edns-subnet:
1535
1536 ``use-incoming-edns-subnet``
1537 ----------------------------
1538 - Boolean
1539 - Default: no
1540
1541 Whether to process and pass along a received EDNS Client Subnet to authoritative servers.
1542 The ECS information will only be sent for netmasks and domains listed in `edns-subnet-whitelist`_ and will be truncated if the received scope exceeds `ecs-ipv4-bits`_ for IPv4 or `ecs-ipv6-bits`_ for IPv6.
1543
1544 .. _setting-version:
1545
1546 ``version``
1547 -----------
1548 Print version of this binary. Useful for checking which version of the PowerDNS recursor is installed on a system.
1549
1550 .. _setting-version-string:
1551
1552 ``version-string``
1553 ------------------
1554 - String
1555 - Default: PowerDNS Recursor version number
1556
1557 By default, PowerDNS replies to the 'version.bind' query with its version number.
1558 Security conscious users may wish to override the reply PowerDNS issues.
1559
1560 .. _setting-webserver:
1561
1562 ``webserver``
1563 -------------
1564 - Boolean
1565 - Default: no
1566
1567 Start the webserver (for REST API).
1568
1569 .. _setting-webserver-address:
1570
1571 ``webserver-address``
1572 ---------------------
1573 - IP Address
1574 - Default: 127.0.0.1
1575
1576 IP address for the webserver to listen on.
1577
1578 .. _setting-webserver-allow-from:
1579
1580 ``webserver-allow-from``
1581 ------------------------
1582 - IP addresses, comma separated
1583 - Default: 127.0.0.1,::1
1584
1585 .. versionchanged:: 4.1.0
1586
1587 Default is now 127.0.0.1,::1, was 0.0.0.0,::/0 before.
1588
1589 These subnets are allowed to access the webserver.
1590
1591 .. _setting-webserver-password:
1592
1593 ``webserver-password``
1594 ----------------------
1595 - String
1596 - Default: unset
1597
1598 Password required to access the webserver.
1599
1600 .. _setting-webserver-port:
1601
1602 ``webserver-port``
1603 ------------------
1604 - Integer
1605 - Default: 8082
1606
1607 TCP port where the webserver should listen on.
1608
1609 .. _setting-write-pid:
1610
1611 ``write-pid``
1612 -------------
1613 - Boolean
1614 - Default: yes
1615
1616 If a PID file should be written to `socket-dir`_
1617
1618 .. _setting-xpf-allow-from:
1619
1620 ``xpf-allow-from``
1621 ------------------
1622 .. versionadded:: 4.2.0
1623
1624 - IP ranges, separated by commas
1625 - Default: empty
1626
1627 .. note::
1628 This is an experimental implementation of `draft-bellis-dnsop-xpf <https://datatracker.ietf.org/doc/draft-bellis-dnsop-xpf/>`_.
1629
1630 The server will trust XPF records found in queries sent from those netmasks (both IPv4 and IPv6),
1631 and will adjust queries' source and destination accordingly. This is especially useful when the recursor
1632 is placed behind a proxy like `dnsdist <https://dnsdist.org>`_.
1633 Note that the ref:`setting-allow-from` setting is still applied to the original source address, and thus access restriction
1634 should be done on the proxy.
1635
1636 .. _setting-xpf-rr-code:
1637
1638 ``xpf-rr-code``
1639 ---------------
1640 .. versionadded:: 4.2.0
1641
1642 - Integer
1643 - Default: 0
1644
1645 .. note::
1646 This is an experimental implementation of `draft-bellis-dnsop-xpf <https://datatracker.ietf.org/doc/draft-bellis-dnsop-xpf/>`_.
1647
1648 This option sets the resource record code to use for XPF records, as long as an official code has not been assigned to it.
1649 0 means that XPF is disabled.