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

FreeBSD Manual Pages

  
 
  

home | help
UNBOUND.CONF(5)			    Unbound		       UNBOUND.CONF(5)

NAME
       unbound.conf - Unbound 1.25.1 configuration file.

SYNOPSIS
       unbound.conf

DESCRIPTION
       unbound.conf is used to configure unbound(8).

       The  utility  unbound-checkconf(8)  can	be  used to check unbound.conf
       prior to	usage.

FILE FORMAT
       Whitespace is used to separate keywords.	 Whitespace indentation	is in-
       significant, but	is still recommended  for  visual  clarity.   Comments
       start  with # and last to the end of line.  Empty lines are ignored, as
       is whitespace at	the beginning of a line.

       Attribute keywords end with a colon (:) and they	are either options  or
       section clauses (group options together).

       The  configuration  file	 is logically divided into sections where each
       section is introduced by	a section clause.

EXAMPLE
       An example minimal config file is shown below; most  settings  are  the
       defaults.   Copy	 this to /usr/local/etc/unbound/unbound.conf and start
       the server with:

	  $ unbound -c /usr/local/etc/unbound/unbound.conf

       Stop the	server with:

	  $ kill `cat /usr/local/etc/unbound/unbound.pid`

       The source distribution contains	an extensive  example.conf  file  with
       all the options.

	  # unbound.conf(5) config file	for unbound(8).
	  server:
	      directory: "/usr/local/etc/unbound"
	      username:	unbound
	      #	make sure unbound can access entropy from inside the chroot.
	      #	e.g. on	linux the use these commands (on BSD, devfs(8) is used):
	      #	     mount --bind -n /dev/urandom /usr/local/etc/unbound/dev/urandom
	      #	and  mount --bind -n /dev/log /usr/local/etc/unbound/dev/log
	      chroot: "/usr/local/etc/unbound"
	      #	logfile: "/usr/local/etc/unbound/unbound.log"  #uncomment to use logfile.
	      pidfile: "/usr/local/etc/unbound/unbound.pid"
	      #	verbosity: 1	  # uncomment and increase to get more logging.
	      #	listen on all interfaces, answer queries from the local	subnet.
	      interface: 0.0.0.0
	      interface: ::0
	      access-control: 10.0.0.0/8 allow
	      access-control: 2001:db8::/64 allow

SECTION	CLAUSES
       The recognized section clauses are:

	  server:
		 Most of the configuration is found in this section.

	  remote-control:
		 Configuration for the facility	used by	unbound-control(8).

	  stub-zone:
		 Configuration	for a zone that	redirects to specific authori-
		 tative	name servers, e.g. for zones not  generally  available
		 on the	greater	Internet.

	  forward-zone:
		 Configuration	for  a	zone that forwards to specific DNS re-
		 solvers.

	  auth-zone:
		 Configuration for local authoritative zones.

	  view:	 Overriding a small subset of configuration for	 incoming  re-
		 quests.      Requests	  are	 mapped	   to	 views	  with
		 access-control-view and interface-view.

	  python:
		 Configuration for the optional	python script module.

	  dynlib:
		 Configuration for the optional	dynlib module that  loads  dy-
		 namic libraries into Unbound.

	  dnscrypt:
		 Configuration for the optional	DNSCrypt feature.

	  cachedb:
		 Configuration for the optional	cachedb	module that can	inter-
		 face  with second level caches, currently Redis or Redis-com-
		 platible databases.

	  dnstap:
		 Configuration of the optional dnstap logging feature; a flex-
		 ible, structured binary log format for	DNS software.

	  rpz:	 Configuration for Response Policy Zones that allows  for  DNS
		 filtering.  Requires the respip module.

       Section clauses can be repeated throughout the file (or included	files)
       to logically group options in one visually cohesive group.  This	may be
       particularly useful for the server: clause with its myriad of options.

INCLUDING FILES
       Files can be included using the include:	directive.  It can appear any-
       where, it accepts a single file name as argument.  Processing continues
       as  if  the text	from the included file was copied into the config file
       at that point.  If also using chroot, using full	path names for the in-
       cluded files works, relative pathnames for the included names  work  if
       the directory where the daemon is started equals	its chroot/working di-
       rectory	or  is	specified before the include statement with directory:
       dir.  Wildcards can be used to include multiple files, see glob(7).

       For a more structural include option, the  include-toplevel:  directive
       can  be	used.  This closes whatever section clause is currently	active
       (if any)	and forces the use of section clauses in  the  included	 files
       and right after this directive.

