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 mean-
       ing of the following symbols:

        INT  Integer

        STR  Textual string

        HEXSTR	 Hexadecimal string (with 0x prefix)

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

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

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

        BASE64	 Base64	encoded	string

        ADDR  IPv4 or IPv6 address

        DNAME	Domain name

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

        [ ]  Optional value

        |  Choice

       The  configuration consists of several fixed sections and optional mod-
       ule sections. There are 18 fixed	sections (module,  server,  xdp,  con-
       trol,  log,  statistics,	database, keystore, key, remote, remotes, acl,
       submission, dnskey-sync,	policy,	external`,  template,  zone).	Module
       sections	are prefixed 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
       reference 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
       necessary 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 relative 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 using the comment item which is stored in the server beside the
       configuration.

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

	  include: STR

   include
       A  path or a matching pattern specifying	one or more files that are in-
       cluded at the place of the include option position  in  the  configura-
       tion.   If  the path is not absolute, then it is	considered to be rela-
       tive to the current file. The pattern can be an arbitrary string	 meet-
       ing  POSIX  glob	 requirements,	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 configura-
       tion  in	the configuration database when	including a configuration file
       or ensures that some configuration wasn't  specified  in	 previous  in-
       cludes.

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

	   clear: zone	 Clears	the zone section.

	   clear: mod-*  Clears all module sections.

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

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

	   clear: @(zone|template)  (GNU only)	Clears the zone	 and  template
	    sections.

       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 suf-
       fix.

   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
	  system directories. See man dlopen for more details.

       Default:	     ${libdir}/knot/modules-${version}/module_name.so	   (or
       ${path}/module_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[@INT] | STR ...
	      listen-quic: ADDR[@INT] ...
	      listen-tls: ADDR[@INT] ...

       CAUTION:
	  When you change configuration	parameters dynamically or via configu-
	  ration file reload, some parameters in the  Server  section  require
	  restarting  the Knot server so that the changes take effect. See be-
	  low 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 dis-
       able.

       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-absolute 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 capa-
       bilities	are employed if	supported.

       Change  of  this	 parameter requires restart of the Knot	server to take
       effect.

       Default:	root:root

   pidfile
       A PID file location.

       Change of this parameter	requires restart of the	Knot  server  to  take
       effect.

       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
       effect.

       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
       effect.

       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
       effect.

       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
       responding immediately with SERVFAIL answers until the zone loads.

       Default:	off

   tcp-idle-timeout
       Maximum idle time (in seconds) between requests on an inbound TCP  con-
       nection.	 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  process-
       ing.  Set to 0 for infinity.

       Default:	500 (milliseconds)

       CAUTION:
	  In  order to reduce the risk of Slow Loris attacks, it's recommended
	  setting 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_REUSE-
       PORT_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
       effect.

       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_en-
	    able 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
       effect.

       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:
	  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 ex-
	  pected.

       Change of this parameter	requires restart of the	Knot  server  to  take
       effect.

       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
       effect.

       Minimum:	1

       Default:	4

   remote-pool-limit
       If nonzero, the server will keep	up to this number of outgoing TCP con-
       nections	 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
       effect.

       Default:	0

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

       Default:	5

   remote-retry-delay
       When a connection attempt times out to some remote address, this	infor-
       mation will be kept for this specified time (in milliseconds) and other
       connections 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
       network sockets are bound to UDP	and TCP	workers	in order  to  increase
       the  networking	performance.   This  mode isn't	recommended for	setups
       where the number	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
       effect.

       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 com-
       munication.  A non-absolute path	of a user specified key	file is	 rela-
       tive 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  systems  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 supported 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  No signal is emitted.

        running  Two signals may be emitted:

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

	  stopped  Emitted when the server shutdown sequence is initiated.

        zone-updated  Two signals may be emitted:

	  zone_updated	  Emitted  when	 a zone	has been successfully updated.
	   Parameters: zone name and zone SOA serial.

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

        external-verify  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	The  signal  keys_updated is emitted when a DNSSEC key
	 set is	updated.  Parameters: zone name.

        ksk-submission	 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	 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
       effect.

       Default:	none

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

       Change of this parameter	requires restart of the	Knot  server  to  take
       effect.

       Minimum:	0

       Default:	1

   listen
       One or more IP addresses	where the server listens for incoming queries.
       Optional	port specification (default is 53) can be appended to each ad-
       dress  using @ separator. Use 0.0.0.0 for all configured	IPv4 addresses
       or :: for all configured	IPv6 addresses.	Filesystem path	can be	speci-
       fied  for listening on local unix SOCK_STREAM socket. Non-absolute path
       (i.e. not starting with /) is relative to  rundir.   Non-local  address
       binding is automatically	enabled	if supported by	the operating system.

       Change  of  this	 parameter requires restart of the Knot	server to take
       effect.

       Default:	not set

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

       Change  of  this	 parameter requires restart of the Knot	server to take
       effect.

       Default:	not set

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

       Change  of  this	 parameter requires restart of the Knot	server to take
       effect.

       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 configu-
	  ration 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  de-
       vice  name, but the server will still listen on all addresses belonging
       to the same interface!  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
       effect.

       CAUTION:
	  If  XDP  workers  only  process  regular DNS traffic over UDP, it is
	  strongly recommended to also listen on the addresses which  are  in-
	  tended to offer the DNS service, at least to fulfil the DNS require-
	  ment 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
       effect.

       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
       effect.

       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
       effect.

       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
       effect.

       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 re-
       ceived 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
       before 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	inter-
       face:

        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.  Pos-
       sible VLAN tag is preserved.

       Change  of  this	 parameter requires restart of the Knot	server to take
       effect.

       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.forwarding=1).  If forwarding is disabled, all  in-
	  coming 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 performance.

       Change  of  this	 parameter requires restart of the Knot	server to take
       effect.

       Default:	on

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

       Change of this parameter	requires restart of the	Knot  server  to  take
       effect.

       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
       effect.

       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
       effect.

       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
       effect.

       Default:	rundir/knot.sock

   backlog
       The control UNIX	socket listen backlog size.

       Change of this parameter	requires restart of the	Knot  server  to  take
       effect.

       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
       output,	syslog	(or  systemd journal if	systemd	is enabled) or into an
       arbitrary file.

       There are 6 logging severity levels:

        critical  Non-recoverable error resulting in server shutdown.

        error	Recoverable error, action should be taken.

        warning  Warning that might require user action.

        notice	 Server	notice or hint.

        info  Informational message.

        debug	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	 Standard output.

        stderr	 Standard error	output.

        syslog	 Syslog	or systemd journal.

        file_name  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-absolute path is relative to	the knotd startup directory.

       Default:	  ${localstatedir}/lib/knot   (configured   with  --with-stor-
       age=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  perfor-
       mance and durability.

       Possible	values:

        robust	  The  journal	database disk synchronization ensures database
	 durability but	is generally slower.

        asynchronous  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
       database.

       Possible	values:

        never	Never written.

        shutdown  Written once	when the server	is shut	down.

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

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

       Default:	shutdown

   catalog-db
       An explicit specification of the	zone catalog database directory.  Only
       useful 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 (de-
       fault is	6379), or absolute UNIX	socket paths (starting with /) of run-
       ning  Redis  (or	 compatible)  instances	 to be used for	reading	and/or
       writing zone contents.  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
       sentinel.   If it is a sentinel,	it is used to acquire connection para-
       meters of a master database.

       Default:	not set

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

       Default:	off

   zone-db-cert-key
       An  ordered list	of up to 4 public key PINs of the zone database's cer-
       tificate.  If the list is non-empty, communication with the zone	 data-
       base is only possible over TLS, and a peer certificate is required. The
       peer certificate'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
       database's certificate. At least	one hostname must match	for  the  cer-
       tificate	 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  PEM files.

        pkcs11	 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 sre stored	in this	keystore only if they are KSKs
       or CSKs.	 Zone signing keys will	be stored in subsequent	keystore with-
       out this	option enabled.

       Default:	off

   key-label
       If enabled in combination with the PKCS #11 backend, generated keys are
       labeled 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 un-
       til the remote is reached.

       Default:	not set

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

   via
       An ordered list of source IP addresses which are	 used  as  source  ad-
       dresses 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 com-
       munication 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  ob-
	  tained  session  tickets  are	 used for reopening connections	to re-
	  cently (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  communi-
       cation 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 certifi-
       cate. 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),  sup-
       press 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
       subsequent AXFR/IXFR query do not share the same	TCP  connection.  This
       mode  allows  transfers	from  some  broken  DNS	 implementations (e.g.
       ixfrdist).

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

       Default:	off

   automatic-acl
       If enabled, some	authorized operations for the remote are automatically
       allowed 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  configura-
       tion.

       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  no-
       tification,  and	 dynamic DNS update) which are allowed to be processed
       or denied. Queries which	don't require  authorization  are  always  al-
       lowed.

	  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
       subnets,	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 re-
       quired.

       Default:	not set

   remote
       An ordered list of references remote and	remotes. The query must	 match
       one of the remotes. Specifically, one of	the remote's addresses and re-
       mote's TSIG key if configured must match.

       NOTE:
	  This	option	cannot	be  specified  along with the address, key, or
	  protocol option at one ACL item.

       Default:	not set

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

       Possible	values:

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

        notify	 Allow incoming	notify (NOTIFY).

        transfer  Allow zone transfer (AXFR, IXFR).

        update	 Allow zone updates (DDNS).

       Default:	query

   protocol
       List of allowed protocols.

       Possible	values:

        udp  UDP protocol.

        tcp  TCP protocol.

        tls  TLS protocol.

        quic  QUIC protocol.

       Default:	not set	(any)

   deny
       If enabled, instead of allowing,	deny the matching combination  of  the
       specified 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 up-
       date 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  op-
       tion.

       Possible	values:

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

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

        zone  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  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	The owner of each updated RR must be equal to at least one do-
	 main name set by update-owner.

        sub   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  The owner of each updated RR must match a pattern  specified
	 by update-owner. The pattern can be an	arbitrary FQDN or non-FQDN do-
	 main  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
       submission. All of them must have a corresponding DS for	 the  rollover
       to  continue. 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 par-
       ents are	configured.  Set to 0 for infinity.

       Default:	0

   parent-delay
       After successful	parent DS check, wait for this period (in seconds) be-
       fore continuing the next	key roll-over step. This delay shall cover the
       propagation 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 con-
	  firmed 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 mas-
       ter, 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
       consistence 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 explic-
	  itly 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
       management mode.

       Default:	off (module onlinesign has default on)

   algorithm
       An  algorithm  of  signing keys and issued signatures. See DNSSEC Algo-
       rithm 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	subse-
	  quent	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 Offline 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 gen-
       erated, it is ensured that keytag % M ==	R. This	prevents  keytag  con-
       flict 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 fulfill the policy.

       Default:	0/1

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

       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 ini-
       tiation.

       NOTE:
	  More exactly,	this period is measured	since a	ZSK is activated,  and
	  after	 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 resurrection is needed.

       Default:	0

   propagation-delay
       An  extra  delay	 added for each	key rollover step. This	value (in sec-
       onds) should be high enough to cover propagation	of data	from the  pri-
       mary  server to all secondary servers, as well as the duration of sign-
       ing routine itself and possible outages in signing and propagation  in-
       frastructure. 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
       secondary 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-ex-
	  istence 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
       signing.

       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  updates	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  run-
	  ning,	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 syn-
       chronization.

       Default:	not set

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

       Possible	values:

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

        delete-dnssec	Publish	special	CDS  and  CDNSKEY  records  indicating
	 turning off DNSSEC.

        rollover   Publish  CDS and CDNSKEY records for ready and not yet ac-
	 tive KSK (submission phase of KSK rollover).

        always	 Always	publish	one CDS	and one	CDNSKEY	records	for  the  cur-
	 rent KSK.

        double-ds   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
       handled when (re-)signing the zone.

       Possible	values:

        full  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   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,  be-
	  longing 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  Nothing disabled.

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

        no-update-dnskey  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	 Don't maintain/update NSEC/NSEC3 chain. Leave all the
	 records as they are in	the zone.

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

       Multiple	values may be specified.

       WARNING:
	  This	mode  is intended for DNSSEC experts who understand the	corre-
	  sponding 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  sec-
       onds, it	is considered failed.

       Default:	300

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

       Default:	none

   dump-removals
       A  path	to file	where the records being	removed	will be	written	before
       waiting 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
       identifier) can be used for global zone configuration or	as an implicit
       configuration 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 mod-
       ule_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	 rela-
       tive to the knotd startup directory.

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

   file
       A path to the zone file.	It is also possible to use the following  for-
       matters:

        %c[N] or %c[N-M]  Means the Nth character or a	sequence of characters
	 beginning  from the Nth and ending with the Mth character of the tex-
	 tual 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]	Means the Nth label of the textual zone	name (see %s). The in-
	 dex is	counted	from 0 from the	right (0 ~ TLD).  If the label is  not
	 available, the	formatter has no effect.

        %s   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!).

        %%  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 con-
	  tents	 loaded	 from  the database, however, zonefile-load: whole and
	  journal-content: 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 con-
       tents. 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  sec-
       ondary  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
       delay 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 configured 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	 specified amount of time (defined by this option in seconds),
       change to the updated primary and force AXFR.

       This option is useful when multiple primaries may have  different  zone
       history	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	manda-
       tory 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 up-
       dates 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
       mandatory 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  in-
	  stead.

       Default:	off

   default-ttl
       The  default  TTL value if none is specified in a zone file or zone in-
       sertion 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 reloading or  committing  the	configuration.	Alternatively,
	  setting  zonefile-load to difference-no-serial ensures the resulting
	  zone(s) update 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 ex-
       pired (or after manual zone flush). This	is applicable when the zone is
       updated via IXFR, DDNS or automatic DNSSEC signing. In  order  to  com-
       pletely	disable	 automatic zone	file synchronization, set the value to
       -1. In that case, it is still possible to force a manual	zone flush us-
       ing the -f option.

       NOTE:
	  If you are serving large zones with frequent updates where the imme-
	  diate	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  The zone	file is	not used at all.

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

        difference-no-serial  Same as difference, but the SOA serial  in  the
	 zone  file is ignored,	the server takes care of incrementing the ser-
	 ial automatically.

        whole	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
	  configuring 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	multi-
       ple  types  may	be specified. The special string dnssec	represents all
       types usually created by	DNSSEC signing routines	(DNSKEY, RRSIG,	 NSEC,
       NSEC3, NSEC3PARAM, CDNSKEY, CDS	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  The journal is not used at all.

        changes  Zone changes history is stored in journal.

        all  Zone contents and	history	is stored in journal.

       Default:	changes

       WARNING:
	  When this option is changed, the journal still contains data respec-
	  tive	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  consider  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	multi-
       ple  together.	This preserves the complete history in the journal and
       prevents	the merging of changesets when multiple	changesets are	IXFRed
       simultaneously.	However,  this	does not prevent the merging (or dele-
       tion) of	old changesets in the journal to save space, as	 described  in
       journal behaviour.

       This  option  leads  to increased server	load when processing IXFR, in-
       cluding network traffic.

       Default:	off

   ixfr-from-axfr
       If a primary sends AXFR-style-IXFR upon an IXFR	request,  compute  the
       difference  and process it as an	incremental zone update	(e.g. by stor-
       ing 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. How-
       ever the	final size of the zone must satisfy the	configured value.

       Default:	unlimited

   adjust-threads
       Parallelize  internal zone adjusting procedures by using	specified num-
       ber of threads. This is useful with huge	zones with NSEC3. Speedup  ob-
       servable	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
       control socket 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 commit-
	  ted 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
	  emitted 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
       (including NSEC/NSEC3 chain) with DNSSEC	signatures every time the zone
       is loaded or changed (including AXFR/IXFR).

       When the	validation fails, the zone being loaded	or  update  being  ap-
       plied  is  cancelled  with  an  error, and either none or previous zone
       state is	published.

       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
	  emitted when the validation fails.

       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
       policy 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
	  emitted when the verification	fails.

       Default:	off

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

       Possible	values:

        none  No action regarding ZONEMD.

        zonemd-sha384	Generate ZONEMD	using SHA384 algorithm.

        zonemd-sha512	Generate ZONEMD	using SHA512 algorithm.

        remove	 Remove	any ZONEMD from	the zone apex.

       Default:	none

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

       Possible	values:

        increment  The	serial	is  incremented	 according  to	serial	number
	 arithmetic.

        unixtime  The serial is set to	the current unix time.

        dateserial   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  in-
	  stead.

	  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 update 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
       between 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	 posi-
       tive  integers.	Whenever the zone serial is incremented, it is ensured
       that serial % M == R. This can be useful	in the case of multiple	incon-
       sistent	primaries,  where  distinct  zone  serial  sequences   prevent
       cross-master-IXFR by any	secondary.

       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 ser-
       ial.  The shift is formatted as a signed	integer, including the sign (+
       or -).  It is mostly useful with	unixtime serial-policy,	where the gen-
       erated 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 automatically	stored in the journal.

       The  auto-generated  reverse  zone  is re-generated whenever any	of the
       specified 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  im-
       plies   ixfr-from-axfr:	 on   and   journal-content:   all,  otherwise
       zonefile-load: difference-no-serial and journal-content:	all.

       Default:	none

   include-from
       A list of subzones that should be flattened into	this zone.  The	 flat-
       tening  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 im-
       plies  ixfr-from-axfr:	on   and   journal-content:   all,   otherwise
       zonefile-load: difference-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  pri-
       mary 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 pri-
       mary 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  Not a catalog zone.

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

        generate  A catalog zone whose	contents are  generated	 according  to
	 assigned member zones.

        member	 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	 cata-
       log template.

       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
	  generate.

       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  al-
	  ready	 been  processed  (i.e.	the member has been removed), and then
	  manually notifying the secondaries.

	  If the generated zone	catalogs have already arrived at  a  secondary
	  in the wrong order, triggering a zone	retransfer of the target cata-
	  log 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  mod-
       ule_name	or module_name/module_id. These	modules	apply only to the cur-
       rent 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.4				  2026-04-02			  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