]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/dnsdistdist/docs/reference/config.rst
Merge pull request #7933 from rgacogne/dnsdist-doh-http-stats
[thirdparty/pdns.git] / pdns / dnsdistdist / docs / reference / config.rst
1 .. highlight:: lua
2
3 Configuration Reference
4 =======================
5
6 This page lists all configuration options for dnsdist.
7
8 .. note::
9
10 When an IPv6 IP:PORT combination is needed, the bracketed syntax from :rfc:`RFC 3986 <3986#section-3.2.2>` should be used.
11 e.g. "[2001:DB8:14::C0FF:FEE]:5300".
12
13 Functions and Types
14 -------------------
15
16 Within dnsdist several core object types exist:
17
18 * :class:`Server`: generated with :func:`newServer`, represents a downstream server
19 * :class:`ComboAddress`: represents an IP address and port
20 * :class:`DNSName`: represents a domain name
21 * :class:`NetmaskGroup`: represents a group of netmasks
22 * :class:`QPSLimiter`: implements a QPS-based filter
23 * :class:`SuffixMatchNode`: represents a group of domain suffixes for rapid testing of membership
24 * :class:`DNSHeader`: represents the header of a DNS packet, see :ref:`DNSHeader`
25 * :class:`ClientState`: sometimes also called Bind or Frontend, represents the addresses and ports dnsdist is listening on
26
27 The existence of most of these objects can mostly be ignored, unless you plan to write your own hooks and policies, but it helps to understand an expressions like:
28
29 .. code-block:: lua
30
31 getServer(0).order=12 -- set order of server 0 to 12
32 getServer(0):addPool("abuse") -- add this server to the abuse pool
33
34 The ``.`` means ``order`` is a data member, while the ``:`` means ``addPool`` is a member function.
35
36 Global configuration
37 --------------------
38
39 .. function:: includeDirectory(path)
40
41 Include configuration files from ``path``.
42
43 :param str path: The directory to load configuration files from. Each file must end in ``.conf``.
44
45 .. function:: reloadAllCertificates()
46
47 .. versionadded:: 1.4.0
48
49 Reload all DNSCrypt and TLS certificates, along with their associated keys.
50
51 .. function:: setSyslogFacility(facility)
52
53 .. versionadded:: 1.4.0
54
55 Set the syslog logging facility to ``facility``.
56
57 :param int facility: The new facility as a numeric value. Defaults to LOG_DAEMON.
58
59 Listen Sockets
60 ~~~~~~~~~~~~~~
61
62 .. function:: addLocal(address[, options])
63
64 .. versionadded:: 1.2.0
65
66 .. versionchanged:: 1.3.0
67 Added ``cpus`` to the options.
68
69 .. versionchanged:: 1.4.0
70 Removed ``doTCP`` from the options. A listen socket on TCP is always created.
71
72 Add to the list of listen addresses.
73
74 :param str address: The IP Address with an optional port to listen on.
75 The default port is 53.
76 :param table options: A table with key: value pairs with listen options.
77
78 Options:
79
80 * ``doTCP=true``: bool - Also bind on TCP on ``address``. Removed in 1.4.0.
81 * ``reusePort=false``: bool - Set the ``SO_REUSEPORT`` socket option.
82 * ``tcpFastOpenQueueSize=0``: int - Set the TCP Fast Open queue size, enabling TCP Fast Open when available and the value is larger than 0.
83 * ``interface=""``: str - Set the network interface to use.
84 * ``cpus={}``: table - Set the CPU affinity for this listener thread, asking the scheduler to run it on a single CPU id, or a set of CPU ids. This parameter is only available if the OS provides the pthread_setaffinity_np() function.
85
86 .. code-block:: lua
87
88 addLocal('0.0.0.0:5300', { reusePort=true })
89
90 This will bind to both UDP and TCP on port 5300 with SO_REUSEPORT enabled.
91
92 .. function:: addLocal(address[[[,do_tcp], so_reuseport], tcp_fast_open_qsize])
93
94 .. deprecated:: 1.2.0
95
96 Add to the list of addresses listened on.
97
98 :param str address: The IP Address with an optional port to listen on.
99 The default port is 53.
100 :param bool do_tcp: Also bind a TCP port on ``address``, defaults to true.
101 :param bool so_reuseport: Use ``SO_REUSEPORT`` if it is available, defaults to false
102 :param int tcp_fast_open_qsize: The size of the TCP Fast Open queue. Set to a number
103 higher than 0 to enable TCP Fast Open when available.
104 Default is 0.
105
106 .. function:: addDOHLocal(address, certFile(s), keyFile(s) [, urls [, options]])
107
108 .. versionadded:: 1.4.0
109
110 Listen on the specified address and TCP port for incoming DNS over HTTPS connections, presenting the specified X.509 certificate.
111
112 :param str address: The IP Address with an optional port to listen on.
113 The default port is 443.
114 :param str certFile(s): The path to a X.509 certificate file in PEM format, or a list of paths to such files.
115 :param str keyFile(s): The path to the private key file corresponding to the certificate, or a list of paths to such files, whose order should match the certFile(s) ones.
116 :param str-or-list urls: A base URL, or a list of base URLs, to accept queries on. Any query with a path under one of these will be treated as a DoH query. The default is /.
117 :param table options: A table with key: value pairs with listen options.
118
119 Options:
120
121 * ``reusePort=false``: bool - Set the ``SO_REUSEPORT`` socket option.
122 * ``tcpFastOpenQueueSize=0``: int - Set the TCP Fast Open queue size, enabling TCP Fast Open when available and the value is larger than 0.
123 * ``interface=""``: str - Set the network interface to use.
124 * ``cpus={}``: table - Set the CPU affinity for this listener thread, asking the scheduler to run it on a single CPU id, or a set of CPU ids. This parameter is only available if the OS provides the pthread_setaffinity_np() function.
125 * ``idleTimeout=30``: int - Set the idle timeout, in seconds.
126 * ``ciphers``: str - The TLS ciphers to use, in OpenSSL format. Ciphers for TLS 1.3 must be specified via ``ciphersTLS13``.
127 * ``ciphersTLS13``: str - The TLS ciphers to use for TLS 1.3, in OpenSSL format.
128 * ``serverTokens``: str - The content of the Server: HTTP header returned by dnsdist. The default is "h2o/dnsdist".
129
130 .. function:: addTLSLocal(address, certFile(s), keyFile(s) [, options])
131
132 .. versionadded:: 1.3.0
133 .. versionchanged:: 1.3.1
134 ``certFile(s)`` and ``keyFile(s)`` parameters accept a list of files.
135 ``sessionTickets`` option added.
136 .. versionchanged:: 1.3.3
137 ``numberOfStoredSessions`` option added.
138 .. versionchanged:: 1.4.0
139 ``ciphersTLS13`` option added.
140
141 Listen on the specified address and TCP port for incoming DNS over TLS connections, presenting the specified X.509 certificate.
142
143 :param str address: The IP Address with an optional port to listen on.
144 The default port is 853.
145 :param str certFile(s): The path to a X.509 certificate file in PEM format, or a list of paths to such files.
146 :param str keyFile(s): The path to the private key file corresponding to the certificate, or a list of paths to such files, whose order should match the certFile(s) ones.
147 :param table options: A table with key: value pairs with listen options.
148
149 Options:
150
151 * ``reusePort=false``: bool - Set the ``SO_REUSEPORT`` socket option.
152 * ``tcpFastOpenQueueSize=0``: int - Set the TCP Fast Open queue size, enabling TCP Fast Open when available and the value is larger than 0.
153 * ``interface=""``: str - Set the network interface to use.
154 * ``cpus={}``: table - Set the CPU affinity for this listener thread, asking the scheduler to run it on a single CPU id, or a set of CPU ids. This parameter is only available if the OS provides the pthread_setaffinity_np() function.
155 * ``provider``: str - The TLS library to use between GnuTLS and OpenSSL, if they were available and enabled at compilation time.
156 * ``ciphers``: str - The TLS ciphers to use. The exact format depends on the provider used. When the OpenSSL provder is used, ciphers for TLS 1.3 must be specified via ``ciphersTLS13``.
157 * ``ciphersTLS13``: str - The ciphers to use for TLS 1.3, when the OpenSSL provider is used. When the GnuTLS provider is used, ``ciphers`` applies regardless of the TLS protocol and this setting is not used.
158 * ``numberOfTicketsKeys``: int - The maximum number of tickets keys to keep in memory at the same time, if the provider supports it (GnuTLS doesn't, OpenSSL does). Only one key is marked as active and used to encrypt new tickets while the remaining ones can still be used to decrypt existing tickets after a rotation. Default to 5.
159 * ``ticketKeyFile``: str - The path to a file from where TLS tickets keys should be loaded, to support RFC 5077. These keys should be rotated often and never written to persistent storage to preserve forward secrecy. The default is to generate a random key. The OpenSSL provider supports several tickets keys to be able to decrypt existing sessions after the rotation, while the GnuTLS provider only supports one key.
160 * ``ticketsKeysRotationDelay``: int - Set the delay before the TLS tickets key is rotated, in seconds. Default is 43200 (12h).
161 * ``sessionTickets``: bool - Whether session resumption via session tickets is enabled. Default is true, meaning tickets are enabled.
162 * ``numberOfStoredSessions``: int - The maximum number of sessions kept in memory at the same time. At this time this is only supported by the OpenSSL provider, as stored sessions are not supported with the GnuTLS one. Default is 20480. Setting this value to 0 disables stored session entirely.
163
164 .. function:: setLocal(address[, options])
165
166 .. versionadded:: 1.2.0
167
168 Remove the list of listen addresses and add a new one.
169
170 :param str address: The IP Address with an optional port to listen on.
171 The default port is 53.
172 :param table options: A table with key: value pairs with listen options.
173
174 The options that can be set are the same as :func:`addLocal`.
175
176 .. function:: setLocal(address[[[,do_tcp], so_reuseport], tcp_fast_open_qsize])
177
178 .. deprecated:: 1.2.0
179
180 Remove the list of listen addresses and add a new one.
181
182 :param str address: The IP Address with an optional port to listen on.
183 The default port is 53.
184 :param bool do_tcp: Also bind a TCP port on ``address``, defaults to true.
185 :param bool so_reuseport: Use ``SO_REUSEPORT`` if it is available, defaults to false
186 :param int tcp_fast_open_qsize: The size of the TCP Fast Open queue. Set to a number
187 higher than 0 to enable TCP Fast Open when available.
188 Default is 0.
189
190 Control Socket, Console and Webserver
191 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
192
193 .. function:: addConsoleACL(netmask)
194
195 .. versionadded:: 1.3.0
196
197 Add a netmask to the existing console ACL, allowing remote clients to connect to the console. Please make sure that encryption
198 has been enabled with :func:`setKey` before doing so. The default is to only allow 127.0.0.1/8 and ::1/128.
199
200 :param str netmask: A CIDR netmask, e.g. ``"192.0.2.0/24"``. Without a subnetmask, only the specific address is allowed.
201
202 .. function:: controlSocket(address)
203
204 Bind to ``addr`` and listen for a connection for the console. Since 1.3.0 only connections from local users are allowed
205 by default, :func:`addConsoleACL` and :func:`setConsoleACL` can be used to enable remote connections. Please make sure
206 that encryption has been enabled with :func:`setKey` before doing so. Enabling encryption is also strongly advised for
207 local connections, since not enabling it allows any local user to connect to the console.
208
209 :param str address: An IP address with optional port. By default, the port is 5199.
210
211 .. function:: inClientStartup()
212
213 Returns true while the console client is parsing the configuration.
214
215 .. function:: makeKey()
216
217 Generate and print an encryption key.
218
219 .. function:: setConsoleConnectionsLogging(enabled)
220
221 .. versionadded:: 1.2.0
222
223 Whether to log the opening and closing of console connections.
224
225 :param bool enabled: Default to true.
226
227 .. function:: setKey(key)
228
229 Use ``key`` as shared secret between the client and the server
230
231 :param str key: An encoded key, as generated by :func:`makeKey`
232
233 .. function:: setConsoleACL(netmasks)
234
235 .. versionadded:: 1.3.0
236
237 Remove the existing console ACL and add the netmasks from the table, allowing remote clients to connect to the console. Please make sure that encryption
238 has been enabled with :func:`setKey` before doing so.
239
240 :param {str} netmasks: A table of CIDR netmask, e.g. ``{"192.0.2.0/24", "2001:DB8:14::/56"}``. Without a subnetmask, only the specific address is allowed.
241
242 .. function:: showConsoleACL()
243
244 Print a list of all netmasks allowed to connect to the console.
245
246 .. function:: testCrypto()
247
248 Test the crypto code, will report errors when something is not ok.
249
250 .. function:: setConsoleOutputMaxMsgSize(size)
251
252 .. versionadded:: 1.3.3
253
254 Set the maximum size in bytes of a single console message, default set to 10 MB.
255
256 :param int size: The new maximum size.
257
258 Webserver configuration
259 ~~~~~~~~~~~~~~~~~~~~~~~
260
261 .. function:: webserver(listen_address, password[, apikey[, custom_headers]])
262
263 Launch the :doc:`../guides/webserver` with statistics and the API.
264
265 :param str listen_address: The IP address and Port to listen on
266 :param str password: The password required to access the webserver
267 :param str apikey: The key required to access the API
268 :param {[str]=str,...} custom_headers: Allows setting custom headers and removing the defaults
269
270 .. function:: setAPIWritable(allow [,dir])
271
272 Allow modifications via the API.
273 Optionally saving these changes to disk.
274 Modifications done via the API will not be written to the configuration by default and will not persist after a reload
275
276 :param bool allow: Set to true to allow modification through the API
277 :param str dir: A valid directory where the configuration files will be written by the API.
278
279 .. function:: setWebserverConfig(options)
280
281 .. versionadded:: 1.3.3
282
283 Setup webserver configuration. See :func:`webserver`.
284
285 :param table options: A table with key: value pairs with webserver options.
286
287 Options:
288
289 * ``password=newPassword``: string - Changes the API password
290 * ``apikey=newKey``: string - Changes the API Key (set to an empty string do disable it)
291 * ``custom_headers={[str]=str,...}``: map of string - Allows setting custom headers and removing the defaults.
292
293 Access Control Lists
294 ~~~~~~~~~~~~~~~~~~~~
295
296 .. function:: addACL(netmask)
297
298 Add a netmask to the existing ACL controlling which clients can send UDP, TCP, DNS over TLS and DNS over HTTPS queries. See :ref:`ACL` for more information.
299
300 :param str netmask: A CIDR netmask, e.g. ``"192.0.2.0/24"``. Without a subnetmask, only the specific address is allowed.
301
302 .. function:: setACL(netmasks)
303
304 Remove the existing ACL and add the netmasks from the table of those allowed to send UDP, TCP, DNS over TLS and DNS over HTTPS queries. See :ref:`ACL` for more information.
305
306 :param {str} netmasks: A table of CIDR netmask, e.g. ``{"192.0.2.0/24", "2001:DB8:14::/56"}``. Without a subnetmask, only the specific address is allowed.
307
308 .. function:: showACL()
309
310 Print a list of all netmasks allowed to send queries over UDP, TCP, DNS over TLS and DNS over HTTPS. See :ref:`ACL` for more information.
311
312 EDNS Client Subnet
313 ~~~~~~~~~~~~~~~~~~
314
315 .. function:: setECSOverride(bool)
316
317 When ``useClientSubnet`` in :func:`newServer` is set and dnsdist adds an EDNS Client Subnet Client option to the query, override an existing option already present in the query, if any
318
319 :param bool: Whether to override an existing EDNS Client Subnet option present in the query. Defaults to false
320
321 .. function:: setECSSourcePrefixV4(prefix)
322
323 When ``useClientSubnet`` in :func:`newServer` is set and dnsdist adds an EDNS Client Subnet Client option to the query, truncate the requestors IPv4 address to ``prefix`` bits
324
325 :param int prefix: The prefix length
326
327 .. function:: setECSSourcePrefixV6(prefix)
328
329 When ``useClientSubnet`` in :func:`newServer` is set and dnsdist adds an EDNS Client Subnet Client option to the query, truncate the requestor's IPv6 address to bits
330
331 :param int prefix: The prefix length
332
333 Ringbuffers
334 ~~~~~~~~~~~
335
336 .. function:: setRingBuffersLockRetries(num)
337
338 .. versionadded:: 1.3.0
339
340 Set the number of shards to attempt to lock without blocking before giving up and simply blocking while waiting for the next shard to be available
341
342 :param int num: The maximum number of attempts. Defaults to 5 if there is more than one shard, 0 otherwise.
343
344 .. function:: setRingBuffersSize(num [, numberOfShards])
345
346 .. versionchanged:: 1.3.0
347 ``numberOfShards`` optional parameter added.
348
349 Set the capacity of the ringbuffers used for live traffic inspection to ``num``, and the number of shards to ``numberOfShards`` if specified.
350
351 :param int num: The maximum amount of queries to keep in the ringbuffer. Defaults to 10000
352 :param int numberOfShards: the number of shards to use to limit lock contention. Defaults to 1
353
354 Servers
355 -------
356
357 .. function:: newServer(server_string)
358 newServer(server_table)
359
360 .. versionchanged:: 1.3.0
361 Added ``checkClass``, ``sockets`` and ``checkFunction`` to server_table.
362
363 .. versionchanged:: 1.4.0
364 Added ``checkInterval``, ``checkTimeout`` and ``rise`` to server_table.
365
366 Add a new backend server. Call this function with either a string::
367
368 newServer(
369 "IP:PORT" -- IP and PORT of the backend server
370 )
371
372 or a table::
373
374 newServer({
375 address="IP:PORT", -- IP and PORT of the backend server (mandatory)
376 id=STRING, -- Use a pre-defined UUID instead of a random one
377 qps=NUM, -- Limit the number of queries per second to NUM, when using the `firstAvailable` policy
378 order=NUM, -- The order of this server, used by the `leastOutstanding` and `firstAvailable` policies
379 weight=NUM, -- The weight of this server, used by the `wrandom`, `whashed` and `chashed` policies, default: 1
380 -- Supported values are a minimum of 1, and a maximum of 2147483647.
381 pool=STRING|{STRING}, -- The pools this server belongs to (unset or empty string means default pool) as a string or table of strings
382 retries=NUM, -- The number of TCP connection attempts to the backend, for a given query
383 tcpConnectTimeout=NUM, -- The timeout (in seconds) of a TCP connection attempt
384 tcpSendTimeout=NUM, -- The timeout (in seconds) of a TCP write attempt
385 tcpRecvTimeout=NUM, -- The timeout (in seconds) of a TCP read attempt
386 tcpFastOpen=BOOL, -- Whether to enable TCP Fast Open
387 ipBindAddrNoPort=BOOL, -- Whether to enable IP_BIND_ADDRESS_NO_PORT if available, default: true
388 name=STRING, -- The name associated to this backend, for display purpose
389 checkClass=NUM, -- Use NUM as QCLASS in the health-check query, default: DNSClass.IN
390 checkName=STRING, -- Use STRING as QNAME in the health-check query, default: "a.root-servers.net."
391 checkType=STRING, -- Use STRING as QTYPE in the health-check query, default: "A"
392 checkFunction=FUNCTION,-- Use this function to dynamically set the QNAME, QTYPE and QCLASS to use in the health-check query (see :ref:`Healthcheck`)
393 checkTimeout=NUM, -- The timeout (in milliseconds) of a health-check query, default: 1000 (1s)
394 setCD=BOOL, -- Set the CD (Checking Disabled) flag in the health-check query, default: false
395 maxCheckFailures=NUM, -- Allow NUM check failures before declaring the backend down, default: 1
396 checkInterval=NUM -- The time in seconds between health checks
397 mustResolve=BOOL, -- Set to true when the health check MUST return a RCODE different from NXDomain, ServFail and Refused. Default is false, meaning that every RCODE except ServFail is considered valid
398 useClientSubnet=BOOL, -- Add the client's IP address in the EDNS Client Subnet option when forwarding the query to this backend
399 source=STRING, -- The source address or interface to use for queries to this backend, by default this is left to the kernel's address selection
400 -- The following formats are supported:
401 -- "address", e.g. "192.0.2.2"
402 -- "interface name", e.g. "eth0"
403 -- "address@interface", e.g. "192.0.2.2@eth0"
404 addXPF=NUM, -- Add the client's IP address and port to the query, along with the original destination address and port,
405 -- using the experimental XPF record from `draft-bellis-dnsop-xpf <https://datatracker.ietf.org/doc/draft-bellis-dnsop-xpf/>`_ and the specified option code. Default is disabled (0)
406 sockets=NUM, -- Number of sockets (and thus source ports) used toward the backend server, defaults to a single one
407 disableZeroScope=BOOL, -- Disable the EDNS Client Subnet 'zero scope' feature, which does a cache lookup for an answer valid for all subnets (ECS scope of 0) before adding ECS information to the query and doing the regular lookup
408 rise=NUM -- Require NUM consecutive successful checks before declaring the backend up, default: 1
409 })
410
411 :param str server_string: A simple IP:PORT string.
412 :param table server_table: A table with at least a 'name' key
413
414 .. function:: getServer(index) -> Server
415
416 Get a :class:`Server`
417
418 :param int index: The number of the server (as seen in :func:`showServers`).
419 :returns: The :class:`Server` object or nil
420
421 .. function:: getServers()
422
423 Returns a table with all defined servers.
424
425 .. function:: rmServer(index)
426 rmServer(server)
427
428 Remove a backend server.
429
430 :param int index: The number of the server (as seen in :func:`showServers`).
431 :param Server server: A :class:`Server` object as returned by e.g. :func:`getServer`.
432
433 Server Functions
434 ~~~~~~~~~~~~~~~~
435 A server object returned by :func:`getServer` can be manipulated with these functions.
436
437 .. class:: Server
438
439 This object represents a backend server. It has several methods.
440
441 .. method:: Server:addPool(pool)
442
443 Add this server to a pool.
444
445 :param str pool: The pool to add the server to
446
447 .. method:: Server:getName() -> string
448
449 Get the name of this server.
450
451 :returns: The name of the server, or an empty string if it does not have one
452
453 .. method:: Server:getNameWithAddr() -> string
454
455 Get the name plus IP address and port of the server
456
457 :returns: A string containing the server name if any plus the server address and port
458
459 .. method:: Server:getOutstanding() -> int
460
461 Get the number of outstanding queries for this server.
462
463 :returns: The number of outstanding queries
464
465 .. method:: Server:isUp() -> bool
466
467 Returns the up status of the server
468
469 :returns: true when the server is up, false otherwise
470
471 .. method:: Server:rmPool(pool)
472
473 Removes the server from the named pool
474
475 :param str pool: The pool to remove the server from
476
477 .. method:: Server:setAuto([status])
478
479 .. versionchanged:: 1.3.0
480 ``status`` optional parameter added.
481
482 Set the server in the default auto state.
483 This will enable health check queries that will set the server ``up`` and ``down`` appropriately.
484
485 :param bool status: Set the initial status of the server to ``up`` (true) or ``down`` (false) instead of using the last known status
486
487 .. method:: Server:setQPS(limit)
488
489 Limit the queries per second for this server.
490
491 :param int limit: The maximum number of queries per second
492
493 .. method:: Server:setDown()
494
495 Set the server in an ``DOWN`` state.
496 The server will not receive queries and the health checks are disabled
497
498 .. method:: Server:setUp()
499
500 Set the server in an ``UP`` state.
501 This server will still receive queries and health checks are disabled
502
503 Apart from the functions, a :class:`Server` object has these attributes:
504
505 .. attribute:: Server.name
506
507 The name of the server
508
509 .. attribute:: Server.upStatus
510
511 Whether or not this server is up or down
512
513 .. attribute:: Server.order
514
515 The order of the server
516
517 .. attribute:: Server.weight
518
519 The weight of the server
520
521 Pools
522 -----
523
524 :class:`Server`\ s can be part of any number of pools.
525 Pools are automatically created when a server is added to a pool (with :func:`newServer`), or can be manually created with :func:`addPool`.
526
527 .. function:: addPool(name) -> ServerPool
528
529 Returns a :class:`ServerPool`.
530
531 :param string name: The name of the pool to create
532
533 .. function:: getPool(name) -> ServerPool
534
535 Returns a :class:`ServerPool` or nil.
536
537 :param string name: The name of the pool
538
539 .. function:: getPoolServers(name) -> [ Server ]
540
541 Returns a list of :class:`Server`\ s or nil.
542
543 :param string name: The name of the pool
544
545 .. function:: showPools()
546
547 Display the name, associated cache, server policy and associated servers for every pool.
548
549 .. class:: ServerPool
550
551 This represents the pool where zero or more servers are part of.
552
553 .. method:: ServerPool:getCache() -> PacketCache
554
555 Returns the :class:`PacketCache` for this pool or nil.
556
557 .. method:: ServerPool:getECS()
558
559 .. versionadded:: 1.3.0
560
561 Whether dnsdist will add EDNS Client Subnet information to the query before looking up into the cache,
562 when all servers from this pool are down. For more information see :meth:`ServerPool:setECS`.
563
564 .. method:: ServerPool:setCache(cache)
565
566 Adds ``cache`` as the pool's cache.
567
568 :param PacketCache cache: The new cache to add to the pool
569
570 .. method:: ServerPool:unsetCache()
571
572 Removes the cache from this pool.
573
574 .. method:: ServerPool:setECS()
575
576 .. versionadded:: 1.3.0
577
578 Set to true if dnsdist should add EDNS Client Subnet information to the query before looking up into the cache,
579 when all servers from this pool are down. If at least one server is up, the preference of the
580 selected server is used, this parameter is only useful if all the backends in this pool are down
581 and have EDNS Client Subnet enabled, since the queries in the cache will have been inserted with
582 ECS information. Default is false.
583
584 PacketCache
585 ~~~~~~~~~~~
586
587 A Pool can have a packet cache to answer queries directly instead of going to the backend.
588 See :doc:`../guides/cache` for a how to.
589
590 .. function:: newPacketCache(maxEntries[, maxTTL=86400[, minTTL=0[, temporaryFailureTTL=60[, staleTTL=60[, dontAge=false[, numberOfShards=1[, deferrableInsertLock=true[, maxNegativeTTL=3600[, parseECS=false]]]]]]]) -> PacketCache
591
592 .. versionchanged:: 1.3.0
593 ``numberOfShards`` and ``deferrableInsertLock`` parameters added.
594
595 .. versionchanged:: 1.3.1
596 ``maxNegativeTTL`` and ``parseECS`` parameters added.
597
598 .. deprecated:: 1.4.0
599
600 Creates a new :class:`PacketCache` with the settings specified.
601
602 :param int maxEntries: The maximum number of entries in this cache
603 :param int maxTTL: Cap the TTL for records to his number
604 :param int minTTL: Don't cache entries with a TTL lower than this
605 :param int temporaryFailureTTL: On a SERVFAIL or REFUSED from the backend, cache for this amount of seconds
606 :param int staleTTL: When the backend servers are not reachable, and global configuration ``setStaleCacheEntriesTTL`` is set appropriately, TTL that will be used when a stale cache entry is returned
607 :param bool dontAge: Don't reduce TTLs when serving from the cache. Use this when :program:`dnsdist` fronts a cluster of authoritative servers
608 :param int numberOfShards: Number of shards to divide the cache into, to reduce lock contention
609 :param bool deferrableInsertLock: Whether the cache should give up insertion if the lock is held by another thread, or simply wait to get the lock
610 :param int maxNegativeTTL: Cache a NXDomain or NoData answer from the backend for at most this amount of seconds, even if the TTL of the SOA record is higher
611 :param bool parseECS: Whether any EDNS Client Subnet option present in the query should be extracted and stored to be able to detect hash collisions involving queries with the same qname, qtype and qclass but a different incoming ECS value. Enabling this option adds a parsing cost and only makes sense if at least one backend might send different responses based on the ECS value, so it's disabled by default
612
613 .. function:: newPacketCache(maxEntries, [options]) -> PacketCache
614
615 .. versionadded:: 1.4.0
616
617 Creates a new :class:`PacketCache` with the settings specified.
618
619 :param int maxEntries: The maximum number of entries in this cache
620
621 Options:
622
623 * ``deferrableInsertLock=true``: bool - Whether the cache should give up insertion if the lock is held by another thread, or simply wait to get the lock.
624 * ``dontAge=false``: bool - Don't reduce TTLs when serving from the cache. Use this when :program:`dnsdist` fronts a cluster of authoritative servers.
625 * ``keepStaleData=false``: bool - Whether to suspend the removal of expired entries from the cache when there is no backend available in at least one of the pools using this cache.
626 * ``maxNegativeTTL=3600``: int - Cache a NXDomain or NoData answer from the backend for at most this amount of seconds, even if the TTL of the SOA record is higher.
627 * ``maxTTL=86400``: int - Cap the TTL for records to his number.
628 * ``minTTL=0``: int - Don't cache entries with a TTL lower than this.
629 * ``numberOfShards=1``: int - Number of shards to divide the cache into, to reduce lock contention.
630 * ``parseECS=false``: bool - Whether any EDNS Client Subnet option present in the query should be extracted and stored to be able to detect hash collisions involving queries with the same qname, qtype and qclass but a different incoming ECS value. Enabling this option adds a parsing cost and only makes sense if at least one backend might send different responses based on the ECS value, so it's disabled by default.
631 * ``staleTTL=60``: int - When the backend servers are not reachable, and global configuration ``setStaleCacheEntriesTTL`` is set appropriately, TTL that will be used when a stale cache entry is returned.
632 * ``temporaryFailureTTL=60``: int - On a SERVFAIL or REFUSED from the backend, cache for this amount of seconds..
633
634 .. class:: PacketCache
635
636 Represents a cache that can be part of :class:`ServerPool`.
637
638 .. method:: PacketCache:dump(fname)
639
640 .. versionadded:: 1.3.1
641
642 Dump a summary of the cache entries to a file.
643
644 :param str fname: The path to a file where the cache summary should be dumped. Note that if the target file already exists, it will not be overwritten.
645
646 .. method:: PacketCache:expunge(n)
647
648 Remove entries from the cache, leaving at most ``n`` entries
649
650 :param int n: Number of entries to keep
651
652 .. method:: PacketCache:expungeByName(name [, qtype=DNSQType.ANY[, suffixMatch=false]])
653
654 .. versionchanged:: 1.2.0
655 ``suffixMatch`` parameter added.
656
657 Remove entries matching ``name`` and type from the cache.
658
659 :param DNSName name: The name to expunge
660 :param int qtype: The type to expunge, can be a pre-defined :ref:`DNSQType`
661 :param bool suffixMatch: When set to true, remove al entries under ``name``
662
663 .. method:: PacketCache:getStats()
664
665 .. versionadded:: 1.4.0
666
667 Return the cache stats (number of entries, hits, misses, deferred lookups, deferred inserts, lookup collisions, insert collisions and TTL too shorts) as a Lua table.
668
669 .. method:: PacketCache:isFull() -> bool
670
671 Return true if the cache has reached the maximum number of entries.
672
673 .. method:: PacketCache:printStats()
674
675 Print the cache stats (number of entries, hits, misses, deferred lookups, deferred inserts, lookup collisions, insert collisions and TTL too shorts).
676
677 .. method:: PacketCache:purgeExpired(n)
678
679 Remove expired entries from the cache until there is at most ``n`` entries remaining in the cache.
680
681 :param int n: Number of entries to keep
682
683 .. method:: PacketCache:toString() -> string
684
685 Return the number of entries in the Packet Cache, and the maximum number of entries
686
687 Client State
688 ------------
689
690 Also called frontend or bind, the Client State object returned by :func:`getBind` and listed with :func:`showBinds` represents an address and port dnsdist is listening on.
691
692 .. function:: getBind(index) -> ClientState
693
694 Return a :class:`ClientState` object.
695
696 :param int index: The object index
697
698 ClientState functions
699 ~~~~~~~~~~~~~~~~~~~~~
700
701 .. class:: ClientState
702
703 This object represents an address and port dnsdist is listening on. When ``reuseport`` is in use, several ClientState objects can be present for the same address and port.
704
705 .. method:: ClientState:attachFilter(filter)
706
707 Attach a BPF filter to this frontend.
708
709 :param BPFFilter filter: The filter to attach to this frontend
710
711 .. method:: ClientState:detachFilter()
712
713 Remove the BPF filter associated to this frontend, if any.
714
715 .. method:: ClientState:toString() -> string
716
717 Return the address and port this frontend is listening on.
718
719 :returns: The address and port this frontend is listening on
720
721 .. attribute:: ClientState.muted
722
723 If set to true, queries received on this frontend will be normally processed and sent to a backend if needed, but no response will be ever be sent to the client over UDP. TCP queries are processed normally and responses sent to the client.
724
725 Status, Statistics and More
726 ---------------------------
727
728 .. function:: dumpStats()
729
730 Print all statistics dnsdist gathers
731
732 .. function:: getDOHFrontend(idx)
733
734 .. versionadded:: 1.4.0
735
736 Return the DOHFrontend object for the DNS over HTTPS bind of index ``idx``.
737
738 .. function:: getTLSContext(idx)
739
740 .. versionadded:: 1.3.0
741
742 Return the TLSContext object for the context of index ``idx``.
743
744 .. function:: getTLSFrontend(idx)
745
746 .. versionadded:: 1.3.1
747
748 Return the TLSFrontend object for the TLS bind of index ``idx``.
749
750 .. function:: grepq(selector[, num])
751 grepq(selectors[, num])
752
753 Prints the last ``num`` queries matching ``selector`` or ``selectors``.
754
755 The selector can be:
756
757 * a netmask (e.g. '192.0.2.0/24')
758 * a DNS name (e.g. 'dnsdist.org')
759 * a response time (e.g. '100ms')
760
761 :param str selector: Select queries based on this property.
762 :param {str} selectors: A lua table of selectors. Only queries matching all selectors are shown
763 :param int num: Show a maximum of ``num`` recent queries, default is 10.
764
765 .. function:: setVerboseHealthChecks(verbose)
766
767 Set whether health check errors should be logged. This is turned off by default.
768
769 :param bool verbose: Set to true if you want to enable health check errors logging
770
771 .. function:: showBinds()
772
773 Print a list of all the current addresses and ports dnsdist is listening on, also called ``frontends``
774
775 .. function:: showDOHFrontends()
776
777 .. versionadded:: 1.4.0
778
779 Print the list of all availables DNS over HTTPS frontends.
780
781 .. function:: showDOHResponseCodes()
782
783 .. versionadded:: 1.4.0
784
785 Print the HTTP response codes statistics for all availables DNS over HTTPS frontends.
786
787 .. function:: showResponseLatency()
788
789 Show a plot of the response time latency distribution
790
791 .. function:: showServers([options])
792
793 .. versionchanged:: 1.4.0
794 ``options`` optional parameter added
795
796 This function shows all backend servers currently configured and some statistics.
797 These statics have the following fields:
798
799 * ``#`` - The number of the server, can be used as the argument for :func:`getServer`
800 * ``UUID`` - The UUID of the backend. Can be set with the ``id`` option of :func:`newServer`
801 * ``Address`` - The IP address and port of the server
802 * ``State`` - The current state of the server
803 * ``Qps`` - Current number of queries per second
804 * ``Qlim`` - Configured maximum number of queries per second
805 * ``Ord`` - The order number of the server
806 * ``Wt`` - The weight of the server
807 * ``Queries`` - Total amount of queries sent to this server
808 * ``Drops`` - Number of queries that were dropped by this server
809 * ``Drate`` - Number of queries dropped per second by this server
810 * ``Lat`` - The latency of this server in milliseconds
811 * ``Pools`` - The pools this server belongs to
812
813 :param table options: A table with key: value pairs with display options.
814
815 Options:
816
817 * ``showUUIDs=false``: bool - Whether to display the UUIDs, defaults to false.
818
819 .. function:: showTCPStats()
820
821 Show some statistics regarding TCP
822
823 .. function:: showTLSContexts()
824
825 .. versionadded:: 1.3.0
826
827 Print the list of all availables DNS over TLS contexts.
828
829 .. function:: showVersion()
830
831 Print the version of dnsdist
832
833 .. function:: topBandwidth([num])
834
835 Print the top ``num`` clients that consume the most bandwidth.
836
837 :param int num: Number to show, defaults to 10.
838
839 .. function:: topClients([num])
840
841 Print the top ``num`` clients sending the most queries over length of ringbuffer
842
843 :param int num: Number to show, defaults to 10.
844
845 .. function:: topQueries([num[, labels]])
846
847 Print the ``num`` most popular QNAMEs from queries.
848 Optionally grouped by the rightmost ``labels`` DNS labels.
849
850 :param int num: Number to show, defaults to 10
851 :param int label: Number of labels to cut down to
852
853 .. function:: topResponses([num[, rcode[, labels]]])
854
855 Print the ``num`` most seen responses with an RCODE of ``rcode``.
856 Optionally grouped by the rightmost ``labels`` DNS labels.
857
858 :param int num: Number to show, defaults to 10
859 :param int rcode: :ref:`Response code <DNSRCode>`, defaults to 0 (No Error)
860 :param int label: Number of labels to cut down to
861
862 .. function:: topSlow([num[, limit[, labels]]])
863
864 Print the ``num`` slowest queries that are slower than ``limit`` milliseconds.
865 Optionally grouped by the rightmost ``labels`` DNS labels.
866
867 :param int num: Number to show, defaults to 10
868 :param int limit: Show queries slower than this amount of milliseconds, defaults to 2000
869 :param int label: Number of labels to cut down to
870
871 .. _dynblocksref:
872
873 Dynamic Blocks
874 --------------
875
876 .. function:: addDynBlocks(addresses, message[, seconds=10[, action]])
877
878 .. versionchanged:: 1.2.0
879 ``action`` parameter added.
880
881 Block a set of addresses with ``message`` for (optionally) a number of seconds.
882 The default number of seconds to block for is 10.
883
884 :param addresses: set of Addresses as returned by an exceed function
885 :param string message: The message to show next to the blocks
886 :param int seconds: The number of seconds this block to expire
887 :param int action: The action to take when the dynamic block matches, see :ref:`here <DNSAction>`. (default to DNSAction.None, meaning the one set with :func:`setDynBlocksAction` is used)
888
889 Please see the documentation for :func:`setDynBlocksAction` to confirm which actions are supported by the action paramater.
890
891 .. function:: clearDynBlocks()
892
893 Remove all current dynamic blocks.
894
895 .. function:: showDynBlocks()
896
897 List all dynamic blocks in effect.
898
899 .. function:: setDynBlocksAction(action)
900
901 .. versionchanged:: 1.3.3
902 ``DNSAction.NXDomain`` action added.
903
904 Set which action is performed when a query is blocked.
905 Only DNSAction.Drop (the default), DNSAction.NoOp, DNSAction.NXDomain, DNSAction.Refused, DNSAction.Truncate and DNSAction.NoRecurse are supported.
906
907 .. _exceedfuncs:
908
909 Getting addresses that exceeded parameters
910 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
911
912 .. function:: exceedServFails(rate, seconds)
913
914 Get set of addresses that exceed ``rate`` servfails/s over ``seconds`` seconds
915
916 :param int rate: Number of Servfails per second to exceed
917 :param int seconds: Number of seconds the rate has been exceeded
918
919 .. function:: exceedNXDOMAINs(rate, seconds)
920
921 get set of addresses that exceed ``rate`` NXDOMAIN/s over ``seconds`` seconds
922
923 :param int rate: Number of NXDOMAIN per second to exceed
924 :param int seconds: Number of seconds the rate has been exceeded
925
926 .. function:: exceedRespByterate(rate, seconds)
927
928 get set of addresses that exceeded ``rate`` bytes/s answers over ``seconds`` seconds
929
930 :param int rate: Number of bytes per second to exceed
931 :param int seconds: Number of seconds the rate has been exceeded
932
933 .. function:: exceedQRate(rate, seconds)
934
935 Get set of address that exceed ``rate`` queries/s over ``seconds`` seconds
936
937 :param int rate: Number of queries per second to exceed
938 :param int seconds: Number of seconds the rate has been exceeded
939
940 .. function:: exceedQTypeRate(type, rate, seconds)
941
942 Get set of address that exceed ``rate`` queries/s for queries of QType ``type`` over ``seconds`` seconds
943
944 :param int type: QType
945 :param int rate: Number of QType queries per second to exceed
946 :param int seconds: Number of seconds the rate has been exceeded
947
948 DynBlockRulesGroup
949 ~~~~~~~~~~~~~~~~~~
950
951 Instead of using several `exceed*()` lines, dnsdist 1.3.0 introduced a new `DynBlockRulesGroup` object
952 which can be used to group dynamic block rules.
953
954 See :doc:`../guides/dynblocks` for more information about the case where using a `DynBlockRulesGroup` might be
955 faster than the existing rules.
956
957 .. function:: dynBlockRulesGroup() -> DynBlockRulesGroup
958
959 .. versionadded:: 1.3.0
960
961 Creates a new :class:`DynBlockRulesGroup` object.
962
963 .. class:: DynBlockRulesGroup
964
965 Represents a group of dynamic block rules.
966
967 .. method:: DynBlockRulesGroup:setQueryRate(rate, seconds, reason, blockingTime [, action [, warningRate]])
968
969 .. versionchanged:: 1.3.3
970 ``warningRate`` parameter added.
971
972 Adds a query rate-limiting rule, equivalent to:
973 ```
974 addDynBlocks(exceedQRate(rate, seconds), reason, blockingTime, action)
975 ```
976
977 :param int rate: Number of queries per second to exceed
978 :param int seconds: Number of seconds the rate has been exceeded
979 :param string reason: The message to show next to the blocks
980 :param int blockingTime: The number of seconds this block to expire
981 :param int action: The action to take when the dynamic block matches, see :ref:`here <DNSAction>`. (default to the one set with :func:`setDynBlocksAction`)
982 :param int warningRate: If set to a non-zero value, the rate above which a warning message will be issued and a no-op block inserted
983
984 .. method:: DynBlockRulesGroup:setRCodeRate(rcode, rate, seconds, reason, blockingTime [, action [, warningRate]])
985
986 .. versionchanged:: 1.3.3
987 ``warningRate`` parameter added.
988
989 Adds a rate-limiting rule for responses of code ``rcode``, equivalent to:
990 ```
991 addDynBlocks(exceedServfails(rcode, rate, seconds), reason, blockingTime, action)
992 ```
993
994 :param int rcode: The response code
995 :param int rate: Number of responses per second to exceed
996 :param int seconds: Number of seconds the rate has been exceeded
997 :param string reason: The message to show next to the blocks
998 :param int blockingTime: The number of seconds this block to expire
999 :param int action: The action to take when the dynamic block matches, see :ref:`here <DNSAction>`. (default to the one set with :func:`setDynBlocksAction`)
1000 :param int warningRate: If set to a non-zero value, the rate above which a warning message will be issued and a no-op block inserted
1001
1002 .. method:: DynBlockRulesGroup:setQTypeRate(qtype, rate, seconds, reason, blockingTime [, action [, warningRate]])
1003
1004 .. versionchanged:: 1.3.3
1005 ``warningRate`` parameter added.
1006
1007 Adds a rate-limiting rule for queries of type ``qtype``, equivalent to:
1008 ```
1009 addDynBlocks(exceedQTypeRate(type, rate, seconds), reason, blockingTime, action)
1010 ```
1011
1012 :param int qtype: The qtype
1013 :param int rate: Number of queries per second to exceed
1014 :param int seconds: Number of seconds the rate has been exceeded
1015 :param string reason: The message to show next to the blocks
1016 :param int blockingTime: The number of seconds this block to expire
1017 :param int action: The action to take when the dynamic block matches, see :ref:`here <DNSAction>`. (default to the one set with :func:`setDynBlocksAction`)
1018 :param int warningRate: If set to a non-zero value, the rate above which a warning message will be issued and a no-op block inserted
1019
1020 .. method:: DynBlockRulesGroup:setResponseByteRate(rate, seconds, reason, blockingTime [, action [, warningRate]])
1021
1022 .. versionchanged:: 1.3.3
1023 ``warningRate`` parameter added.
1024
1025 Adds a bandwidth rate-limiting rule for responses, equivalent to:
1026 ```
1027 addDynBlocks(exceedRespByterate(rate, seconds), reason, blockingTime, action)
1028 ```
1029
1030 :param int rate: Number of bytes per second to exceed
1031 :param int seconds: Number of seconds the rate has been exceeded
1032 :param string reason: The message to show next to the blocks
1033 :param int blockingTime: The number of seconds this block to expire
1034 :param int action: The action to take when the dynamic block matches, see :ref:`here <DNSAction>`. (default to the one set with :func:`setDynBlocksAction`)
1035 :param int warningRate: If set to a non-zero value, the rate above which a warning message will be issued and a no-op block inserted
1036
1037 .. method:: DynBlockRulesGroup:apply()
1038
1039 Walk the in-memory query and response ring buffers and apply the configured rate-limiting rules, adding dynamic blocks when the limits have been exceeded.
1040
1041 .. method:: DynBlockRulesGroup:excludeRange(netmasks)
1042
1043 .. versionadded:: 1.3.1
1044
1045 Exclude this range, or list of ranges, meaning that no dynamic block will ever be inserted for clients in that range. Default to empty, meaning rules are applied to all ranges. When used in combination with :meth:`DynBlockRulesGroup:includeRange`, the more specific entry wins.
1046
1047 :param int netmasks: A netmask, or list of netmasks, as strings, like for example "192.0.2.1/24"
1048
1049 .. method:: DynBlockRulesGroup:includeRange(netmasks)
1050
1051 .. versionadded:: 1.3.1
1052
1053 Include this range, or list of ranges, meaning that rules will be applied to this range. When used in combination with :meth:`DynBlockRulesGroup:excludeRange`, the more specific entry wins.
1054
1055 :param int netmasks: A netmask, or list of netmasks, as strings, like for example "192.0.2.1/24"
1056
1057 .. method:: DynBlockRulesGroup:toString()
1058
1059 .. versionadded:: 1.3.1
1060
1061 Return a string describing the rules and range exclusions of this DynBlockRulesGroup.
1062
1063 SuffixMatchNode
1064 ~~~~~~~~~~~~~~~
1065
1066 A SuffixMatchNode can be used to quickly check whether a given name belongs to a set or not. This is achieved
1067 using an efficient tree structure based on DNS labels, making lookups cheap.
1068 Be careful that Suffix Node matching will match for any sub-domain, regardless of the depth, under the name added to the set. For example,
1069 if 'example.com.' is added to the set, 'www.example.com.' and 'sub.www.example.com.' will match as well.
1070 If you are looking for exact name matching, your might want to consider using a :class:`DNSNameSet` instead.
1071
1072 .. function:: newSuffixMatchNode()
1073
1074 Creates a new :class:`SuffixMatchNode`.
1075
1076 .. class:: SuffixMatchNode
1077
1078 Represent a set of DNS suffixes for quick matching.
1079
1080 .. method:: SuffixMatchNode:add(name)
1081 .. versionchanged:: 1.4.0
1082 This method now accepts strings, lists of DNSNames and lists of strings.
1083
1084 Add a suffix to the current set.
1085
1086 :param DNSName name: The suffix to add to the set.
1087 :param string name: The suffix to add to the set.
1088 :param table name: The suffixes to add to the set. Elements of the table should be of the same type, either DNSName or string.
1089
1090 .. method:: SuffixMatchNode:check(name) -> bool
1091
1092 Return true if the given name is a sub-domain of one of those in the set, and false otherwise.
1093
1094 :param DNSName name: The name to test against the set.
1095
1096 Other functions
1097 ---------------
1098
1099 .. function:: maintenance()
1100
1101 If this function exists, it is called every second to so regular tasks.
1102 This can be used for e.g. :doc:`Dynamic Blocks <../guides/dynblocks>`.
1103
1104 .. function:: setAllowEmptyResponse()
1105
1106 .. versionadded:: 1.4.0
1107
1108 Set to true (defaults to false) to allow empty responses (qdcount=0) with a NoError or NXDomain rcode (default) from backends. dnsdist drops these responses by default because it can't match them against the initial query since they don't contain the qname, qtype and qclass, and therefore the risk of collision is much higher than with regular responses.
1109
1110 .. function:: makeIPCipherKey(password) -> string
1111
1112 .. versionadded:: 1.4.0
1113
1114 Hashes the password to generate a 16-byte key that can be used to pseudonymize IP addresses with IP cipher.
1115
1116 DOHFrontend
1117 ~~~~~~~~~~~
1118
1119 .. class:: DOHFrontend
1120
1121 .. versionadded:: 1.4.0
1122
1123 This object represents an address and port dnsdist is listening on for DNS over HTTPS queries.
1124
1125 .. method:: DOHFrontend:reloadCertificates()
1126
1127 Reload the current TLS certificate and key pairs.
1128
1129 TLSContext
1130 ~~~~~~~~~~
1131
1132 .. class:: TLSContext
1133
1134 .. versionadded:: 1.3.0
1135
1136 This object represents an address and port dnsdist is listening on for DNS over TLS queries.
1137
1138 .. method:: TLSContext:rotateTicketsKey()
1139
1140 Replace the current TLS tickets key by a new random one.
1141
1142 .. method:: TLSContext:loadTicketsKeys(ticketsKeysFile)
1143
1144 Load new tickets keys from the selected file, replacing the existing ones. These keys should be rotated often and never written to persistent storage to preserve forward secrecy. The default is to generate a random key. The OpenSSL provider supports several tickets keys to be able to decrypt existing sessions after the rotation, while the GnuTLS provider only supports one key.
1145
1146 :param str ticketsKeysFile: The path to a file from where TLS tickets keys should be loaded.
1147
1148 TLSFrontend
1149 ~~~~~~~~~~~
1150
1151 .. class:: TLSFrontend
1152
1153 .. versionadded:: 1.3.1
1154
1155 This object represents the configuration of a listening frontend for DNS over TLS queries. To each frontend is associated a TLSContext.
1156
1157 .. method:: TLSContext:loadNewCertificatesAndKeys(certFile(s), keyFile(s))
1158
1159 Create and switch to a new TLS context using the same options than were passed to the corresponding `addTLSLocal()` directive, but loading new certificates and keys from the selected files, replacing the existing ones.
1160
1161 :param str certFile(s): The path to a X.509 certificate file in PEM format, or a list of paths to such files.
1162 :param str keyFile(s): The path to the private key file corresponding to the certificate, or a list of paths to such files, whose order should match the certFile(s) ones.
1163
1164 EDNS on Self-generated answers
1165 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1166
1167 There are several mechanisms in dnsdist that turn an existing query into an answer right away,
1168 without reaching out to the backend, including :func:`SpoofAction`, :func:`RCodeAction`, :func:`TCAction`
1169 and returning a response from ``Lua``. Those responses should, according to :rfc:`6891`, contain an ``OPT``
1170 record if the received request had one, which is the case by default and can be disabled using
1171 :func:`setAddEDNSToSelfGeneratedResponses`.
1172
1173 We must, however, provide a responder's maximum payload size in this record, and we can't easily know the
1174 maximum payload size of the actual backend so we need to provide one. The default value is 1500 and can be
1175 overriden using :func:`setPayloadSizeOnSelfGeneratedAnswers`.
1176
1177 .. function:: setAddEDNSToSelfGeneratedResponses(add)
1178
1179 .. versionadded:: 1.3.3
1180
1181 Whether to add EDNS to self-generated responses, provided that the initial query had EDNS.
1182
1183 :param bool add: Whether to add EDNS, default is true.
1184
1185 .. function:: setPayloadSizeOnSelfGeneratedAnswers(payloadSize)
1186
1187 .. versionadded:: 1.3.3
1188
1189 Set the UDP payload size advertised via EDNS on self-generated responses. In accordance with
1190 :rfc:`RFC 6891 <6891#section-6.2.5>`, values lower than 512 will be treated as equal to 512.
1191
1192 :param int payloadSize: The responder's maximum UDP payload size, in bytes. Default is 1500.
1193
1194 Security Polling
1195 ~~~~~~~~~~~~~~~~
1196
1197 PowerDNS products can poll the security status of their respective versions. This polling, naturally,
1198 happens over DNS. If the result is that a given version has a security problem, the software will
1199 report this at level ‘Error’ during startup, and repeatedly during operations, every
1200 :func:`setSecurityPollInterval` seconds.
1201
1202 By default, security polling happens on the domain ‘secpoll.powerdns.com’, but this can be changed with
1203 the :func:`setSecurityPollSuffix` function. If this setting is made empty, no polling will take place.
1204 Organizations wanting to host their own security zones can do so by changing this setting to a domain name
1205 under their control.
1206
1207 To enable distributors of PowerDNS to signal that they have backported versions, the PACKAGEVERSION
1208 compilation-time macro can be used to set a distributor suffix.
1209
1210 .. function:: setSecurityPollInterval(interval)
1211
1212 .. versionadded:: 1.3.3
1213
1214 Set the interval, in seconds, between two security pollings.
1215
1216 :param int interval: The interval, in seconds, between two pollings. Default is 3600.
1217
1218 .. function:: setSecurityPollSuffix(suffix)
1219
1220 .. versionadded:: 1.3.3
1221
1222 Domain name from which to query security update notifications. Setting this to an empty string disables secpoll.
1223
1224 :param string suffix: The suffix to use, default is 'secpoll.powerdns.com.'.