SERVER OPTIONS
       These options are part of the server: section.

       verbosity: <number>
	      The verbosity level.

	      Level 0
		     No	verbosity, only	errors.

	      Level 1
		     Gives operational information.

	      Level 2
		     Gives  detailed  operational  information including short
		     information per query.

	      Level 3
		     Gives query level information, output per query.

	      Level 4
		     Gives algorithm level information.

	      Level 5
		     Logs client identification	for cache misses.

	      The verbosity can	also be	increased from the  command  line  and
	      during   run   time  via	remote	control.  See  unbound(8)  and
	      unbound-control(8) respectively.

	      Default: 1

       statistics-interval: <seconds>
	      The number of seconds between printing statistics	to the log for
	      every thread.  Disable with value	0 or "".  The  histogram  sta-
	      tistics are only printed if replies were sent during the statis-
	      tics  interval, requestlist statistics are printed for every in-
	      terval (but can be 0).  This is because the  median  calculation
	      requires data to be present.

	      Default: 0 (disabled)

       statistics-cumulative: <yes or no>
	      If  enabled,  statistics	are cumulative since starting Unbound,
	      without clearing the statistics counters after logging the  sta-
	      tistics.

	      Default: no

       extended-statistics: <yes or no>
	      If    enabled,	extended    statistics	  are	printed	  from
	      unbound-control(8).     The    counters	 are	 listed	    in
	      unbound-control(8).   Keeping  track  of	more  statistics takes
	      time.

	      Default: no

       statistics-inhibit-zero:	<yes or	no>
	      If enabled, selected extended statistics with a value of	0  are
	      inhibited	 from  printing	 with  unbound-control(8).   These are
	      query types, query classes, query	opcodes, answer	rcodes (except
	      NOERROR, FORMERR,	SERVFAIL, NXDOMAIN, NOTIMPL, REFUSED) and  PRZ
	      actions.

	      Default: yes

       num-threads: <number>
	      The  number  of threads to create	to serve clients. Use 1	for no
	      threading.

	      Default: 1

       port: <port number>
	      The port number on which the server responds to queries.

	      Default: 53

       interface: <IP address or interface name[@port]>
	      Interface	to use to connect to the network.  This	 interface  is
	      listened to for queries from clients, and	answers	to clients are
	      given  from  it.	Can be given multiple times to work on several
	      interfaces.  If none are given the default is to listen  on  lo-
	      calhost.

	      If  an interface name is used instead of an IP address, the list
	      of IP addresses on that interface	are used.  The interfaces  are
	      not changed on a reload (kill -HUP) but only on restart.

	      A	 port  number  can be specified	with @port (without spaces be-
	      tween interface and port number),	if not specified  the  default
	      port (from port) is used.

       ip-address: <IP address or interface name[@port]>
	      Same as interface	(for ease of compatibility with	nsd.conf(5)).

       interface-automatic: <yes or no>
	      Listen  on all addresses on all (current and future) interfaces,
	      detect the source	interface on UDP  queries  and	copy  them  to
	      replies.	 This  is  a  lot like ip-transparent, but this	option
	      services all interfaces whilst with ip-transparent you  can  se-
	      lect  which  (future)  interfaces	 Unbound  provides service on.
	      This feature is experimental, and	needs support in your  OS  for
	      particular socket	options.

	      Default: no

       interface-automatic-ports: "<string>"
	      List  the	 port numbers that interface-automatic listens on.  If
	      empty, the default port is listened on.  The  port  numbers  are
	      separated	by spaces in the string.

	      This  can	 be  used to have interface automatic to deal with the
	      interface, and listen on the normal port number, by including it
	      in the list, and also HTTPS  or  DNS-over-TLS  port  numbers  by
	      putting them in the list as well.

	      Default: ""

       outgoing-interface: <IPv4/IPv6 address or IPv6 netblock>
	      Interface	 to  use to connect to the network.  This interface is
	      used to send queries to authoritative servers and	receive	 their
	      replies.	 Can be	given multiple times to	work on	several	inter-
	      faces.  If none are given	the default (all) is  used.   You  can
	      specify  the same	interfaces in interface	and outgoing-interface
	      lines, the interfaces are	then used for both purposes.  Outgoing
	      queries are sent via a  random  outgoing	interface  to  counter
	      spoofing.

	      If  an  IPv6 netblock is specified instead of an individual IPv6
	      address, outgoing	UDP queries will use a randomised  source  ad-
	      dress taken from the netblock to counter spoofing.  Requires the
	      IPv6  netblock to	be routed to the host running Unbound, and re-
	      quires OS	support	for unprivileged  non-local  binds  (currently
	      only  supported  on  Linux).  Several netblocks may be specified
	      with multiple outgoing-interface options,	 but  do  not  specify
	      both  an	individual  IPv6  address and an IPv6 netblock,	or the
	      randomisation will  be  compromised.   Consider  combining  with
	      prefer-ip6:  yes	to increase the	likelihood of IPv6 nameservers
	      being selected for queries.  On Linux you	need  these  two  com-
	      mands  to	 be  able to use the freebind socket option to receive
	      traffic for the ip6 netblock:

		 ip -6 addr add	mynetblock/64 dev lo &&	\
		 ip -6 route add local mynetblock/64 dev lo

       outgoing-range: <number>
	      Number of	ports to open.	This number of file descriptors	can be
	      opened per thread.  Must be at least 1.  Default depends on com-
	      pile options.  Larger numbers need extra resources from the  op-
	      erating system.  For performance a very large value is best, use
	      libevent	to  make  this possible.  Should be higher (preferably
	      double) than the value of	num-queries-per-thread to account  for
	      cases  where  the	request	list is	full and avoid file descriptor
	      starvation.

	      Default: 4096 (libevent) / 960 (minievent) / 48 (windows)

       outgoing-port-permit: <port number or range>
	      Permit Unbound to	open this port or range	of ports  for  use  to
	      send  queries.   A larger	number of permitted outgoing ports in-
	      creases resilience against spoofing attempts.  Make  sure	 these
	      ports  are  not  needed by other daemons.	 By default only ports
	      above 1024 that have not been assigned by	IANA are used.	Give a
	      port number or a range of	the form "low-high", without spaces.

	      The outgoing-port-permit and outgoing-port-avoid statements  are
	      processed	 in the	line order of the config file, adding the per-
	      mitted ports and subtracting the avoided ports from the  set  of
	      allowed  ports.	The  processing	starts with the	non IANA allo-
	      cated ports above	1024 in	the set	of allowed ports.

       outgoing-port-avoid: <port number or range>
	      Do not permit Unbound to open this port or range	of  ports  for
	      use  to  send  queries.	Use this to make sure Unbound does not
	      grab a port that another daemon needs.  The port is  avoided  on
	      all  outgoing  interfaces,  both IPv4 and	IPv6.  By default only
	      ports above 1024 that have not been assigned by IANA  are	 used.
	      Give  a  port  number or a range of the form "low-high", without
	      spaces.

       outgoing-num-tcp: <number>
	      Number of	outgoing TCP buffers to	allocate per thread.   If  set
	      to  0,  or if do-tcp: no is set, no TCP queries to authoritative
	      servers are done.	  For  larger  installations  increasing  this
	      value is a good idea.

	      Default: 10

       incoming-num-tcp: <number>
	      Number  of  incoming TCP buffers to allocate per thread.	If set
	      to 0, or if do-tcp: no is	set, no	TCP queries from  clients  are
	      accepted.	  For  larger installations increasing this value is a
	      good idea.

	      Default: 10

       edns-buffer-size: <number>
	      Number of	bytes size to advertise	as the EDNS reassembly	buffer
	      size.   This  is	the  value put into datagrams over UDP towards
	      peers.  The actual buffer	size is	determined by  msg-buffer-size
	      (both  for  TCP  and  UDP).   Do not set higher than that	value.
	      Setting to 512 bypasses even the most stringent path  MTU	 prob-
	      lems,  but  is seen as extreme, since the	amount of TCP fallback
	      generated	is excessive (probably also for	 this  resolver,  con-
	      sider tuning outgoing-num-tcp).

	      Default: 1232 (DNS Flag Day 2020 recommendation)

       max-udp-size: <number>
	      Maximum  UDP response size (not applied to TCP response).	 65536
	      disables the UDP response	size maximum, and uses the choice from
	      the client, always.  Suggested values are	512 to 4096.

	      Default: 1232 (same as edns-buffer-size)

       stream-wait-size: <number>
	      Number of	bytes size maximum to use for waiting stream  buffers.
	      A	 plain	number	is  in bytes, append 'k', 'm' or 'g' for kilo-
	      bytes, megabytes or gigabytes (1024*1024 bytes in	 a  megabyte).
	      As  TCP and TLS streams queue up multiple	results, the amount of
	      memory used for these buffers does not exceed this number,  oth-
	      erwise the responses are dropped.	 This manages the total	memory
	      usage  of	 the  server (under heavy use),	the number of requests
	      that can be queued up per	connection is also limited, with  fur-
	      ther requests waiting in TCP buffers.

	      Default: 4m

       msg-buffer-size:	<number>
	      Number  of  bytes	size of	the message buffers.  Default is 65552
	      bytes, enough for	64 Kb packets, the maximum DNS	message	 size.
	      No message larger	than this can be sent or received.  Can	be re-
	      duced  to	 use less memory, but some requests for	DNS data, such
	      as for huge resource records, will result	in a SERVFAIL reply to
	      the client.

	      Default: 65552

       msg-cache-size: <number>
	      Number of	bytes size of the message cache.  A plain number is in
	      bytes, append 'k', 'm' or	'g' for	kilobytes, megabytes or	 giga-
	      bytes (1024*1024 bytes in	a megabyte).

	      Default: 4m

       msg-cache-slabs:	<number>
	      Number  of  slabs	 in the	message	cache.	Slabs reduce lock con-
	      tention by threads.  Must	be set	to  a  power  of  2.   Setting
	      (close) to the number of cpus is a fairly	good setting.  If left
	      unconfigured,  it	will be	configured automatically to be a power
	      of 2 close to the	number of configured threads in	multi-threaded
	      environments.

	      Default: (unconfigured)

       num-queries-per-thread: <number>
	      The number of queries that every thread will service  simultane-
	      ously.   If  more	 queries  arrive  that	need servicing,	and no
	      queries can  be  jostled	out  (see  jostle-timeout),  then  the
	      queries  are  dropped.  This forces the client to	resend after a
	      timeout; allowing	the  server  time  to  work  on	 the  existing
	      queries.	Default	depends	on compile options.

	      Default: 2048 (libevent) / 512 (minievent) / 24 (windows)

       jostle-timeout: <msec>
	      Timeout  used when the server is very busy.  Set to a value that
	      usually results in one roundtrip to the authority	servers.

	      If too many queries arrive, then 50% of the queries are  allowed
	      to  run  to  completion, and the other 50% are replaced with the
	      new incoming query if they have already spent  more  than	 their
	      allowed  time.   This protects against denial of service by slow
	      queries or high query rates.

	      The effect is that the qps for long-lasting queries is about:

		 (num-queries-per-thread / 2) /	(average time for such long queries) qps

	      The qps for short	queries	can be about:

		 (num-queries-per-thread / 2) /	(jostle-timeout	in whole seconds) qps per thread

	      about (2048/2)*5 = 5120 qps by default.

	      Default: 200

       delay-close: <msec>
	      Extra delay for timeouted	UDP ports before they are  closed,  in
	      msec.   This  prevents  very delayed answer packets from the up-
	      stream (recursive) servers from bouncing	against	 closed	 ports
	      and  setting  off	all sort of close-port counters, with eg. 1500
	      msec.  When timeouts happen you need extra  sockets,  it	checks
	      the  ID and remote IP of packets,	and unwanted packets are added
	      to the unwanted packet counter.

	      Default: 0 (disabled)

       udp-connect: <yes or no>
	      Perform connect(2) for UDP  sockets  that	 mitigates  ICMP  side
	      channel leakage.

	      Default: yes

       unknown-server-time-limit: <msec>
	      The  wait	 time in msec for waiting for an unknown server	to re-
	      ply.  Increase this if you are behind a slow satellite link,  to
	      eg. 1128.	 That would then avoid re-querying every initial query
	      because it times out.

	      Default: 376

       discard-timeout:	<msec>
	      The  wait	 time  in  msec	 where recursion requests are dropped.
	      This is to stop a	large number  of  replies  from	 accumulating.
	      They  receive no reply, the work item continues to recurse.  For
	      UDP the replies are dropped, for stream connections the reply is
	      not dropped if the stream	connection is still open ready to  re-
	      ceive   answers.	  It   is   nice  to  be  a  bit  larger  than
	      serve-expired-client-timeout if that is  enabled.	  A  value  of
	      1900 msec	is suggested.  The value 0 disables it.

	      Default: 1900

       wait-limit: <number>
	      The number of replies that can wait for recursion, for an	IP ad-
	      dress.  This makes a ratelimit per IP address of waiting replies
	      for  recursion.	It stops very large amounts of queries waiting
	      to be returned to	one destination.  The  value  0	 disables  all
	      wait limits.

	      Default: 1000

       wait-limit-cookie: <number>
	      The number of replies that can wait for recursion, for an	IP ad-
	      dress  that  sent	 the query with	a valid	DNS Cookie.  Since the
	      cookie already validates the client address, this	option	allows
	      to  override a configured	wait-limit value usually with a	higher
	      one for cookie validated queries.	 The  value  0	disables  wait
	      limits for cookie	validated queries.

	      Default: 10000

       wait-limit-netblock: <netblock> <number>
	      The  wait	 limit	for the	netblock.  If not given	the wait-limit
	      value is used.  The most specific	netblock is used to  determine
	      the  limit.   Useful  for	overriding the default for a specific,
	      group or individual, server.  The	value -1 disables wait	limits
	      for the netblock.	 By default the	loopback has a wait limit net-
	      block of -1, it is not limited, because it is separated from the
	      rest  of	network	 for  spoofed packets.	The loopback addresses
	      127.0.0.0/8 and ::1/128 are default at -1.

	      Default: (none)

       wait-limit-cookie-netblock: <netblock> <number>
	      The wait limit for the  netblock,	 when  the  query  has	a  DNS
	      Cookie.  If not given, the wait-limit-cookie value is used.  The
	      value  -1	 disables  wait	limits for the netblock.  The loopback
	      addresses	127.0.0.0/8 and	::1/128	are default at -1.

	      Default: (none)

       so-rcvbuf: <number>
	      If not 0,	then set the  SO_RCVBUF	 socket	 option	 to  get  more
	      buffer  space  on	 UDP  port 53 incoming queries.	 So that short
	      spikes on	busy servers do	not drop packets (see counter in  net-
	      stat  -su).  Otherwise, the number of bytes to ask for, try "4m"
	      on a busy	server.

	      The OS caps it at	a maximum, on linux Unbound needs root permis-
	      sion  to	bypass	the  limit,  or	 the  admin  can  use	sysctl
	      net.core.rmem_max.

	      On BSD change kern.ipc.maxsockbuf	in /etc/sysctl.conf.

	      On OpenBSD change	header and recompile kernel.

	      On Solaris ndd -set /dev/udp udp_max_buf 8388608.

	      Default: 0 (use system value)

       so-sndbuf: <number>
	      If  not  0,  then	 set  the  SO_SNDBUF socket option to get more
	      buffer space on UDP port 53 outgoing  queries.   This  for  very
	      busy servers handles spikes in answer traffic, otherwise:

		 send: resource	temporarily unavailable

	      can  get	logged,	 the buffer overrun is also visible by netstat
	      -su.  If set to 0	it uses	the system value.  Specify the	number
	      of bytes to ask for, try "8m" on a very busy server.

	      It  needs	 some  space to	be able	to deal	with packets that wait
	      for local	address	resolution, from like ARP and  NDP  discovery,
	      before  they are sent out, hence it is elevated above the	system
	      default by default.

	      The OS caps it at	a maximum, on linux Unbound needs root permis-
	      sion  to	bypass	the  limit,  or	 the  admin  can  use	sysctl
	      net.core.wmem_max.

	      On BSD, Solaris changes are similar to so-rcvbuf.

	      Default: 4m

       so-reuseport: <yes or no>
	      If  yes,	then  open  dedicated  listening  sockets for incoming
	      queries for each thread and try to set the  SO_REUSEPORT	socket
	      option  on  each	socket.	  May  distribute  incoming queries to
	      threads more evenly.

	      On Linux it is supported in kernels >= 3.9.

	      On other systems,	FreeBSD, OSX it	may also work.

	      You can enable it	(on any	platform and kernel), it then attempts
	      to open the port and passes the option if	it  was	 available  at
	      compile  time, if	that works it is used, if it fails, it contin-
	      ues silently (unless verbosity 3)	without	the option.

	      At extreme load it could be better to turn it off	to  distribute
	      the queries evenly, reported for Linux systems (4.4.x).

	      Default: yes

       ip-transparent: <yes or no>
	      If  yes,	then use IP_TRANSPARENT	socket option on sockets where
	      Unbound is listening for incoming	traffic.  Allows you  to  bind
	      to  non-local  interfaces.   For example for non-existent	IP ad-
	      dresses that are going to	exist later  on,  with	host  failover
	      configuration.

	      This  is	a  lot like interface-automatic, but that one services
	      all interfaces and with this option you can  select  which  (fu-
	      ture) interfaces Unbound provides	service	on.

	      This option needs	Unbound	to be started with root	permissions on
	      some systems.  The option	uses IP_BINDANY	on FreeBSD systems and
	      SO_BINDANY on OpenBSD systems.

	      Default: no

       ip-freebind: <yes or no>
	      If  yes, then use	IP_FREEBIND socket option on sockets where Un-
	      bound is listening to incoming traffic.  Allows you to  bind  to
	      IP  addresses  that  are nonlocal	or do not exist, like when the
	      network interface	or IP address is down.

	      Exists only on Linux, where the similar ip-transparent option is
	      also available.

	      Default: no

       ip-dscp:	<number>
	      The value	of the Differentiated Services Codepoint (DSCP)	in the
	      differentiated services field (DS) of  the  outgoing  IP	packet
	      headers.	 The  field replaces the outdated IPv4 Type-Of-Service
	      field and	the IPv6 traffic class field.

       rrset-cache-size: <number>
	      Number of	bytes size of the RRset	cache.	A plain	number	is  in
	      bytes,  append 'k', 'm' or 'g' for kilobytes, megabytes or giga-
	      bytes (1024*1024 bytes in	a megabyte).

	      Default: 4m

       rrset-cache-slabs: <number>
	      Number of	slabs in the RRset  cache.   Slabs  reduce  lock  con-
	      tention  by  threads.   Must  be	set  to	a power	of 2.  Setting
	      (close) to the number of cpus is a fairly	good setting.  If left
	      unconfigured, it will be configured automatically	to be a	 power
	      of 2 close to the	number of configured threads in	multi-threaded
	      environments.

	      Default: (unconfigured)

       cache-max-ttl: <seconds>
	      Time to live maximum for RRsets and messages in the cache.  When
	      the  TTL	expires, the cache item	has expired.  Can be set lower
	      to force the resolver to query for data  often,  and  not	 trust
	      (very  large) TTL	values.	 Downstream clients also see the lower
	      TTL.

	      Default: 86400 (1	day)

       cache-min-ttl: <seconds>
	      Time to live minimum for RRsets and messages in the  cache.   If
	      the minimum kicks	in, the	data is	cached for longer than the do-
	      main  owner  intended, and thus less queries are made to look up
	      the data.	 Zero makes sure the data in the cache is as  the  do-
	      main owner intended, higher values, especially more than an hour
	      or  so,  can  lead  to trouble as	the data in the	cache does not
	      match up with the	actual data any	more.

	      Default: 0 (disabled)

       cache-max-negative-ttl: <seconds>
	      Time to live maximum for negative	responses, these have a	SOA in
	      the authority section that is limited in time.  This applies  to
	      NXDOMAIN and NODATA answers.

	      Default: 3600

       cache-min-negative-ttl: <seconds>
	      Time to live minimum for negative	responses, these have a	SOA in
	      the  authority section that is limited in	time.  If this is dis-
	      abled and	cache-min-ttl is configured, it	will take  effect  in-
	      stead.  In that case you can set this to 1 to honor the upstream
	      TTL.  This applies to NXDOMAIN and NODATA	answers.

	      Default: 0 (disabled)

       infra-host-ttl: <seconds>
	      Time to live for entries in the host cache.  The host cache con-
	      tains roundtrip timing, lameness and EDNS	support	information.

	      Default: 900

       infra-cache-slabs: <number>
	      Number  of slabs in the infrastructure cache.  Slabs reduce lock
	      contention by threads.  Must be set to a power  of  2.   Setting
	      (close) to the number of cpus is a fairly	good setting.  If left
	      unconfigured,  it	will be	configured automatically to be a power
	      of 2 close to the	number of configured threads in	multi-threaded
	      environments.

	      Default: (unconfigured)

       infra-cache-numhosts: <number>
	      Number of	hosts for which	information is cached.

	      Default: 10000

       infra-cache-min-rtt: <msec>
	      Lower limit for dynamic retransmit timeout calculation in	infra-
	      structure	cache.	Increase this value if using forwarders	 need-
	      ing more time to do recursive name resolution.

	      Default: 50

       infra-cache-max-rtt: <msec>
	      Upper limit for dynamic retransmit timeout calculation in	infra-
	      structure	cache.

	      Default: 120000 (2 minutes)

       infra-keep-probing: <yes	or no>
	      If  enabled the server keeps probing hosts that are down,	in the
	      one probe	at a time regime.  Hosts that are down,	eg.  they  did
	      not respond during the one probe at a time period, are marked as
	      down and it may take infra-host-ttl time to get probed again.

	      Default: no

       define-tag: "<list of tags>"
	      Define   the   tags   that  can  be  used	 with  local-zone  and
	      access-control.  Enclose the list	between	quotes	("")  and  put
	      spaces between tags.

       do-ip4: <yes or no>
	      Enable or	disable	whether	IPv4 queries are answered or issued.

	      Default: yes

       do-ip6: <yes or no>
	      Enable  or  disable whether IPv6 queries are answered or issued.
	      If disabled, queries are not answered on IPv6, and  queries  are
	      not  sent	on IPv6	to the internet	nameservers.  With this	option
	      you can disable the IPv6 transport for sending DNS  traffic,  it
	      does  not	impact the contents of the DNS traffic,	which may have
	      IPv4 (A) and IPv6	(AAAA) addresses in it.

	      Default: yes

       prefer-ip4: <yes	or no>
	      If enabled, prefer IPv4 transport	for sending DNS	queries	to in-
	      ternet nameservers.  Useful if the IPv6 netblock the server has,
	      the entire /64 of	that is	not owned by one operator and the rep-
	      utation of the netblock /64 is an	issue, using  IPv4  then  uses
	      the IPv4 filters that the	upstream servers have.

	      Default: no

       prefer-ip6: <yes	or no>
	      If enabled, prefer IPv6 transport	for sending DNS	queries	to in-
	      ternet nameservers.

	      Default: no

       do-udp: <yes or no>
	      Enable or	disable	whether	UDP queries are	answered or issued.

	      Default: yes

       do-tcp: <yes or no>
	      Enable or	disable	whether	TCP queries are	answered or issued.

	      Default: yes

       tcp-mss:	<number>
	      Maximum segment size (MSS) of TCP	socket on which	the server re-
	      sponds  to  queries.   Value  lower  than	common MSS on Ethernet
	      (1220 for	example) will address path MTU problem.	 Note that not
	      all platform supports socket option  to  set  MSS	 (TCP_MAXSEG).
	      Default  is  system  default MSS determined by interface MTU and
	      negotiation between server and client.

       outgoing-tcp-mss: <number>
	      Maximum segment size (MSS) of TCP	socket	for  outgoing  queries
	      (from Unbound to other servers).	Value lower than common	MSS on
	      Ethernet (1220 for example) will address path MTU	problem.  Note
	      that  not	 all  platform	supports  socket  option  to  set  MSS
	      (TCP_MAXSEG).  Default is	system default MSS determined  by  in-
	      terface MTU and negotiation between Unbound and other servers.

       tcp-idle-timeout: <msec>
	      The  period  Unbound  will wait for a query on a TCP connection.
	      If this timeout expires Unbound closes the connection.  When the
	      number of	free incoming TCP buffers falls	below 50% of the total
	      number configured, the option value used	is  progressively  re-
	      duced,  first to 1% of the configured value, then	to 0.2%	of the
	      configured value if the number of	free buffers falls  below  35%
	      of  the  total number configured,	and finally to 0 if the	number
	      of free buffers falls below 20% of the total number  configured.
	      A	 minimum timeout of 200	milliseconds is	observed regardless of
	      the   option   value   used.    It   will	  be   overridden   by
	      edns-tcp-keepalive-timeout if edns-tcp-keepalive is enabled.

	      Default: 30000 (30 seconds)

       tcp-reuse-timeout: <msec>
	      The  period Unbound will keep TCP	persistent connections open to
	      authority	servers.

	      Default: 60000 (60 seconds)

       max-reuse-tcp-queries: <number>
	      The maximum number of queries that can be	sent on	 a  persistent
	      TCP connection.

	      Default: 200

       tcp-auth-query-timeout: <number>
	      Timeout in milliseconds for TCP queries to auth servers.

	      Default: 3000 (3 seconds)

       edns-tcp-keepalive: <yes	or no>
	      Enable or	disable	EDNS TCP Keepalive.

	      Default: no

       edns-tcp-keepalive-timeout: <msec>
	      Overrides	 tcp-idle-timeout  when	edns-tcp-keepalive is enabled.
	      If the client supports the EDNS TCP  Keepalive  option,  If  the
	      client supports the EDNS TCP Keepalive option, Unbound sends the
	      timeout value to the client to encourage it to close the connec-
	      tion before the server times out.

	      Default: 120000 (2 minutes)

       sock-queue-timeout: <sec>
	      UDP  queries  that  have	waited in the socket buffer for	a long
	      time can be dropped.  The	time is	set in seconds,	3 could	 be  a
	      good value to ignore old queries that likely the client does not
	      need  a  reply  for any more.  This could	happen if the host has
	      not been able to service the queries for a while,	 i.e.  Unbound
	      is  not  running,	 and then is enabled again.  It	uses timestamp
	      socket options.  The socket option is available on the Linux and
	      FreeBSD platforms.

	      Default: 0 (disabled)

       tcp-upstream: <yes or no>
	      Enable or	disable	whether	the upstream queries use TCP only  for
	      transport.  Useful in tunneling scenarios.  If set to no you can
	      specify  TCP  transport  only for	selected forward or stub zones
	      using forward-tcp-upstream or stub-tcp-upstream respectively.

	      Default: no

       udp-upstream-without-downstream:	<yes or	no>
	      Enable UDP upstream even if do-udp: no is	set.  Useful  for  TLS
	      service  providers,  that	 want no UDP downstream	but use	UDP to
	      fetch data upstream.

	      Default: no (no changes)

       tls-upstream: <yes or no>
	      Enabled or disable whether the upstream queries use TLS only for
	      transport.  Useful in tunneling  scenarios.   The	 TLS  contains
	      plain DNS	in TCP wireformat.  The	other server must support this
	      (see tls-service-key).

	      If  you  enable  this,  also  configure a	tls-cert-bundle	or use
	      tls-win-cert or tls-system-cert to load CA certs,	otherwise  the
	      connections cannot be authenticated.

	      This  option  enables TLS	for all	of them, but if	you do not set
	      this you can configure TLS specifically for some	forward	 zones
	      with forward-tls-upstream.  And also with	stub-tls-upstream.  If
	      the  tls-upstream	 option	is enabled, it is for all the forwards
	      and stubs, where the forward-tls-upstream	and  stub-tls-upstream
	      options are ignored, as if they had been set to yes.

	      Default: no

       ssl-upstream: <yes or no>
	      Alternate	 syntax	 for tls-upstream.  If both are	present	in the
	      config file the last is used.

       tls-service-key:	<file>
	      If enabled, the server provides DNS-over-TLS  or	DNS-over-HTTPS
	      service  on  the	TCP  ports marked implicitly or	explicitly for
	      these services with tls-port or https-port.  The file must  con-
	      tain the private key for the TLS session,	the public certificate
	      is  in the tls-service-pem file and it must also be specified if
	      tls-service-key is specified.  If	the key	is  stored  with  root
	      permissions  or  outside of chroot, then a change	or enabling or
	      disabling	requires a restart (a reload is	not enough).   But  if
	      the  key	file  (and  tls-service-pem file) are accessible, then
	      they are read in on reload, and fast_reload.  The	server	checks
	      the  modification	 time of the file (and the filename) to	see if
	      the file has changed for reload.	The ports  enabled  implicitly
	      or  explicitly via tls-port and https-port do not	provide	normal
	      DNS TCP service.

	      NOTE:
		 Unbound needs to be compiled with libnghttp2 in order to pro-
		 vide DNS-over-HTTPS.

	      Default: "" (disabled)

       ssl-service-key:	<file>
	      Alternate	syntax for tls-service-key.

       tls-service-pem:	<file>
	      The public key certificate pem file for the tls service.

	      Default: "" (disabled)

       ssl-service-pem:	<file>
	      Alternate	syntax for tls-service-pem.

       tls-port: <number>
	      The port number on which to provide TCP TLS service.   Only  in-
	      terfaces configured with that port number	as @number get the TLS
	      service.

	      Default: 853

       ssl-port: <number>
	      Alternate	syntax for tls-port.

       tls-cert-bundle:	<file>
	      If  null or "", no file is used.	Set it to the certificate bun-
	      dle file,	for example  /etc/pki/tls/certs/ca-bundle.crt.	 These
	      certificates  are	 used  for  authenticating connections made to
	      outside  peers.	For   example	auth-zone   urls,   and	  also
	      DNS-over-TLS connections.	 It is read at start up	before permis-
	      sion drop	and chroot.

	      Default: "" (disabled)

       ssl-cert-bundle:	<file>
	      Alternate	syntax for tls-cert-bundle.

       tls-win-cert: <yes or no>
	      Add  the system certificates to the cert bundle certificates for
	      authentication.  If no cert bundle, it uses only these  certifi-
	      cates.   On  windows  this option	uses the certificates from the
	      cert store.  Use the tls-cert-bundle option  on  other  systems.
	      On other systems,	this option enables the	system certificates.

	      Default: no

       tls-system-cert:	<yes or	no>
	      This  the	 same  as  the	tls-win-cert option, under a different
	      name.  Because it	is not windows specific.

       tls-additional-port: <portnr>
	      List port	numbers	as tls-additional-port,	 and  when  interfaces
	      are  defined,  eg.  with	the @port suffix, as this port number,
	      they provide DNS-over-TLS	service.  Can list multiple, each on a
	      new statement.

       tls-session-ticket-keys:	<file>
	      If not "", lists files with 80 bytes of random contents that are
	      used to perform TLS session resumption for clients using the Un-
	      bound server.  These files contain the secret key	 for  the  TLS
	      session  tickets.	 First key use to encrypt and decrypt TLS ses-
	      sion tickets.  Other keys	use to decrypt only.

	      With this	you can	roll over to new keys,	by  generating	a  new
	      first  file  and	allowing decrypt of the	old file by listing it
	      after the	first file for some time, after	the wait  clients  are
	      not  using  the old key any more and the old key can be removed.
	      One way to create	the file is:

		 dd if=/dev/random bs=1	count=80 of=ticket.dat

	      The first	16 bytes should	be different from the old one  if  you
	      create  a	second key, that is the	name used to identify the key.
	      Then there is 32 bytes random data for an	AES key	 and  then  32
	      bytes random data	for the	HMAC key.

	      Default: ""

       tls-ciphers: <string with cipher	list>
	      Set  the	list of	ciphers	to allow when serving TLS.  Use	"" for
	      default ciphers.

	      Default: ""

       tls-ciphersuites: <string with ciphersuites list>
	      Set the list of ciphersuites to allow when serving TLS.  This is
	      for newer	TLS 1.3	connections.  Use "" for default ciphersuites.

	      Default: ""

       tls-use-sni: <yes or no>
	      Enable or	disable	sending	the SNI	extension on TLS connections.

	      NOTE:
		 Changing the value requires a restart.

	      Default: yes

       tls-protocols: "<list of	protocols>"
	      Specify the allowed TLS protocol versions	to use,	in no particu-
	      lar order.  Possible values are TLSv1.2  and  TLSv1.3.   Enclose
	      list of protocols	in quotes ("") and put spaces between them.

	      NOTE:
		 Changing the value requires a restart.

	      Default: "TLSv1.2	TLSv1.3"

       pad-responses: <yes or no>
	      If  enabled, TLS serviced	queries	that contained an EDNS Padding
	      option will cause	responses padded to the	 closest  multiple  of
	      the size specified in pad-responses-block-size.

	      Default: yes

       pad-responses-block-size: <number>
	      The  block  size	with which to pad responses serviced over TLS.
	      Only responses to	padded queries will be padded.

	      Default: 468

       pad-queries: <yes or no>
	      If enabled, all queries sent over	TLS upstreams will  be	padded
	      to   the	 closest   multiple   of   the	 size	specified   in
	      pad-queries-block-size.

	      Default: yes

       pad-queries-block-size: <number>
	      The block	size with which	to  pad	 queries  sent	over  TLS  up-
	      streams.

	      Default: 128

       https-port: <number>
	      The  port	 number	 on  which  to provide DNS-over-HTTPS service.
	      Only interfaces configured with that port	number as @number  get
	      the HTTPS	service.

	      Default: 443

       http-endpoint: <endpoint	string>
	      The HTTP endpoint	to provide DNS-over-HTTPS service on.

	      Default: /dns-query

       http-max-streams: <number of streams>
	      Number  used in the SETTINGS_MAX_CONCURRENT_STREAMS parameter in
	      the HTTP/2 SETTINGS frame	for DNS-over-HTTPS connections.

	      Default: 100

       http-query-buffer-size: <size in	bytes>
	      Maximum number of	bytes used for all HTTP/2 query	 buffers  com-
	      bined.   These buffers contain (partial) DNS queries waiting for
	      request stream completion.  An RST_STREAM	frame will be send  to
	      streams  exceeding  this limit.  A plain number is in bytes, ap-
	      pend 'k',	'm' or	'g'  for  kilobytes,  megabytes	 or  gigabytes
	      (1024*1024 bytes in a megabyte).

	      Default: 4m

       http-response-buffer-size: <size	in bytes>
	      Maximum  number  of  bytes  used for all HTTP/2 response buffers
	      combined.	 These buffers contain DNS  responses  waiting	to  be
	      written  back  to	the clients.  An RST_STREAM frame will be send
	      to streams exceeding this	limit.	A plain	number	is  in	bytes,
	      append  'k',  'm'	 or  'g' for kilobytes,	megabytes or gigabytes
	      (1024*1024 bytes in a megabyte).

	      Default: 4m

       http-nodelay: <yes or no>
	      Set  TCP_NODELAY	socket	option	on  sockets  used  to  provide
	      DNS-over-HTTPS service.  Ignored if the option is	not available.

	      Default: yes

       http-notls-downstream: <yes or no>
	      Disable use of TLS for the downstream DNS-over-HTTP connections.
	      Useful for local back end	servers.

	      Default: no

       proxy-protocol-port: <portnr>
	      List  port  numbers  as proxy-protocol-port, and when interfaces
	      are defined, eg. with the	@port suffix,  as  this	 port  number,
	      they support and expect PROXYv2.

	      In this case the proxy address will only be used for the network
	      communication  and initial ACL (check if the proxy itself	is de-
	      nied/refused by configuration).

	      The proxied address (if any) will	 then  be  used	 as  the  true
	      client  address  and  will be used where applicable for logging,
	      ACL, DNSTAP, RPZ and IP ratelimiting.

	      PROXYv2 is supported for UDP and TCP/TLS listening interfaces.

	      There is no support for PROXYv2 on a DoH,	DoQ or	DNSCrypt  lis-
	      tening interface.

	      Can list multiple, each on a new statement.

       quic-port: <number>
	      The port number on which to provide DNS-over-QUIC	service.  Only
	      interfaces  configured  with that	port number as @number get the
	      QUIC service.  The interface uses	QUIC for the  UDP  traffic  on
	      that  port  number.  If it is set	to 0, the server does not init
	      QUIC code, and QUIC is disabled.	This is	similar	to if QUIC  is
	      not in use, but then explicitly.

	      Default: 853

       quic-size: <size	in bytes>
	      Maximum  number of bytes for all QUIC buffers and	data combined.
	      A	plain number is	in bytes, append 'k', 'm'  or  'g'  for	 kilo-
	      bytes,  megabytes	 or gigabytes (1024*1024 bytes in a megabyte).
	      New connections receive connection refused when the limit	is ex-
	      ceeded.  New streams are reset when the limit is exceeded.

	      Default: 8m

       use-systemd: <yes or no>
	      Enable or	disable	systemd	socket activation.

	      Default: no

       do-daemonize: <yes or no>
	      Enable or	disable	whether	the  Unbound  server  forks  into  the
	      background  as  a	daemon.	 Set the value to no when Unbound runs
	      as systemd service.

	      Default: yes

       tcp-connection-limit: <IP netblock> <limit>
	      Allow up to limit	simultaneous TCP connections  from  the	 given
	      netblock.	  When	at the limit, further connections are accepted
	      but closed immediately.  This option  is	experimental  at  this
	      time.

	      Default: (disabled)

       access-control: <IP netblock> <action>
	      Specify  treatment of incoming queries from their	originating IP
	      address.	Queries	can be allowed to have access to  this	server
	      that gives DNS answers, or refused, with other actions possible.
	      The  IP address range can	be specified as	a netblock, it is pos-
	      sible to give the	statement several times	in  order  to  specify
	      the  treatment of	different netblocks.  The netblock is given as
	      an IPv4 or IPv6 address with /size appended for a	classless net-
	      work block.  The most specific netblock match is used,  if  none
	      match  refuse  is	 used.	The order of the access-control	state-
	      ments therefore does  not	 matter.   The	action	can  be	 deny,
	      refuse,	 allow,	   allow_setrd,	  allow_snoop,	 allow_cookie,
	      deny_non_local or	refuse_non_local.

	      deny   Stops queries from	hosts from that	netblock.

	      refuse Stops queries too,	but sends a DNS	 rcode	REFUSED	 error
		     message back.

	      allow  Gives  access  to	clients	 from that netblock.  It gives
		     only access for recursion clients (which is  what	almost
		     all clients need).	 Non-recursive queries are refused.

		     The  allow	action does allow non-recursive	queries	to ac-
		     cess the local-data that is configured.   The  reason  is
		     that  this	 does not involve the Unbound server recursive
		     lookup algorithm, and static data is served in the	reply.
		     This  supports  normal  operations	 where	 non-recursive
		     queries are made for the authoritative data.  For non-re-
		     cursive  queries  any  replies from the dynamic cache are
		     refused.

	      allow_setrd
		     Ignores the recursion desired (RD)	bit and	treats all re-
		     quests as if the recursion	desired	bit is set.

		     Note that this behavior violates RFC  1034	 which	states
		     that a name server	should never perform recursive service
		     unless  asked  via	 the RD	bit since this interferes with
		     trouble shooting of name  servers	and  their  databases.
		     This  prohibited  behavior	 may  be useful	if another DNS
		     server must forward requests for specific zones to	a  re-
		     solver  DNS  server,  but	only supports stub domains and
		     sends queries to the resolver DNS server with the RD  bit
		     cleared.

	      allow_snoop
		     Gives  non-recursive  access too.	This gives both	recur-
		     sive and non  recursive  access.	The  name  allow_snoop
		     refers  to	 cache snooping, a technique to	use non-recur-
		     sive queries to examine the cache contents	(for malicious
		     acts).  However, non-recursive  queries  can  also	 be  a
		     valuable  debugging  tool	(when  you want	to examine the
		     cache contents).

		     In	that case  use	allow_snoop  for  your	administration
		     host.

	      allow_cookie
		     Allows  access  only  to UDP queries that contain a valid
		     DNS Cookie	as specified in	RFC 7873 and  RFC  9018,  when
		     the  answer-cookie	 option	 is enabled.  UDP queries con-
		     taining only a DNS	Client Cookie and no Server Cookie, or
		     an	invalid	DNS Cookie, will receive a BADCOOKIE  response
		     including	a newly	generated DNS Cookie, allowing clients
		     to	retry with that	DNS Cookie.  The  allow_cookie	action
		     will  also	 accept	requests over stateful transports, re-
		     gardless of the presence of an DNS	Cookie and  regardless
		     of	 the answer-cookie setting.  UDP queries without a DNS
		     Cookie receive REFUSED responses with the	TC  flag  set,
		     that may trigger fall back	to TCP for those clients.

	      deny_non_local
		     The  deny_non_local action	is for hosts that are only al-
		     lowed to query for	the authoritative local-data, they are
		     not allowed full recursion	 but  only  the	 static	 data.
		     Messages that are disallowed are dropped.

	      refuse_non_local
		     The  refuse_non_local  action  is for hosts that are only
		     allowed to	query for the authoritative  local-data,  they
		     are  not allowed full recursion but only the static data.
		     Messages that are disallowed receive error	code REFUSED.

	      By default only localhost	(the 127.0.0.0/8 IP netblock, not  the
	      loopback	interface) is implicitly allowed, the rest is refused.
	      The default is refused, because that is protocol-friendly.   The
	      DNS  protocol  is	 not designed to handle	dropped	packets	due to
	      policy, and dropping may result in (possibly excessive)  retried
	      queries.

       access-control-tag: <IP netblock> "<list	of tags>"
	      Assign  tags to access-control elements.	Clients	using this ac-
	      cess control element use localzones that are tagged with one  of
	      these tags.

	      Tags  must  be  defined  in define-tag.  Enclose list of tags in
	      quotes ("") and put spaces between tags.

	      If access-control-tag is configured for a	netblock that does not
	      have an access-control, an access-control	 element  with	action
	      allow is configured for this netblock.

       access-control-tag-action: <IP netblock>	<tag> <action>
	      Set  action for particular tag for given access control element.
	      If you have multiple tag values, the tag used to lookup the  ac-
	      tion  is	the  first  tag	 match	between	access-control-tag and
	      local-zone-tag  where  "first"  comes  from  the	order  of  the
	      define-tag values.

       access-control-tag-data:	<IP netblock> <tag> "<resource record string>"
	      Set  redirect  data  for particular tag for given	access control
	      element.

       access-control-view: <IP	netblock> <view	name>
	      Set view for given access	control	element.

       interface-action: <ip address or	interface name [@port]>	<action>
	      Similar to access-control	but for	interfaces.

	      The action is the	same as	the ones defined under access-control.

	      Default action for interfaces is refuse.	By default only	local-
	      host (the	127.0.0.0/8 IP netblock, not the  loopback  interface)
	      is  implicitly allowed through the default access-control	behav-
	      ior.  This also means that any attempt to	use  the  interface-*:
	      options for the loopback interface will not work as they will be
	      overridden  by the implicit default "access-control: 127.0.0.0/8
	      allow" option.

	      NOTE:
		 The interface needs to	be already  specified  with  interface
		 and  that  any	 access-control*:  option overrides all	inter-
		 face-*: options for targeted clients.

       interface-tag: <ip address or interface name [@port]> <"list of tags">
	      Similar to access-control-tag but	for interfaces.

	      NOTE:
		 The interface needs to	be already  specified  with  interface
		 and  that  any	 access-control*:  option overrides all	inter-
		 face-*: options for targeted clients.

       interface-tag-action: <ip address or interface name [@port]> <tag> <ac-
       tion>
	      Similar to access-control-tag-action but for interfaces.

	      NOTE:
		 The interface needs to	be already  specified  with  interface
		 and  that  any	 access-control*:  option overrides all	inter-
		 face-*: options for targeted clients.

       interface-tag-data: <ip address or interface name [@port]> <tag>	<"re-
       source record string">
	      Similar to access-control-tag-data but for interfaces.

	      NOTE:
		 The interface needs to	be already  specified  with  interface
		 and  that  any	 access-control*:  option overrides all	inter-
		 face-*: options for targeted clients.

       interface-view: <ip address or interface	name [@port]> <view name>
	      Similar to access-control-view but for interfaces.

	      NOTE:
		 The interface needs to	be already  specified  with  interface
		 and  that  any	 access-control*:  option overrides all	inter-
		 face-*: options for targeted clients.

       chroot: <directory>
	      If chroot	is enabled, you	should pass the	configfile  (from  the
	      commandline)  as	a full path from the original root.  After the
	      chroot has been performed	the now	defunct	portion	of the	config
	      file path	is removed to be able to reread	the config after a re-
	      load.

	      All  other  file paths (working dir, logfile, roothints, and key
	      files) can be specified in several ways:	as  an	absolute  path
	      relative	to the new root, as a relative path to the working di-
	      rectory, or as an	absolute path relative to the  original	 root.
	      In  the last case	the path is adjusted to	remove the unused por-
	      tion.

	      The pidfile can be either	a relative path	to the working	direc-
	      tory,  or	an absolute path relative to the original root.	 It is
	      written just prior to chroot and dropping	permissions.  This al-
	      lows the pidfile to be /var/run/unbound.pid and the chroot to be
	      /var/unbound, for	example.  Note that Unbound is not able	to re-
	      move the pidfile after termination when it is located outside of
	      the chroot directory.

	      Additionally, Unbound may	need to	access /dev/urandom  (for  en-
	      tropy) from inside the chroot.

	      If  given,  a  chroot(2) is done to the given directory.	If you
	      give "" no chroot(2) is performed.

	      Default: /usr/local/etc/unbound

       username: <name>
	      If given,	 after	binding	 the  port  the	 user  privileges  are
	      dropped.	If you give username: "" no user change	is performed.

	      If  this	user  is  not capable of binding the port, reloads (by
	      signal HUP) will still retain the	opened ports.  If  you	change
	      the port number in the config file, and that new port number re-
	      quires privileges, then a	reload will fail; a restart is needed.

	      Default: unbound

       directory: <directory>
	      Sets  the	 working  directory  for  the program.	On Windows the
	      string "%EXECUTABLE%" tries to change to the directory that  un-
	      bound.exe	 resides in.  If you give a server: directory: <direc-
	      tory> before include file	statements then	those includes can  be
	      relative to the working directory.

	      Default: /usr/local/etc/unbound

       logfile:	<filename>
	      If  ""  is given,	logging	goes to	stderr,	or nowhere once	daemo-
	      nized.  The logfile is appended to, in the following format:

		 [seconds since	1970] unbound[pid:tid]:	type: message.

	      If this option is	given, the use-syslog option is	internally set
	      to no.

	      The logfile is reopened (for append) when	 the  config  file  is
	      reread, on SIGHUP.

	      Default: "" (disabled)

       use-syslog: <yes	or no>
	      Sets  Unbound  to	 send  log messages to the syslogd, using sys-
	      log(3).  The log facility	LOG_DAEMON is used, with identity "un-
	      bound".  The logfile setting is overridden when use-syslog:  yes
	      is set.

	      Default: yes

       log-identity: <string>
	      If  ""  is  given, then the name of the executable, usually "un-
	      bound" is	used to	report to the log.  Enter a string to override
	      it with that, which is useful on systems that run	more than  one
	      instance	of Unbound, with different configurations, so that the
	      logs can be easily distinguished against.

	      Default: ""

       log-time-ascii: <yes or no>
	      Sets logfile lines to use	a timestamp in UTC ASCII.   No	effect
	      if  using	 syslog,  in  that  case  syslog formats the timestamp
	      printed into the log files.

	      Default: no (prints the seconds since 1970 in brackets)

       log-time-iso: <yes or no>
	      Log time in ISO8601 format, if log-time-ascii: yes is also set.

	      Default: no

       log-queries: <yes or no>
	      Prints one line per query	to the log, with the log timestamp and
	      IP address, name,	type and class.	 Note that it  takes  time  to
	      print these lines	which makes the	server (significantly) slower.
	      Odd (nonprintable) characters in names are printed as '?'.

	      Default: no

       log-replies: <yes or no>
	      Prints one line per reply	to the log, with the log timestamp and
	      IP  address,  name,  type,  class, return	code, time to resolve,
	      from cache and response size.  Note that it takes	time to	 print
	      these  lines which makes the server (significantly) slower.  Odd
	      (nonprintable) characters	in names are printed as	'?'.

	      Default: no

       log-tag-queryreply: <yes	or no>
	      Prints  the  word	 'query'  and  'reply'	with  log-queries  and
	      log-replies.  This makes filtering logs easier.

	      Default: no (backwards compatible)

       log-destaddr: <yes or no>
	      Prints the destination address, port and type in the log-replies
	      output.	This  disambiguates  what  type	of traffic, eg.	UDP or
	      TCP, and to what local port the traffic was sent to.

	      Default: no

       log-local-actions: <yes or no>
	      Print log	lines to inform	about local zone actions.  These lines
	      are like the local-zone type inform print	 outs,	but  they  are
	      also printed for the other types of local	zones.

	      Default: no

       log-servfail: <yes or no>
	      Print log	lines that say why queries return SERVFAIL to clients.
	      This  is	separate  from the verbosity debug logs, much smaller,
	      and printed at the error level, not the info level of debug info
	      from verbosity.

	      Default: no

       log-thread-id: <yes or no>
	      (Only on Linux and only when threads  are	 available)  Logs  the
	      system-wide Linux	thread ID instead of Unbound's internal	thread
	      counter.	Can be useful when debugging with system tools.

	      Default: no

       pidfile:	<filename>
	      The  process  id	is  written to the file.  Default is "/usr/lo-
	      cal/etc/unbound/unbound.pid".  So,

		 kill -HUP `cat	/usr/local/etc/unbound/unbound.pid`

	      triggers a reload,

		 kill -TERM `cat /usr/local/etc/unbound/unbound.pid`

	      gracefully terminates.

	      Default: /usr/local/etc/unbound/unbound.pid

       root-hints: <filename>
	      Read the root hints from this file.  Default is  nothing,	 using
	      builtin hints for	the IN class.  The file	has the	format of zone
	      files,  with  root nameserver names and addresses	only.  The de-
	      fault may	become outdated, when servers change, and then	it  is
	      possible to use a	root hints file	with specific servers.

	      Default: ""

       hide-identity: <yes or no>
	      If enabled 'id.server' and 'hostname.bind' queries are REFUSED.

	      Default: no

       identity: <string>
	      Set  the identity	to report.  If set to "", then the hostname of
	      the server is returned.

	      Default: ""

       hide-version: <yes or no>
	      If enabled 'version.server' and 'version.bind' queries  are  RE-
	      FUSED.

	      Default: no

       version:	<string>
	      Set  the version to report.  If set to "", then the package ver-
	      sion is returned.

	      Default: ""

       hide-http-user-agent: <yes or no>
	      If enabled the HTTP header User-Agent is not set.	 Use with cau-
	      tion as some webserver configurations may	reject	HTTP  requests
	      lacking  this header.  If	needed,	it is better to	explicitly set
	      the http-user-agent below.

	      Default: no

       http-user-agent:	<string>
	      Set the HTTP User-Agent header for outgoing HTTP	requests.   If
	      set to "", then the package name and version are used.

	      Default: ""

       nsid: <string>
	      Add  the	specified  nsid	to the EDNS section of the answer when
	      queried with an NSID EDNS	enabled	packet.	 As a sequence of  hex
	      characters or with 'ascii_' prefix and then an ASCII string.

	      Default: (disabled)

       hide-trustanchor: <yes or no>
	      If enabled 'trustanchor.unbound' queries are REFUSED.

	      Default: no

       target-fetch-policy: <"list of numbers">
	      Set  the	target fetch policy used by Unbound to determine if it
	      should fetch nameserver target addresses opportunistically.  The
	      policy is	described per dependency depth.

	      The number of values determines  the  maximum  dependency	 depth
	      that  Unbound  will  pursue in answering a query.	 A value of -1
	      means to fetch all targets opportunistically for that dependency
	      depth.  A	value of 0 means to fetch on demand only.  A  positive
	      value fetches that many targets opportunistically.

	      Enclose the list between quotes ("") and put spaces between num-
	      bers.  Setting all zeroes, "0 0 0	0 0" gives behaviour closer to
	      that  of	BIND 9,	while setting "-1 -1 -1	-1 -1" gives behaviour
	      rumoured to be closer to that of BIND 8.

	      Default:	"3 2 1 0 0"

       harden-short-bufsize: <yes or no>
	      Very small EDNS buffer sizes from	queries	are ignored.

	      Default: yes (per	RFC 6891)

       harden-large-queries: <yes or no>
	      Very large queries are ignored.  Default is no, since it is  le-
	      gal  protocol wise to send these,	and could be necessary for op-
	      eration if TSIG or EDNS payload is very large.

	      Default: no

       harden-glue: <yes or no>
	      Will trust glue only if it is within the servers authority.

	      Default: yes

       harden-unverified-glue: <yes or no>
	      Will trust only in-zone glue.  Will try to resolve  all  out  of
	      zone  (unverified)  glue.	 Will fallback to the original glue if
	      unable to	resolve.

	      Default: no

       harden-dnssec-stripped: <yes or no>
	      Require DNSSEC data for trust-anchored zones, if	such  data  is
	      absent,  the  zone  becomes bogus.  If turned off, and no	DNSSEC
	      data is received (or the DNSKEY data fails  to  validate),  then
	      the  zone	 is made insecure, this	behaves	like there is no trust
	      anchor.  You could turn this off if you are sometimes behind  an
	      intrusive	 firewall (of some sort) that removes DNSSEC data from
	      packets, or a zone changes from  signed  to  unsigned  to	 badly
	      signed often.  If	turned off you run the risk of a downgrade at-
	      tack that	disables security for a	zone.

	      Default: yes

       harden-below-nxdomain: <yes or no>
	      From RFC 8020 (with title	"NXDOMAIN: There Really	Is Nothing Un-
	      derneath"), returns NXDOMAIN to queries for a name below another
	      name  that is already known to be	NXDOMAIN.  DNSSEC mandates NO-
	      ERROR for	empty nonterminals, hence this is possible.  Very  old
	      software might return NXDOMAIN for empty nonterminals (that usu-
	      ally happen for reverse IP address lookups), and thus may	be in-
	      compatible  with	this.  To try to avoid this only DNSSEC-secure
	      NXDOMAINs	are used, because  the	old  software  does  not  have
	      DNSSEC.

	      NOTE:
		 The  NXDOMAIN must be secure, this means NSEC3	with optout is
		 insufficient.

	      Default: yes

       harden-referral-path: <yes or no>
	      Harden the referral path by performing  additional  queries  for
	      infrastructure data.  Validates the replies if trust anchors are
	      configured and the zones are signed.  This enforces DNSSEC vali-
	      dation  on  nameserver NS	sets and the nameserver	addresses that
	      are encountered on the referral path to the answer.  Default  is
	      off, because it burdens the authority servers, and it is not RFC
	      standard,	 and could lead	to performance problems	because	of the
	      extra query load that is generated.   Experimental  option.   If
	      you   enable   it	  consider   adding  more  numbers  after  the
	      target-fetch-policy to increase the max depth  that  is  checked
	      to.

	      Default: no

       harden-algo-downgrade: <yes or no>
	      Harden  against algorithm	downgrade when multiple	algorithms are
	      advertised in the	DS record.  This works by first	choosing  only
	      the strongest DS digest type as per RFC 4509 (Unbound treats the
	      highest  algorithm  as  the strongest) and then expecting	signa-
	      tures from all the advertised signing algorithms from the	chosen
	      DS(es) to	be present.  If	no, allows any one supported algorithm
	      to validate the zone, even if other  advertised  algorithms  are
	      broken.	RFC 6840 mandates that zone signers must produce zones
	      signed with all advertised algorithms,  but  sometimes  they  do
	      not.   RFC  6840 also clarifies that this	requirement is not for
	      validators and validators	should accept any single  valid	 path.
	      It should	thus be	explicitly noted that this option violates RFC
	      6840  for	DNSSEC validation and should only be used to perform a
	      signature	completeness test to support troubleshooting.

	      WARNING:
		 Using this option may break DNSSEC resolution	with  non  RFC
		 6840 conforming signers and/or	in multi-signer	configurations
		 that don't send all the advertised signatures.

	      Default: no

       harden-unknown-additional: <yes or no>
	      Harden  against unknown records in the authority section and ad-
	      ditional section.	 If no,	such records are copied	from  the  up-
	      stream and presented to the client together with the answer.  If
	      yes,  it	could hamper future protocol developments that want to
	      add records.

	      Default: no

       use-caps-for-id:	<yes or	no>
	      Use 0x20-encoded random bits in the  query  to  foil  spoof  at-
	      tempts.	This  perturbs	the  lowercase	and uppercase of query
	      names sent to authority servers and checks if  the  reply	 still
	      has  the correct casing.	This feature is	an experimental	imple-
	      mentation	of draft dns-0x20.

	      Default: no

       caps-exempt: <domain>
	      Exempt the domain	so that	it does	not receive  caps-for-id  per-
	      turbed  queries.	 For domains that do not support 0x20 and also
	      fail with	fallback because they keep sending different  answers,
	      like some	load balancers.	 Can be	given multiple times, for dif-
	      ferent domains.

       caps-whitelist: <domain>
	      Alternate	syntax for caps-exempt.

       qname-minimisation: <yes	or no>
	      Send  minimum  amount  of	information to upstream	servers	to en-
	      hance privacy.  Only send	minimum	required labels	of  the	 QNAME
	      and  set	QTYPE  to A when possible.  Best effort	approach; full
	      QNAME and	original QTYPE will be sent when upstream replies with
	      a	RCODE other than NOERROR, except when receiving	NXDOMAIN  from
	      a	DNSSEC signed zone.

	      Default: yes

       qname-minimisation-strict: <yes or no>
	      QNAME  minimisation in strict mode.  Do not fall-back to sending
	      full QNAME to potentially	broken nameservers.  A lot of  domains
	      will not be resolvable when this option in enabled.  Only	use if
	      you  know	 what you are doing.  This option only has effect when
	      qname-minimisation is enabled.

	      Default: no

       aggressive-nsec:	<yes or	no>
	      Aggressive NSEC uses the DNSSEC NSEC chain to  synthesize	 NXDO-
	      MAIN  and	 other	denials, using information from	previous NXDO-
	      MAINs answers.  It helps to reduce the query rate	 towards  tar-
	      gets that	get a very high	nonexistent name lookup	rate.

	      Default: yes

       private-address:	<IP address or subnet>
	      Give IPv4	of IPv6	addresses or classless subnets.	 These are ad-
	      dresses  on  your	private	network, and are not allowed to	be re-
	      turned for public	internet names.	 Any occurrence	 of  such  ad-
	      dresses  are removed from	DNS answers.  Additionally, the	DNSSEC
	      validator	may mark the answers  bogus.   This  protects  against
	      so-called	 DNS  Rebinding, where a user browser is turned	into a
	      network proxy, allowing remote access  through  the  browser  to
	      other parts of your private network.

	      The  option  removes resource records of types A,	AAAA, SVCB and
	      HTTPS that match the filter.  Inside the SVCB and	HTTPS records,
	      the svcparams of type ipv4hint  and  ipv6hint  are  checked  for
	      matches.

	      Some  names can be allowed to contain your private addresses, by
	      default all the local-data that you configured  is  allowed  to,
	      and  you	can specify additional names using private-domain.  No
	      private addresses	are enabled by default.

	      We consider to enable this for the RFC 1918 private  IP  address
	      space  by	 default in later releases.  That would	enable private
	      addresses	  for	10.0.0.0/8,   172.16.0.0/12,   192.168.0.0/16,
	      169.254.0.0/16,  fd00::/8	and fe80::/10, since the RFC standards
	      say these	addresses should not be	visible	on the	public	inter-
	      net.

	      Turning  on 127.0.0.0/8 would hinder many	spamblocklists as they
	      use that.	 Adding	::ffff:0:0/96 stops IPv4-mapped	IPv6 addresses
	      from bypassing the filter.

       private-domain: <domain name>
	      Allow this domain, and all its subdomains	to contain private ad-
	      dresses.	Give multiple times to allow multiple domain names  to
	      contain private addresses.

	      Default: (none)

       unwanted-reply-threshold: <number>
	      If  set,	a total	number of unwanted replies is kept track of in
	      every thread.  When it reaches the threshold, a defensive	action
	      is taken and a warning is	printed	to the log.  The defensive ac-
	      tion is to clear the rrset and message caches, hopefully	flush-
	      ing away any poison.  A value of 10 million is suggested.

	      Default: 0 (disabled)

       do-not-query-address: <IP address>
	      Do not query the given IP	address.  Can be IPv4 or IPv6.	Append
	      /num  to	indicate  a classless delegation netblock, for example
	      like 10.2.3.4/24 or 2001::11/64.

	      Default: (none)

       do-not-query-localhost: <yes or no>
	      If yes, localhost	is added to the	do-not-query-address  entries,
	      both  IPv6  ::1 and IPv4 127.0.0.1/8.  If	no, then localhost can
	      be used to send queries to.

	      Default: yes

       prefetch: <yes or no>
	      If yes, cache hits on message cache elements that	are  on	 their
	      last  10	percent	 of their TTL value trigger a prefetch to keep
	      the cache	up to date.  Turning it	on gives about 10 percent more
	      traffic and load on the machine, but popular items do not	expire
	      from the cache.

	      Default: no

       prefetch-key: <yes or no>
	      If yes, fetch the	DNSKEYs	earlier	 in  the  validation  process,
	      when a DS	record is encountered.	This lowers the	latency	of re-
	      quests.	It  does  use a	little more CPU.  Also if the cache is
	      set to 0,	it is no use.

	      Default: no

       deny-any: <yes or no>
	      If yes, deny queries of type ANY with  an	 empty	response.   If
	      disabled,	Unbound	responds with a	short list of resource records
	      if  some	can  be	found in the cache and makes the upstream type
	      ANY query	if there are none.

	      Default: no

       rrset-roundrobin: <yes or no>
	      If yes, Unbound rotates RRSet order in response (the random num-
	      ber is taken from	the query ID, for speed	and thread safety).

	      Default: yes

       minimal-responses: <yes or no>
	      If yes, Unbound does not	insert	authority/additional  sections
	      into  response  messages	when  those sections are not required.
	      This reduces response size  significantly,  and  may  avoid  TCP
	      fallback	for  some  responses which may cause a slight speedup.
	      The default is yes, even though the DNS  protocol	 RFCs  mandate
	      these sections, and the additional content could save roundtrips
	      for clients that use the additional content.  However these sec-
	      tions are	hardly used by clients.	 Enabling prefetch can benefit
	      clients  that need the additional	content	by trying to keep that
	      content fresh in the cache.

	      Default: yes

       disable-dnssec-lame-check: <yes or no>
	      If yes, disables the DNSSEC  lameness  check  in	the  iterator.
	      This check sees if RRSIGs	are present in the answer, when	DNSSEC
	      is  expected,  and retries another authority if RRSIGs are unex-
	      pectedly missing.	 The  validator	 will  insist  in  RRSIGs  for
	      DNSSEC signed domains regardless of this setting,	if a trust an-
	      chor is loaded.

	      Default: no

       module-config: "<module names>"
	      Module  configuration,  a	 list  of  module  names  separated by
	      spaces, surround the string with quotes ("").  The  modules  can
	      be  respip,  validator,  or iterator (and	possibly more, see be-
	      low).

	      NOTE:
		 The ordering of the modules is	significant, the order decides
		 the order of processing.

	      Setting this to just "iterator" will result in a	non-validating
	      server.	Setting	 this  to  "validator  iterator"  will turn on
	      DNSSEC validation.

	      NOTE:
		 You must also set trust-anchors for validation	to be useful.

	      Adding respip to the front will cause RPZ	processing to be  done
	      on all queries.

	      Most  modules  that  need	to be listed here have to be listed at
	      the beginning of the line.

	      The subnetcache module has to be listed just before  the	itera-
	      tor.

	      The  python  module  can	be listed in different places, it then
	      processes	the output of the module it is just before.

	      The dynlib module	can be listed pretty much anywhere, it is only
	      a	very thin wrapper that allows dynamic libraries	to run in  its
	      place.

	      Default: "validator iterator"

       trust-anchor-file: <filename>
	      File  with  trusted keys for validation.	Both DS	and DNSKEY en-
	      tries can	appear in the file.  The format	of  the	 file  is  the
	      standard DNS Zone	file format.

	      Default: "" (no trust anchor file)

       auto-trust-anchor-file: <filename>
	      File  with  trust	anchor for one zone, which is tracked with RFC
	      5011 probes.  The	probes are run several times per  month,  thus
	      the  machine must	be online frequently.  The initial file	can be
	      one with contents	as described in	trust-anchor-file.   The  file
	      is  written  to  when the	anchor is updated, so the Unbound user
	      must have	write permission.  Write permission to the  file,  but
	      also  to	the  directory	it  is in (to create a temporary file,
	      which is necessary to deal with filesystem full events), it must
	      also be inside the chroot	(if that is used).

	      Default: "" (no auto trust anchor	file)

       trust-anchor: "<Resource	Record>"
	      A	DS or DNSKEY RR	for a key to use for validation.  Multiple en-
	      tries can	be given to specify multiple trusted keys, in addition
	      to the trust-anchor-file.	 The resource record is	entered	in the
	      same format as dig(1) or drill(1)	prints them, the  same	format
	      as in the	zone file.  Has	to be on a single line,	with ""	around
	      it.   A  TTL  can	be specified for ease of cut and paste,	but is
	      ignored.	A class	can be specified, but class IN is default.

	      Default: (none)

       trusted-keys-file: <filename>
	      File with	trusted	keys for validation.  Specify  more  than  one
	      file   with   several   entries,	 one  file  per	 entry.	  Like
	      trust-anchor-file	but has	a different file  format.   Format  is
	      BIND-9  style  format,  the  trusted-keys	{ name flag proto algo
	      "key"; };	clauses	are read.  It is  possible  to	use  wildcards
	      with  this  statement,  the wildcard is expanded on start	and on
	      reload.

	      Default: "" (no trusted keys file)

       trust-anchor-signaling: <yes or no>
	      Send RFC 8145 key	tag query after	trust anchor priming.

	      Default: yes

       root-key-sentinel: <yes or no>
	      Root key trust anchor sentinel.

	      Default: yes

       domain-insecure:	<domain	name>
	      Sets <domain name> to be insecure, DNSSEC	chain of trust is  ig-
	      nored  towards  the  <domain name>.  So a	trust anchor above the
	      domain name can not make the domain secure  with	a  DS  record,
	      such  a  DS record is then ignored.  Can be given	multiple times
	      to specify multiple domains that are treated as if unsigned.  If
	      you set trust anchors for	the domain they	override this  setting
	      (and the domain is secured).

	      This  can	 be useful if you want to make sure a trust anchor for
	      external lookups does not	affect an (unsigned) internal  domain.
	      A	 DS  record externally can create validation failures for that
	      internal domain.

	      Default: (none)

       val-override-date: <rrsig-style date spec>

	      WARNING:
		 Debugging feature!

	      If enabled by giving a RRSIG style date, that date is  used  for
	      verifying	 RRSIG	inception and expiration dates,	instead	of the
	      current date.  Do	not set	this unless you	are  debugging	signa-
	      ture  inception  and  expiration.	 The value -1 ignores the date
	      altogether, useful for some special applications.

	      Default: 0 (disabled)

       val-sig-skew-min: <seconds>
	      Minimum number of	seconds	of clock skew to  apply	 to  validated
	      signatures.   A  value of	10% of the signature lifetime (expira-
	      tion - inception)	is used, capped	by this	setting.   Default  is
	      3600  (1	hour)  which  allows for daylight savings differences.
	      Lower this value for more	strict checking	of short lived	signa-
	      tures.

	      Default: 3600 (1 hour)

       val-sig-skew-max: <seconds>
	      Maximum  number  of  seconds of clock skew to apply to validated
	      signatures.  A value of 10% of the signature  lifetime  (expira-
	      tion  -  inception) is used, capped by this setting.  Default is
	      86400 (24	hours) which allows for	timezone setting  problems  in
	      stable  domains.	Setting	both min and max very low disables the
	      clock skew allowances.  Setting both min and max very high makes
	      the validator check the signature	timestamps less	strictly.

	      Default: 86400 (24 hours)

       val-max-restart:	<number>
	      The maximum number the validator should restart validation  with
	      another authority	in case	of failed validation.

	      Default: 5

       val-bogus-ttl: <seconds>
	      The  time	 to live for bogus data.  This is data that has	failed
	      validation; due to invalid signatures or other checks.  The  TTL
	      from  that  data	cannot	be trusted, and	this value is used in-
	      stead.  The time interval	prevents repeated revalidation of  bo-
	      gus data.

	      Default: 60

       val-clean-additional: <yes or no>
	      Instruct	the  validator to remove data from the additional sec-
	      tion of secure messages that are not signed properly.   Messages
	      that are insecure, bogus,	indeterminate or unchecked are not af-
	      fected.  Use this	setting	to protect the users that rely on this
	      validator	 for  authentication  from potentially bad data	in the
	      additional section.

	      Default: yes

       val-log-level: <number>
	      Have the validator print validation failures to  the  log.   Re-
	      gardless of the verbosity	setting.

	      At  1,  for every	user query that	fails a	line is	printed	to the
	      logs.  This way you can monitor what  happens  with  validation.
	      Use a diagnosis tool, such as dig	or drill, to find out why val-
	      idation is failing for these queries.

	      At  2,  not  only	 the query that	failed is printed but also the
	      reason why Unbound thought it was	wrong and  which  server  sent
	      the faulty data.

	      Default: 0 (disabled)

       val-permissive-mode: <yes or no>
	      Instruct	the validator to mark bogus messages as	indeterminate.
	      The security checks are performed, but if	the  result  is	 bogus
	      (failed  security),  the	reply  is not withheld from the	client
	      with SERVFAIL as usual.  The client  receives  the  bogus	 data.
	      For  messages  that  are found to	be secure the AD bit is	set in
	      replies.	Also logging is	performed as for full validation.

	      Default: no

       ignore-cd-flag: <yes or no>
	      Instruct Unbound to ignore the CD	flag from clients  and	refuse
	      to  return  bogus	 answers to them.  Thus, the CD	(Checking Dis-
	      abled) flag does not disable checking any	more.  This is	useful
	      if  legacy (w2008) servers that set the CD flag but cannot vali-
	      date DNSSEC themselves are the clients, and  then	 Unbound  pro-
	      vides them with DNSSEC protection.

	      Default: no

       disable-edns-do:	<yes or	no>
	      Disable the EDNS DO flag in upstream requests.  It breaks	DNSSEC
	      validation  for Unbound's	clients.  This results in the upstream
	      name servers to not include DNSSEC records in their replies  and
	      could  be	helpful	for devices that cannot	handle DNSSEC informa-
	      tion.  When the option is	enabled, clients that set the DO  flag
	      receive  no  EDNS	record in the response to indicate the lack of
	      support to them.	If this	option is enabled but Unbound  is  al-
	      ready configured for DNSSEC validation (i.e., the	validator mod-
	      ule  is  enabled;	 default) this option is implicitly turned off
	      with a warning as	to not break DNSSEC validation in Unbound.

	      Default: no

       serve-expired: <yes or no>
	      If enabled, Unbound attempts to serve old	responses  from	 cache
	      with  a  TTL of serve-expired-reply-ttl in the response.	By de-
	      fault the	expired	answer will be used after a resolution attempt
	      errored out or is	taking more than  serve-expired-client-timeout
	      to resolve.

	      Default: no

       serve-expired-ttl: <seconds>
	      Limit  serving  of expired responses to configured seconds after
	      expiration.  0 disables the limit.   This	 option	 only  applies
	      when  serve-expired  is enabled.	A suggested value per RFC 8767
	      is between 86400 (1 day) and 259200 (3 days).   The  default  is
	      86400.

	      Default: 86400

       serve-expired-ttl-reset:	<yes or	no>
	      Set  the	TTL  of	expired	records	to the serve-expired-ttl value
	      after a failed attempt to	retrieve  the  record  from  upstream.
	      This  makes sure that the	expired	records	will be	served as long
	      as there are queries for it.

	      Default: no

       serve-expired-reply-ttl:	<seconds>
	      TTL  value  to  use  when	 replying  with	 expired   data.    If
	      serve-expired-client-timeout is also used	then it	is RECOMMENDED
	      to use 30	as the value (RFC 8767).

	      This  value  is  capped by the original TTL of the record.  This
	      means that records with higher original TTL than this value will
	      use this value for expired replies.  Records with	lower original
	      TTL than this value will use  their  original  TTL  for  expired
	      replies.

	      Default: 30

       serve-expired-client-timeout: <msec>
	      Time  in milliseconds before replying to the client with expired
	      data.  This essentially  enables	the  serve-stale  behavior  as
	      specified	in RFC 8767 that first tries to	resolve	before immedi-
	      ately responding with expired data.  Setting this	to 0 will dis-
	      able  this behavior and instead serve the	expired	record immedi-
	      ately from the cache before attempting to	refresh	it via resolu-
	      tion.

	      Default: 1800

       serve-original-ttl: <yes	or no>
	      If enabled, Unbound will always return the original TTL  as  re-
	      ceived  from the upstream	name server rather than	the decrement-
	      ing TTL as stored	in the cache.  This feature may	be  useful  if
	      Unbound  serves  as  a  front-end	to a hidden authoritative name
	      server.

	      Enabling this feature does not  impact  cache  expiry,  it  only
	      changes the TTL Unbound embeds in	responses to queries.

	      NOTE:
		 Enabling  this	feature	implicitly disables enforcement	of the
		 configured minimum and	maximum	TTL, as	it  is	assumed	 users
		 who enable this feature do not	want Unbound to	change the TTL
		 obtained from an upstream server.

	      NOTE:
		 The  values set using cache-min-ttl and cache-max-ttl are ig-
		 nored.

	      Default: no

       val-nsec3-keysize-iterations: <"list of values">
	      List of keysize and iteration count values, separated by spaces,
	      surrounded by quotes.  This determines the maximum allowed NSEC3
	      iteration	count before a message is simply marked	 insecure  in-
	      stead  of	performing the many hashing iterations.	 The list must
	      be in ascending order and	have at	least one entry.  If  you  set
	      it  to  "1024  65535" there is no	restriction to NSEC3 iteration
	      values.

	      NOTE:
		 This table must be kept short;	a very long list  could	 cause
		 slower	operation.

	      Default: "1024 150 2048 150 4096 150"

       zonemd-permissive-mode: <yes or no>
	      If  enabled the ZONEMD verification failures are only logged and
	      do not cause the zone to be blocked and  only  return  servfail.
	      Useful  for  testing  out	 if  it	works, or if the operator only
	      wants to be notified of a	problem	without	disrupting service.

	      Default: no

       add-holddown: <seconds>
	      Instruct the auto-trust-anchor-file probe	mechanism for RFC 5011
	      autotrust	updates	to add new trust anchors only after they  have
	      been visible for this time.

	      Default: 2592000 (30 days	as per the RFC)

       del-holddown: <seconds>
	      Instruct the auto-trust-anchor-file probe	mechanism for RFC 5011
	      autotrust	 updates  to  remove  revoked trust anchors after they
	      have been	kept in	the revoked list for this long.

	      Default: 2592000 (30 days	as per the RFC)

       keep-missing: <seconds>
	      Instruct the auto-trust-anchor-file probe	mechanism for RFC 5011
	      autotrust	updates	to remove missing  trust  anchors  after  they
	      have  been  unseen for this long.	 This cleans up	the state file
	      if the target zone does not perform trust	anchor revocation,  so
	      this makes the auto probe	mechanism work with zones that perform
	      regular (non-5011) rollovers.  The value 0 does not remove miss-
	      ing anchors, as per the RFC.

	      Default: 31622400	(366 days)

       permit-small-holddown: <yes or no>
	      Debug  option  that allows the autotrust 5011 rollover timers to
	      assume very small	values.

	      Default: no

       key-cache-size: <number>
	      Number of	bytes size of the key cache.  A	 plain	number	is  in
	      bytes,  append 'k', 'm' or 'g' for kilobytes, megabytes or giga-
	      bytes (1024*1024 bytes in	a megabyte).

	      Default: 4m

       key-cache-slabs:	<number>
	      Number of	slabs in the key cache.	 Slabs reduce lock  contention
	      by  threads.   Must  be set to a power of	2.  Setting (close) to
	      the number of cpus is a fairly good setting.  If left  unconfig-
	      ured,  it	 will  be  configured automatically to be a power of 2
	      close to the number of configured	threads	in multi-threaded  en-
	      vironments.

	      Default: (unconfigured)

       neg-cache-size: <number>
	      Number  of bytes size of the aggressive negative cache.  A plain
	      number is	in bytes,  append  'k',	 'm'  or  'g'  for  kilobytes,
	      megabytes	or gigabytes (1024*1024	bytes in a megabyte).

	      Default: 1m

       unblock-lan-zones: <yes or no>
	      If  enabled, then	for private address space, the reverse lookups
	      are no longer filtered.  This allows Unbound when	running	as dns
	      service on a host	where it provides service for  that  host,  to
	      put  out	all  of	 the queries for the 'lan' upstream.  When en-
	      abled, only localhost, 127.0.0.1 reverse and ::1	reverse	 zones
	      are  configured  with  default  local zones.  Disable the	option
	      when Unbound is running as a (DHCP-) DNS network resolver	for  a
	      group  of	 machines,  where such lookups should be filtered (RFC
	      compliance), this	also stops potential data  leakage  about  the
	      local network to the upstream DNS	servers.

	      Default: no

       insecure-lan-zones: <yes	or no>
	      If  enabled,  then  reverse lookups in private address space are
	      not   validated.	  This	 is    usually	  required    whenever
	      unblock-lan-zones	is used.

	      Default: no

       local-zone: <zone> <type>
	      Configure	 a local zone.	The type determines the	answer to give
	      if there is no match  from  local-data.	The  types  are	 deny,
	      refuse,	  static,     transparent,     redirect,    nodefault,
	      typetransparent,	  inform,    inform_deny,     inform_redirect,
	      always_transparent,   block_a,  always_refuse,  always_nxdomain,
	      always_null, noview, and are explained below.   After  that  the
	      default  settings	are listed.  Use local-data to enter data into
	      the local	zone.  Answers for local zones are  authoritative  DNS
	      answers.	By default the zones are class IN.

	      If you need more complicated authoritative data, with referrals,
	      wildcards, CNAME/DNAME support, or DNSSEC	authoritative service,
	      setup  a	stub-zone  for it as detailed in the stub zone section
	      below.  A	stub-zone can be used to have unbound send queries  to
	      another  server,	an authoritative server, to fetch the informa-
	      tion.  With a forward-zone, unbound sends	queries	 to  a	server
	      that  is	a  recursive server to fetch the information.  With an
	      auth-zone	a zone can be loaded from file and  used,  it  can  be
	      used  like  a  local zone	for users downstream, or the auth-zone
	      information can be used to fetch information from	when resolving
	      like it is an upstream server.  The forward-zone	and  auth-zone
	      options  are  described in their sections	below.	If you want to
	      perform filtering	of the information that	the users  can	fetch,
	      the  local-zone  and  local-data	statements allow for this, but
	      also the rpz functionality can be	used,  described  in  the  RPZ
	      section.

	      deny   Do	 not  send  an	answer,	drop the query.	 If there is a
		     match from	local data, the	query is answered.

	      refuse Send an error message  reply,  with  rcode	 REFUSED.   If
		     there is a	match from local data, the query is answered.

	      static If	 there	is  a  match from local	data, the query	is an-
		     swered.  Otherwise, the query is answered with NODATA  or
		     NXDOMAIN.	For a negative answer a	SOA is included	in the
		     answer if present as local-data for the zone apex domain.

	      transparent
		     If	 there	is  a  match from local-data, the query	is an-
		     swered.  Otherwise	if the query has a different name, the
		     query is resolved normally.  If the query is for  a  name
		     given  in local-data but no such type of data is given in
		     localdata,	then a NOERROR NODATA answer is	returned.   If
		     no	 local-zone  is	 given local-data causes a transparent
		     zone to be	created	by default.

	      typetransparent
		     If	there is a match from local data,  the	query  is  an-
		     swered.  If the query is for a different name, or for the
		     same name but for a different type, the query is resolved
		     normally.	 So, similar to	transparent but	types that are
		     not listed	in local data are resolved normally, so	if  an
		     A	record	is in the local	data that does not cause a NO-
		     DATA reply	for AAAA queries.

	      redirect
		     The query is answered from	the local data	for  the  zone
		     name.   There may be no local data	beneath	the zone name.
		     This answers queries for the zone,	and all	subdomains  of
		     the  zone	with  the  local data for the zone.  It	can be
		     used to redirect a	domain to return a  different  address
		     record to the end user, with:

			local-zone: "example.com." redirect
			local-data: "example.com. A 127.0.0.1"

		     queries  for  www.example.com and www.foo.example.com are
		     redirected, so that users with web	browsers cannot	access
		     sites with	suffix example.com.

		     A CNAME record can	also be	provided via local-data:

			local-zone: "example.com." redirect
			local-data: "example.com. CNAME	www.example.org."

		     In	that case, the CNAME is	resolved and  the  answer  in-
		     cludes resolved target records as well.  The CNAME	record
		     has to be with the	zone name of the local-zone, and there
		     can  be  one CNAME, not more.  The	CNAME record has to be
		     at	the zone apex of the redirect zone, then  it  is  used
		     for  redirection.	 The resolution	proceeds with upstream
		     DNS resolution, and that does not include the  lookup  in
		     local zones.  So the record is not	able to	point in local
		     zones, but	it can point to	upstream DNS answers.

		     CNAME  resolution	is supported only in type redirect lo-
		     cal-zone, and in type inform_redirect local-zone.

		     As	different from CNAME records that are used  elsewhere,
		     in	 the redirect type local-zone, it is supported that in
		     the target	of the record a	wildcard label	gets  expanded
		     to	 the  query name, with for example: example.com. CNAME
		     *.foo.net.	 gets  expanded	 to   www.example.com.	 CNAME
		     www.example.com.foo.net..

	      inform The query is answered normally, same as transparent.  The
		     client  IP	 address  (@portnumber)	is printed to the log-
		     file.  The	log message is:

			timestamp, unbound-pid,	info: zonename inform IP@port queryname	type class.

		     This option can be	used for normal	 resolution,  but  ma-
		     chines  looking  up infected names	are logged, eg.	to run
		     antivirus on them.

	      inform_deny
		     The query is dropped, like	deny, and logged, like inform.
		     Ie. find infected machines	without	answering the queries.

	      inform_redirect
		     The query is redirected, like redirect, and logged,  like
		     inform.   Ie. answer queries with fixed data and also log
		     the machines that ask.

	      always_transparent
		     Like transparent, but ignores  local  data	 and  resolves
		     normally.

	      block_a
		     Like  transparent,	 but  ignores  local data and resolves
		     normally all query	types excluding	A.  For	A  queries  it
		     unconditionally  returns  NODATA.	 Useful	 in cases when
		     there is a	need to	explicitly force all apps to use  IPv6
		     protocol and avoid	any queries to IPv4.

	      always_refuse
		     Like  refuse,  but	 ignores  local	 data  and refuses the
		     query.  This type also blocks queries of type DS for  the
		     zone name.	 That can break	the DNSSEC chain of trust, but
		     it	 is  refused anyway.  The block	for type DS assists in
		     more completely blocking the zone.

	      always_nxdomain
		     Like static, but ignores local data and returns  NXDOMAIN
		     for the query.

	      always_nodata
		     Like  static,  but	 ignores local data and	returns	NODATA
		     for the query.

	      always_deny
		     Like deny,	but ignores local data and drops the query.

	      always_null
		     Always returns 0.0.0.0 or ::0 for every name in the zone.
		     Like redirect with	zero data for A	and AAAA.  Ignores lo-
		     cal data in the zone.  Used for some block	lists.

	      noview Breaks out	of that	view and moves towards the global  lo-
		     cal  zones	for answer to the query.  If the view-first is
		     no, it'll resolve normally.  If  view-first  is  enabled,
		     it'll  break  perform  that step and check	the global an-
		     swers.  For when the view has view	specific overrides but
		     some zone has to be answered from global local zone  con-
		     tents.

	      nodefault
		     Used  to  turn off	default	contents for AS112 zones.  The
		     other types also turn off default contents	for the	 zone.
		     The nodefault option has no other effect than turning off
		     default  contents	for  the given zone.  Use nodefault if
		     you use exactly that zone,	if you want to use a  subzone,
		     use transparent.

	      The  default zones are localhost,	reverse	127.0.0.1 and ::1, the
	      home.arpa, resolver.arpa,	service.arpa, onion, test, invalid and
	      the AS112	zones.	The AS112 zones	are reverse DNS	zones for pri-
	      vate use and reserved IP addresses for which the servers on  the
	      internet cannot provide correct answers.	They are configured by
	      default to give NXDOMAIN (no reverse information)	answers.

	      The defaults can be turned off by	specifying your	own local-zone
	      of  that	name, or using the nodefault type.  Below is a list of
	      the default zone contents.

	      localhost
		     The IPv4 and IPv6 localhost information is	given.	NS and
		     SOA records are provided for completeness and to  satisfy
		     some DNS update tools.  Default content:

			local-zone: "localhost." redirect
			local-data: "localhost.	10800 IN NS localhost."
			local-data: "localhost.	10800 IN SOA localhost.	nobody.invalid.	1 3600 1200 604800 10800"
			local-data: "localhost.	10800 IN A 127.0.0.1"
			local-data: "localhost.	10800 IN AAAA ::1"

	      reverse IPv4 loopback
		     Default content:

			local-zone: "127.in-addr.arpa."	static
			local-data: "127.in-addr.arpa. 10800 IN	NS localhost."
			local-data: "127.in-addr.arpa. 10800 IN	SOA localhost. nobody.invalid. 1 3600 1200 604800 10800"
			local-data: "1.0.0.127.in-addr.arpa. 10800 IN PTR localhost."

	      reverse IPv6 loopback
		     Default content:

			local-zone: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."	static
			local-data: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 10800 IN	NS localhost."
			local-data: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 10800 IN	SOA localhost. nobody.invalid. 1 3600 1200 604800 10800"
			local-data: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 10800 IN	PTR localhost."

	      home.arpa	(RFC 8375)
		     Default content:

			local-zone: "home.arpa." static
			local-data: "home.arpa.	10800 IN NS localhost."
			local-data: "home.arpa.	10800 IN SOA localhost.	nobody.invalid.	1 3600 1200 604800 10800"

	      resolver.arpa (RFC 9462)
		     Default content:

			local-zone: "resolver.arpa." static
			local-data: "resolver.arpa. 10800 IN NS	localhost."
			local-data: "resolver.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200	604800 10800"

	      service.arpa (draft-ietf-dnssd-srp-25)
		     Default content:

			local-zone: "service.arpa." static
			local-data: "service.arpa. 10800 IN NS localhost."
			local-data: "service.arpa. 10800 IN SOA	localhost. nobody.invalid. 1 3600 1200 604800 10800"

	      onion (RFC 7686)
		     Default content:

			local-zone: "onion." static
			local-data: "onion. 10800 IN NS	localhost."
			local-data: "onion. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200	604800 10800"

	      test (RFC	6761)
		     Default content:

			local-zone: "test." static
			local-data: "test. 10800 IN NS localhost."
			local-data: "test. 10800 IN SOA	localhost. nobody.invalid. 1 3600 1200 604800 10800"

	      invalid (RFC 6761)
		     Default content:

			local-zone: "invalid." static
			local-data: "invalid. 10800 IN NS localhost."
			local-data: "invalid. 10800 IN SOA localhost. nobody.invalid. 1	3600 1200 604800 10800"

	      reverse local use	zones (RFC 1918)
		     Reverse	  data	    for	    zones     10.in-addr.arpa,
		     16.172.in-addr.arpa	to	  31.172.in-addr.arpa,
		     168.192.in-addr.arpa.   The  local-zone is	set static and
		     as	local-data SOA and NS records are provided.

	      special-use IPv4 Addresses (RFC 3330)
		     Reverse   data   for   zones    0.in-addr.arpa    (this),
		     254.169.in-addr.arpa  (link-local),  2.0.192.in-addr.arpa
		     (TEST  NET	 1),  100.51.198.in-addr.arpa  (TEST  NET  2),
		     113.0.203.in-addr.arpa	   (TEST	NET	   3),
		     255.255.255.255.in-addr.arpa   (broadcast).    And	  from
		     64.100.in-addr.arpa  to  127.100.in-addr.arpa (Shared Ad-
		     dress Space).

	      reverse IPv6 unspecified (RFC 4291)
		     Reverse		 data		  for		  zone
		     0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.

	      reverse IPv6 Locally Assigned Local Addresses (RFC 4193)
		     Reverse data for zone D.F.ip6.arpa.

	      reverse IPv6 Link	Local Addresses	(RFC 4291)
		     Reverse data for zones 8.E.F.ip6.arpa to B.E.F.ip6.arpa.

	      reverse IPv6 Example Prefix
		     Reverse  data  for	 zone  8.B.D.0.1.0.0.2.ip6.arpa.  This
		     zone is used for tutorials	and examples.  You can	remove
		     the block on this zone with:

			local-zone: 8.B.D.0.1.0.0.2.ip6.arpa. nodefault

	      You  can	also  selectively unblock a part of the	zone by	making
	      that part	transparent with a local-zone  statement.   This  also
	      works with the other default zones.

       local-data: "<resource record string>"
	      Configure	 local	data,  which is	served in reply	to queries for
	      it.  The query has to match exactly  unless  you	configure  the
	      local-zone  as redirect.	If not matched exactly,	the local-zone
	      type determines further processing.  If local-data is configured
	      that is not a subdomain  of  a  local-zone,  a  transparent  lo-
	      cal-zone	is configured.	For record types such as TXT, use sin-
	      gle quotes, as in:

		 local-data: 'example. TXT "text"'

	      NOTE:
		 If you	need more complicated authoritative data, with	refer-
		 rals, wildcards, CNAME/DNAME support, or DNSSEC authoritative
		 service,  setup  a  stub-zone	for it as detailed in the stub
		 zone section below.

       local-data-ptr: "IPaddr name"
	      Configure	local data shorthand for a PTR	record	with  the  re-
	      versed  IPv4  or	IPv6  address  and the host name.  For example
	      "192.0.2.4 www.example.com".  TTL	can  be	 inserted  like	 this:
	      "2001:db8::4 7200	www.example.com"

       local-zone-tag: <zone> <"list of	tags">
	      Assign  tags to local zones.  Tagged localzones will only	be ap-
	      plied when the used access-control element has a	matching  tag.
	      Tags  must  be  defined  in define-tag.  Enclose list of tags in
	      quotes ("") and put spaces between tags.	When there are	multi-
	      ple  tags	 it checks if the intersection of the list of tags for
	      the query	and local-zone-tag is non-empty.

       local-zone-override: <zone> <IP netblock> <type>
	      Override the local zone type for queries from addresses matching
	      netblock.	 Use this localzone type, regardless the type  config-
	      ured  for	 the local zone	(both tagged and untagged) and regard-
	      less the type configured using access-control-tag-action.

       response-ip: <IP-netblock> <action>
	      This requires use	of the respip module.

	      If the IP	address	in an AAAA or A	RR in the answer section of  a
	      response matches the specified IP	netblock, the specified	action
	      will  apply.   <action> has generally the	same semantics as that
	      for access-control-tag-action, but there are some	exceptions.

	      Actions for response-ip are different from those for  local-zone
	      in  that	in case	of the former there is no point	of such	condi-
	      tions as "the query matches it but there is no local data".  Be-
	      cause of this difference,	the semantics of  response-ip  actions
	      are  modified  or	 simplified  as	 follows:  The static, refuse,
	      transparent, typetransparent, and	nodefault actions are  invalid
	      for  response-ip.	  Using	any of these will cause	the configura-
	      tion to be rejected as faulty.  The deny	action	is  non-condi-
	      tional,  i.e.  it	 always	 results in dropping the corresponding
	      query.  The resolution result before applying the	deny action is
	      still cached and can be used for other queries.

       response-ip-data: <IP-netblock> <"resource record string">
	      This requires use	of the respip module.

	      This specifies the action	data for response-ip with action being
	      to redirect as specified by <"resource record  string">.	 <"Re-
	      source	record	  string">    is    similar    to    that   of
	      access-control-tag-data, but it must be of  either  AAAA,	 A  or
	      CNAME  types.   If the <IP-netblock> is an IPv6/IPv4 prefix, the
	      record must be AAAA/A respectively, unless it is a CNAME	(which
	      can  be used for both versions of	IP netblocks).	If it is CNAME
	      there must not be	more than one response-ip-data	for  the  same
	      <IP-netblock>.   Also, CNAME and other types of records must not
	      coexist for the same <IP-netblock>, following the	 normal	 rules
	      for  CNAME  records.  The	textual	domain name for	the CNAME does
	      not have to be explicitly	terminated with	a dot ("."); the  root
	      name is assumed to be the	origin for the name.

       response-ip-tag:	<IP-netblock> <"list of	tags">
	      This requires use	of the respip module.

	      Assign  tags to response <IP-netblock>.  If the IP address in an
	      AAAA or A	RR in the answer section of  a	response  matches  the
	      specified	 <IP-netblock>,	the specified tags are assigned	to the
	      IP address.  Then, if an access-control-tag is defined  for  the
	      client  and it includes one of the tags for the response IP, the
	      corresponding access-control-tag-action will apply.  Tag	match-
	      ing  rule	 is  the  same	as  that  for  access-control-tag  and
	      local-zone.  Unlike local-zone-tag, response-ip-tag can  be  de-
	      fined for	an <IP-netblock> even if no response-ip	is defined for
	      that  netblock.	If multiple response-ip-tag options are	speci-
	      fied for the same	<IP-netblock> in different statements, all but
	      the first	will be	ignored.  However, this	will not be flagged as
	      a	configuration error, but the result is probably	not  what  was
	      intended.

	      Actions  specified  in  an  access-control-tag-action that has a
	      matching tag with	response-ip-tag	can be	those  that  are  "in-
	      valid"	  for	   response-ip	   listed     above,	 since
	      access-control-tag-action	can be shared with local  zones.   For
	      these  actions,  if they behave differently depending on whether
	      local data exists	or not in case of local	 zones,	 the  behavior
	      for response-ip-data will	generally result in NOERROR/NODATA in-
	      stead  of	 NXDOMAIN,  since  the response-ip data	are inherently
	      type specific, and non-existence of data does not	indicate  any-
	      thing  about the existence or non-existence of the qname itself.
	      For example, if the matching tag action is static	but  there  is
	      no  data	for  the corresponding response-ip configuration, then
	      the result will be NOERROR/NODATA.  The only case	where NXDOMAIN
	      is returned is when an always_nxdomain action applies.

       ratelimit: <number or 0>
	      Enable ratelimiting of queries sent to nameserver	for performing
	      recursion.  0 disables the feature.  This	option is experimental
	      at this time.

	      The ratelimit is in queries per second that are  allowed.	  More
	      queries  are  turned  away with an error (SERVFAIL).  Cached re-
	      sponses are not ratelimited by this setting.

	      This stops recursive floods, eg. random  query  names,  but  not
	      spoofed  reflection floods.  The zone of the query is determined
	      by examining the nameservers for it, the zone name  is  used  to
	      keep  track  of  the  rate.  For example,	1000 may be a suitable
	      value to stop the	 server	 from  being  overloaded  with	random
	      names, and keeps unbound from sending traffic to the nameservers
	      for those	zones.

	      NOTE:
		 Configured forwarders are excluded from ratelimiting.

	      Default: 0

       ratelimit-size: <memory size>
	      Give the size of the data	structure in which the current ongoing
	      rates  are  kept	track  in.   In	bytes or use m(mega), k(kilo),
	      g(giga).	The ratelimit structure	is small, so this data	struc-
	      ture likely does not need	to be large.

	      Default: 4m

       ratelimit-slabs:	<number>
	      Number of	slabs in the ratelimit tracking	data structure.	 Slabs
	      reduce lock contention by	threads.  Must be set to a power of 2.
	      Setting  (close) to the number of	cpus is	a fairly good setting.
	      If left unconfigured, it will be configured automatically	to  be
	      a	 power	of  2  close  to  the  number of configured threads in
	      multi-threaded environments.

	      Default: (unconfigured)

       ratelimit-factor: <number>
	      Set the amount of	queries	to rate	limit when the	limit  is  ex-
	      ceeded.	If set to 0, all queries are dropped for domains where
	      the limit	is exceeded.  If set to	another	value, 1 in that  num-
	      ber  is  allowed	through	 to complete.  Default is 10, allowing
	      1/10 traffic to flow normally.  This can make  ordinary  queries
	      complete	(if  repeatedly	 queried  for),	 and  enter the	cache,
	      whilst also mitigating the traffic flow by the factor given.

	      Default: 10

       ratelimit-backoff: <yes or no>
	      If enabled, the ratelimit	is treated as a	hard  failure  instead
	      of the default maximum allowed constant rate.  When the limit is
	      reached,	traffic	is ratelimited and demand continues to be kept
	      track of for a 2 second rate window.  No traffic is allowed, ex-
	      cept for ratelimit-factor, until demand decreases	below the con-
	      figured ratelimit	for a 2	second rate  window.   Useful  to  set
	      ratelimit	 to  a suspicious rate to aggressively limit unusually
	      high traffic.

	      Default: no

       ratelimit-for-domain: <domain> <number qps or 0>
	      Override the global ratelimit for	an  exact  match  domain  name
	      with  the	 listed	 number.   You can give	this for any number of
	      names.  For example, for a top-level-domain you may want to have
	      a	higher limit than other	names.	A  value  of  0	 will  disable
	      ratelimiting for that domain.

       ratelimit-below-domain: <domain>	<number	qps or 0>
	      Override	the  global  ratelimit	for a domain name that ends in
	      this name.  You can give this multiple times, it then  describes
	      different	 settings  in  different  parts	of the namespace.  The
	      closest matching suffix is used to determine the qps limit.  The
	      rate for the exact matching domain  name	is  not	 changed,  use
	      ratelimit-for-domain  to set that, you might want	to use differ-
	      ent settings for a top-level-domain and subdomains.  A value  of
	      0	 will  disable	ratelimiting for domain	names that end in this
	      name.

       ip-ratelimit: <number or	0>
	      Enable global ratelimiting of queries accepted per  ip  address.
	      This  option  is experimental at this time.  The ratelimit is in
	      queries per second that are  allowed.   More  queries  are  com-
	      pletely dropped and will not receive a reply, SERVFAIL or	other-
	      wise.   IP  ratelimiting	happens	 before	 looking in the	cache.
	      This  may	 be  useful  for  mitigating  amplification   attacks.
	      Clients with a valid DNS Cookie will bypass the ratelimit.  If a
	      ratelimit	 for such clients is still needed, ip-ratelimit-cookie
	      can be used instead.

	      Default: 0 (disabled)

       ip-ratelimit-cookie: <number or 0>
	      Enable global ratelimiting of queries accepted  per  IP  address
	      with  a  valid  DNS Cookie.  This	option is experimental at this
	      time.  The ratelimit is in queries per second that are  allowed.
	      More  queries  are completely dropped and	will not receive a re-
	      ply, SERVFAIL or	otherwise.   IP	 ratelimiting  happens	before
	      looking  in  the cache.  This option could be useful in combina-
	      tion with	allow_cookie, in an attempt to mitigate	other amplifi-
	      cation attacks than UDP reflections (e.g., attacks targeting Un-
	      bound itself) which are already handled with  DNS	 Cookies.   If
	      used,  the  value	 is  suggested	to be higher than ip-ratelimit
	      e.g., tenfold.

	      Default: 0 (disabled)

       ip-ratelimit-size: <memory size>
	      Give the size of the data	structure in which the current ongoing
	      rates are	kept track in.	In  bytes  or  use  m(mega),  k(kilo),
	      g(giga).	 The  IP  ratelimit  structure	is small, so this data
	      structure	likely does not	need to	be large.

	      Default: 4m

       ip-ratelimit-slabs: <number>
	      Number of	slabs in the ip	 ratelimit  tracking  data  structure.
	      Slabs reduce lock	contention by threads.	Must be	set to a power
	      of  2.   Setting	(close)	to the number of cpus is a fairly good
	      setting.	If left	unconfigured, it will be configured  automati-
	      cally  to	 be  a	power  of  2 close to the number of configured
	      threads in multi-threaded	environments.

	      Default: (unconfigured)

       ip-ratelimit-factor: <number>
	      Set the amount of	queries	to rate	limit when the	limit  is  ex-
	      ceeded.	If  set	 to  0,	 all queries are dropped for addresses
	      where the	limit is exceeded.  If set to another value, 1 in that
	      number is	allowed	through	to complete.  Default is 10,  allowing
	      1/10  traffic  to	flow normally.	This can make ordinary queries
	      complete (if repeatedly  queried	for),  and  enter  the	cache,
	      whilst also mitigating the traffic flow by the factor given.

	      Default: 10

       ip-ratelimit-backoff: <yes or no>
	      If  enabled, the rate limit is treated as	a hard failure instead
	      of the default maximum allowed constant rate.  When the limit is
	      reached, traffic is ratelimited and demand continues to be  kept
	      track of for a 2 second rate window.  No traffic is allowed, ex-
	      cept  for	 ip-ratelimit-factor, until demand decreases below the
	      configured ratelimit for a 2 second rate window.	Useful to  set
	      ip-ratelimit  to	a suspicious rate to aggressively limit	unusu-
	      ally high	traffic.

	      Default: no

       outbound-msg-retry: <number>
	      The number of retries, per upstream nameserver in	a  delegation,
	      that  Unbound  will  attempt in case a throwaway response	is re-
	      ceived.  No response (timeout) contributes to the	retry counter.
	      If a forward/stub	zone is	used, this is the  number  of  retries
	      per nameserver in	the zone.

	      Default: 5

       max-sent-count: <number>
	      Hard  limit  on the number of outgoing queries Unbound will make
	      while resolving a	name, making sure large	NS sets	do  not	 loop.
	      Results  in  SERVFAIL when reached.  It resets on	query restarts
	      (e.g., CNAME) and	referrals.

	      Default: 32

       max-query-restarts: <number>
	      Hard limit on the	number of times	Unbound	is allowed to  restart
	      a	 query	upon encountering a CNAME record.  Results in SERVFAIL
	      when reached.  This applies to chained  CNAME  records  but  not
	      sporadic CNAME records that could	be encountered in the lifetime
	      of the query's resolution	effort.	 When a	CNAME chain concludes,
	      the counter keeping track	of this	limit is reset.	 Changing this
	      value  needs caution as it can allow long	CNAME chains to	be ac-
	      cepted, where Unbound needs to verify (resolve) each link	 indi-
	      vidually.

	      Default: 11

       iter-scrub-ns: <number>
	      Limit  on	 the  number of	NS records allowed in an rrset of type
	      NS, from the iterator scrubber.  This protects the internals  of
	      the resolver from	overly large NS	sets.

	      Default: 20

       iter-scrub-cname: <number>
	      Limit  on	 the number of CNAME, DNAME records in an answer, from
	      the iterator scrubber.  This protects the	internals of  the  re-
	      solver  from  overly long	indirection chains.  Clips off the re-
	      mainder of the reply packet at that point.

	      Default: 11

       iter-scrub-rrsig: <number>
	      Limit on the number of RRSIGs allowed for	an RRset, from the it-
	      erator scrubber.	This protects against an overly	 large	number
	      of  RRSIGs.   Clips  off the remainder of	the RRSIG list at that
	      point.

	      Default: 8

       max-global-quota: <number>
	      Limit on the number of upstream queries sent out for an incoming
	      query and	its subqueries from recursion.	It is not reset	during
	      the resolution.  When it is exceeded the query is	failed and the
	      lookup process stops.

	      Default: 200

       iter-scrub-promiscuous: <yes or no>
	      Should the iterator scrubber remove promiscuous NS from positive
	      answers.	This protects against poisonous	contents,  that	 could
	      affect names in the same zone as a spoofed packet.

	      Default: yes

       fast-server-permil: <number>
	      Specify  how  many  times	 out  of  1000 to pick from the	set of
	      fastest servers.	0 turns	the feature off.  A value of 900 would
	      pick from	the fastest servers 90 percent of the time, and	 would
	      perform  normal  exploration of random servers for the remaining
	      time.   When  prefetch  is  enabled  (or	serve-expired),	  such
	      prefetches  are not sped up, because there is no one waiting for
	      it, and it presents a good moment	to perform server exploration.
	      The fast-server-num option can be	used to	specify	 the  size  of
	      the fastest servers set.

	      Default: 0

       fast-server-num:	<number>
	      Set  the	number	of servers that	should be used for fast	server
	      selection.  Only use the fastest	specified  number  of  servers
	      with the fast-server-permil option, that turns this on or	off.

	      Default: 3

       answer-cookie: <yes or no>
	      If enabled, Unbound will answer to requests containing DNS Cook-
	      ies as specified in RFC 7873 and RFC 9018.

	      Default: no

       cookie-secret: "<128 bit	hex string>"
	      Server's secret for DNS Cookie generation.  Useful to explicitly
	      set  for servers in an anycast deployment	that need to share the
	      secret in	order to verify	each other's Server Cookies.  An exam-
	      ple hex string would be "000102030405060708090a0b0c0d0e0f".

	      NOTE:
		 This option is	ignored	if a  cookie-secret-file  is  present.
		 In  that  case	 the  secrets  from  that file are used	in DNS
		 Cookie	calculations.

	      Default: 128 bits	random secret generated	at startup time

       cookie-secret-file: <filename>
	      File from	which the secrets are read used	in DNS Cookie calcula-
	      tions.  When this	file exists, the secrets in this file are used
	      and the secret specified by the cookie-secret option is ignored.
	      Enable  it  by  setting  a  filename,  like  "/usr/local/etc/un-
	      bound_cookiesecrets.txt".	  The content of this file must	be ma-
	      nipulated	with  the  add_cookie_secret,  drop_cookie_secret  and
	      activate_cookie_secret  commands to the unbound-control(8) tool.
	      Please see that manpage on how to	perform	a safe	cookie	secret
	      rollover.

	      Default: "" (disabled)

       edns-client-string: <IP netblock> <string>
	      Include  an  EDNS0  option containing configured ASCII string in
	      queries with destination address	matching  the  configured  <IP
	      netblock>.   This	 configuration	option	can  be	 used multiple
	      times.  The most specific	match will be used.

       edns-client-string-opcode: <opcode>
	      EDNS0 option code	for the	edns-client-string option, from	 0  to
	      65535.  A	value from the 'Reserved for Local/Experimental' range
	      (65001-65534) should be used.

	      Default: 65001

       ede: <yes or no>
	      If  enabled,  Unbound will respond with Extended DNS Error codes
	      (RFC 8914).  These EDEs provide additional  information  with  a
	      response mainly for, but not limited to, DNS and DNSSEC errors.

	      When  the	 val-log-level option is also set to 2,	responses with
	      Extended DNS Errors concerning DNSSEC failures will also contain
	      a	descriptive text message about the reason for the failure.

	      Default: no

       ede-serve-expired: <yes or no>
	      If enabled, Unbound will attach an Extended DNS Error (RFC 8914)
	      Code 3 - Stale Answer as EDNS0 option to the expired response.

	      NOTE:
		 ede: yes needs	to be set as well for this to work.

	      Default: no

       dns-error-reporting: <yes or no>
	      If enabled, Unbound will send DNS	Error Reports (RFC 9567).  The
	      name servers need	 to  express  support  by  attaching  the  Re-
	      port-Channel  EDNS0  option  on their replies specifying the re-
	      porting agent for	the zone.  Any errors encountered during reso-
	      lution that would	result in Unbound generating an	 Extended  DNS
	      Error (RFC 8914) will be reported	to the zone's reporting	agent.

	      The ede option does not need to be enabled for this to work.

	      It is advised that the qname-minimisation	option is also enabled
	      to increase privacy on the outgoing reports.

	      Default: no

REMOTE CONTROL OPTIONS
       These  options are part of the remote-control: section and are the dec-
       larations for the remote	control	facility.

       If this is enabled, the unbound-control(8) utility can be used to  send
       commands	 to the	running	Unbound	server.	 The server uses these options
       to setup	TLS security for the connection.  The unbound-control(8) util-
       ity also	reads this remote-control: section for options.	 To setup  the
       correct self-signed certificates	use the	unbound-control-setup(8) util-
       ity.

       control-enable: <yes or no>
	      The option is used to enable remote control.  If turned off, the
	      server does not listen for control commands.

	      Default: no

       control-interface: <IP address or interface name[@port] or path>
	      Give  IPv4  or  IPv6 addresses or	local socket path to listen on
	      for control commands.  If	an interface name is used  instead  of
	      an  IP  address,	the list of IP addresses on that interface are
	      used.

	      By default localhost (127.0.0.1 and ::1) is  listened  to.   Use
	      0.0.0.0 and ::0 to listen	to all interfaces.  If you change this
	      and  permissions	have been dropped, you must restart the	server
	      for the change to	take effect.

	      If you set it to an absolute path, a unix	domain socket is used.
	      This socket does not use the certificates	 and  keys,  so	 those
	      files  need  not	be  present.  To restrict access, Unbound sets
	      permissions on the file to the user and group  that  is  config-
	      ured,  the access	bits are set to	allow the group	members	to ac-
	      cess the control socket file.  Put users that need to access the
	      socket in	the that group.	 To restrict access further, create  a
	      directory	 to  put  the control socket in	and restrict access to
	      that directory.

       control-port: <port number>
	      The port number to listen	on for IPv4  or	 IPv6  control	inter-
	      faces.

	      NOTE:
		 If  you  change  this	and permissions	have been dropped, you
		 must restart the server for the change	to take	effect.

	      Default: 8953

       control-use-cert: <yes or no>
	      For localhost control-interface you can disable the use  of  TLS
	      by  setting this option to "no".	For local sockets, TLS is dis-
	      abled and	the value of this option is ignored.

	      Default: yes

       server-key-file:	<private key file>
	      Path to the server private key.  This file is generated  by  the
	      unbound-control-setup(8)	utility.  This file is used by the Un-
	      bound server, but	not by unbound-control(8).

	      Default: unbound_server.key

       server-cert-file: <certificate file.pem>
	      Path to the server self signed certificate.  This	file is	gener-
	      ated by the unbound-control-setup(8) utility.  This file is used
	      by the Unbound server, and also by unbound-control(8).

	      Default: unbound_server.pem

       control-key-file: <private key file>
	      Path to the control client private key.  This file is  generated
	      by  the  unbound-control-setup(8)	utility.  This file is used by
	      unbound-control(8).

	      Default: unbound_control.key

       control-cert-file: <certificate file.pem>
	      Path to the control client certificate.  This certificate	has to
	      be signed	with the server	certificate.  This file	 is  generated
	      by  the  unbound-control-setup(8)	utility.  This file is used by
	      unbound-control(8).

	      Default: unbound_control.pem

STUB ZONE OPTIONS
       These options are part of the stub-zone:	section.

       There may be multiple stub-zone:	sections.  Each	with a name  and  zero
       or  more	 hostnames  or	IP  addresses.	For the	stub zone this list of
       nameservers is used.  Class IN is assumed.  The servers should  be  au-
       thority servers,	not recursors; Unbound performs	the recursive process-
       ing itself for stub zones.

       The stub	zone can be used to configure authoritative data to be used by
       the resolver that cannot	be accessed using the public internet servers.
       This  is	 useful	for company-local data or private zones.  Setup	an au-
       thoritative server on a different host (or different  port).   Enter  a
       config entry for	Unbound	with:

	  stub-addr: <ip address of host[@port]>

       The Unbound resolver can	then access the	data, without referring	to the
       public internet for it.

       This  setup  allows DNSSEC signed zones to be served by that authorita-
       tive server, in which case a trusted key	entry with the public key  can
       be  put in config, so that Unbound can validate the data	and set	the AD
       bit on replies for the private zone (authoritative servers do  not  set
       the AD bit).  This setup	makes Unbound capable of answering queries for
       the private zone, and can even set the AD bit ('authentic'), but	the AA
       ('authoritative') bit is	not set	on these replies.

       Consider	  adding   server   statements	for  domain-insecure  and  for
       local-zone: <name> nodefault for	the zone if it	is  a  locally	served
       zone.   The  domain-insecure  option stops DNSSEC from invalidating the
       zone.  The local-zone: nodefault	(or transparent) option	makes the (re-
       verse-) zone bypass Unbound's filtering of RFC 1918 zones.

       name: <domain name>
	      Name of the stub zone.  This is the  full	 domain	 name  of  the
	      zone.

       stub-host: <domain name>
	      Name  of	stub zone nameserver.  Is itself resolved before it is
	      used.

	      CAUTION:
		 If the	domain (or a subdomain)	from this zone is used as  the
		 host,	it will	unavoidably introduce a	circular dependency on
		 retrieving the	IP addresses of	 the  name  server.   In  that
		 case,	it  is	suggested  to use stub-addr instead.  Alterna-
		 tively, stub-first: yes can also work around the circular de-
		 pendency by trying resolution outside of this zone.   However
		 this  has  the	 caveat	that it	would allow escaping this zone
		 when any resolution attempt fails within this zone.

	      To use a non-default port	for DNS	communication append '@'  with
	      the port number.

	      If  TLS  is  enabled, then you can append	a '#' and a name, then
	      it'll check the TLS authentication certificates with that	name.

	      If you combine the '@' and '#', the '@' comes  first.   If  only
	      '#' is used the default port is the configured tls-port.

       stub-addr: <IP address>
	      IP address of stub zone nameserver.  Can be IPv4 or IPv6.

	      To  use a	non-default port for DNS communication append '@' with
	      the port number.

	      If TLS is	enabled, then you can append a '#' and	a  name,  then
	      it'll check the tls authentication certificates with that	name.

	      If  you  combine	the '@'	and '#', the '@' comes first.  If only
	      '#' is used the default port is the configured tls-port.

       stub-prime: <yes	or no>
	      If enabled it performs NS	set priming, which is similar to  root
	      hints,  where  it	starts using the list of nameservers currently
	      published	by the zone.  Thus, if the hint	list is	slightly  out-
	      dated, the resolver picks	up a correct list online.

	      Default: no

       stub-first: <yes	or no>
	      If enabled, a query is attempted without this stub section if it
	      fails.   The  data  could	not be retrieved and would have	caused
	      SERVFAIL because the servers  are	 unreachable,  instead	it  is
	      tried  without  this  stub section.  This	can lead to using less
	      specific configured forward/stub/auth zones if any, or end up to
	      otherwise	normal recursive resolution for	that particular	query.

	      Default: no

       stub-tls-upstream: <yes or no>
	      Enabled or disable whether the queries to	this stub use TLS  for
	      transport.

	      Default: no

       stub-ssl-upstream: <yes or no>
	      Alternate	syntax for stub-tls-upstream.

       stub-tcp-upstream: <yes or no>
	      If  it  is  set  to "yes"	then upstream queries use TCP only for
	      transport	regardless of global flag tcp-upstream.

	      Default: no

       stub-no-cache: <yes or no>
	      If enabled, data inside the stub is not cached.  This is	useful
	      when you want immediate changes to be visible.

	      Default: no

FORWARD	ZONE OPTIONS
       These options are part of the forward-zone: section.

       There  may  be  multiple	 forward-zone: sections.  Each with a name and
       zero or more hostnames or IP addresses.	For the	forward	zone this list
       of nameservers is used to forward the queries to.  The  servers	listed
       as  forward-host	 and forward-addr have to handle further recursion for
       the query.  Thus, those servers are  not	 authority  servers,  but  are
       (just  like Unbound is) recursive servers too; Unbound does not perform
       recursion itself	for the	forward	zone, it lets the remote server	do it.
       Class IN	is assumed.  CNAMEs are	chased by Unbound itself,  asking  the
       remote  server  for every name in the indirection chain,	to protect the
       local cache from	illegal	indirect referenced items.  A forward-zone en-
       try with	name "." and a forward-addr target will	forward	all queries to
       that other server (unless it can	answer from the	cache).

       name: <domain name>
	      Name of the forward zone.	 This is the full domain name  of  the
	      zone.

       forward-host: <domain name>
	      Name  of	server to forward to.  Is itself resolved before it is
	      used.

	      CAUTION:
		 If the	domain (or a subdomain)	from this zone is used as  the
		 host,	it will	unavoidably introduce a	circular dependency on
		 retrieving the	IP addresses of	 the  name  server.   In  that
		 case,	it is suggested	to use forward-addr instead.  Alterna-
		 tively, forward-first:	yes can	also work around the  circular
		 dependency  by	 trying	resolution outside of this zone.  How-
		 ever this has the caveat that it would	 allow	escaping  this
		 zone when any resolution attempt fails	within this zone.

	      To  use a	non-default port for DNS communication append '@' with
	      the port number.

	      If TLS is	enabled, then you can append a '#' and	a  name,  then
	      it'll check the TLS authentication certificates with that	name.

	      If  you  combine	the '@'	and '#', the '@' comes first.  If only
	      '#' is used the default port is the configured tls-port.

       forward-addr: <IP address>
	      IP address of server to forward to.  Can be IPv4 or IPv6.

	      To use a non-default port	for DNS	communication append '@'  with
	      the port number.

	      If  TLS  is  enabled, then you can append	a '#' and a name, then
	      it'll check the tls authentication certificates with that	name.

	      If you combine the '@' and '#', the '@' comes  first.   If  only
	      '#' is used the default port is the configured tls-port.

	      At high verbosity	it logs	the TLS	certificate, with TLS enabled.
	      If  you  leave  out the '#' and auth name	from the forward-addr,
	      any name is accepted.  The cert must also	match a	 CA  from  the
	      tls-cert-bundle.

       forward-first: <yes or no>
	      If  a  forwarded query is	met with a SERVFAIL error and this op-
	      tion is enabled Unbound will fall	back to	less specific  resolu-
	      tion.   This  can	 lead  to  using less specific configured for-
	      ward/stub/auth zones if any, or end up to	otherwise  normal  re-
	      cursive resolution for that particular query.

	      Default: no

       forward-tls-upstream: <yes or no>
	      Enabled or disable whether the queries to	this forwarder use TLS
	      for   transport.	  If   you   enable  this,  also  configure  a
	      tls-cert-bundle or use tls-win-cert to load CA certs,  otherwise
	      the connections cannot be	authenticated.

	      Default: no

       forward-ssl-upstream: <yes or no>
	      Alternate	syntax for forward-tls-upstream.

       forward-tcp-upstream: <yes or no>
	      If  it  is  set  to "yes"	then upstream queries use TCP only for
	      transport	regardless of global flag tcp-upstream.

	      Default: no

       forward-no-cache: <yes or no>
	      If enabled, data inside the forward is not cached.  This is use-
	      ful when you want	immediate changes to be	visible.

	      Default: no

AUTHORITY ZONE OPTIONS
       These options are part of the auth-zone:	section.

       Authority zones are configured with auth-zone:, and each	one must  have
       a name.	There can be multiple ones, by listing multiple	auth-zone sec-
       tion  clauses,  each  with a different name, pertaining to that part of
       the namespace.  The authority zone with the name	closest	 to  the  name
       looked  up  is used.  Authority zones can be processed on two distinct,
       non-exclusive, configurable stages.

       With for-downstream: yes	(default), authority zones are processed after
       local-zones and before cache.  When used	in this	 manner,  Unbound  re-
       sponds  like  an	authority server with no further processing other than
       returning an answer from	the zone contents.  A notable example, in this
       case, is	CNAME  records	which  are  returned  verbatim	to  downstream
       clients without further resolution.

       With  for-upstream:  yes	(default), authority zones are processed after
       the cache lookup, just before going to the network to fetch information
       for recursion.  When used in this manner	they provide a local  copy  of
       an authority server that	speeds up lookups for that data	during resolv-
       ing.

       If  both	options	are enabled (default), client queries for an authority
       zone are	answered authoritatively from Unbound, while internal  queries
       that  require  data from	the authority zone consult the local zone data
       instead of going	to the network.

       An interesting configuration is for-downstream: no,  for-upstream:  yes
       that  allows  for  hyperlocal  behavior	where both client and internal
       queries consult the local zone data while resolving.  In	this case, the
       aforementioned CNAME example will result	in a thoroughly	 resolved  an-
       swer.

       Authority  zones	 can be	read from a zonefile.  And can be kept updated
       via AXFR	and IXFR.  After update	the zonefile is	rewritten.  The	update
       mechanism uses the SOA timer values and performs	SOA UDP	queries	to de-
       tect zone changes.

       If the update fetch fails, the timers in	the SOA	 record	 are  used  to
       time  another  fetch  attempt.	Until the SOA expiry timer is reached.
       Then the	zone is	expired.  When a zone is expired,  queries  are	 SERV-
       FAIL,  and  any new serial number is accepted from the primary (even if
       older), and if fallback is enabled, the	fallback  activates  to	 fetch
       from the	upstream instead of the	SERVFAIL.

       name: <zone name>
	      Name of the authority zone.

       primary:	<IP address or host name>
	      Where  to	 download a copy of the	zone from, with	AXFR and IXFR.
	      Multiple primaries can be	specified.  They are all tried if  one
	      fails.

	      To  use a	non-default port for DNS communication append '@' with
	      the port number.

	      You can append a '#' and a name, then AXFR over TLS can be  used
	      and  the	TLS  authentication  certificates will be checked with
	      that name.

	      If you combine the '@' and '#', the '@'  comes  first.   If  you
	      point  it	at another Unbound instance, it	would not work because
	      that does	not support AXFR/IXFR for the zone, but	 if  you  used
	      url  to  download	 the  zonefile as a text file from a webserver
	      that would work.

	      CAUTION:
		 If you	specify	the hostname, you cannot use the  domain  from
		 the  zonefile,	 because  it may not have that when retrieving
		 that data, instead use	a plain	IP address to avoid a circular
		 dependency on retrieving that IP address.

       master: <IP address or host name>
	      Alternate	syntax for primary.

       url: <URL to zone file>
	      Where to download	a zonefile for the zone.  With HTTP or	HTTPS.
	      An example for the url is:

		 http://www.example.com/example.org.zone

	      Multiple url statements can be given, they are tried in turn.

	      If only urls are given the SOA refresh timer is used to wait for
	      making  new  downloads.	If also	primaries are listed, the pri-
	      maries are first probed with UDP SOA queries to see if  the  SOA
	      serial number has	changed, reducing the number of	downloads.  If
	      none  of	the  urls  work, the primaries are tried with IXFR and
	      AXFR.

	      For HTTPS, the tls-cert-bundle and the hostname from the url are
	      used to authenticate the connection.

	      If you specify a hostname	in the URL, you	cannot use the	domain
	      from  the	zonefile, because it may not have that when retrieving
	      that data, instead use a plain IP	address	to  avoid  a  circular
	      dependency on retrieving that IP address.

	      Avoid  dependencies  on  name  lookups  by using a notation like
	      "http://192.0.2.1/unbound-primaries/example.com.zone",  with  an
	      explicit IP address.

       allow-notify: <IP address or host name or netblockIP/prefix>
	      With  allow-notify  you  can specify additional sources of noti-
	      fies.  When notified, the	server attempts	 to  first  probe  and
	      then  zone  transfer.  If	the notify is from a primary, it first
	      attempts that primary.  Otherwise	other primaries	are attempted.
	      If there are no primaries, but only urls,	the file is downloaded
	      when notified.

	      NOTE:
		 The primaries from primary and	url statements are allowed no-
		 tify by default.

       fallback-enabled: <yes or no>
	      If enabled, Unbound falls	back to	querying the internet as a re-
	      solver for this zone when	lookups	fail.  For example for	DNSSEC
	      validation failures.

	      Default: no

       for-downstream: <yes or no>
	      If  enabled,  Unbound  serves  authority responses to downstream
	      clients for this zone.  This option makes	 Unbound  behave,  for
	      the  queries  with names in this zone, like one of the authority
	      servers for that zone.

	      Turn it off if you want Unbound to  provide  recursion  for  the
	      zone but have a local copy of zone data.

	      If  for-downstream:  no  and for-upstream: yes are set, then Un-
	      bound will DNSSEC	validate the contents of the zone before serv-
	      ing the zone contents to clients and store validation results in
	      the cache.

	      Default: yes

       for-upstream: <yes or no>
	      If enabled, Unbound fetches data from this data  collection  for
	      answering	 recursion  queries.   Instead of sending queries over
	      the internet to the authority servers for	this zone, it'll fetch
	      the data directly	from the zone data.

	      Turn it on when you want Unbound to provide recursion for	 down-
	      stream  clients,	and use	the zone data as a local copy to speed
	      up lookups.

	      Default: yes

       zonemd-check: <yes or no>
	      Enable this option to check ZONEMD records  in  the  zone.   The
	      ZONEMD  record  is a checksum over the zone data.	 This includes
	      glue in the zone and data	from the zone file, and	excludes  com-
	      ments  from  the	zone  file.   When  there is a DNSSEC chain of
	      trust, DNSSEC signatures are checked too.

	      Default: no

       zonemd-reject-absence: <yes or no>
	      Enable this option to reject the absence of the  ZONEMD  record.
	      Without it, when ZONEMD is not there it is not checked.

	      It  is  useful  to enable	for a non-DNSSEC signed	zone where the
	      operator wants to	require	the verification of a ZONEMD, hence  a
	      missing ZONEMD is	a failure.

	      The    action    upon    failure	  is	controlled    by   the
	      zonemd-permissive-mode option, for log only or  also  block  the
	      zone.

	      Without  the  option, absence of a ZONEMD	is only	a failure when
	      the zone is DNSSEC signed, and we	have a trust anchor,  and  the
	      DNSSEC  verification  of	the absence of the ZONEMD fails.  With
	      the option enabled, the absence of a ZONEMD is always a failure,
	      also for nonDNSSEC signed	zones.

	      Default: no

       zonefile: <filename>
	      The filename where the zone is stored.  If  not  given  then  no
	      zonefile	is  used.  If the file does not	exist or is empty, Un-
	      bound will attempt to fetch zone	data  (eg.  from  the  primary
	      servers).

VIEW OPTIONS
       These options are part of the view: section.

       There  may  be  multiple	 view: sections.  Each with a name and zero or
       more  local-zone	 and  local-data  options.   Views  can	 also  contain
       view-first,  response-ip,  response-ip-data and local-data-ptr options.
       View can	be mapped to requests  by  specifying  the  view  name	in  an
       access-control-view  option.  Options from matching views will override
       global options.	Global options will be used if	no  matching  view  is
       found, or when the matching view	does not have the option specified.

       name: <view name>
	      Name  of	the  view.   Must be unique.  This name	is used	in the
	      access-control-view option.

       local-zone: <zone> <type>
	      View specific local zone elements.  Has the same types  and  be-
	      haviour  as  the	global	local-zone elements.  When there is at
	      least one	local-zone: specified and view-first: no is  set,  the
	      default local-zones will be added	to this	view.  Defaults	can be
	      disabled	using the nodefault type.  When	view-first: yes	is set
	      or when a	view does not have a local-zone, the global local-zone
	      will be used including it's default zones.

       local-data: "<resource record string>"
	      View specific local data elements.  Has the  same	 behaviour  as
	      the global local-data elements.

       local-data-ptr: "IPaddr name"
	      View  specific  local-data-ptr elements.	Has the	same behaviour
	      as the global local-data-ptr elements.

       response-ip: <IP-netblock> <action>
	      This requires use	of the respip module.

	      Similar to response-ip but only applies to this view.

       response-ip-data: <IP-netblock> <"resource record string">
	      This requires use	of the respip module.

	      Similar to response-ip-data but only applies to this view.

       view-first: <yes	or no>
	      If enabled,  it  attempts	 to  use  the  global  local-zone  and
	      local-data if there is no	match in the view specific options.

	      Default: no

PYTHON MODULE OPTIONS
       These options are part of the python: section.

       The python: section gives the settings for the python(1)	script module.
       This module acts	like the iterator and validator	modules	do, on queries
       and  answers.   To  enable the script module it has to be compiled into
       the daemon, and the word	python has to be put in	the module-config  op-
       tion  (usually first, or	between	the validator and iterator).  Multiple
       instances of the	python module are supported by adding the word	python
       more than once.

       If  the chroot option is	enabled, you should make sure Python's library
       directory structure is bind mounted in the new  root  environment,  see
       mount(8).   Also	 the  python-script path should	be specified as	an ab-
       solute path relative to the new root, or	as  a  relative	 path  to  the
       working directory.

       python-script: <python file>
	      The  script  file	 to load.  Repeat this option for every	python
	      module instance added to the module-config option.

DYNAMIC	LIBRARY	MODULE OPTIONS
       These options are part of the dynlib: section.

       The dynlib: section gives the settings for  the	dynlib	module.	  This
       module  is  only	a very small wrapper that allows dynamic modules to be
       loaded on runtime instead of being compiled into	the  application.   To
       enable the dynlib module	it has to be compiled into the daemon, and the
       word  dynlib  has  to be	put in the module-config option.  Multiple in-
       stances of dynamic libraries are	supported by adding  the  word	dynlib
       more than once.

       The  dynlib-file	 path should be	specified as an	absolute path relative
       to the new path set by chroot, or as a relative path to the working di-
       rectory.

       dynlib-file: <dynlib file>
	      The dynamic library file to load.	 Repeat	this option for	 every
	      dynlib module instance added to the module-config	option.

DNS64 MODULE OPTIONS
       These options are part of the server: section.

       The  dns64  module  must	 be configured in the module-config directive,
       e.g.:

	  module-config: "dns64	validator iterator"

       and be compiled into the	daemon to be enabled.

       NOTE:
	  If combining the respip and dns64 modules, the respip	 module	 needs
	  to appear before the dns64 module in the module-config configuration
	  option  so that response IP and/or RPZ feeds can properly filter re-
	  sponses regardless of	DNS64 synthesis.

       dns64-prefix: <IPv6 prefix>
	      This sets	the DNS64 prefix to use	 to  synthesize	 AAAA  records
	      with.  It	must be	/96 or shorter.

	      Default: 64:ff9b::/96

       dns64-synthall: <yes or no>

	      WARNING:
		 Debugging feature!

	      If  enabled, synthesize all AAAA records despite the presence of
	      actual AAAA records.

	      Default: no

       dns64-ignore-aaaa: <domain name>
	      List domain for which the	AAAA records are  ignored  and	the  A
	      record is	used by	DNS64 processing instead.  Can be entered mul-
	      tiple  times,  list  a  new domain for which it applies, one per
	      line.  Applies also to names underneath the name given.

NAT64 OPTIONS
       These options are part of the server: section.

       NAT64 operation allows using a NAT64 prefix for	outbound  requests  to
       IPv4-only servers.

       do-nat64: <yes or no>
	      Use  NAT64  to  reach IPv4-only servers.	Consider also enabling
	      prefer-ip6 to prefer native IPv6 connections to nameservers.

	      Default: no

       nat64-prefix: <IPv6 prefix>
	      Use a specific NAT64 prefix to  reach  IPv4-only	servers.   The
	      prefix length must be one	of /32,	/40, /48, /56, /64 or /96.

	      The  NAT64 prefix	is allowed by the do-not-query-address option,
	      so that there is a clear outcome of addresses in both; the NAT64
	      prefix is	allowed.  The IPv4 address could be  filtered  by  the
	      do-not-query-address option, if needed.  Allowing	the NAT64 pre-
	      fix  is  useful when using do-not-query-address for a cluster of
	      machines that is IPv6-only and uses NAT64, but does not have in-
	      ternet access.

	      Default: 64:ff9b::/96 (same as dns64-prefix)

DNSCRYPT OPTIONS
       These options are part of the dnscrypt: section.

       The dnscrypt: section gives  the	 settings  of  the  dnscrypt  channel.
       While  those options are	available, they	are only meaningful if Unbound
       was compiled with --enable-dnscrypt.   Currently	 certificate  and  se-
       cret/public   keys  cannot  be  generated  by  Unbound.	 You  can  use
       dnscrypt-wrapper		    to		   generate		those:
       https://github.com/cofyc/dnscrypt-wrapper/blob/master/README.md#usage

       dnscrypt-enable:	<yes or	no>
	      Whether  or  not the dnscrypt config should be enabled.  You may
	      define configuration but not activate it.

	      Default: no

       dnscrypt-port: <port number>
	      On which port should dnscrypt should be activated.

	      NOTE:
		 There should be a matching interface option  defined  in  the
		 server: section for this port.

       dnscrypt-provider: <provider name>
	      The provider name	to use to distribute certificates.  This is of
	      the form:

		 2.dnscrypt-cert.example.com.

	      IMPORTANT:
		 The name MUST end with	a dot.

       dnscrypt-secret-key: <path to secret key	file>
	      Path  to	the  time limited secret key file.  This option	may be
	      specified	multiple times.

       dnscrypt-provider-cert: <path to	cert file>
	      Path to the  certificate	related	 to  the  dnscrypt-secret-key.
	      This option may be specified multiple times.

       dnscrypt-provider-cert-rotated: <path to	cert file>
	      Path  to	a certificate that we should be	able to	serve existing
	      connection  from	 but   do   not	  want	 to   advertise	  over
	      dnscrypt-provider	's TXT record certs distribution.

	      A	 typical  use  case  is	 when  rotating	certificates, existing
	      clients may still	use the	client magic  from  the	 old  cert  in
	      their  queries  until they fetch and update the new cert.	 Like-
	      wise, it would allow one to prime	the new	cert/key without  dis-
	      tributing	the new	cert yet, this can be useful when using	a net-
	      work of servers using anycast and	on which the configuration may
	      not get updated at the exact same	time.

	      By  priming  the	cert,  the servers can handle both old and new
	      certs traffic while distributing only one.

	      This option may be specified multiple times.

       dnscrypt-shared-secret-cache-size: <memory size>
	      Give the size of the data	structure in which the	shared	secret
	      keys  are	 kept  in.  In bytes or	use m(mega), k(kilo), g(giga).
	      The shared secret	cache is used when a  same  client  is	making
	      multiple queries using the same public key.  It saves a substan-
	      tial amount of CPU.

	      Default: 4m

       dnscrypt-shared-secret-cache-slabs: <number>
	      Number of	slabs in the dnscrypt shared secrets cache.  Slabs re-
	      duce  lock  contention by	threads.  Must be set to a power of 2.
	      Setting (close) to the number of cpus is a fairly	good  setting.
	      If  left unconfigured, it	will be	configured automatically to be
	      a	power of 2 close  to  the  number  of  configured  threads  in
	      multi-threaded environments.

	      Default: (unconfigured)

       dnscrypt-nonce-cache-size: <memory size>
	      Give  the	 size of the data structure in which the client	nonces
	      are kept in.  In bytes or	use m(mega),  k(kilo),	g(giga).   The
	      nonce  cache  is	used  to  prevent  dnscrypt message replaying.
	      Client nonce should be unique for	any pair of  client  pk/server
	      sk.

	      Default: 4m

       dnscrypt-nonce-cache-slabs: <number>
	      Number  of slabs in the dnscrypt nonce cache.  Slabs reduce lock
	      contention by threads.  Must be set to a power  of  2.   Setting
	      (close) to the number of cpus is a fairly	good setting.  If left
	      unconfigured,  it	will be	configured automatically to be a power
	      of 2 close to the	number of configured threads in	multi-threaded
	      environments.

	      Default: (unconfigured)

EDNS CLIENT SUBNET MODULE OPTIONS
       These options are part of the server: section.

       The ECS module must be configured in the	module-config directive, e.g.:

	  module-config: "subnetcache validator	iterator"

       and be compiled into the	daemon to be enabled.

       If the destination address is allowed in	the configuration Unbound will
       add the EDNS0 option to the query containing the	relevant part  of  the
       client's	 address.  When	an answer contains the ECS option the response
       and the option are placed in a specialized cache.  If the authority in-
       dicated no support, the response	is stored in the regular cache.

       Additionally, when a client includes the	option in its queries, Unbound
       will forward the	option when sending the	query to  addresses  that  are
       explicitly  allowed in the configuration	using send-client-subnet.  The
       option will always be forwarded,	regardless the allowed addresses, when
       client-subnet-always-forward: yes is set.  In this case the  lookup  in
       the regular cache is skipped.

       The  maximum  size  of the ECS cache is controlled by msg-cache-size in
       the configuration file.	On top of that,	for each query only  100  dif-
       ferent  subnets	are allowed to be stored for each address family.  Ex-
       ceeding that number, older entries will be purged from cache.

       Note that due to	the nature of how EDNS Client Subnet works, by	segre-
       gating  the client IP space in order to try and have tailored responses
       for prefixes of unknown sizes, resolution and  cache  response  perfor-
       mance are impacted as a result.	Usage of the subnetcache module	should
       only  be	enabled	in installations that require such functionality where
       the resolver and	the clients belong to different	networks.  An  example
       of that is an open resolver installation.

       This  module does not interact with the serve-expired* and prefetch op-
       tions.

       send-client-subnet: <IP address>
	      Send client source address to this authority.   Append  /num  to
	      indicate	a  classless  delegation  netblock,  for  example like
	      10.2.3.4/24 or 2001::11/64.  Can be given	multiple  times.   Au-
	      thorities	 not  listed will not receive edns-subnet information,
	      unless domain in query is	specified in client-subnet-zone.

       client-subnet-zone: <domain>
	      Send client source address in queries for	this  domain  and  its
	      subdomains.  Can be given	multiple times.	 Zones not listed will
	      not  receive edns-subnet information, unless hosted by authority
	      specified	in send-client-subnet.

       client-subnet-always-forward: <yes or no>
	      Specify  whether	the  ECS  address  check   (configured	 using
	      send-client-subnet)  is  applied	for  all  queries, even	if the
	      triggering query contains	an ECS record, or only for queries for
	      which the	ECS record is generated	using the querier address (and
	      therefore	did not	contain	ECS data in the	client query).	If en-
	      abled, the address check is skipped when the client  query  con-
	      tains  an	 ECS  record.	And the	lookup in the regular cache is
	      skipped.

	      Default: no

       max-client-subnet-ipv6: <number>
	      Specifies	the maximum prefix length of the client	source address
	      we are willing to	expose to third	parties	for IPv6.

	      Default: 56

       max-client-subnet-ipv4: <number>
	      Specifies	the maximum prefix length of the client	source address
	      we are willing to	expose to third	parties	for IPv4.

	      Default: 24

       min-client-subnet-ipv6: <number>
	      Specifies	the minimum prefix length of the IPv6 source  mask  we
	      are  willing  to accept in queries.  Shorter source masks	result
	      in REFUSED answers.  Source mask of 0 is always accepted.

	      Default: 0

       min-client-subnet-ipv4: <number>
	      Specifies	the minimum prefix length of the IPv4 source  mask  we
	      are  willing  to accept in queries.  Shorter source masks	result
	      in REFUSED answers.  Source mask of 0 is always  accepted.   De-
	      fault: 0

       max-ecs-tree-size-ipv4: <number>
	      Specifies	 the maximum number of subnets ECS answers kept	in the
	      ECS radix	tree.  This number applies for each qname/qclass/qtype
	      tuple.

	      Default: 100

       max-ecs-tree-size-ipv6: <number>
	      Specifies	the maximum number of subnets ECS answers kept in  the
	      ECS radix	tree.  This number applies for each qname/qclass/qtype
	      tuple.

	      Default: 100

OPPORTUNISTIC IPSEC SUPPORT MODULE OPTIONS
       These options are part of the server: section.

       The  IPsec  module  must	 be configured in the module-config directive,
       e.g.:

	  module-config: "ipsecmod validator iterator"

       and be compiled into Unbound by using --enable-ipsecmod to be enabled.

       When Unbound receives an	A/AAAA query that is  not  in  the  cache  and
       finds a valid answer, it	will withhold returning	the answer and instead
       will generate an	IPSECKEY subquery for the same domain name.  If	an an-
       swer  was found,	Unbound	will call an external hook passing the follow-
       ing arguments:

       QNAME  Domain name of the A/AAAA	and IPSECKEY query.  In	string format.

       IPSECKEY	TTL
	      TTL of the IPSECKEY RRset.

       A/AAAA String of	space separated	IP addresses  present  in  the	A/AAAA
	      RRset.  The IP addresses are in string format.

       IPSECKEY
	      String of	space separated	IPSECKEY RDATA present in the IPSECKEY
	      RRset.  The IPSECKEY RDATA are in	DNS presentation format.

       The  A/AAAA  answer  is then cached and returned	to the client.	If the
       external	hook was called	the TTL	changes	to ensure it  doesn't  surpass
       ipsecmod-max-ttl.

       The  same procedure is also followed when prefetch: yes is set, but the
       A/AAAA answer is	given  to  the	client	before	the  hook  is  called.
       ipsecmod-max-ttl	 ensures  that	the  A/AAAA answer given from cache is
       still relevant for opportunistic	IPsec.

       ipsecmod-enabled: <yes or no>
	      Specifies	whether	the IPsec module is enabled or not.  The IPsec
	      module still needs to be defined in the module-config directive.
	      This  option  facilitates	 turning  on/off  the  module  without
	      restarting/reloading Unbound.

	      Default: yes

       ipsecmod-hook: <filename>
	      Specifies	 the  external	hook  that Unbound will	call with sys-
	      tem(3).  The file	can be specified as an absolute/relative path.
	      The file needs the proper	permissions to be able to be  executed
	      by the same user that runs Unbound.  It must be present when the
	      IPsec module is defined in the module-config directive.

       ipsecmod-strict:	<yes or	no>
	      If  enabled  Unbound requires the	external hook to return	a suc-
	      cess value of 0.	Failing	to do so Unbound will reply with SERV-
	      FAIL.  The A/AAAA	answer will also not be	cached.

	      Default: no

       ipsecmod-max-ttl: <seconds>
	      Time to live maximum for A/AAAA cached records after calling the
	      external hook.

	      Default: 3600

       ipsecmod-ignore-bogus: <yes or no>
	      Specifies	the behaviour of Unbound when the IPSECKEY  answer  is
	      bogus.   If  set	to yes,	the hook will be called	and the	A/AAAA
	      answer will be returned to the client.  If set to	no,  the  hook
	      will  not	 be  called and	the answer to the A/AAAA query will be
	      SERVFAIL.	 Mainly	used for testing.

	      Default: no

       ipsecmod-allow: <domain>
	      Allow the	IPsec module functionality for the domain so that  the
	      module logic will	be executed.  Can be given multiple times, for
	      different	 domains.  If the option is not	specified, all domains
	      are treated as being allowed (default).

       ipsecmod-whitelist: <domain>
	      Alternate	syntax for ipsecmod-allow.

CACHE DB MODULE	OPTIONS
       These options are part of the cachedb: section.

       The Cache DB module must	be configured in the module-config  directive,
       e.g.:

	  module-config: "validator cachedb iterator"

       and be compiled into the	daemon with --enable-cachedb.

       If  this	 module	is enabled and configured, the specified backend data-
       base works as a second level cache; when	Unbound	cannot find an	answer
       to  a  query in its built-in in-memory cache, it	consults the specified
       backend.	 If it finds a valid answer in the backend, Unbound uses it to
       respond to the query without performing iterative DNS  resolution.   If
       Unbound	cannot	even  find  an	answer in the backend, it resolves the
       query as	usual, and stores the answer in	the backend.

       This module interacts with the serve-expired-* options and  will	 reply
       with expired data if Unbound is configured for that.

       If  Unbound  was	 built with --with-libhiredis on a system that has in-
       stalled the hiredis C client library of Redis, then the	redis  backend
       can be used.  This backend communicates with the	specified Redis	server
       over a TCP connection to	store and retrieve cache data.	It can be used
       as a persistent and/or shared cache backend.

       NOTE:
	  Unbound  never removes data stored in	the Redis server, even if some
	  data have expired in terms of	DNS TTL	or the Redis server has	cached
	  too much data; if necessary the Redis	server must be	configured  to
	  limit	 the  cache  size,  preferably	with  some  kind  of least-re-
	  cently-used eviction policy.

       Additionally, the redis-expire-records option can be used in  order  to
       set  the	 relative  DNS	TTL  of	 the  message  as timeout to the Redis
       records;	keep in	mind that some additional memory is used per  key  and
       that  the  expire  information is stored	as absolute Unix timestamps in
       Redis (computer time must be stable).

       This backend uses synchronous communication with	the Redis server based
       on the assumption that the communication	 is  stable  and  sufficiently
       fast.   The  thread waiting for a response from the Redis server	cannot
       handle other DNS	queries.  Although the backend has the ability to  re-
       connect	to  the	 server	when the connection is closed unexpectedly and
       there is	a configurable timeout in case the server is  overly  slow  or
       hangs up, these cases are assumed to be very rare.  If connection close
       or timeout happens too often, Unbound will be effectively unusable with
       this  backend.  It's the	administrator's	responsibility to make the as-
       sumption	hold.

       The cachedb: section gives custom settings of the cache DB module.

       backend:	<backend name>
	      Specify the backend database name.  The default database is  the
	      in-memory	 backend named testframe, which, as the	name suggests,
	      is not of	any practical use.  Depending on the  build-time  con-
	      figuration, redis	backend	may also be used as described above.

	      Default: testframe

       secret-seed: "<secret string>"
	      Specify a	seed to	calculate a hash value from query information.
	      This  value  will	be used	as the key of the corresponding	answer
	      for the backend database and  can	 be  customized	 if  the  hash
	      should  not  be predictable operationally.  If the backend data-
	      base is shared by	multiple Unbound instances, all	instances must
	      use the same secret seed.

	      Default: "default"

       cachedb-no-store: <yes or no>
	      If the backend should be read from, but not  written  to.	  This
	      makes  this instance not store dns messages in the backend.  But
	      if data is available it is retrieved.

	      Default: no

       cachedb-check-when-serve-expired: <yes or no>
	      If enabled, the cachedb is checked before	an expired response is
	      returned.	    When    serve-expired    is	   enabled,    without
	      serve-expired-client-timeout  , it then does not immediately re-
	      spond with an expired response from  cache,  but	instead	 first
	      checks the cachedb for valid contents, and if so returns it.  If
	      the  cachedb  also  has no valid contents, the serve expired re-
	      sponse is	sent.  If  also	 serve-expired-client-timeout  is  en-
	      abled,  the  expired  response  is delayed until the timeout ex-
	      pires.  Unless the lookup	succeeds within	the timeout.

	      Default: yes

       The following cachedb: options are specific to the redis	backend.

       redis-server-host: <server address or name>
	      The IP (either v6	or v4) address or domain  name	of  the	 Redis
	      server.	In general an IP address should	be specified as	other-
	      wise Unbound will	have to	resolve	the name of the	 server	 every
	      time it establishes a connection to the server.

	      Default: 127.0.0.1

       redis-server-port: <port	number>
	      The TCP port number of the Redis server.

	      Default: 6379

       redis-server-path: <unix	socket path>
	      The unix socket path to connect to the Redis server.  Unix sock-
	      ets may have better throughput than the IP address option.

	      Default: "" (disabled)

       redis-server-password: "<password>"
	      The Redis	AUTH password to use for the Redis server.  Only rele-
	      vant if Redis is configured for client password authorisation.

	      Default: "" (disabled)

       redis-timeout: <msec>
	      The  period until	when Unbound waits for a response from the Re-
	      dis server.  If this timeout expires Unbound closes the  connec-
	      tion,  treats  it	 as  if	the Redis server does not have the re-
	      quested data, and	will try  to  re-establish  a  new  connection
	      later.

	      Default: 100

       redis-command-timeout: <msec>
	      The  timeout  to use for Redis commands, in milliseconds.	 If 0,
	      it uses the redis-timeout	value.

	      Default: 0

       redis-connect-timeout: <msec>
	      The timeout to use for Redis connection set up, in milliseconds.
	      If 0, it uses the	redis-timeout value.

	      Default: 0

       redis-expire-records: <yes or no>
	      If Redis record expiration is enabled.   If  yes,	 Unbound  sets
	      timeout for Redis	records	so that	Redis can evict	keys that have
	      expired	automatically.	  If   Unbound	 is   configured  with
	      serve-expired and	serve-expired-ttl: 0, this  option  is	inter-
	      nally reverted to	"no".

	      NOTE:
		 Redis "SET ...	EX" support is required	for this option	(Redis
		 >= 2.6.12).

	      Default: no

       redis-logical-db: <logical database index>
	      The  logical  database  in Redis to use.	These are databases in
	      the same Redis instance sharing the same configuration and  per-
	      sisted in	the same RDB/AOF file.	If unsure about	using this op-
	      tion,  Redis  documentation  (https://redis.io/commands/select/)
	      suggests not to use a single Redis instance for  multiple	 unre-
	      lated  applications.   The  default database in Redis is 0 while
	      other logical databases need to  be  explicitly  SELECT'ed  upon
	      connecting.

	      Default: 0

       redis-replica-server-host: <server address or name>
	      The  IP  (either	v6  or v4) address or domain name of the Redis
	      server.  In general an IP	address	should be specified as	other-
	      wise  Unbound  will have to resolve the name of the server every
	      time it establishes a connection to the server.

	      This  server  is	treated	 as  a	read-only  replica  server  (-
	      https://redis.io/docs/management/replica-
	      tion/#read-only-replica).	 If specified, all Redis read commands
	      will go to this replica server, while the	write commands will go
	      to the redis-server-host.

	      Default: "" (disabled).

       redis-replica-server-port: <port	number>
	      The TCP port number of the Redis replica server.

	      Default: 6379

       redis-replica-server-path: <unix	socket path>
	      The  unix	 socket	 path  to connect to the Redis replica server.
	      Unix sockets may have better throughput than the IP address  op-
	      tion.

	      Default: "" (disabled)

       redis-replica-server-password: "<password>"
	      The Redis	AUTH password to use for the Redis server.  Only rele-
	      vant if Redis is configured for client password authorisation.

	      Default: "" (disabled)

       redis-replica-timeout: <msec>
	      The  period until	when Unbound waits for a response from the Re-
	      dis replica server.  If this timeout expires Unbound closes  the
	      connection,  treats  it as if the	Redis server does not have the
	      requested	data, and will try to re-establish  a  new  connection
	      later.

	      Default: 100

       redis-replica-command-timeout: <msec>
	      The  timeout to use for Redis replica commands, in milliseconds.
	      If 0, it uses the	redis-replica-timeout value.

	      Default: 0

       redis-replica-connect-timeout: <msec>
	      The timeout to use for Redis replica connection set up, in  mil-
	      liseconds.  If 0,	it uses	the redis-replica-timeout value.

	      Default: 0

       redis-replica-logical-db: <logical database index>
	      Same as redis-logical-db but for the Redis replica server.

	      Default: 0

DNSTAP OPTIONS
       These options are part of the dnstap: section.

       DNSTAP  is  a  flexible,	structured binary log format for DNS software.
       When compiled in	by using --enable-dnstap, it can  be  enabled  in  the
       dnstap:	section.   This	 starts	 an  extra  thread (when compiled with
       threading) that writes the log information to the destination.  If  Un-
       bound  is  compiled  without  threading it does not spawn a thread, but
       connects	per-process to the destination.

       dnstap-enable: <yes or no>
	      If dnstap	is enabled.  If	yes, it	connects to the	DNSTAP	server
	      and  if any of the dnstap-log-..-messages: options is enabled it
	      sends logs for those messages to the server.

	      Default: no

       dnstap-bidirectional: <yes or no>
	      Use frame	streams	in bidirectional mode to transfer DNSTAP  mes-
	      sages.

	      Default: yes

       dnstap-socket-path: <file name>
	      Sets the unix socket file	name for connecting to the server that
	      is listening on that socket.

	      Default:

       dnstap-ip: <IPaddress[@port]>
	      If  "", the unix socket is used, if set with an IP address (IPv4
	      or IPv6) that address is used to connect to the server.

	      Default: ""

       dnstap-tls: <yes	or no>
	      Set this to use TLS  to  connect	to  the	 server	 specified  in
	      dnstap-ip.  If set to no,	TCP is used to connect to the server.

	      Default: yes

       dnstap-tls-server-name: <name of	TLS authentication>
	      The  TLS server name to authenticate the server with.  Used when
	      dnstap-tls: yes is set.  If "" it	is ignored.

	      Default: ""

       dnstap-tls-cert-bundle: <file name of cert bundle>
	      The pem file with	certs to verify	the  TLS  server  certificate.
	      If  ""  the  server  default cert	bundle is used,	or the windows
	      cert bundle on windows.

	      Default: ""

       dnstap-tls-client-key-file: <file name>
	      The client key file for TLS client authentication.  If ""	client
	      authentication is	not used.

	      Default: ""

       dnstap-tls-client-cert-file: <file name>
	      The client cert file for TLS client authentication.

	      Default: ""

       dnstap-send-identity: <yes or no>
	      If enabled, the server identity is included in the log messages.

	      Default: no

       dnstap-send-version: <yes or no>
	      If enabled, the server version if	included in the	log messages.

	      Default: no

       dnstap-identity:	<string>
	      The identity to send with	messages, if ""	the hostname is	used.

	      Default: ""

       dnstap-version: <string>
	      The version to send with messages, if "" the package version  is
	      used.

	      Default: ""

       dnstap-sample-rate: <number>
	      The  sample rate for log of messages, it logs only 1/N messages.
	      With 0 it	is disabled.  This is useful in	a high volume environ-
	      ment, where log functionality would otherwise not	 be  reliable.
	      For  example 10 would spend only 1/10th time on logging, and 100
	      would only spend a hundredth of the time on logging.

	      Default: 0 (disabled)

       dnstap-log-resolver-query-messages: <yes	or no>
	      Enable to	log resolver query messages.  These are	messages  from
	      Unbound to upstream servers.

	      Default: no

       dnstap-log-resolver-response-messages: <yes or no>
	      Enable  to  log  resolver	 response messages.  These are replies
	      from upstream servers to Unbound.

	      Default: no

       dnstap-log-client-query-messages: <yes or no>
	      Enable to	log client query messages.  These are  client  queries
	      to Unbound.

	      Default: no

       dnstap-log-client-response-messages: <yes or no>
	      Enable  to  log  client  response	messages.  These are responses
	      from Unbound to clients.

	      Default: no

       dnstap-log-forwarder-query-messages: <yes or no>
	      Enable to	log forwarder query messages.

	      Default: no

       dnstap-log-forwarder-response-messages: <yes or no>
	      Enable to	log forwarder response messages.

	      Default: no

RESPONSE POLICY	ZONE OPTIONS
       These options are part of the rpz: section.

       Response	Policy Zones are configured with  rpz:	section	 clauses,  and
       each one	must have a name option.  There	can be multiple	ones, by list-
       ing  multiple  rpz:  section  clauses, each with	a different name.  RPZ
       sections	are applied in order of	configuration and any  match  from  an
       earlier	RPZ  zone will terminate the RPZ lookup.  Note that a PASSTHRU
       action is still considered a match.

       The respip module needs to be added to the module-config, e.g.:

	  module-config: "respip validator iterator"

       NOTE:
	  If combining the respip and dns64 modules, the respip	 module	 needs
	  to appear before the dns64 module in the module-config configuration
	  option  so that response IP and/or RPZ feeds can properly filter re-
	  sponses regardless of	DNS64 synthesis.

       QNAME, Response IP Address, nsdname, nsip  and  clientip	 triggers  are
       supported.   Supported  actions	are: NXDOMAIN, NODATA, PASSTHRU, DROP,
       Local Data, tcp-only and	drop.  RPZ QNAME triggers  are	applied	 after
       any local-zone and before any auth-zone.

       The RPZ zone is a regular DNS zone formatted with a SOA start record as
       usual.	The items in the zone are entries, that	specify	what to	act on
       (the trigger) and what to do (the action).  The trigger to  act	on  is
       recorded	 in  the  name,	 the  action to	do is recorded as the resource
       record.	The names all end in the zone name,  so	 you  could  type  the
       trigger names without a trailing	dot in the zonefile.

       An example RPZ record, that answers example.com with NXDOMAIN:

	  example.com CNAME .

       The triggers are	encoded	in the name on the left

	  name				query name
	  netblock.rpz-client-ip	client IP address
	  netblock.rpz-ip		response IP address in the answer
	  name.rpz-nsdname		nameserver name
	  netblock.rpz-nsip		nameserver IP address

       The  netblock is	written	as <netblocklen>.<ip address in	reverse>.  For
       IPv6 use	'zz' for '::'.	Specify	individual addresses with scope	length
       of 32 or	128.  For example, 24.10.100.51.198.rpz-ip is 198.51.100.10/24
       and 32.10.zz.db8.2001.rpz-ip is 2001:db8:0:0:0:0:0:10/32.

       The actions are specified with the record on the	right

	  CNAME	.		       nxdomain	reply
	  CNAME	*.		       nodata reply
	  CNAME	rpz-passthru.	       do nothing, allow to continue
	  CNAME	rpz-drop.	       the query is dropped
	  CNAME	rpz-tcp-only.	       answer over TCP
	  A 192.0.2.1		       answer with this	IP address

       Other records like AAAA,	TXT and	other CNAMEs (not rpz-..) can also  be
       used to answer queries with that	content.

       name: <zone name>
	      Name of the authority zone.

       primary:	<IP address or host name>
	      Where  to	 download a copy of the	zone from, with	AXFR and IXFR.
	      Multiple primaries can be	specified.  They are all tried if  one
	      fails.

	      To  use a	non-default port for DNS communication append '@' with
	      the port number.

	      You can append a '#' and a name, then AXFR over TLS can be  used
	      and  the	TLS  authentication  certificates will be checked with
	      that name.

	      If you combine the '@' and '#', the '@'  comes  first.   If  you
	      point  it	at another Unbound instance, it	would not work because
	      that does	not support AXFR/IXFR for the zone, but	 if  you  used
	      url  to  download	 the  zonefile as a text file from a webserver
	      that would work.

	      If you specify the hostname, you cannot use the domain from  the
	      zonefile,	 because  it  may  not	have that when retrieving that
	      data, instead use	a plain	IP address to avoid a circular	depen-
	      dency on retrieving that IP address.

       master: <IP address or host name>
	      Alternate	syntax for primary.

       url: <url to zonefile>
	      Where  to	download a zonefile for	the zone.  With	HTTP or	HTTPS.
	      An example for the url is:

		 http://www.example.com/example.org.zone

	      Multiple url statements can be given, they are tried in turn.

	      If only urls are given the SOA refresh timer is used to wait for
	      making new downloads.  If	also primaries are  listed,  the  pri-
	      maries  are  first probed	with UDP SOA queries to	see if the SOA
	      serial number has	changed, reducing the number of	downloads.  If
	      none of the URLs work, the primaries are	tried  with  IXFR  and
	      AXFR.

	      For HTTPS, the tls-cert-bundle and the hostname from the url are
	      used to authenticate the connection.

       allow-notify: <IP address or host name or netblockIP/prefix>
	      With  allow-notify  you  can specify additional sources of noti-
	      fies.  When notified, the	server attempts	 to  first  probe  and
	      then  zone  transfer.  If	the notify is from a primary, it first
	      attempts that primary.  Otherwise	other primaries	are attempted.
	      If there are no primaries, but only urls,	the file is downloaded
	      when notified.

	      NOTE:
		 The primaries from primary and	url statements are allowed no-
		 tify by default.

       zonefile: <filename>
	      The filename where the zone is stored.  If  not  given  then  no
	      zonefile	is  used.  If the file does not	exist or is empty, Un-
	      bound will attempt to fetch zone	data  (eg.  from  the  primary
	      servers).

       rpz-action-override: <action>
	      Always use this RPZ action for matching triggers from this zone.
	      Possible actions are: nxdomain, nodata, passthru,	drop, disabled
	      and cname.

       rpz-cname-override: <domain>
	      The CNAME	target domain to use if	the cname action is configured
	      for rpz-action-override.

       rpz-log:	<yes or	no>
	      Log all applied RPZ actions for this RPZ zone.

	      Default: no

       rpz-log-name: <name>
	      Specify  a string	to be part of the log line, for	easy referenc-
	      ing.

       rpz-signal-nxdomain-ra: <yes or no>
	      Signal when a query is blocked by	the RPZ	with NXDOMAIN with  an
	      unset  RA	 flag.	 This allows certain clients, like dnsmasq, to
	      infer that the domain is externally blocked.

	      Default: no

       for-downstream: <yes or no>
	      If enabled the zone is authoritatively answered for and  queries
	      for the RPZ zone information are answered	to downstream clients.
	      This  is useful for monitoring scripts, that can then access the
	      SOA information to check if the RPZ information is up to date.

	      Default: no

       tags: "<list of tags>"
	      Limit the	policies from this  RPZ	 section  to  clients  with  a
	      matching tag.

	      Tags  need  to  be  defined in define-tag	and can	be assigned to
	      client addresses using access-control-tag	or interface-tag.  En-
	      close list of tags in quotes ("")	and put	spaces between tags.

	      If no tags are specified the policies from this section will  be
	      applied for all clients.

MEMORY CONTROL EXAMPLE
       In  the	example	 config	 settings below	memory usage is	reduced.  Some
       service levels are lower, notable very large data and a high  TCP  load
       are no longer supported.	 Very large data and high TCP loads are	excep-
       tional  for  the	DNS.  DNSSEC validation	is enabled, just add trust an-
       chors.  If you do not have to worry about programs using	more than 3 Mb
       of memory, the below example is not for you.  Use the defaults  to  re-
       ceive full service, which on BSD-32bit tops out at 30-40	Mb after heavy
       usage.

	  # example settings that reduce memory	usage
	  server:
	      num-threads: 1
	      outgoing-num-tcp:	1 # this limits	TCP service, uses less buffers.
	      incoming-num-tcp:	1
	      outgoing-range: 60  # uses less memory, but less performance.
	      msg-buffer-size: 8192   #	note this limits service, 'no huge stuff'.
	      msg-cache-size: 100k
	      msg-cache-slabs: 1
	      rrset-cache-size:	100k
	      rrset-cache-slabs: 1
	      infra-cache-numhosts: 200
	      infra-cache-slabs: 1
	      key-cache-size: 100k
	      key-cache-slabs: 1
	      neg-cache-size: 10k
	      num-queries-per-thread: 30
	      target-fetch-policy: "2 1	0 0 0 0"
	      harden-large-queries: "yes"
	      harden-short-bufsize: "yes"

FILES
       /usr/local/etc/unbound
	      default Unbound working directory.

       /usr/local/etc/unbound
	      default chroot(2)	location.

       /usr/local/etc/unbound/unbound.conf
	      Unbound configuration file.

       /usr/local/etc/unbound/unbound.pid
	      default Unbound pidfile with process ID of the running daemon.

       unbound.log
	      Unbound log file.	 Default is to log to syslog(3).

SEE ALSO
       unbound(8), unbound-checkonf(8).

AUTHOR
       Unbound	developers  are	mentioned in the CREDITS file in the distribu-
       tion.

COPYRIGHT
       1999-2026, NLnet	Labs

1.25.1				 May 20, 2026		       UNBOUND.CONF(5)

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

home | help