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