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