Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
KNOT.CONF(5)			    Knot DNS			    KNOT.CONF(5)

NAME
     knot.conf - Knot DNS configuration file

DESCRIPTION
     Configuration  files  for	Knot  DNS use simplified YAML format. Simplified
     means that not all of the features are supported.

     For the description of configuration items, we have to declare a meaning of
     the following symbols:

     * INT a Integer

     * STR a Textual string

     * HEXSTR a Hexadecimal string (with 0x prefix)

     * BOOL a Boolean value (on/off or true/false)

     * TIME a Number of seconds, an integer with a possible time multiplier suf-
       fix (s ~ 1, m ~ 60, h ~ 3600, d ~ 24 * 3600, w ~ 7 * 24 * 3600, M ~ 30  *
       24 * 3600, y ~ 365 * 24 * 3600)

     * SIZE a Number of bytes, an integer with a possible size multiplier suffix
       (B ~ 1, K ~ 1024, M ~ 1024^2 or G ~ 1024^3)

     * BASE64 a Base64 encoded string

     * ADDR a IPv4 or IPv6 address

     * DNAME a Domain name

     * ... a Multi-valued item, order of the values is preserved

     * [ ] a Optional value

     * | a Choice

     The  configuration  consists  of several fixed sections and optional module
     sections. There are 18 fixed sections (module, server, xdp,  control,  log,
     statistics,  database,  keystore,	key,  remote,  remotes, acl, submission,
     dnskey-sync, policy, external`, template, zone).  Module sections are  pre-
     fixed with the mod- prefix (e.g. mod-stats).

     Most  of  the  sections  (e.g. zone) are sequences of settings blocks. Each
     settings block begins with a unique identifier, which can be used as a ref-
     erence from other sections (such an identifier must be defined in advance).

     A multi-valued item can be specified either as a YAML sequence:

	address: [10.0.0.1, 10.0.0.2]

     or as more single-valued items each on an extra line:

	address: 10.0.0.1
	address: 10.0.0.2

     If an item value contains spaces or other special characters, it is  neces-
     sary to enclose such a value within double quotes " ".

     If not specified otherwise, an item representing a file or a directory path
     may be defined either as an absolute path (starting with /), or a path rel-
     ative to the same directory as the default value of the item.

COMMENTS
     A comment begins with a # character and is ignored during processing.  Also
     each configuration section or sequence block allows a permanent comment us-
     ing  the  comment	item which is stored in the server beside the configura-
     tion.

INCLUDING CONFIGURATION
     Another configuration file or files, matching a pattern, can be included at
     the top level in the current file.

	include: STR

   include
     A path or a matching pattern specifying one or more files that are included
     at the place of the include option position in the configuration.	 If  the
     path  is  not absolute, then it is considered to be relative to the current
     file. The pattern can be an arbitrary string meeting  POSIX  glob	require-
     ments, e.g. dir/*.conf. Matching files are processed in sorted order.

     Default: not set

CLEARING CONFIGURATION SECTIONS
     It's  possible to clear specified configuration sections at given phases of
     the configuration parsing.

	clear: STR

   clear
     A matching pattern specifying configuration sections that are cleared  when
     this  item  is  parsed. This allows overriding of existing configuration in
     the configuration database when including a configuration file  or  ensures
     that some configuration wasn't specified in previous includes.

     NOTE:
	For the pattern matching the POSIX function fnmatch() is used. On Linux,
	the GNU extension FNM_EXTMATCH is enabled, which allows extended pattern
	matching.  Examples:

	* clear: zone a Clears the zone section.

	* clear: mod-* a Clears all module sections.

	* clear: "[!z]*" a Clears all sections not beginning with letter z.

	* clear: !(zone) a (GNU only) Clears all sections except the zone one.

	* clear: @(zone|template) a (GNU only) Clears the zone and template sec-
	  tions.

     Default: not set

MODULE SECTION
     Dynamic modules loading configuration.

     NOTE:
	If configured with non-empty --with-moduledir=path parameter, all shared
	modules in this directory will be automatically loaded.

	module:
	  - id: STR
	    file: STR

   id
     A module identifier in the form of the mod- prefix and module name suffix.

   file
     A path to a shared library file with the module implementation.

     WARNING:
	If  the path is not absolute, the library is searched in the set of sys-
	tem directories. See man dlopen for more details.

     Default: ${libdir}/knot/modules-${version}/module_name.so (or  ${path}/mod-
     ule_name.so if configured with --with-moduledir=path)

SERVER SECTION
     General options related to the server.

	server:
	    identity: [STR]
	    version: [STR]
	    nsid: [STR|HEXSTR]
	    rundir: STR
	    user: STR[:STR]
	    pidfile: STR
	    udp-workers: INT
	    tcp-workers: INT
	    background-workers: INT
	    async-start: BOOL
	    tcp-idle-timeout: TIME
	    tcp-io-timeout: INT
	    tcp-remote-io-timeout: INT
	    tcp-max-clients: INT
	    tcp-reuseport: BOOL
	    tcp-fastopen: BOOL
	    quic-max-clients: INT
	    quic-outbuf-max-size: SIZE
	    quic-idle-close-timeout: TIME
	    remote-pool-limit: INT
	    remote-pool-timeout: TIME
	    remote-retry-delay: INT
	    socket-affinity: BOOL
	    udp-max-payload: SIZE
	    udp-max-payload-ipv4: SIZE
	    udp-max-payload-ipv6: SIZE
	    key-file: STR
	    cert-file: STR
	    ca-file: STR ...
	    edns-client-subnet: BOOL
	    answer-rotation: BOOL
	    automatic-acl: BOOL
	    proxy-allowlist: ADDR[/INT] | ADDR-ADDR ...
	    dbus-event: none | running | zone-updated | external-verify | ksk-submission | dnssec-invalid ...
	    dbus-init-delay: TIME
	    listen: ADDR[%STR][@INT] | STR ...
	    listen-quic: ADDR[%STR][@INT] ...
	    listen-tls: ADDR[%STR][@INT] ...

     CAUTION:
	When  you  change configuration parameters dynamically or via configura-
	tion file reload, some parameters in the Server section require restart-
	ing the Knot server so that the changes take effect. See below	for  the
	details.

   identity
     An  identity  of  the  server returned in the response to the query for TXT
     record id.server. or hostname.bind. in the CHAOS class (RFC 4892).  Set  to
     an empty value to disable.

     Default: FQDN hostname

   version
     A	version of the server software returned in the response to the query for
     TXT record version.server. or version.bind. in the CHAOS class (RFC  4892).
     Set to an empty value to disable.

     Default: server version

   nsid
     A DNS name server identifier (RFC 5001). Set to an empty value to disable.

     Default: FQDN hostname at the moment of the daemon start

   rundir
     A	path for storing run-time data (PID file, unix sockets, etc.). A non-ab-
     solute path is relative to the knotd startup directory.

     Depending on the usage of this parameter, its change may require restart of
     the Knot server to take effect.

     Default: ${localstatedir}/run/knot (configured with --with-rundir=path)

   user
     A system user with an optional system group (user:group)  under  which  the
     server  is run after starting and binding to interfaces. Linux capabilities
     are employed if supported.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: root:root

   pidfile
     A PID file location.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: rundir/knot.pid

   udp-workers
     A number of UDP workers (threads) used to	process  incoming  queries  over
     UDP.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: equal to the number of online CPUs

   tcp-workers
     A number of TCP workers (threads) used to	process  incoming  queries  over
     TCP.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: equal to the number of online CPUs, default value is at least 10

   background-workers
     A number of workers (threads) used to execute background  operations  (zone
     loading, zone updates, etc.).

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: equal to the number of online CPUs, default value is at most 10

   async-start
     If enabled, server doesn't wait for the zones to be loaded and  starts  re-
     sponding immediately with SERVFAIL answers until the zone loads.

     Default: off

   tcp-idle-timeout
     Maximum  idle  time (in seconds) between requests on an inbound TCP connec-
     tion.  It means if there is no activity on an inbound TCP connection during
     this limit, the connection is closed by the server.

     Minimum: 1

     Default: 10

   tcp-io-timeout
     Maximum time (in milliseconds) to receive or send one DNS message	over  an
     inbound  TCP  connection. It means this limit applies to normal DNS queries
     and replies, incoming DDNS, and outgoing zone  transfers.	The  timeout  is
     measured since some data is already available for processing.  Set to 0 for
     infinity.

     Default: 500 (milliseconds)

     CAUTION:
	In order to reduce the risk of Slow Loris attacks, it's recommended set-
	ting this limit as low as possible on public servers.

   tcp-remote-io-timeout
     Maximum  time  (in milliseconds) to receive or send one DNS message over an
     outbound TCP/QUIC/TLS connection which has already been  established  to  a
     configured  remote  server.   It  means this limit applies to incoming zone
     transfers, sending NOTIFY, DDNS forwarding, and  DS  check  or  push.  This
     timeout  includes	the time needed for a network round-trip and for a query
     processing by the remote.	Set to 0 for infinity.

     Default: 5000 (milliseconds)

   tcp-reuseport
     If enabled, each TCP worker listens on its own socket  and  the  OS  kernel
     socket load balancing is employed using SO_REUSEPORT (or SO_REUSEPORT_LB on
     FreeBSD). Due to the lack of one shared socket, the server can offer higher
     response  rate  processing over TCP. However, in the case of time-consuming
     requests (e.g. zone transfers of a TLD zone), enabled reuseport may  result
     in  delayed  or  not being responded client requests. So it is advisable to
     use this option on secondary servers.

     NOTE:
	This option is ignored for UNIX sockets.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: off

   tcp-fastopen
     If enabled, use TCP Fast Open for outbound TCP communication (client side):
     incoming  zone  transfers,  sending  NOTIFY, and DDNS forwarding. This mode
     simplifies TCP handshake and can result in better	networking  performance.
     TCP Fast Open for inbound TCP communication (server side) isn't affected by
     this configuration as it's enabled automatically if supported by OS.

     NOTE:
	The TCP Fast Open support must also be enabled on the OS level:

	* Linux/macOS:	ensure	kernel parameter net.ipv4.tcp_fastopen is 2 or 3
	  for server side, and 1 or 3 for client side.

	* FreeBSD: ensure kernel  parameter  net.inet.tcp.fastopen.server_enable
	  is 1 for server side, and net.inet.tcp.fastopen.client_enable is 1 for
	  client side.

     Default: off

   quic-max-clients
     A maximum number of QUIC clients connected in parallel.

     See also quic.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Minimum: 128

     Default: 10000 (ten thousand)

   quic-outbuf-max-size
     Maximum cumulative size of memory used for buffers  of  unACKed  sent  mes-
     sages. This limit is per one UDP worker.

     NOTE:
	Temporarily,  more memory can be occupied by the buffers until some con-
	nections are cleared to free some memory and enforce the limit.

	Set low if little memory is available  (together  with	quic-max-clients
	since  QUIC connections are memory-heavy). Set to high value if outgoing
	zone transfers of big zone over QUIC are expected.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Minimum: 1M (1 MiB)

     Default: 100M (100 MiB)

   quic-idle-close-timeout
     Time in seconds, after which any idle QUIC connection is gracefully closed.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Minimum: 1

     Default: 4

   remote-pool-limit
     If nonzero, the server will keep up to this number of outgoing TCP  connec-
     tions open for later use. This is an optimization to avoid frequent opening
     of TCP connections to the same remote.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: 0

   remote-pool-timeout
     The timeout in seconds after which the unused kept-open outgoing  TCP  con-
     nections to remote servers are closed.

     Default: 5

   remote-retry-delay
     When  a  connection attempt times out to some remote address, this informa-
     tion will be kept for this specified time (in milliseconds) and other  con-
     nections  to  the same address won't be attempted. This prevents repetitive
     waiting for timeout on an unreachable remote.

     Default: 0

   socket-affinity
     If enabled and if SO_REUSEPORT is available on Linux, all	configured  net-
     work sockets are bound to UDP and TCP workers in order to increase the net-
     working performance.  This mode isn't recommended for setups where the num-
     ber of network card queues is lower than the number of UDP or TCP workers.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: off

   tcp-max-clients
     A maximum number of TCP clients connected in parallel, set this  below  the
     file descriptor limit to avoid resource exhaustion.

     NOTE:
	It  is	advisable to adjust the maximum number of open files per process
	in your operating system configuration.

     Default: one half of the file descriptor limit for the server process

   udp-max-payload
     Maximum EDNS0 UDP payload size default for both IPv4 and IPv6.

     Default: 1232

   udp-max-payload-ipv4
     Maximum EDNS0 UDP payload size for IPv4.

     Default: 1232

   udp-max-payload-ipv6
     Maximum EDNS0 UDP payload size for IPv6.

     Default: 1232

   key-file
     Path to a server key PEM file which is used for DNS over QUIC/TLS	communi-
     cation.   A  non-absolute	path of a user specified key file is relative to
     the /usr/local/etc/knot directory.

     Default: auto-generated key

   cert-file
     Path to a server certificate PEM file which is used for DNS  over	QUIC/TLS
     communication.   A non-absolute path is relative to the /usr/local/etc/knot
     directory.

     Default: one-time in-memory certificate

   ca-file
     Specifies one or more paths to load trusted Certificate  Authorities  (CAs)
     from.   An  empty	string	("") means the systemas default trusted CAs. The
     loaded CAs are  used  for	remote	certificate  validation  (cert-hostname,
     cert-hostname, and zone-db-cert-hostname).

     Default: not set

   edns-client-subnet
     Enable  or  disable  EDNS	Client	Subnet support. If enabled, responses to
     queries containing the EDNS Client Subnet option  always  contain	a  valid
     EDNS Client Subnet option according to RFC 7871.

     Default: off

   answer-rotation
     Enable  or  disable  sorted-rrset	rotation in the answer section of normal
     replies.  The rotation shift is simply determined by a query ID.

     Default: off

   automatic-acl
     If enabled, automatic ACL setting of configured remotes is considered  when
     evaluating authorized operations.

     Default: off

   proxy-allowlist
     An  ordered  list of IP addresses, network subnets, or network ranges which
     are allowed as a source address of proxied DNS traffic over UDP.  The  sup-
     ported proxy protocol is haproxy PROXY v2.

     NOTE:
	TCP is not supported.

     Default: not set

   dbus-event
     Specification  of	server	or  zone states which emit a D-Bus signal on the
     system bus. The bus name is cz.nic.knotd, the object path is /cz/nic/knotd,
     and the interface name is cz.nic.knotd.events.

     Possible values:

     * none a No signal is emitted.

     * running a Two signals may be emitted:

       * started a Emitted when the server is started and all  configured  zones
	 (including  catalog zones and their members) are loaded or successfully
	 bootstrapped.

       * stopped a Emitted when the server shutdown sequence is initiated.

     * zone-updated a Two signals may be emitted:

       * zone_updated a Emitted when a zone has been successfully updated.   Pa-
	 rameters: zone name and zone SOA serial.

       * zone_not_updated  a  Emitted  when a zone has not been successfully up-
	 dated.  Parameters: zone name.

     * external-verify a The signal external_verify is emitted when  a	zone  is
       awaiting  external  validation before applying changes.	Parameters: zone
       name and new zone SOA serial.

     * keys-updated a The signal keys_updated is emitted when a DNSSEC	key  set
       is updated.  Parameters: zone name.

     * ksk-submission a The signal zone_ksk_submission is emitted if a ready KSK
       is  present  when the zone is signed.  Parameters: zone name, KSK keytag,
       and KSK KASP id.

     * dnssec-invalid a The signal zone_dnssec_invalid is  emitted  when  DNSSEC
       validation  fails  or  when  ZONEMD verification fails.	Parameters: zone
       name and remaining seconds until an RRSIG expires.

     NOTE:
	This function requires systemd version at least 221 or libdbus.

     TIP:
	A few sample script templates can be found in the project repository.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: none

   dbus-init-delay
     Time  in seconds which the server waits upon D-Bus initialization to ensure
     the D-Bus client is ready to receive signals.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Minimum: 0

     Default: 1

   listen
     One  or more IP addresses on which the server listens for incoming queries.
     An optional port specification (default is 53) can be appended to each  ad-
     dress  using the @ separator. Use the wildcard address 0.0.0.0 for all con-
     figured IPv4 addresses or :: for all configured IPv6 addresses. On Linux, a
     wildcard address can be followed by % and an interface name to limit  wild-
     card binding to a specific interface. A filesystem path can be specified to
     listen  on  a  local UNIX SOCK_STREAM socket. A non-absolute path (i.e. not
     starting with /) is interpreted relative to rundir.  Binding  to  non-local
     addresses is automatically enabled if supported by the operating system.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     NOTE:
	Non-local address binding or wildcard address binding to a specific  in-
	terface  might require setting sysctl -w net.ipv4.ip_nonlocal_bind=1 and
	sysctl -w net.ipv6.ip_nonlocal_bind=1.

     Default: not set

   listen-quic
     One or more IP addresses and optionally ports (default is 853) on which the
     server listens for incoming queries over QUIC protocol.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: not set

   listen-tls
     One or more IP addresses and optionally ports (default is 853) on which the
     server listens for incoming queries over TLS protocol (DoT).

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: not set

XDP SECTION
     Various options related to XDP listening, especially TCP.

	xdp:
	    listen: STR[@INT] | ADDR[@INT] ...
	    udp: BOOL
	    tcp: BOOL
	    quic: BOOL
	    quic-port: INT
	    tcp-max-clients: INT
	    tcp-inbuf-max-size: SIZE
	    tcp-outbuf-max-size: SIZE
	    tcp-idle-close-timeout: TIME
	    tcp-idle-reset-timeout: TIME
	    tcp-resend-timeout: TIME
	    route-check: BOOL
	    zero-copy: BOOL
	    ring-size: INT
	    busypoll-budget: INT
	    busypoll-timeout: INT

     CAUTION:
	When you change configuration parameters dynamically or  via  configura-
	tion  file reload, some parameters in the XDP section require restarting
	the Knot server so that the changes take effect.

   listen
     One or more network device names (e.g. ens786f0) on which the Mode  XDP  is
     enabled. Alternatively, an IP address can be used instead of a device name,
     but the server will still listen on all addresses belonging to the same in-
     terface!	Optional  port	specification (default is 53) can be appended to
     each device name or address using @ separator.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     CAUTION:
	If XDP workers only process regular DNS traffic over UDP, it is strongly
	recommended  to also listen on the addresses which are intended to offer
	the DNS service, at least to fulfil the DNS requirement for working TCP.

     NOTE:
	Incoming DDNS over XDP isn't supported.  The server always responds with
	SERVFAIL.

     Default: not set

   udp
     If enabled, DNS over UDP is processed with XDP workers.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: on

   tcp
     If enabled, DNS over TCP traffic is processed with XDP workers.

     The TCP stack limitations:

	* Congestion control is not implemented.

	* Lost packets that do not contain TCP payload may not be resend.

	* Not optimized for transfers of non-trivial zones.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: off

   quic
     If enabled, DNS over QUIC is processed with XDP workers.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: off

   quic-port
     DNS  over	QUIC  will listen on the interfaces configured by listen, but on
     different port, configured by this option.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: 853

   tcp-max-clients
     A maximum number of TCP clients connected in parallel.

     Minimum: 1024

     Default: 1000000 (one million)

   tcp-inbuf-max-size
     Maximum cumulative size of memory used for buffers of incompletely received
     messages.

     Minimum: 1M (1 MiB)

     Default: 100M (100 MiB)

   tcp-outbuf-max-size
     Maximum  cumulative  size	of  memory used for buffers of unACKed sent mes-
     sages.

     Minimum: 1M (1 MiB)

     Default: 100M (100 MiB)

   tcp-idle-close-timeout
     Time in seconds, after which any idle connection is gracefully closed.

     Minimum: 1

     Default: 10

   tcp-idle-reset-timeout
     Time in seconds, after which any idle connection is forcibly closed.

     Minimum: 1

     Default: 20

   tcp-resend-timeout
     Resend outgoing data packets (with DNS response payload) if not  ACKed  be-
     fore this timeout (in seconds).

     Minimum: 1

     Default: 5

   route-check
     If  enabled,  routing  information  from the operating system is considered
     when processing every incoming DNS packet received over the XDP interface:

     * If the outgoing interface of the corresponding DNS response differs  from
       the  incoming  one,  the  packet is processed normally by UDP/TCP workers
       (XDP isn't used).

     * If the destination address is blackholed, unreachable, or prohibited, the
       DNS packet is dropped without any response.

     * The destination MAC address and possible VLAN tag for  the  response  are
       taken from the routing system.

     If disabled, symmetrical routing is applied. It means that the query source
     MAC  address  is  used as a response destination MAC address. Possible VLAN
     tag is preserved.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     NOTE:
	This  mode requires forwarding enabled on the loopback interface (sysctl
	-w net.ipv4.conf.lo.forwarding=1 and sysctl -w net.ipv6.conf.lo.forward-
	ing=1).  If  forwarding  is  disabled,	all  incoming  DNS  packets  are
	dropped!

	Only VLAN 802.1Q is supported.

     Default: off

   zero-copy
     If  enabled  and supported by the configured network device, zero-copy mode
     can be used. For testing purposes or if there is an issue with  the  kernel
     or  device  driver, disabling zero-copy may help, at the cost of lower per-
     formance.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: on

   ring-size
     Size of RX, FQ, TX, and CQ rings.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     NOTE:
	This value should be at least as high as the configured RX size  of  the
	network device in the XDP mode.

     Default: 2048

   busypoll-budget
     If  set  to  a  positive  value, preferred busy polling is enabled with the
     specified budget.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     NOTE:
	Preferred  busy  polling  also requires setting napi_defer_hard_irqs and
	gro_flush_timeout for the appropriate network interface. E.g.:

	    echo 2 | sudo tee /sys/class/net/<interface>/napi_defer_hard_irqs
	    echo 200000 | sudo tee /sys/class/net/<interface>/gro_flush_timeout

     NOTE:
	A recommended value is between 8 and 64.

     Default: 0 (disabled)

   busypoll-timeout
     Timeout  in  microseconds	of  preferrred	busy  polling  if   enabled   by
     busypoll-budget.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: 20 (20 microseconds)

CONTROL SECTION
     Configuration of the server control interface.

	control:
	    listen: STR ...
	    backlog: INT
	    timeout: TIME

   listen
     A UNIX socket path where the server listens for control commands.

     Multiple sockets can be configured for parallel independent use, but  their
     number  is  limited  (currently to 4), and some operations might be delayed
     due to mutexes.

     WARNING:
	Transaction-like  operations,  such  as  conf-begin/set/commit/abort  or
	zone-begin/set/commit/abort, must be performed using the same socket.

     Change  of  this  parameter requires restart of the Knot server to take ef-
     fect.

     Default: rundir/knot.sock

   backlog
     The control UNIX socket listen backlog size.

     Change of this parameter requires restart of the Knot server  to  take  ef-
     fect.

     Default: 5

   timeout
     Maximum time (in seconds) the control socket operations can take.	Set to 0
     for infinity.

     Default: 5

LOG SECTION
     Server can be configured to log to the standard output, standard error out-
     put, syslog (or systemd journal if systemd is enabled) or into an arbitrary
     file.

     There are 6 logging severity levels:

     * critical a Non-recoverable error resulting in server shutdown.

     * error a Recoverable error, action should be taken.

     * warning a Warning that might require user action.

     * notice a Server notice or hint.

     * info a Informational message.

     * debug a Debug or detailed message.

     In the case of a missing log section, warning or more serious messages will
     be  logged  to  both  standard error output and syslog. The info and notice
     messages will be logged to standard output.

	log:
	  - target: stdout | stderr | syslog | STR
	    server: critical | error | warning | notice | info | debug
	    control: critical | error | warning | notice | info | debug
	    zone: critical | error | warning | notice | info | debug
	    quic: critical | error | warning | notice | info | debug
	    any: critical | error | warning | notice | info | debug

   target
     A logging output.

     Possible values:

     * stdout a Standard output.

     * stderr a Standard error output.

     * syslog a Syslog or systemd journal.

     * file_name a A specific file.

     With syslog target, syslog service is used. However, if Knot DNS  has  been
     compiled  with  systemd  support  and operating system has been booted with
     systemd, systemd journal is used for logging instead of syslog.

     A file_name may be specified as an absolute path or a path relative to  the
     knotd startup directory.

   server
     Minimum  severity	level  for  messages related to general operation of the
     server to be logged.

     Default: not set

   control
     Minimum severity level for messages related to server control to be logged.

     Default: not set

   zone
     Minimum severity level for messages related to zones to be logged.

     Default: not set

   quic
     Minimum severity level for messages related to QUIC to be logged.

     Default: not set

   any
     Minimum severity level for all message types, except quic, to be logged.

     Default: not set

STATISTICS SECTION
     Periodic server statistics dumping.

	statistics:
	    timer: TIME
	    file: STR
	    append: BOOL

   timer
     A period (in seconds) after which all available statistics metrics will  by
     written to the file.

     Default: not set

   file
     A file path of statistics output in the YAML format.

     Default: rundir/stats.yaml

   append
     If  enabled,  the	output	will be appended to the file instead of file re-
     placement.

     Default: off

DATABASE SECTION
     Configuration of databases for zone contents,  DNSSEC  metadata,  or  event
     timers.

	database:
	    storage: STR
	    journal-db: STR
	    journal-db-mode: robust | asynchronous
	    journal-db-max-size: SIZE
	    kasp-db: STR
	    kasp-db-max-size: SIZE
	    timer-db: STR
	    timer-db-max-size: SIZE
	    timer-db-sync: never | shutdown | immediate | TIME
	    catalog-db: str
	    catalog-db-max-size: SIZE
	    zone-db-listen: ADDR[@INT] | STR[@INT] ...
	    zone-db-tls: BOOL
	    zone-db-cert-key: BASE64 ...
	    zone-db-cert-hostname: STR ...

   storage
     A	data directory for storing journal, KASP, and timer databases. A non-ab-
     solute path is relative to the knotd startup directory.

     Default: ${localstatedir}/lib/knot (configured with --with-storage=path)

   journal-db
     An explicit specification of the persistent journal database directory.

     Default: storage/journal

   journal-db-mode
     Specifies journal LMDB backend configuration, which influences  performance
     and durability.

     Possible values:

     * robust a The journal database disk synchronization ensures database dura-
       bility but is generally slower.

     * asynchronous a The journal database disk synchronization is optimized for
       better  performance  at	the  expense of lower database durability in the
       case of a crash. This mode is recommended on secondary servers with  many
       zones.

     Default: robust

   journal-db-max-size
     The  hard	limit for the journal database maximum size. There is no cleanup
     logic in journal to recover from reaching this limit. Journal simply starts
     refusing changes across all zones. Decreasing this value has no  effect  if
     it is lower than the actual database file size.

     It   is   recommended   to  limit	journal-max-usage  per-zone  instead  of
     journal-db-max-size in most cases. Please keep this value larger  than  the
     sum  of all zones' journal usage limits. See more details regarding journal
     behaviour.

     NOTE:
	This value also influences server's usage of virtual memory.

     Default: 20G (20 GiB), or 512M (512 MiB) for 32-bit

   kasp-db
     An explicit specification of the KASP database directory.

     Default: storage/keys

   kasp-db-max-size
     The hard limit for the KASP database maximum size.

     NOTE:
	This value also influences server's usage of virtual memory.

     Default: 10G (10 GiB), or 512M (512 MiB) for 32-bit

   timer-db
     An explicit specification of the persistent timer database directory.

     Default: storage/timers

   timer-db-max-size
     The hard limit for the timer database maximum size.

     NOTE:
	This value also influences server's usage of virtual memory.

     Default: 5G (5 GiB), or 512M (512 MiB) for 32-bit

   timer-db-sync
     Specifies when zone timers should be written to the persistent timer  data-
     base.

     Possible values:

     * never a Never written.

     * shutdown a Written once when the server is shut down.

     * immediate a Each zone writes its timers whenever they are modified.  This
       mode might slow down zones' events if many zones are configured.

     * INT  a  A  dedicated  thread continuously iterates through the configured
       zones and writes their timers at the specified non-zero interval (in sec-
       onds).

     Default: shutdown

   catalog-db
     An explicit specification of the zone catalog database directory. Only use-
     ful if Catalog zones are enabled.

     Default: storage/catalog

   catalog-db-max-size
     The hard limit for the catalog database maximum size.

     NOTE:
	This value also influences server's usage of virtual memory.

     Default: 20G (20 GiB), or 512M (512 MiB) for 32-bit

   zone-db-listen
     An ordered list of IP addresses or hostnames, and optionally ports (default
     is 6379), or absolute UNIX socket paths (starting with /) of running  Redis
     (or  compatible)  instances to be used for reading and/or writing zone con-
     tents.  See zone-db-input and zone-db-output.

     The listen parameters are tried sequentially until a usable  connection  is
     established.  The	connected database can be a master, a replica, or a sen-
     tinel.  If it is a sentinel, it is used to acquire connection parameters of
     a master database.

     Default: not set

   zone-db-tls
     If enabled, TLS 1.3 will be used for communication with the zone database.

     Default: off

   zone-db-cert-key
     An ordered list of up to 4 public key PINs of the zone database's	certifi-
     cate.   If  the  list is non-empty, communication with the zone database is
     only possible over TLS, and a peer certificate is required. The  peer  cer-
     tificate's public key must match one of the specified PINs.

     Default: not set

   zone-db-cert-hostname
     An  ordered  list of up to 4 hostnames to be matched against the zone data-
     base's certificate. At least one hostname must match for the certificate to
     be considered valid (see ca-file). If the list is non-empty,  communication
     with the zone database is only possible over TLS, and a peer certificate is
     required.

     Default: not set

KEYSTORE SECTION
     DNSSEC keystore configuration.

	keystore:
	  - id: STR
	    backend: pem | pkcs11
	    config: STR
	    ksk-only: BOOL
	    key-label: BOOL

   id
     A keystore identifier.

   backend
     A key storage backend type.

     Possible values:

     * pem a PEM files.

     * pkcs11 a PKCS #11 storage.

     Default: pem

   config
     A	backend specific configuration. A directory with PEM files (the path can
     be specified as a relative path to kasp-db) or a configuration  string  for
     PKCS  #11 storage (<pkcs11-uri> <module-path>).  The PKCS #11 URI Scheme is
     defined in RFC 7512.

     NOTE:
	Example configuration string for PKCS #11:

	    "pkcs11:token=knot;pin-value=1234 /usr/lib64/pkcs11/libsofthsm2.so"

     Default: kasp-db/keys

   ksk-only
     Newly generated keys are stored in this keystore only if they are	KSKs  or
     CSKs.  Zone signing keys will be stored in subsequent keystore without this
     option enabled.

     Default: off

   key-label
     If enabled in combination with the PKCS #11 backend, generated keys are la-
     beled in the form <zone_name> KSK|ZSK.

     Default: off

KEY SECTION
     Shared TSIG keys used to authenticate communication with the server.

	key:
	  - id: DNAME
	    algorithm: hmac-md5 | hmac-sha1 | hmac-sha224 | hmac-sha256 | hmac-sha384 | hmac-sha512
	    secret: BASE64

   id
     A key name identifier.

     NOTE:
	This  value  MUST be exactly the same as the name of the TSIG key on the
	opposite primary/secondary server(s).

   algorithm
     A TSIG key algorithm. See TSIG Algorithm Numbers.

     Possible values:

     * hmac-md5

     * hmac-sha1

     * hmac-sha224

     * hmac-sha256

     * hmac-sha384

     * hmac-sha512

     Default: hmac-sha256

   secret
     Shared key secret.

     Default: not set

REMOTE SECTION
     Definitions of remote servers for outgoing connections (source  of  a  zone
     transfer, target for a notification, etc.).

	remote:
	  - id: STR
	    address: ADDR[@INT] | STR ...
	    via: ADDR[@INT] ...
	    quic: BOOL
	    tls: BOOL
	    key: key_id
	    cert-key: BASE64 ...
	    cert-hostname: STR ...
	    block-notify-after-transfer: BOOL
	    no-edns: BOOL
	    automatic-acl: BOOL

   id
     A remote identifier.

   address
     An  ordered list of destination IP addresses or UNIX socket paths which are
     used for communication with the remote server. Non-absolute path (i.e.  not
     starting with /) is relative to rundir.  Optional destination port (default
     is  53 for UDP/TCP and 853 for QUIC) can be appended to the address using @
     separator.  The addresses	are  tried  in	sequence  until  the  remote  is
     reached.

     Default: not set

     NOTE:
	If  the  remote is contacted and it refuses to perform requested action,
	no more addresses will be tried for this remote.

   via
     An ordered list of source IP addresses which are used as  source  addresses
     for  communication  with the remote. For the N-th remote address, the last,
     but at most N-th, specified via address of the same family is  used.   This
     option  can  help if the server listens on more addresses.  Optional source
     port (default is random) can be appended to the address using @ separator.

     Default: not set

     NOTE:
	For the following configuration:

	    remote:
	      - id: example
		address: [198.51.100.10, 2001:db8::10, 198.51.100.20, 2001:db8::20]
		via: [198.51.100.1, 198.51.100.2, 2001:db8::1]

	the (via -> address) mapping is:

	* 198.51.100.1 -> 198.51.100.10

	* 2001:db8::1 ->  2001:db8::10

	* 198.51.100.2 -> 198.51.100.20

	* 2001:db8::1 -> 2001:db8::20

   quic
     If this option is set, the QUIC protocol will be used for outgoing communi-
     cation with this remote.

     NOTE:
	One connection per each remote is  opened;  remote-pool-limit  does  not
	take  effect  for QUIC. However, fast QUIC handshakes utilizing obtained
	session tickets are used for reopening connections to recently (up to  1
	day) queried remotes.

     Default: off

   tls
     If  this  option  is  set, the TLS (DoT) protocol will be used for outgoing
     communication with this remote.

     Default: off

   key
     A reference to the TSIG key which is used to authenticate the communication
     with the remote server.

     Default: not set

   cert-key
     An ordered list of up to 4 remote certificate public key PINs. If the  list
     is  non-empty,  communication  with the remote is only possible via QUIC or
     TLS protocols, and a peer certificate is required. The peer certificate key
     must match one of the specified PINs.

     A PIN is a unique identifier that represents the public  key  of  the  peer
     certificate.   It's  a  base64-encoded SHA-256 hash of the public key. This
     identifier usually remains the same on a certificate renewal.

     Default: not set

   cert-hostname
     An ordered list of up to 4 hostnames to match against  peer's  certificate.
     At  least	one  must  match  for  successful  certificate	validation  (see
     ca-file).	If the list is non-empty, communication with the remote is  only
     possible via QUIC or TLS protocols, and a peer certificate is required.

     Default: not set

   block-notify-after-transfer
     When  incoming  AXFR/IXFR	from this remote (as a primary server), suppress
     sending NOTIFY messages to all configured secondary servers.

     Default: off

   no-edns
     If enabled, no OPT record (EDNS) is inserted to outgoing requests	to  this
     remote  server.  This  mode is necessary for communication with some broken
     DNS implementations (e.g. Windows Server 2016).

     Additionally, if TCP is used for zone refresh, the SOA query and the subse-
     quent AXFR/IXFR query do not share the same TCP connection. This  mode  al-
     lows transfers from some broken DNS implementations (e.g. ixfrdist).

     NOTE:
	This  option effectively disables zone expire timer updates via EDNS EX-
	PIRE option specified in RFC 7314.

     Default: off

   automatic-acl
     If enabled, some authorized operations for the remote are automatically al-
     lowed based on the context:

     * Incoming NOTIFY is allowed from	the  remote  if  it's  configured  as  a
       primary server for the zone.

     * Outgoing  zone  transfer is allowed to the remote if it's configured as a
       NOTIFY target for the zone.

     Automatic ACL rules are evaluated before explicit zone ACL configuration.

     NOTE:
	This functionality requires global activation via automatic-acl  in  the
	server section.

     Default: on

REMOTES SECTION
     Definitions  of  groups of remote servers. Remote grouping can simplify the
     configuration.

	remotes:
	  - id: STR
	    remote: remote_id ...

   id
     A remote group identifier.

   remote
     An ordered list of references to remote server definitions.

     Default: not set

ACL SECTION
     Access control list rule definitions. An ACL rule is a description  of  one
     or  more  authorized  actions (zone transfer request, zone change notifica-
     tion, and dynamic DNS update) which are allowed to be processed or  denied.
     Queries which don't require authorization are always allowed.

	acl:
	  - id: STR
	    address: ADDR[/INT] | ADDR-ADDR | STR ...
	    key: key_id ...
	    cert-key: BASE64 ...
	    cert-hostname: STR ...
	    remote: remote_id | remotes_id ...
	    action: query | notify | transfer | update ...
	    protocol: udp | tcp | tls | quic ...
	    deny: BOOL
	    update-type: STR ...
	    update-owner: key | zone | name
	    update-owner-match: sub-or-equal | equal | sub | pattern
	    update-owner-name: STR ...

   id
     An ACL rule identifier.

   address
     An  ordered  list of IP addresses, absolute UNIX socket paths, network sub-
     nets, or network ranges. The query's source address must match one of them.
     If this item is not set, address match is not required.

     Default: not set

   key
     An ordered list of references to TSIG keys. The query  must  match  one  of
     them. If this item is not set, transaction authentication is not used.

     Default: not set

   cert-key
     An  ordered  list	of  remote  certificate  public key PINs. If the list is
     non-empty, communication with the remote is only possible via QUIC  or  TLS
     protocols,  and  a  peer  certificate is required. The peer certificate key
     must match one of the specified PINs.

     A PIN is a unique identifier that represents the public  key  of  the  peer
     certificate.   It's  a  base64-encoded SHA-256 hash of the public key. This
     identifier usually remains the same on a certificate renewal.

     Default: not set

   cert-hostname
     An ordered list of hostnames to match against peer's certificate. At  least
     one must match for successful certificate validation (see ca-file).  If the
     list  is non-empty, communication with the remote is only possible via QUIC
     or TLS protocols, and a peer certificate is required.

     Default: not set

   remote
     An ordered list of references remote and remotes. The query must match  the
     remote parameters.

     NOTE:
	This  option  cannot  be  combined  with  the  address,  key,  protocol,
	cert-key, or cert-hostname option in the same ACL rule.

     Default: not set

   action
     An ordered list of allowed, or denied, actions (request types).

     Possible values:

     * query a Allow regular DNS query. As normal queries  are	always	allowed,
       this action is only useful in combination with TSIG key.

     * notify a Allow incoming notify (NOTIFY).

     * transfer a Allow zone transfer (AXFR, IXFR).

     * update a Allow zone updates (DDNS).

     Default: query

   protocol
     List of allowed protocols.

     Possible values:

     * udp a UDP protocol.

     * tcp a TCP protocol.

     * tls a TLS protocol.

     * quic a QUIC protocol.

     Default: not set (any)

   deny
     If enabled, instead of allowing, deny the matching combination of the spec-
     ified items.

     Default: off

   update-type
     A	list of allowed types of Resource Records in a zone update. Every record
     in an update must match one of the specified types.

     Default: not set

   update-owner
     This option restricts possible owners of Resource Records in a zone  update
     by  comparing  them to either the TSIG key identity, the current zone name,
     or to a list of domain names given by the	update-owner-name  option.   The
     comparison method is given by the update-owner-match option.

     Possible values:

     * key  a  The  owner of each updated RR must match the identity of the TSIG
       key if used.

     * name a The owner of each updated RR must match at least one name  in  the
       update-owner-name list.

     * zone a The owner of each updated RR must match the current zone name.

     Default: not set

   update-owner-match
     This  option  defines  how  the owners of Resource Records in an update are
     matched to the domain name(s) set by the update-owner option.

     Possible values:

     * sub-or-equal a The owner of each RR in an update must either be equal  to
       or be a subdomain of at least one domain name set by update-owner.

     * equal a The owner of each updated RR must be equal to at least one domain
       name set by update-owner.

     * sub  a  The owner of each updated RR must be a subdomain of, but MUST NOT
       be equal to at least one domain name set by update-owner.

     * pattern a The owner of each updated RR must match a pattern specified  by
       update-owner.  The  pattern  can  be an arbitrary FQDN or non-FQDN domain
       name. If a label consists of one * (asterisk) character, it  matches  any
       label. More asterisk labels can be specified.

     Default: sub-or-equal

   update-owner-name
     A list of allowed owners of RRs in a zone update used with update-owner set
     to  name. Every listed owner name which is not FQDN (i.e. it doesn't end in
     a dot) is considered as if it was appended with the target zone name.  Such
     a relative owner name specification  allows  better  ACL  rule  reusability
     across multiple zones.

     Default: not set

SUBMISSION SECTION
     Parameters of KSK submission checks.

	submission:
	  - id: STR
	    parent: remote_id | remotes_id ...
	    check-interval: TIME
	    timeout: TIME
	    parent-delay: TIME

   id
     A submission identifier.

   parent
     A	list  of  references  remote  and  remotes to parent's DNS servers to be
     checked for presence of corresponding DS records in the case of KSK submis-
     sion. All of them must have a corresponding DS for  the  rollover	to  con-
     tinue. If none is specified, the rollover must be pushed forward manually.

     Default: not set

     TIP:
	A DNSSEC-validating resolver can be set as a parent.

   check-interval
     Interval  (in  seconds)  for periodic checks of DS presence on parent's DNS
     servers, in the case of the KSK submission.

     Default: 1h (1 hour)

   timeout
     After this time period (in seconds) the  KSK  submission  is  automatically
     considered  successful,  even if all the checks were negative or no parents
     are configured.  Set to 0 for infinity.

     Default: 0

   parent-delay
     After successful parent DS check, wait for this period (in seconds)  before
     continuing the next key roll-over step. This delay shall cover the propaga-
     tion delay of update in the parent zone.

     NOTE:
	This  delay  only  affects automatic KSK submission with parent queries.
	For KSK submission resulting in timeout or manually confirmed  by  knotc
	zone-ksk-submitted, the parent-delay doesn't apply.

     Default: 0

DNSKEY-SYNC SECTION
     Parameters of DNSKEY dynamic-update synchronization.

	dnskey-sync:
	  - id: STR
	    remote: remote_id | remotes_id ...
	    check-interval: TIME

   id
     A dnskey-sync identifier.

   remote
     A	list of references remote and remotes to other signers or common master,
     which the DDNS updates with DNSKEY/CDNSKEY/CDS records shall be sent to.

     Default: not set

   check-interval
     If the last DNSKEY sync failed or resulted in any change, re-check the con-
     sistence after this interval (in seconds) and re-try if needed.

     Default: 60 (1 minute)

POLICY SECTION
     DNSSEC policy configuration.

	policy:
	  - id: STR
	    keystore: keystore_id ...
	    manual: BOOL
	    single-type-signing: BOOL
	    algorithm: rsasha1 | rsasha1-nsec3-sha1 | rsasha256 | rsasha512 | ecdsap256sha256 | ecdsap384sha384 | ed25519 | ed448
	    ksk-size: SIZE
	    zsk-size: SIZE
	    ksk-shared: BOOL
	    dnskey-ttl: TIME
	    zone-max-ttl: TIME
	    keytag-modulo: INT/INT
	    ksk-lifetime: TIME
	    zsk-lifetime: TIME
	    delete-delay: TIME
	    propagation-delay: TIME
	    rrsig-lifetime: TIME
	    rrsig-refresh: TIME
	    rrsig-pre-refresh: TIME
	    reproducible-signing: BOOL
	    nsec3: BOOL
	    nsec3-iterations: INT
	    nsec3-opt-out: BOOL
	    nsec3-salt-length: INT
	    nsec3-salt-lifetime: TIME
	    signing-threads: INT
	    ksk-submission: submission_id
	    ds-push: remote_id | remotes_id ...
	    cds-cdnskey-publish: none | delete-dnssec | rollover | always | double-ds
	    cds-digest-type: sha256 | sha384
	    dnskey-management: full | incremental
	    offline-ksk: BOOL
	    unsafe-operation: none | no-check-keyset | no-update-dnskey | no-update-nsec | no-update-expired ...

   id
     A policy identifier.

   keystore
     A reference to a keystore holding private key material for zones.

     If multiple keystores are specified, private keys for signing are looked up
     in all of them. But newly generated keys are stored in the first one (or in
     the first one without enabled ksk-only in the case of a  new  ZSK)  in  the
     specified order.

     NOTE:
	If  multiple  keystores are configured and a zone is being restored with
	the back up feature, all restored private keys are stored into the first
	referenced keystore.

     NOTE:
	A configured keystore called "default" won't be used  unless  explicitly
	referenced.

     Default: an imaginary keystore with all default values

   manual
     If enabled, automatic key management is not used.

     Default: off

   single-type-signing
     If enabled, Single-Type Signing Scheme is used in the automatic key manage-
     ment mode.

     Default: off (module onlinesign has default on)

   algorithm
     An  algorithm  of	signing keys and issued signatures. See DNSSEC Algorithm
     Numbers.

     Possible values:

     * rsasha1

     * rsasha1-nsec3-sha1

     * rsasha256

     * rsasha512

     * ecdsap256sha256

     * ecdsap384sha384

     * ed25519

     * ed448

     NOTE:
	Ed448 algorithm is only available if compiled with  GnuTLS  3.6.12+  and
	Nettle 3.6+.

     Default: ecdsap256sha256

   ksk-size
     A length of newly generated KSK or CSK keys.

     Default:  2048 (rsa*), 256 (ecdsap256), 384 (ecdsap384), 256 (ed25519), 456
     (ed448)

   zsk-size
     A length of newly generated ZSK keys.

     Default: see default for ksk-size

   ksk-shared
     If enabled, all zones with this policy assigned  will  share  one	or  more
     KSKs.  More KSKs can be shared during a KSK rollover.

     WARNING:
	As  the  shared  KSK  set is bound to the policy id, renaming the policy
	breaks this connection and new shared KSK set is initiated  when  a  new
	KSK is needed.

     Default: off

   dnskey-ttl
     A TTL value for DNSKEY records added into zone apex.

     NOTE:
	Has influence over ZSK key lifetime.

     WARNING:
	Ensure all DNSKEYs with updated TTL are propagated before any subsequent
	DNSKEY rollover starts.

     Default: zone SOA TTL

   zone-max-ttl
     Declare (override) maximal TTL value among all the records in zone.

     NOTE:
	It's  generally  recommended  to override the maximal TTL computation by
	setting this explicitly whenever possible. It's required for DNSSEC  Of-
	fline  KSK  and really reasonable when records are generated dynamically
	(e.g. by a module).

     Default: computed after zone is loaded

   keytag-modulo
     Specifies that the keytags of any generated  keys	shall  be  congruent  by
     specified	modulo.   The  option  value must be a string in the format R/M,
     where R < M <= 256 are positive integers. Whenever a DNSSEC key  is  gener-
     ated,  it is ensured that keytag % M == R. This prevents keytag conflict in
     DNSSEC Offline KSK or DNSSEC multi-signer (and possibly other) setups.

     NOTE:
	This only applies to newly generated keys when they are generated.  Keys
	from  before this option and keys imported from elsewhere might not ful-
	fill the policy.

     Default: 0/1

   ksk-lifetime
     A period (in seconds) between KSK generation and the next rollover  initia-
     tion.

     NOTE:
	KSK  key  lifetime  is also influenced by propagation-delay, dnskey-ttl,
	and KSK submission delay.

	Zero (aka infinity) value causes no KSK rollover as a result.

	This applies for CSK lifetime if single-type-signing is enabled.

     Default: 0 (infinity)

   zsk-lifetime
     A period (in seconds) between ZSK activation and the next rollover  initia-
     tion.

     NOTE:
	More  exactly, this period is measured since a ZSK is activated, and af-
	ter this, a  new  ZSK  is  generated  to  replace  it  within  following
	roll-over.

	As a consequence, in normal operation, this results in the period of ZSK
	generation being zsk-lifetime + propagation-delay + dnskey_ttl.

	Zero (aka infinity) value causes no ZSK rollover as a result.

     Default: 30d (30 days)

   delete-delay
     Once  a  key (KSK or ZSK) is rolled-over and removed from the zone, keep it
     in the KASP database for at least this period (in seconds) before	deleting
     it completely. This might be useful in some troubleshooting cases when res-
     urrection is needed.

     Default: 0

   propagation-delay
     An  extra	delay  added for each key rollover step. This value (in seconds)
     should be high enough to cover propagation of data from the primary  server
     to all secondary servers, as well as the duration of signing routine itself
     and  possible  outages  in signing and propagation infrastructure. In other
     words, this delay should ensure that  within  this  period  of  time  after
     planned  change  of the key set, all public-facing secondaries will already
     serve new DNSKEY RRSet for sure.

     NOTE:
	Has influence over ZSK key lifetime.

     Default: 1h (1 hour)

   rrsig-lifetime
     A validity period (in seconds) of newly issued signatures.

     NOTE:
	The RRSIG's signature inception time is set to 90 minutes in  the  past.
	This time period is not counted to the signature lifetime.

     Default: 14d (14 days)

   rrsig-refresh
     A	period	(in seconds) how long at least before a signature expiration the
     signature will be refreshed, in order to prevent  expired	RRSIGs	on  sec-
     ondary servers or resolvers' caches.

     Default: 0.1 * rrsig-lifetime + propagation-delay + zone-max-ttl

     If dnssec-validation is enabled:

     Default: 1d (1 day)

   rrsig-pre-refresh
     A	period (in seconds) how long at most before a signature refresh time the
     signature might be refreshed, in order to refresh RRSIGs in bigger  batches
     on a frequently updated zone (avoid re-sign event too often).

     Default: 1h (1 hour)

   reproducible-signing
     For  ECDSA  algorithms,  generate	RRSIG  signatures deterministically (RFC
     6979).  Besides better theoretical cryptographic security, this mode allows
     significant speed-up of loading signed (by the same method) zones. However,
     the zone signing is a bit slower.

     Default: off

   nsec3
     Specifies if NSEC3 will be used instead of NSEC.

     Default: off

   nsec3-iterations
     A number of additional times the hashing is performed.

     Default: 0

   nsec3-opt-out
     If set, NSEC3 records won't be  created  for  insecure  delegations.   This
     speeds up the zone signing and reduces overall zone size.

     WARNING:
	NSEC3  with  the Opt-Out bit set no longer works as a proof of non-exis-
	tence in this zone.

     Default: off

   nsec3-salt-length
     A length of a salt field in octets, which is appended to the original owner
     name before hashing.

     Default: 0

   nsec3-salt-lifetime
     A validity period (in seconds) of newly issued salt field.

     Zero value means infinity.

     Special value -1 triggers re-salt every time when active ZSK changes.  This
     optimizes the number of big changes to the zone.

     Default: 30d (30 days)

   signing-threads
     When signing zone or update, use this number of threads for parallel  sign-
     ing.

     Those are extra threads independent of Background workers.

     NOTE:
	Some steps of the DNSSEC signing operation are not parallelized.

     Default: 1 (no extra threads)

   ksk-submission
     A	reference  to  submission  section  holding parameters of KSK submission
     checks.

     Default: not set

   ds-push
     Optional references remote and remotes to authoritative DNS server  of  the
     parent's zone. The remote server must be configured to accept DS record up-
     dates  via  DDNS.	Whenever  a CDS record in the local zone is changed, the
     corresponding DS record is sent as a dynamic update (DDNS)  to  the  parent
     DNS  server.  All	previous DS records are deleted within the DDNS message.
     It's possible to manage both child and parent zones by the  same  Knot  DNS
     server.

     NOTE:
	This feature requires cds-cdnskey-publish not to be set to none.

     NOTE:
	The mentioned change to CDS record usually means that a KSK roll-over is
	running  and the new key being rolled-in is in "ready" state already for
	the period of propagation-delay.

     NOTE:
	Module Onlinesign doesn't support DS push.

     NOTE:
	When turning this feature on while a KSK roll-over is  already	running,
	it might not take effect for the already-running roll-over.

     Default: not set

   dnskey-sync
     A	reference  to  dnskey-sync section holding parameters of DNSKEY synchro-
     nization.

     Default: not set

   cds-cdnskey-publish
     Controls if and how shall the CDS and CDNSKEY be published in the zone.

     Possible values:

     * none a Never publish any CDS or CDNSKEY records in the zone.

     * delete-dnssec a Publish special CDS and CDNSKEY records indicating  turn-
       ing off DNSSEC.

     * rollover  a  Publish CDS and CDNSKEY records for ready and not yet active
       KSK (submission phase of KSK rollover).

     * always a Always publish one CDS and one CDNSKEY records for  the  current
       KSK.

     * double-ds  a  Always  publish  up  to two CDS and two CDNSKEY records for
       ready and/or active KSKs.

     NOTE:
	If the zone keys are managed manually, the CDS and  CDNSKEY  rrsets  may
	contain more records depending on the keys available.

     WARNING:
	The  double-ds	value  does not trigger double-DS roll-over method. That
	method	is  only  supported  when   performed	manually,   with   unset
	ksk-submission.

     Default: rollover

   cds-digest-type
     Specify digest type for published CDS records.

     Possible values:

     * sha256

     * sha384

     Default: sha256

   dnskey-management
     Specify  how  the DNSKEY, CDNSKEY, and CDS RRSets at the zone apex are han-
     dled when (re-)signing the zone.

     Possible values:

     * full a Upon every zone (re-)sign, delete all unknown DNSKEY, CDNSKEY, and
       CDS records and keep just those that are related to the zone keys  stored
       in the KASP database.

     * incremental  a Keep unknown DNSKEY, CDNSKEY, and CDS records in the zone,
       and modify server-managed records incrementally by employing  changes  in
       the KASP database.

     NOTE:
	Prerequisites for incremental:

	* The Offline KSK isn't supported.

	* The  delete-delay  is  long  enough  to cover possible daemon shutdown
	  (e.g. due to server maintenance).

	* Avoided manual deletion of keys with keymgr.

	Otherwise there might remain some DNSKEY records in the zone,  belonging
	to deleted keys.

     Default: full

   offline-ksk
     Specifies if Offline KSK feature is enabled.

     Default: off

   unsafe-operation
     Turn off some DNSSEC safety features.

     Possible values:

     * none a Nothing disabled.

     * no-check-keyset a Don't check active keys in present algorithms. This may
       lead to violation of RFC 4035 Section 2.2.

     * no-update-dnskey a Don't maintain/update DNSKEY, CDNSKEY, and CDS records
       in the zone apex according to KASP database. Juste leave them as they are
       in the zone.

     * no-update-nsec  a  Don't  maintain/update NSEC/NSEC3 chain. Leave all the
       records as they are in the zone.

     * no-update-expired a Don't update expired RRSIGs.

     Multiple values may be specified.

     WARNING:
	This mode is intended for DNSSEC experts who understand the  correspond-
	ing consequences.

     Default: none

EXTERNAL SECTION
     External zone validation configuration.

	external:
	  - id: STR
	    timeout: TIME
	    dump-new-zone: STR
	    dump-removals: STR
	    dump-additions: STR

   id
     An external section identifier.

   timeout
     If the validation is not confirmed within this time interval in seconds, it
     is considered failed.

     Default: 300

   dump-new-zone
     A	path  to file where the new zone contents will be written before waiting
     for external validation.

     Default: none

   dump-removals
     A path to file where the records being removed will be written before wait-
     ing for external validation.

     Default: none

   dump-additions
     A path to file where the records being added will be written before waiting
     for external validation.

     Default: none

TEMPLATE SECTION
     A template is shareable zone settings, which can simplify configuration  by
     reducing  duplicates.  A special default template (with the default identi-
     fier) can be used for global zone configuration or as an implicit	configu-
     ration if a zone doesn't have another template specified.

	template:
	  - id: STR
	    global-module: STR/STR ...
	    # All zone options (excluding 'template' item)

     NOTE:
	If  an	item is explicitly specified both in the referenced template and
	the zone, the template item value is overridden by the zone item value.

   id
     A template identifier.

   global-module
     An ordered list of references to query modules in the form  of  module_name
     or module_name/module_id. These modules apply to all queries.

     NOTE:
	This option is only available in the default template.

     Default: not set

ZONE SECTION
     Definition of zones served by the server.

	zone:
	  - domain: DNAME
	    template: template_id
	    storage: STR
	    file: STR
	    zone-db-input: INT
	    zone-db-output: INT
	    master: remote_id | remotes_id ...
	    ddns-master: remote_id
	    notify: remote_id | remotes_id ...
	    notify-delay: TIME
	    update-delay: TIME
	    acl: acl_id ...
	    master-pin-tolerance: TIME
	    provide-ixfr: BOOL
	    semantic-checks: BOOL | soft
	    default-ttl: TIME
	    zonefile-sync: TIME
	    zonefile-load: none | difference | difference-no-serial | whole
	    zonefile-skip: STR ...
	    journal-content: none | changes | all
	    journal-max-usage: SIZE
	    journal-max-depth: INT
	    ixfr-benevolent: BOOL
	    ixfr-by-one: BOOL
	    ixfr-from-axfr: BOOL
	    zone-max-size : SIZE
	    adjust-threads: INT
	    external-validation: external_id
	    dnssec-signing: BOOL
	    dnssec-validation: BOOL
	    dnssec-policy: policy_id
	    ds-push: remote_id | remotes_id ...
	    zonemd-verify: BOOL
	    zonemd-generate: none | zonemd-sha384 | zonemd-sha512 | remove
	    serial-policy: increment | unixtime | dateserial
	    serial-modulo: INT/INT | +INT | -INT | INT/INT+INT | INT/INT-INT
	    reverse-generate: DNAME ...
	    include-from: DNAME ...
	    refresh-min-interval: TIME
	    refresh-max-interval: TIME
	    retry-min-interval: TIME
	    retry-max-interval: TIME
	    expire-min-interval: TIME
	    expire-max-interval: TIME
	    catalog-role: none | interpret | generate | member
	    catalog-template: template_id ...
	    catalog-zone: DNAME
	    catalog-group: STR
	    module: STR/STR ...

   domain
     A zone name identifier.

   template
     A reference to a configuration template.

     Default: not set or default (if the template exists)

   storage
     A data directory for storing zone files. A non-absolute path is relative to
     the knotd startup directory.

     Default: ${localstatedir}/lib/knot (configured with --with-storage=path)

   file
     A	path  to the zone file. It is also possible to use the following format-
     ters:

     * %c[N] or %c[N-M] a Means the Nth character or a	sequence  of  characters
       beginning  from	the Nth and ending with the Mth character of the textual
       zone name (see %s). The indexes are counted from 0  from  the  left.  All
       dots (including the terminal one) are considered. If the character is not
       available, the formatter has no effect.

     * %l[N]  a Means the Nth label of the textual zone name (see %s). The index
       is counted from 0 from the right (0 ~ TLD).  If the label is  not  avail-
       able, the formatter has no effect.

     * %s a Means the current zone name in the textual representation.	The zone
       name doesn't include the terminating dot (the result for the root zone is
       the empty string!).

     * %% a Means the % character.

     WARNING:
	Beware	of  special  characters which are escaped or encoded in the \DDD
	form where DDD is corresponding decimal ASCII code.

     Default: storage/%s.zone

   zone-db-input
     If  set,  the  zone  is  loaded  from  the  zone  database  configured   at
     zone-db-listen. The value of this option specifies the zone instance number
     (from 1 to 8 inclusive) within the database to read from.

     NOTE:
	With  this  option  enabled, the textual zone file is never loaded.  The
	zonefile-load setting still applies to handling  of  the  zone	contents
	loaded from the database, however, zonefile-load: whole and journal-con-
	tent: changes are recommended (both being the defaults).

     Default: -1 (disabled)

   zone-db-output
     If   set,	 the   zone  is  stored  to  the  zone	database  configured  at
     zone-db-listen and updated there with every change to  the  zone  contents.
     The  value  of  this option specifies the zone instance number (from 1 to 8
     inclusive) within the database to write to.

     Default: -1 (disabled)

   master
     An ordered list of references remote and remotes to  zone	primary  servers
     (formerly	known  as  master servers).  Empty value is allowed for template
     value overriding.

     Default: not set

   ddns-master
     A reference to a zone primary master where DDNS  messages	should	be  for-
     warded to. If not specified, the first master server is used.

     If set to the empty value (""), incoming DDNS messages aren't forwarded but
     are  applied  to  the  local  zone  instead, no matter if it is a secondary
     server. This is only allowed in combination with dnssec-signing enabled.

     Default: not set

   notify
     An ordered list of references remote and remotes to  secondary  servers  to
     which  NOTIFY  message is sent if the zone changes.  Empty value is allowed
     for template value overriding.

     Default: not set

   notify-delay
     A time delay in seconds before an outgoing NOTIFY message is sent. This de-
     lay also defines the time granularity at which NOTIFY messages are sent per
     zone.

     Default: 0

   update-delay
     A time delay in seconds before a change to zone contents is made  after  an
     external  trigger	such  as incoming NOTIFY or DDNS, or an internal trigger
     from different zone such as change to zone to be reversed, included from or
     a member of generated catalog zone.

     Exception: zone changing events triggered by control socket  (knotc  zone-*
     commands) or by interpreted catalog are performed immediately, without con-
     figured delay.

     Default: 0

   acl
     An ordered list of references to ACL rules which can allow or disallow zone
     transfers, updates or incoming notifies.

     Default: not set

   master-pin-tolerance
     If set to a nonzero value on a secondary, always request AXFR/IXFR from the
     same  primary  as the last time, effectively pinning one primary. Only when
     another primary is updated and the current one lags behind for  the  speci-
     fied  amount of time (defined by this option in seconds), change to the up-
     dated primary and force AXFR.

     This option is useful when multiple primaries may have different zone  his-
     tory  in their journals, making it unsafe to combine interchanged IXFR from
     different primaries.

     Default: 0 (disabled)

   provide-ixfr
     If disabled, the server is forced to respond with AXFR to IXFR queries.  If
     enabled, IXFR requests are responded normally.

     Default: on

   semantic-checks
     Selects if extra zone semantic checks are used or impacts of the  mandatory
     checks.

     There  are  several mandatory checks which are always enabled and cannot be
     turned off. An error in a mandatory check causes the zone not to be loaded.
     Most of the mandatory checks can be weakened by setting soft, which  allows
     the zone to be loaded even if the check fails.

     If enabled, extra checks are used. These checks don't prevent the zone from
     loading.

     The mandatory checks are applied to zone files, zone transfers, and updates
     via control interface. The extra checks are applied to zone files only!

     Mandatory checks:

     * Missing SOA record at the zone apex (RFC 1034) (*)

     * An  extra record exists together with a CNAME record except for RRSIG and
       NSEC (RFC 1034)

     * Multiple CNAME records with the same owner exist (RFC 1034)

     * DNAME record having a record under it (RFC 6672)

     * Multiple DNAME records with the same owner exist (RFC 6672)

     * NS record exists together with a DNAME record (RFC 6672)

     * DS record exists at the zone apex (RFC 3658)

     (*) The marked check can't be weakened by the soft mode. All  other  manda-
     tory checks are subject to the optional soft mode.

     Extra checks:

     * Missing NS record at the zone apex

     * Missing glue A or AAAA record

     * Invalid DS or NSEC3PARAM record

     * CDS or CDNSKEY inconsistency

     * All other DNSSEC checks executed during dnssec-validation

     NOTE:
	The  soft  mode allows the refresh event to ignore a CNAME response to a
	SOA query (malformed message) and triggers a zone bootstrap instead.

     Default: off

   default-ttl
     The default TTL value if none is specified in a zone file or zone insertion
     using the dynamic configuration.

     WARNING:
	As changing this value can result in differently  parsed  zone	file(s),
	the  corresponding  zone  SOA serial(s) should be incremented before re-
	loading  or  committing  the   configuration.	Alternatively,	 setting
	zonefile-load  to difference-no-serial ensures the resulting zone(s) up-
	date is correct.

     Default: 3600

   zonefile-sync
     The time in seconds after which the current zone in memory will  be  synced
     with  a  zone file on the disk (see file). The server will serve the latest
     zone even after a restart using zone journal, but the zone file on the disk
     will only be synced after zonefile-sync time has expired (or  after  manual
     zone  flush). This is applicable when the zone is updated via IXFR, DDNS or
     automatic DNSSEC signing. In order to  completely	disable  automatic  zone
     file synchronization, set the value to -1. In that case, it is still possi-
     ble to force a manual zone flush using the -f option.

     NOTE:
	If you are serving large zones with frequent updates where the immediate
	sync with a zone file is not desirable, increase the value.

     Default: 0 (immediate)

   zonefile-load
     Selects how the zone file contents are applied during zone load.

     Possible values:

     * none a The zone file is not used at all.

     * difference  a  If  the  zone contents are already available during server
       start or reload, the difference is computed between them and the contents
       of the zone file. This difference is then checked for semantic errors and
       applied to the current zone contents.

     * difference-no-serial a Same as difference, but the SOA serial in the zone
       file is ignored, the server takes care of incrementing the  serial  auto-
       matically.

     * whole a Zone contents are loaded from the zone file.

     When  difference  is  configured  and  there are no zone contents yet (cold
     start and no zone contents in the journal), it  behaves  the  same  way  as
     whole.

     Default: whole

     NOTE:
	See  Handling  zone file, journal, changes, serials for guidance on con-
	figuring these and related options to ensure reliable operation.

     WARNING:
	If zone-db-input is configured, the textual zone file is  never  loaded.
	However,  this option still effects on how the zone contents loaded from
	the database are applied and handled.

   zonefile-skip
     Specifies resource record types to be omitted when loading and syncing zone
     files.

     Resource record types are represented as strings (e.g. "DS")  and	multiple
     types may be specified. The special string dnssec represents all types usu-
     ally  created  by	DNSSEC	signing  routines  (DNSKEY,  RRSIG, NSEC, NSEC3,
     NSEC3PARAM, CDNSKEY, CDS a but not DS).

     NOTE:
	This option takes effect while a zone file is being read or written, but
	it does not directly trigger any zone  file  operation.  Therefore,  the
	configured  record  types  cannot be expected to disappear from the zone
	file or running zone immediately after setting the option.

     Default: not set

   journal-content
     Selects how the journal shall be used to store zone and its changes.

     Possible values:

     * none a The journal is not used at all.

     * changes a Zone changes history is stored in journal.

     * all a Zone contents and history is stored in journal.

     Default: changes

     WARNING:
	When this option is changed, the journal still contains data  respective
	to the previous setting. For example, changing it to none does not purge
	the  journal.  Also,  changing it from all to changes does not cause the
	deletion of the zone-in-journal and the behaviour of  the  zone  loading
	procedure  might  be  different than expected. It is recommended to con-
	sider purging the journal when this option is changed.

   journal-max-usage
     Policy how much space in journal DB will the zone's journal occupy.

     NOTE:
	Journal DB may grow far above the sum of  journal-max-usage  across  all
	zones, because of DB free space fragmentation.

     Default: 100M (100 MiB)

   journal-max-depth
     Maximum history length of the journal.

     NOTE:
	Zone-in-journal changeset isn't counted to the limit.

     Minimum: 2

     Default: 20

   ixfr-benevolent
     If  enabled,  incoming  IXFR  is  applied even when it contains removals of
     non-existing or additions of existing records.

     Default: off

   ixfr-by-one
     Within incoming IXFR, process only one changeset at a  time,  not	multiple
     together.	 This preserves the complete history in the journal and prevents
     the merging of changesets when multiple changesets  are  IXFRed  simultane-
     ously.  However,  this  does  not	prevent the merging (or deletion) of old
     changesets in the journal to save space, as described in journal behaviour.

     This option leads to increased server load when processing IXFR,  including
     network traffic.

     Default: off

   ixfr-from-axfr
     If  a  primary sends AXFR-style-IXFR upon an IXFR request, compute the dif-
     ference and process it as an incremental zone update (e.g. by  storing  the
     changeset in the journal).

     Default: off

   zone-max-size
     Maximum  size of the zone. The size is measured as size of the zone records
     in wire format without compression. The limit is enforced for incoming zone
     transfers and dynamic updates.

     For incremental transfers (IXFR), the effective limit for the total size of
     the records in the transfer is twice the configured value. However the  fi-
     nal size of the zone must satisfy the configured value.

     Default: unlimited

   adjust-threads
     Parallelize internal zone adjusting procedures by using specified number of
     threads.  This  is useful with huge zones with NSEC3. Speedup observable at
     server startup and while processing NSEC3 re-salt.

     Default: 1 (no extra threads)

   external-validation
     A reference to external validation section.

     If configured, every  change  to  the  zone  (zone  file  update,	incoming
     IXFR/AXFR, dynamic update, and DNSSEC re-signing, but not changes over con-
     trol  socket  a  knotc  zone-begin)  is paused just before applying the new
     zone.  At that point, validation and confirmation is awaited from the  user
     (or potentially a user-defined script).

     NOTE:
	In the case of server shutdown or configuration reload, the server waits
	until  all  outstanding  external  validations	are  either committed or
	aborted, or until the timeout elapses.

     In the referenced external section, it is possible to define paths to files
     where the new zone contents and/or differences are  written  (in  the  zone
     file format) just before every validation.

     TIP:
	If dbus-event is set to external-verify, a corresponding signal is emit-
	ted when the server is awaiting external validation.

     Default: none

   dnssec-signing
     If enabled, automatic DNSSEC signing for the zone is turned on.

     Default: off

   dnssec-validation
     If enabled, the zone contents are validated for being correctly signed (in-
     cluding  NSEC/NSEC3  chain)  with	DNSSEC signatures every time the zone is
     loaded or changed (including AXFR/IXFR),  or  whenever  a	previously  seen
     RRSIG's expiration has passed.

     When the validation fails, the zone being loaded or update being applied is
     cancelled	with  an  error,  and either none or previous zone state is pub-
     lished.

     When a RRSIG expires on a secondary server, the whole zone is expired (per-
     manent SERVFAIL until resolved).

     The DNSSEC validation is performed incrementally (taking  little  time  for
     small  updates to large zone) whenever possible, but occasionally full zone
     validation takes place.

     List of DNSSEC checks:

     * Every zone RRSet is correctly signed by at least one present DNSKEY.

     * For every RRSIG there are at most 3 non-matching DNSKEYs  with  the  same
       keytag.

     * DNSKEY RRSet is signed by KSK.

     * NSEC(3) RR exists for each name (unless opt-out) with correct bitmap.

     * Every NSEC(3) RR is linked to the lexicographically next one.

     The  validation  is not affected by dnssec-policy configuration, except for
     signing-threads option, which specifies the number of threads for	parallel
     validation,  and  rrsig-refresh,  which  defines  minimal allowed remaining
     RRSIG validity (otherwise a warning is logged).

     NOTE:
	Redundant or garbage NSEC3 records are ignored.

	This mode is not compatible with dnssec-signing.

     TIP:
	If dbus-event is set to dnssec-invalid, a corresponding signal is  emit-
	ted  when  the validation fails, both in the case of an invalid zone up-
	date and in the case of an expired RRSIG that has not been refreshed.

     Default: not set

   dnssec-policy
     A reference to DNSSEC signing policy.

     NOTE:
	A configured policy called "default" won't  be	used  unless  explicitly
	referenced.

     Default: an imaginary policy with all default values

   ds-push
     Per  zone configuration of ds-push. This option overrides possible per pol-
     icy option. Empty value is allowed for template value overriding.

     Default: not set

   zonemd-verify
     On each zone load/update, verify that ZONEMD is present  in  the  zone  and
     valid.

     NOTE:
	Zone digest calculation may take much time and CPU on large zones.

     TIP:
	If  dbus-event is set to dnssec-invalid, a corresponding signal is emit-
	ted when the verification fails.

     Default: off

   zonemd-generate
     On each zone update, calculate ZONEMD and put it into the zone.

     Possible values:

     * none a No action regarding ZONEMD.

     * zonemd-sha384 a Generate ZONEMD using SHA384 algorithm.

     * zonemd-sha512 a Generate ZONEMD using SHA512 algorithm.

     * remove a Remove any ZONEMD from the zone apex.

     Default: none

   serial-policy
     Specifies how the zone serial is updated after a dynamic  update  or  auto-
     matic  DNSSEC  signing.  If the serial is changed by the dynamic update, no
     change is made.

     Possible values:

     * increment a The serial is incremented according to serial  number  arith-
       metic.

     * unixtime a The serial is set to the current unix time.

     * dateserial a The 10-digit serial (YYYYMMDDnn) is incremented, the first 8
       digits match the current iso-date.

     NOTE:
	If  the  resulting  serial  for  unixtime or dateserial is lower than or
	equal to the current serial (this happens e.g. when migrating from other
	policy or frequent updates), the serial is incremented instead.

	To avoid user confusion, use dateserial only if you expect at  most  100
	updates per day per zone and unixtime only if you expect at most one up-
	date per second per zone.

	Generated catalog zones use unixtime only.

     Default: increment (unixtime for generated catalog zones)

   serial-modulo
     The option value is a string consisting of two parts (with no separator be-
     tween them), each of which is optional.

     The first part specifies that the zone serials must be congruent modulo the
     specified	value.	The format is R/M, where R < M <= 256 are positive inte-
     gers. Whenever the zone serial is incremented, it is ensured that serial  %
     M	== R. This can be useful in the case of multiple inconsistent primaries,
     where distinct zone serial sequences prevent cross-master-IXFR by any  sec-
     ondary.

     NOTE:
	Because the zone serial effectively always increments by M instead of 1,
	it  is	not recommended to use dateserial or even unixtime serial-policy
	in the case of rapidly updated zone.

     The second part specifies a numeric shift for the	generated  zone  serial.
     The  shift  is  formatted as a signed integer, including the sign (+ or -).
     It is mostly useful with unixtime serial-policy, where the  generated  zone
     serial is shifted relative to the Unix time.

     NOTE:
	In  order  to  ensure  the congruent policy, this option is only allowed
	with DNSSEC signing enabled  and  zonefile-load  to  be  either  differ-
	ence-no-serial or none.

     Default: 0/1+0

   reverse-generate
     A	list of zone names for which automatic generation of reverse PTR records
     based on A/AAAA records is enabled. The entire generated zone is  automati-
     cally stored in the journal.

     The  auto-generated reverse zone is re-generated whenever any of the speci-
     fied zones is updated. This includes the situation when reverse  generation
     had  failed  due  to some of the specified zones were not yet loaded or had
     expired.

     Current limitations:

     * Is slow for large zones (even when changing a little).

     * Recomputes all reverse records upon any change in  any  of  the	reversed
       zones.

     In  case  of  secondary zone (i.e. master is specified) this option implies
     ixfr-from-axfr: on and journal-content: all, otherwise zonefile-load:  dif-
     ference-no-serial and journal-content: all.

     Default: none

   include-from
     A	list of subzones that should be flattened into this zone. The flattening
     deletes all delegation-related records (including NS, SOA, ...)  from  both
     zones and copies all other records from the subzone to this zone.

     In  case  of  secondary zone (i.e. master is specified) this option implies
     ixfr-from-axfr: on and journal-content: all, otherwise zonefile-load:  dif-
     ference-no-serial and journal-content: all.

     Default: none

   refresh-min-interval
     Forced minimum zone refresh interval (in seconds) to avoid flooding primary
     server.

     Minimum: 2

     Default: 2

   refresh-max-interval
     Forced maximum zone refresh interval (in seconds).

     Default: not set

   retry-min-interval
     Forced  minimum  zone retry interval (in seconds) to avoid flooding primary
     server.

     Minimum: 1

     Default: 1

   retry-max-interval
     Forced maximum zone retry interval (in seconds).

     Default: not set

   expire-min-interval
     Forced minimum zone expire interval (in seconds) to avoid flooding  primary
     server.

     Minimum: 3

     Default: 3

   expire-max-interval
     Forced maximum zone expire interval (in seconds).

     Default: not set

   catalog-role
     Trigger zone catalog feature. Possible values:

     * none a Not a catalog zone.

     * interpret  a  A catalog zone which is loaded from a zone file or XFR, and
       member zones shall be configured based on its contents.

     * generate a A catalog zone whose contents are generated according  to  as-
       signed member zones.

     * member a A member zone that is assigned to one generated catalog zone.

     NOTE:
	If  set to generate, the zonefile-load option has no effect since a zone
	file is never loaded.

     Default: none

   catalog-template
     For the catalog member zones, the specified configuration template will  be
     applied.

     Multiple catalog templates may be defined. The first one is used unless the
     member  zone  has the group property defined, matching another catalog tem-
     plate.

     NOTE:
	This option must be set if and only if catalog-role is interpret.

	Nested catalog zones aren't supported. Therefore catalog templates can't
	contain catalog-role set to interpret or generate.

     Default: not set

   catalog-zone
     Assign this member zone to specified generated catalog zone.

     NOTE:
	This option must be set if catalog-role is member.

	The referenced catalog zone must exist and have catalog-role set to gen-
	erate.

     WARNING:
	Atomically changing a member zone from one catalog zone to another  that
	is  consumed  by the same secondary is not recommended, as the update to
	the target catalog zone may be randomly processed first and ignored  due
	to a clash between catalogs.

	The correct catalog zone processing order on secondaries can be achieved
	by  temporarily  freezing  outgoing transfers of the target catalog zone
	and thawing it after the source catalog zone has already been  processed
	(i.e. the member has been removed), and then manually notifying the sec-
	ondaries.

	If  the  generated  zone catalogs have already arrived at a secondary in
	the wrong order, triggering a zone retransfer of the target  catalog  on
	the secondary fixes the situation.

     Default: not set

   catalog-group
     Assign  this  member  zone  to  specified catalog group (configuration tem-
     plate).

     NOTE:
	This option has an effect if and only if catalog-role is member.

     Default: not set

   module
     An ordered list of references to query modules in the form  of  module_name
     or  module_name/module_id.  These	modules  apply	only to the current zone
     queries.

     Default: not set

AUTHOR
     CZ.NIC, z.s.p.o. and contributors <https://www.knot-dns.cz/>

COPYRIGHT
     Copyright (C) CZ.NIC, z.s.p.o. and contributors

3.5.6				   2026-07-20			    KNOT.CONF(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=knot.conf&sektion=5&manpath=FreeBSD+Ports+15.1.quarterly>

home | help