diff options
Diffstat (limited to 'contrib/unbound/doc/unbound.conf.rst')
| -rw-r--r-- | contrib/unbound/doc/unbound.conf.rst | 5005 |
1 files changed, 5005 insertions, 0 deletions
diff --git a/contrib/unbound/doc/unbound.conf.rst b/contrib/unbound/doc/unbound.conf.rst new file mode 100644 index 000000000000..d83816c6f468 --- /dev/null +++ b/contrib/unbound/doc/unbound.conf.rst @@ -0,0 +1,5005 @@ +.. + WHEN EDITING MAKE SURE EACH SENTENCE STARTS ON A NEW LINE + +.. + IT HELPS RENDERERS TO DO THE RIGHT THING WRT SPACE + +.. + IT HELPS PEOPLE DIFFING THE CHANGES + +.. + WHEN EDITING MAKE SURE EACH SENTENCE STARTS ON A NEW LINE + +.. + IT HELPS RENDERERS TO DO THE RIGHT THING WRT SPACE + +.. + IT HELPS PEOPLE DIFFING THE CHANGES + +.. + WHEN EDITING MAKE SURE EACH SENTENCE STARTS ON A NEW LINE + +.. + IT HELPS RENDERERS TO DO THE RIGHT THING WRT SPACE + +.. + IT HELPS PEOPLE DIFFING THE CHANGES + +.. + WHEN EDITING MAKE SURE EACH SENTENCE STARTS ON A NEW LINE + +.. + IT HELPS RENDERERS TO DO THE RIGHT THING WRT SPACE + +.. + IT HELPS PEOPLE DIFFING THE CHANGES + +unbound.conf(5) +=============== + +Synopsis +-------- + +**unbound.conf** + +Description +----------- + +**unbound.conf** is used to configure :doc:`unbound(8)</manpages/unbound>`. +The file format has attributes and values. +Some attributes have attributes inside them. +The notation is: ``attribute: value``. + +Comments start with ``#`` and last to the end of line. +Empty lines are ignored as is whitespace at the beginning of a line. + +The utility :doc:`unbound-checkconf(8)</manpages/unbound-checkconf>` can be +used to check ``unbound.conf`` prior to usage. + +Example +------- + +An example config file is shown below. +Copy this to :file:`/etc/unbound/unbound.conf` and start the server with: + +.. code-block:: text + + $ unbound -c /etc/unbound/unbound.conf + +Most settings are the defaults. +Stop the server with: + +.. code-block:: text + + $ kill `cat /etc/unbound/unbound.pid` + +Below is a minimal config file. +The source distribution contains an extensive :file:`example.conf` file with +all the options. + +.. code-block:: text + + # unbound.conf(5) config file for unbound(8). + server: + directory: "/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 /etc/unbound/dev/urandom + # and mount --bind -n /dev/log /etc/unbound/dev/log + chroot: "/etc/unbound" + # logfile: "/etc/unbound/unbound.log" #uncomment to use logfile. + pidfile: "/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 + +File Format +----------- + +There must be whitespace between keywords. +Attribute keywords end with a colon ``':'``. +An attribute is followed by a value, or its containing attributes in which case +it is referred to as a clause. +Clauses can be repeated throughout the file (or included files) to group +attributes under the same clause. + +.. _unbound.conf.include: + +Files can be included using the **include:** directive. +It can appear anywhere, 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 :ref:`chroot<unbound.conf.chroot>`, using full path names for +the included files works, relative pathnames for the included names work if the +directory where the daemon is started equals its chroot/working directory or is +specified before the include statement with :ref:`directory: +dir<unbound.conf.directory>`. +Wildcards can be used to include multiple files, see *glob(7)*. + +.. _unbound.conf.include-toplevel: + +For a more structural include option, the **include-toplevel:** directive can +be used. +This closes whatever clause is currently active (if any) and forces the use of +clauses in the included files and right after this directive. + +.. _unbound.conf.server: + +Server Options +^^^^^^^^^^^^^^ + +These options are part of the **server:** clause. + + +@@UAHL@unbound.conf@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 :doc:`unbound(8)</manpages/unbound>` and + :doc:`unbound-control(8)</manpages/unbound-control>` respectively. + + Default: 1 + + +@@UAHL@unbound.conf@statistics-interval@@: *<seconds>* + The number of seconds between printing statistics to the log for every + thread. + Disable with value ``0`` or ``""``. + The histogram statistics are only printed if replies were sent during the + statistics interval, requestlist statistics are printed for every interval + (but can be 0). + This is because the median calculation requires data to be present. + + Default: 0 (disabled) + + +@@UAHL@unbound.conf@statistics-cumulative@@: *<yes or no>* + If enabled, statistics are cumulative since starting Unbound, without + clearing the statistics counters after logging the statistics. + + Default: no + + +@@UAHL@unbound.conf@extended-statistics@@: *<yes or no>* + If enabled, extended statistics are printed from + :doc:`unbound-control(8)</manpages/unbound-control>`. + The counters are listed in + :doc:`unbound-control(8)</manpages/unbound-control>`. + Keeping track of more statistics takes time. + + Default: no + + +@@UAHL@unbound.conf@statistics-inhibit-zero@@: *<yes or no>* + If enabled, selected extended statistics with a value of 0 are inhibited + from printing with + :doc:`unbound-control(8)</manpages/unbound-control>`. + These are query types, query classes, query opcodes, answer rcodes + (except NOERROR, FORMERR, SERVFAIL, NXDOMAIN, NOTIMPL, REFUSED) + and PRZ actions. + + Default: yes + + +@@UAHL@unbound.conf@num-threads@@: *<number>* + The number of threads to create to serve clients. Use 1 for no threading. + + Default: 1 + + +@@UAHL@unbound.conf@port@@: *<port number>* + The port number on which the server responds to queries. + + Default: 53 + + +@@UAHL@unbound.conf@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 localhost. + + 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 between interface + and port number), if not specified the default port (from + :ref:`port<unbound.conf.port>`) is used. + + +@@UAHL@unbound.conf@ip-address@@: *<IP address or interface name[@port]>* + Same as :ref:`interface<unbound.conf.interface>` (for ease of + compatibility with :external+nsd:doc:`manpages/nsd.conf`). + + +@@UAHL@unbound.conf@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 :ref:`ip-transparent<unbound.conf.ip-transparent>`, but + this option services all interfaces whilst with + :ref:`ip-transparent<unbound.conf.ip-transparent>` you can select which + (future) interfaces Unbound provides service on. + This feature is experimental, and needs support in your OS for particular + socket options. + + Default: no + + +@@UAHL@unbound.conf@interface-automatic-ports@@: *"<string>"* + List the port numbers that + :ref:`interface-automatic<unbound.conf.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: "" + + +@@UAHL@unbound.conf@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 interfaces. + If none are given the default (all) is used. + You can specify the same interfaces in + :ref:`interface<unbound.conf.interface>` and + :ref:`outgoing-interface<unbound.conf.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 address taken from the + netblock to counter spoofing. + Requires the IPv6 netblock to be routed to the host running Unbound, and + requires OS support for unprivileged non-local binds (currently only + supported on Linux). + Several netblocks may be specified with multiple + :ref:`outgoing-interface<unbound.conf.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 :ref:`prefer-ip6: yes<unbound.conf.prefer-ip6>` to + increase the likelihood of IPv6 nameservers being selected for queries. + On Linux you need these two commands to be able to use the freebind socket + option to receive traffic for the ip6 netblock: + + .. code-block:: text + + ip -6 addr add mynetblock/64 dev lo && \ + ip -6 route add local mynetblock/64 dev lo + + +@@UAHL@unbound.conf@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 compile options. + Larger numbers need extra resources from the operating system. + For performance a very large value is best, use libevent to make this + possible. + + Default: 4096 (libevent) / 960 (minievent) / 48 (windows) + + +@@UAHL@unbound.conf@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 increases 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 :ref:`outgoing-port-permit<unbound.conf.outgoing-port-permit>` and + :ref:`outgoing-port-avoid<unbound.conf.outgoing-port-avoid>` statements + are processed in the line order of the config file, adding the permitted + ports and subtracting the avoided ports from the set of allowed ports. + The processing starts with the non IANA allocated ports above 1024 in the + set of allowed ports. + + +@@UAHL@unbound.conf@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. + + +@@UAHL@unbound.conf@outgoing-num-tcp@@: *<number>* + Number of outgoing TCP buffers to allocate per thread. + If set to 0, or if :ref:`do-tcp: no<unbound.conf.do-tcp>` is set, no TCP + queries to authoritative servers are done. + For larger installations increasing this value is a good idea. + + Default: 10 + + +@@UAHL@unbound.conf@incoming-num-tcp@@: *<number>* + Number of incoming TCP buffers to allocate per thread. + If set to 0, or if :ref:`do-tcp: no<unbound.conf.do-tcp>` is set, no TCP + queries from clients are accepted. + For larger installations increasing this value is a good idea. + + Default: 10 + + +@@UAHL@unbound.conf@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 + :ref:`msg-buffer-size<unbound.conf.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 problems, but is + seen as extreme, since the amount of TCP fallback generated is excessive + (probably also for this resolver, consider tuning + :ref:`outgoing-num-tcp<unbound.conf.outgoing-num-tcp>`). + + Default: 1232 (`DNS Flag Day 2020 recommendation + <https://dnsflagday.net/2020/>`__) + + +@@UAHL@unbound.conf@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 :ref:`edns-buffer-size<unbound.conf.edns-buffer-size>`) + + +@@UAHL@unbound.conf@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 kilobytes, 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, otherwise 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 further requests waiting in TCP buffers. + + Default: 4m + + +@@UAHL@unbound.conf@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 reduced 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 + + +@@UAHL@unbound.conf@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 gigabytes (1024*1024 bytes in a megabyte). + + Default: 4m + + +@@UAHL@unbound.conf@msg-cache-slabs@@: *<number>* + Number of slabs in the message 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) + + +@@UAHL@unbound.conf@num-queries-per-thread@@: *<number>* + The number of queries that every thread will service simultaneously. + If more queries arrive that need servicing, and no queries can be jostled + out (see :ref:`jostle-timeout<unbound.conf.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) + + +@@UAHL@unbound.conf@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: + + .. code-block:: text + + (num-queries-per-thread / 2) / (average time for such long queries) qps + + The qps for short queries can be about: + + .. code-block:: text + + (num-queries-per-thread / 2) / (jostle-timeout in whole seconds) qps per thread + + about (2048/2)*5 = 5120 qps by default. + + Default: 200 + + +@@UAHL@unbound.conf@delay-close@@: *<msec>* + Extra delay for timeouted UDP ports before they are closed, in msec. + This prevents very delayed answer packets from the upstream (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) + + +@@UAHL@unbound.conf@udp-connect@@: *<yes or no>* + Perform *connect(2)* for UDP sockets that mitigates ICMP side channel + leakage. + + Default: yes + + +@@UAHL@unbound.conf@unknown-server-time-limit@@: *<msec>* + The wait time in msec for waiting for an unknown server to reply. + 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 + + +@@UAHL@unbound.conf@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. + It is nice to be a bit larger than + :ref:`serve-expired-client-timeout<unbound.conf.serve-expired-client-timeout>` + if that is enabled. + A value of ``1900`` msec is suggested. + The value ``0`` disables it. + + Default: 1900 + + +@@UAHL@unbound.conf@wait-limit@@: *<number>* + The number of replies that can wait for recursion, for an IP address. + 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 wait limits. + + Default: 1000 + + +@@UAHL@unbound.conf@wait-limit-cookie@@: *<number>* + The number of replies that can wait for recursion, for an IP address + that sent the query with a valid DNS Cookie. + Since the cookie validates the client address, this limit can be higher. + + Default: 10000 + + +@@UAHL@unbound.conf@wait-limit-netblock@@: *<netblock>* *<number>* + The wait limit for the netblock. + If not given the + :ref:`wait-limit<unbound.conf.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 netblock 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) + + +@@UAHL@unbound.conf@wait-limit-cookie-netblock@@: *<netblock>* *<number>* + The wait limit for the netblock, when the query has a DNS Cookie. + If not given, the + :ref:`wait-limit-cookie<unbound.conf.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) + + +@@UAHL@unbound.conf@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 + ``netstat -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 permission 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) + + +@@UAHL@unbound.conf@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: + + .. code-block:: text + + 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 permission to + bypass the limit, or the admin can use ``sysctl net.core.wmem_max``. + + On BSD, Solaris changes are similar to + :ref:`so-rcvbuf<unbound.conf.so-rcvbuf>`. + + Default: 4m + + +@@UAHL@unbound.conf@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 continues 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 + + +@@UAHL@unbound.conf@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 addresses that are going to exist later on, + with host failover configuration. + + This is a lot like + :ref:`interface-automatic<unbound.conf.interface-automatic>`, but that one + services all interfaces and with this option you can select which (future) + 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 + + +@@UAHL@unbound.conf@ip-freebind@@: *<yes or no>* + If yes, then use IP_FREEBIND socket option on sockets where Unbound 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 + :ref:`ip-transparent<unbound.conf.ip-transparent>` option is also + available. + + Default: no + + +@@UAHL@unbound.conf@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. + + +@@UAHL@unbound.conf@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 gigabytes (1024*1024 bytes in a megabyte). + + Default: 4m + + +@@UAHL@unbound.conf@rrset-cache-slabs@@: *<number>* + Number of slabs in the RRset 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) + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@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 domain + owner intended, and thus less queries are made to look up the data. + Zero makes sure the data in the cache is as the domain 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) + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 disabled and + :ref:`cache-min-ttl<unbound.conf.cache-min-ttl>` + is configured, it will take effect instead. + In that case you can set this to ``1`` to honor the upstream TTL. + This applies to NXDOMAIN and NODATA answers. + + Default: 0 (disabled) + + +@@UAHL@unbound.conf@infra-host-ttl@@: *<seconds>* + Time to live for entries in the host cache. + The host cache contains roundtrip timing, lameness and EDNS support + information. + + Default: 900 + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@infra-cache-numhosts@@: *<number>* + Number of hosts for which information is cached. + + Default: 10000 + + +@@UAHL@unbound.conf@infra-cache-min-rtt@@: *<msec>* + Lower limit for dynamic retransmit timeout calculation in infrastructure + cache. + Increase this value if using forwarders needing more time to do recursive + name resolution. + + Default: 50 + + +@@UAHL@unbound.conf@infra-cache-max-rtt@@: *<msec>* + Upper limit for dynamic retransmit timeout calculation in infrastructure + cache. + + Default: 120000 (2 minutes) + + +@@UAHL@unbound.conf@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 + :ref:`infra-host-ttl<unbound.conf.infra-host-ttl>` time to get probed + again. + + Default: no + + +@@UAHL@unbound.conf@define-tag@@: *"<list of tags>"* + Define the tags that can be used with + :ref:`local-zone<unbound.conf.local-zone>` and + :ref:`access-control<unbound.conf.access-control>`. + Enclose the list between quotes (``""``) and put spaces between tags. + + +@@UAHL@unbound.conf@do-ip4@@: *<yes or no>* + Enable or disable whether IPv4 queries are answered or issued. + + Default: yes + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@prefer-ip4@@: *<yes or no>* + If enabled, prefer IPv4 transport for sending DNS queries to internet + nameservers. + Useful if the IPv6 netblock the server has, the entire /64 of that is not + owned by one operator and the reputation of the netblock /64 is an issue, + using IPv4 then uses the IPv4 filters that the upstream servers have. + + Default: no + + +@@UAHL@unbound.conf@prefer-ip6@@: *<yes or no>* + If enabled, prefer IPv6 transport for sending DNS queries to internet + nameservers. + + Default: no + + +@@UAHL@unbound.conf@do-udp@@: *<yes or no>* + Enable or disable whether UDP queries are answered or issued. + + Default: yes + + +@@UAHL@unbound.conf@do-tcp@@: *<yes or no>* + Enable or disable whether TCP queries are answered or issued. + + Default: yes + + +@@UAHL@unbound.conf@tcp-mss@@: *<number>* + Maximum segment size (MSS) of TCP socket on which the server responds 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. + + +@@UAHL@unbound.conf@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 interface MTU and negotiation + between Unbound and other servers. + + +@@UAHL@unbound.conf@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 reduced, 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 + :ref:`edns-tcp-keepalive-timeout<unbound.conf.edns-tcp-keepalive-timeout>` + if + :ref:`edns-tcp-keepalive<unbound.conf.edns-tcp-keepalive>` + is enabled. + + Default: 30000 (30 seconds) + + +@@UAHL@unbound.conf@tcp-reuse-timeout@@: *<msec>* + The period Unbound will keep TCP persistent connections open to authority + servers. + + Default: 60000 (60 seconds) + + +@@UAHL@unbound.conf@max-reuse-tcp-queries@@: *<number>* + The maximum number of queries that can be sent on a persistent TCP + connection. + + Default: 200 + + +@@UAHL@unbound.conf@tcp-auth-query-timeout@@: *<number>* + Timeout in milliseconds for TCP queries to auth servers. + + Default: 3000 (3 seconds) + + +@@UAHL@unbound.conf@edns-tcp-keepalive@@: *<yes or no>* + Enable or disable EDNS TCP Keepalive. + + Default: no + + +@@UAHL@unbound.conf@edns-tcp-keepalive-timeout@@: *<msec>* + Overrides + :ref:`tcp-idle-timeout<unbound.conf.tcp-idle-timeout>` + when + :ref:`edns-tcp-keepalive<unbound.conf.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 connection before + the server times out. + + Default: 120000 (2 minutes) + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@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 + :ref:`forward-tcp-upstream<unbound.conf.forward.forward-tcp-upstream>` or + :ref:`stub-tcp-upstream<unbound.conf.stub.stub-tcp-upstream>` + respectively. + + Default: no + + +@@UAHL@unbound.conf@udp-upstream-without-downstream@@: *<yes or no>* + Enable UDP upstream even if :ref:`do-udp: no<unbound.conf.do-udp>` is set. + Useful for TLS service providers, that want no UDP downstream but use UDP + to fetch data upstream. + + Default: no (no changes) + + +@@UAHL@unbound.conf@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 + :ref:`tls-service-key<unbound.conf.tls-service-key>`). + + If you enable this, also configure a + :ref:`tls-cert-bundle<unbound.conf.tls-cert-bundle>` or use + :ref:`tls-win-cert<unbound.conf.tls-win-cert>` or + :ref:`tls-system-cert<unbound.conf.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 + :ref:`forward-tls-upstream<unbound.conf.forward.forward-tls-upstream>`. + And also with + :ref:`stub-tls-upstream<unbound.conf.stub.stub-tls-upstream>`. + If the + :ref:`tls-upstream<unbound.conf.tls-upstream>` + option is enabled, it is for all the forwards and stubs, where the + :ref:`forward-tls-upstream<unbound.conf.forward.forward-tls-upstream>` + and + :ref:`stub-tls-upstream<unbound.conf.stub.stub-tls-upstream>` + options are ignored, as if they had been set to yes. + + Default: no + + +@@UAHL@unbound.conf@ssl-upstream@@: *<yes or no>* + Alternate syntax for :ref:`tls-upstream<unbound.conf.tls-upstream>`. + If both are present in the config file the last is used. + + +@@UAHL@unbound.conf@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 + :ref:`tls-port<unbound.conf.tls-port>` or + :ref:`https-port<unbound.conf.https-port>`. + The file must contain the private key for the TLS session, the public + certificate is in the :ref:`tls-service-pem<unbound.conf.tls-service-pem>` + file and it must also be specified if + :ref:`tls-service-key<unbound.conf.tls-service-key>` is specified. + Enabling or disabling this service requires a restart (a reload is not + enough), because the key is read while root permissions are held and before + chroot (if any). + The ports enabled implicitly or explicitly via + :ref:`tls-port<unbound.conf.tls-port>` and + :ref:`https-port<unbound.conf.https-port>` do not provide normal DNS TCP + service. + + .. note:: + Unbound needs to be compiled with libnghttp2 in order to provide + DNS-over-HTTPS. + + Default: "" (disabled) + + +@@UAHL@unbound.conf@ssl-service-key@@: *<file>* + Alternate syntax for :ref:`tls-service-key<unbound.conf.tls-service-key>`. + + +@@UAHL@unbound.conf@tls-service-pem@@: *<file>* + The public key certificate pem file for the tls service. + + Default: "" (disabled) + + +@@UAHL@unbound.conf@ssl-service-pem@@: *<file>* + Alternate syntax for :ref:`tls-service-pem<unbound.conf.tls-service-pem>`. + + +@@UAHL@unbound.conf@tls-port@@: *<number>* + The port number on which to provide TCP TLS service. + Only interfaces configured with that port number as @number get the TLS + service. + + Default: 853 + + +@@UAHL@unbound.conf@ssl-port@@: *<number>* + Alternate syntax for :ref:`tls-port<unbound.conf.tls-port>`. + + +@@UAHL@unbound.conf@tls-cert-bundle@@: *<file>* + If null or ``""``, no file is used. + Set it to the certificate bundle file, for example + :file:`/etc/pki/tls/certs/ca-bundle.crt`. + These certificates are used for authenticating connections made to outside + peers. + For example :ref:`auth-zone urls<unbound.conf.auth.url>`, and also + DNS-over-TLS connections. + It is read at start up before permission drop and chroot. + + Default: "" (disabled) + + +@@UAHL@unbound.conf@ssl-cert-bundle@@: *<file>* + Alternate syntax for :ref:`tls-cert-bundle<unbound.conf.tls-cert-bundle>`. + + +@@UAHL@unbound.conf@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 certificates. + On windows this option uses the certificates from the cert store. + Use the :ref:`tls-cert-bundle<unbound.conf.tls-cert-bundle>` option on + other systems. + On other systems, this option enables the system certificates. + + Default: no + + +@@UAHL@unbound.conf@tls-system-cert@@: *<yes or no>* + This the same attribute as the + :ref:`tls-win-cert<unbound.conf.tls-win-cert>` attribute, under a + different name. + Because it is not windows specific. + + +@@UAHL@unbound.conf@tls-additional-port@@: *<portnr>* + List port numbers as + :ref:`tls-additional-port<unbound.conf.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. + + +@@UAHL@unbound.conf@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 Unbound server. + These files contain the secret key for the TLS session tickets. + First key use to encrypt and decrypt TLS session 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: + + .. code-block:: text + + 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: "" + + +@@UAHL@unbound.conf@tls-ciphers@@: *<string with cipher list>* + Set the list of ciphers to allow when serving TLS. + Use ``""`` for default ciphers. + + Default: "" + + +@@UAHL@unbound.conf@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: "" + + +@@UAHL@unbound.conf@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 + :ref:`pad-responses-block-size<unbound.conf.pad-responses-block-size>`. + + Default: yes + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 + :ref:`pad-queries-block-size<unbound.conf.pad-queries-block-size>`. + + Default: yes + + +@@UAHL@unbound.conf@pad-queries-block-size@@: *<number>* + The block size with which to pad queries sent over TLS upstreams. + + Default: 128 + + +@@UAHL@unbound.conf@tls-use-sni@@: *<yes or no>* + Enable or disable sending the SNI extension on TLS connections. + + .. note:: Changing the value requires a reload. + + Default: yes + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@http-endpoint@@: *<endpoint string>* + The HTTP endpoint to provide DNS-over-HTTPS service on. + + Default: /dns-query + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@http-query-buffer-size@@: *<size in bytes>* + Maximum number of bytes used for all HTTP/2 query buffers combined. + 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, append 'k', 'm' or 'g' for kilobytes, megabytes + or gigabytes (1024*1024 bytes in a megabyte). + + Default: 4m + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@proxy-protocol-port@@: *<portnr>* + List port numbers as + :ref:`proxy-protocol-port<unbound.conf.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 denied/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 listening interface. + + Can list multiple, each on a new statement. + + +@@UAHL@unbound.conf@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. + + Default: 853 + + +@@UAHL@unbound.conf@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 kilobytes, megabytes + or gigabytes (1024*1024 bytes in a megabyte). + New connections receive connection refused when the limit is exceeded. + New streams are reset when the limit is exceeded. + + Default: 8m + + +@@UAHL@unbound.conf@use-systemd@@: *<yes or no>* + Enable or disable systemd socket activation. + + Default: no + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@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 possible 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 network block. + The most specific netblock match is used, if none match + :ref:`refuse<unbound.conf.access-control.action.refuse>` is used. + The order of the access-control statements therefore does not matter. + The action can be + :ref:`deny<unbound.conf.access-control.action.deny>`, + :ref:`refuse<unbound.conf.access-control.action.refuse>`, + :ref:`allow<unbound.conf.access-control.action.allow>`, + :ref:`allow_setrd<unbound.conf.access-control.action.allow_setrd>`, + :ref:`allow_snoop<unbound.conf.access-control.action.allow_snoop>`, + :ref:`allow_cookie<unbound.conf.access-control.action.allow_cookie>`, + :ref:`deny_non_local<unbound.conf.access-control.action.deny_non_local>` or + :ref:`refuse_non_local<unbound.conf.access-control.action.refuse_non_local>`. + + + @@UAHL@unbound.conf.access-control.action@deny@@ + Stops queries from hosts from that netblock. + + @@UAHL@unbound.conf.access-control.action@refuse@@ + Stops queries too, but sends a DNS rcode REFUSED error message back. + + @@UAHL@unbound.conf.access-control.action@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 :ref:`allow<unbound.conf.access-control.action.allow>` action does + allow non-recursive queries to access 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-recursive queries any replies from the dynamic cache are + refused. + + @@UAHL@unbound.conf.access-control.action@allow_setrd@@ + Ignores the recursion desired (RD) bit and treats all requests 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 resolver DNS server, but only + supports stub domains and sends queries to the resolver DNS server with + the RD bit cleared. + + @@UAHL@unbound.conf.access-control.action@allow_snoop@@ + Gives non-recursive access too. + This gives both recursive and non recursive access. + The name *allow_snoop* refers to cache snooping, a technique to use + non-recursive 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 + :ref:`allow_snoop<unbound.conf.access-control.action.allow_snoop>` for + your administration host. + + @@UAHL@unbound.conf.access-control.action@allow_cookie@@ + Allows access only to UDP queries that contain a valid DNS Cookie as + specified in RFC 7873 and RFC 9018, when the + :ref:`answer-cookie<unbound.conf.answer-cookie>` option is enabled. + UDP queries containing 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, regardless of the presence of an DNS Cookie and regardless + of the :ref:`answer-cookie<unbound.conf.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. + + @@UAHL@unbound.conf.access-control.action@deny_non_local@@ + The + :ref:`deny_non_local<unbound.conf.access-control.action.deny_non_local>` + action is for hosts that are only allowed to query for the + authoritative :ref:`local-data<unbound.conf.local-data>`, they are not + allowed full recursion but only the static data. + Messages that are disallowed are dropped. + + @@UAHL@unbound.conf.access-control.action@refuse_non_local@@ + The + :ref:`refuse_non_local<unbound.conf.access-control.action.refuse_non_local>` + action is for hosts that are only allowed to query for the + authoritative :ref:`local-data<unbound.conf.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. + + +@@UAHL@unbound.conf@access-control-tag@@: *<IP netblock> "<list of tags>"* + Assign tags to :ref:`access-control<unbound.conf.access-control>` + elements. + Clients using this access control element use localzones that are tagged + with one of these tags. + + Tags must be defined in :ref:`define-tag<unbound.conf.define-tag>`. + Enclose list of tags in quotes (``""``) and put spaces between tags. + + If :ref:`access-control-tag<unbound.conf.access-control-tag>` is + configured for a netblock that does not have an + :ref:`access-control<unbound.conf.access-control>`, an access-control + element with action :ref:`allow<unbound.conf.access-control.action.allow>` + is configured for this netblock. + + +@@UAHL@unbound.conf@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 action is the + first tag match between + :ref:`access-control-tag<unbound.conf.access-control-tag>` and + :ref:`local-zone-tag<unbound.conf.local-zone-tag>` where "first" comes + from the order of the :ref:`define-tag<unbound.conf.define-tag>` values. + + +@@UAHL@unbound.conf@access-control-tag-data@@: *<IP netblock> <tag> "<resource record string>"* + Set redirect data for particular tag for given access control element. + + +@@UAHL@unbound.conf@access-control-view@@: *<IP netblock> <view name>* + Set view for given access control element. + + +@@UAHL@unbound.conf@interface-action@@: *<ip address or interface name [@port]> <action>* + Similar to :ref:`access-control<unbound.conf.access-control>` but for + interfaces. + + The action is the same as the ones defined under + :ref:`access-control<unbound.conf.access-control>`. + + Default action for interfaces is + :ref:`refuse<unbound.conf.access-control.action.refuse>`. + By default only localhost (the 127.0.0.0/8 IP netblock, not the loopback + interface) is implicitly allowed through the default + :ref:`access-control<unbound.conf.access-control>` behavior. + 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 + :ref:`interface<unbound.conf.interface>` and that any + **access-control\*:** attribute overrides all **interface-\*:** + attributes for targeted clients. + + +@@UAHL@unbound.conf@interface-tag@@: *<ip address or interface name [@port]> <"list of tags">* + Similar to :ref:`access-control-tag<unbound.conf.access-control-tag>` but + for interfaces. + + .. note:: + The interface needs to be already specified with + :ref:`interface<unbound.conf.interface>` and that any + **access-control\*:** attribute overrides all **interface-\*:** + attributes for targeted clients. + + +@@UAHL@unbound.conf@interface-tag-action@@: *<ip address or interface name [@port]> <tag> <action>* + Similar to + :ref:`access-control-tag-action<unbound.conf.access-control-tag-action>` + but for interfaces. + + .. note:: + The interface needs to be already specified with + :ref:`interface<unbound.conf.interface>` and that any + **access-control\*:** attribute overrides all **interface-\*:** + attributes for targeted clients. + + +@@UAHL@unbound.conf@interface-tag-data@@: *<ip address or interface name [@port]> <tag> <"resource record string">* + Similar to + :ref:`access-control-tag-data<unbound.conf.access-control-tag-data>` but + for interfaces. + + .. note:: + The interface needs to be already specified with + :ref:`interface<unbound.conf.interface>` and that any + **access-control\*:** attribute overrides all **interface-\*:** + attributes for targeted clients. + + +@@UAHL@unbound.conf@interface-view@@: *<ip address or interface name [@port]> <view name>* + Similar to :ref:`access-control-view<unbound.conf.access-control-view>` + but for interfaces. + + .. note:: + The interface needs to be already specified with + :ref:`interface<unbound.conf.interface>` and that any + **access-control\*:** attribute overrides all **interface-\*:** + attributes for targeted clients. + + +@@UAHL@unbound.conf@chroot@@: *<directory>* + If :ref:`chroot<unbound.conf.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 reload. + + 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 directory, or as an absolute path + relative to the original root. + In the last case the path is adjusted to remove the unused portion. + + The pidfile can be either a relative path to the working directory, or an + absolute path relative to the original root. + It is written just prior to chroot and dropping permissions. + This allows the pidfile to be :file:`/var/run/unbound.pid` and the chroot + to be :file:`/var/unbound`, for example. + Note that Unbound is not able to remove the pidfile after termination when + it is located outside of the chroot directory. + + Additionally, Unbound may need to access :file:`/dev/urandom` (for entropy) + from inside the chroot. + + If given, a *chroot(2)* is done to the given directory. + If you give ``""`` no *chroot(2)* is performed. + + Default: @UNBOUND_CHROOT_DIR@ + + +@@UAHL@unbound.conf@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 + requires privileges, then a reload will fail; a restart is needed. + + Default: @UNBOUND_USERNAME@ + + +@@UAHL@unbound.conf@directory@@: *<directory>* + Sets the working directory for the program. + On Windows the string "%EXECUTABLE%" tries to change to the directory that + :command:`unbound.exe` resides in. + If you give a :ref:`server: directory: + \<directory\><unbound.conf.directory>` before + :ref:`include<unbound.conf.include>` file statements then those includes + can be relative to the working directory. + + Default: @UNBOUND_RUN_DIR@ + + +@@UAHL@unbound.conf@logfile@@: *<filename>* + If ``""`` is given, logging goes to stderr, or nowhere once daemonized. + The logfile is appended to, in the following format: + + .. code-block:: text + + [seconds since 1970] unbound[pid:tid]: type: message. + + If this option is given, the :ref:`use-syslog<unbound.conf.use-syslog>` + attribute is internally set to ``no``. + + The logfile is reopened (for append) when the config file is reread, on + SIGHUP. + + Default: "" (disabled) + + +@@UAHL@unbound.conf@use-syslog@@: *<yes or no>* + Sets Unbound to send log messages to the syslogd, using *syslog(3)*. + The log facility LOG_DAEMON is used, with identity "unbound". + The logfile setting is overridden when + :ref:`use-syslog: yes<unbound.conf.use-syslog>` is set. + + Default: yes + + +@@UAHL@unbound.conf@log-identity@@: *<string>* + If ``""`` is given, then the name of the executable, usually + "unbound" 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: "" + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@log-time-iso@@: *<yes or no>* + Log time in ISO8601 format, if + :ref:`log-time-ascii: yes<unbound.conf.log-time-ascii>` + is also set. + + Default: no + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@log-tag-queryreply@@: *<yes or no>* + Prints the word 'query' and 'reply' with + :ref:`log-queries<unbound.conf.log-queries>` and + :ref:`log-replies<unbound.conf.log-replies>`. + This makes filtering logs easier. + + Default: no (backwards compatible) + + +@@UAHL@unbound.conf@log-destaddr@@: *<yes or no>* + Prints the destination address, port and type in the + :ref:`log-replies<unbound.conf.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 + + +@@UAHL@unbound.conf@log-local-actions@@: *<yes or no>* + Print log lines to inform about local zone actions. + These lines are like the :ref:`local-zone type + inform<unbound.conf.local-zone.type.inform>` print outs, but they are also + printed for the other types of local zones. + + Default: no + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@pidfile@@: *<filename>* + The process id is written to the file. + Default is :file:`"@UNBOUND_PIDFILE@"`. + So, + + .. code-block:: text + + kill -HUP `cat @UNBOUND_PIDFILE@` + + triggers a reload, + + .. code-block:: text + + kill -TERM `cat @UNBOUND_PIDFILE@` + + gracefully terminates. + + Default: @UNBOUND_PIDFILE@ + + +@@UAHL@unbound.conf@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 default may become outdated, when servers change, therefore it is good + practice to use a root hints file. + + Default: "" + + +@@UAHL@unbound.conf@hide-identity@@: *<yes or no>* + If enabled 'id.server' and 'hostname.bind' queries are REFUSED. + + Default: no + + +@@UAHL@unbound.conf@identity@@: *<string>* + Set the identity to report. + If set to ``""``, then the hostname of the server is returned. + + Default: "" + + +@@UAHL@unbound.conf@hide-version@@: *<yes or no>* + If enabled 'version.server' and 'version.bind' queries are REFUSED. + + Default: no + + +@@UAHL@unbound.conf@version@@: *<string>* + Set the version to report. + If set to ``""``, then the package version is returned. + + Default: "" + + +@@UAHL@unbound.conf@hide-http-user-agent@@: *<yes or no>* + If enabled the HTTP header User-Agent is not set. + Use with caution as some webserver configurations may reject HTTP requests + lacking this header. + If needed, it is better to explicitly set the + :ref:`http-user-agent<unbound.conf.http-user-agent>` below. + + Default: no + + +@@UAHL@unbound.conf@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: "" + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@hide-trustanchor@@: *<yes or no>* + If enabled 'trustanchor.unbound' queries are REFUSED. + + Default: no + + +@@UAHL@unbound.conf@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 numbers. + 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" + + +@@UAHL@unbound.conf@harden-short-bufsize@@: *<yes or no>* + Very small EDNS buffer sizes from queries are ignored. + + Default: yes (as described in the standard) + + +@@UAHL@unbound.conf@harden-large-queries@@: *<yes or no>* + Very large queries are ignored. + Default is no, since it is legal protocol wise to send these, and could be + necessary for operation if TSIG or EDNS payload is very large. + + Default: no + + +@@UAHL@unbound.conf@harden-glue@@: *<yes or no>* + Will trust glue only if it is within the servers authority. + + Default: yes + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 attack that disables security + for a zone. + + Default: yes + + +@@UAHL@unbound.conf@harden-below-nxdomain@@: *<yes or no>* + From :rfc:`8020` (with title "NXDOMAIN: There Really Is Nothing + Underneath"), returns NXDOMAIN to queries for a name below another name + that is already known to be NXDOMAIN. + DNSSEC mandates NOERROR for empty nonterminals, hence this is possible. + Very old software might return NXDOMAIN for empty nonterminals (that + usually happen for reverse IP address lookups), and thus may be + incompatible 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 + + +@@UAHL@unbound.conf@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 validation 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 + :ref:`target-fetch-policy<unbound.conf.target-fetch-policy>` to increase + the max depth that is checked to. + + Default: no + + +@@UAHL@unbound.conf@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 signatures 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 + + +@@UAHL@unbound.conf@harden-unknown-additional@@: *<yes or no>* + Harden against unknown records in the authority section and additional + section. + If no, such records are copied from the upstream and presented to the + client together with the answer. + If yes, it could hamper future protocol developments that want to add + records. + + Default: no + + +@@UAHL@unbound.conf@use-caps-for-id@@: *<yes or no>* + Use 0x20-encoded random bits in the query to foil spoof attempts. + 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 implementation of draft dns-0x20. + + Default: no + + +@@UAHL@unbound.conf@caps-exempt@@: *<domain>* + Exempt the domain so that it does not receive caps-for-id perturbed + 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 different domains. + + +@@UAHL@unbound.conf@caps-whitelist@@: *<domain>* + Alternate syntax for :ref:`caps-exempt<unbound.conf.caps-exempt>`. + + +@@UAHL@unbound.conf@qname-minimisation@@: *<yes or no>* + Send minimum amount of information to upstream servers to enhance 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 + + +@@UAHL@unbound.conf@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 + :ref:`qname-minimisation<unbound.conf.qname-minimisation>` is enabled. + + Default: no + + +@@UAHL@unbound.conf@aggressive-nsec@@: *<yes or no>* + Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN and other + denials, using information from previous NXDOMAINs answers. + It helps to reduce the query rate towards targets that get a very high + nonexistent name lookup rate. + + Default: yes + + +@@UAHL@unbound.conf@private-address@@: *<IP address or subnet>* + Give IPv4 of IPv6 addresses or classless subnets. + These are addresses on your private network, and are not allowed to be + returned for public internet names. + Any occurrence of such addresses 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. + + Some names can be allowed to contain your private addresses, by default all + the :ref:`local-data<unbound.conf.local-data>` that you configured is + allowed to, and you can specify additional names using + :ref:`private-domain<unbound.conf.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 internet. + + 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. + + +@@UAHL@unbound.conf@private-domain@@: *<domain name>* + Allow this domain, and all its subdomains to contain private addresses. + Give multiple times to allow multiple domain names to contain private + addresses. + + Default: (none) + + +@@UAHL@unbound.conf@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 action is to clear the rrset and message caches, hopefully + flushing away any poison. + A value of 10 million is suggested. + + Default: 0 (disabled) + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@do-not-query-localhost@@: *<yes or no>* + If yes, localhost is added to the + :ref:`do-not-query-address<unbound.conf.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 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 requests. + It does use a little more CPU. + Also if the cache is set to 0, it is no use. + + Default: no + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@rrset-roundrobin@@: *<yes or no>* + If yes, Unbound rotates RRSet order in response (the random number is taken + from the query ID, for speed and thread safety). + + Default: yes + + +@@UAHL@unbound.conf@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 sections 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 + + +@@UAHL@unbound.conf@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 unexpectedly missing. + The validator will insist in RRSIGs for DNSSEC signed domains regardless of + this setting, if a trust anchor is loaded. + + Default: no + + +@@UAHL@unbound.conf@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 below). + + .. 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 iterator. + + 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" + + +@@UAHL@unbound.conf@trust-anchor-file@@: *<filename>* + File with trusted keys for validation. + Both DS and DNSKEY entries can appear in the file. + The format of the file is the standard DNS Zone file format. + + Default: "" (no trust anchor file) + + +@@UAHL@unbound.conf@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 + :ref:`trust-anchor-file<unbound.conf.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 :ref:`chroot<unbound.conf.chroot>` (if that is + used). + + Default: "" (no auto trust anchor file) + + +@@UAHL@unbound.conf@trust-anchor@@: *"<Resource Record>"* + A DS or DNSKEY RR for a key to use for validation. + Multiple entries can be given to specify multiple trusted keys, in addition + to the :ref:`trust-anchor-file<unbound.conf.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) + + +@@UAHL@unbound.conf@trusted-keys-file@@: *<filename>* + File with trusted keys for validation. + Specify more than one file with several entries, one file per entry. + Like :ref:`trust-anchor-file<unbound.conf.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) + + +@@UAHL@unbound.conf@trust-anchor-signaling@@: *<yes or no>* + Send :rfc:`8145` key tag query after trust anchor priming. + + Default: yes + + +@@UAHL@unbound.conf@root-key-sentinel@@: *<yes or no>* + Root key trust anchor sentinel. + + Default: yes + + +@@UAHL@unbound.conf@domain-insecure@@: *<domain name>* + Sets *<domain name>* to be insecure, DNSSEC chain of trust is ignored + 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) + + +@@UAHL@unbound.conf@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 signature inception and + expiration. + The value -1 ignores the date altogether, useful for some special + applications. + + Default: 0 (disabled) + + +@@UAHL@unbound.conf@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 (expiration - 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 signatures. + + Default: 3600 (1 hour) + + +@@UAHL@unbound.conf@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 (expiration - 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) + + +@@UAHL@unbound.conf@val-max-restart@@: *<number>* + The maximum number the validator should restart validation with another + authority in case of failed validation. + + Default: 5 + + +@@UAHL@unbound.conf@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 instead. + The time interval prevents repeated revalidation of bogus data. + + Default: 60 + + +@@UAHL@unbound.conf@val-clean-additional@@: *<yes or no>* + Instruct the validator to remove data from the additional section of secure + messages that are not signed properly. + Messages that are insecure, bogus, indeterminate or unchecked are not + affected. + Use this setting to protect the users that rely on this validator for + authentication from potentially bad data in the additional section. + + Default: yes + + +@@UAHL@unbound.conf@val-log-level@@: *<number>* + Have the validator print validation failures to the log. + Regardless 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 validation 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) + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 Disabled) flag does not disable checking any more. + This is useful if legacy (w2008) servers that set the CD flag but cannot + validate DNSSEC themselves are the clients, and then Unbound provides them + with DNSSEC protection. + + Default: no + + +@@UAHL@unbound.conf@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 + information. + 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 already configured for DNSSEC + validation (i.e., the validator module is enabled; default) this option is + implicitly turned off with a warning as to not break DNSSEC validation in + Unbound. + + Default: no + + +@@UAHL@unbound.conf@serve-expired@@: *<yes or no>* + If enabled, Unbound attempts to serve old responses from cache with a TTL + of :ref:`serve-expired-reply-ttl<unbound.conf.serve-expired-reply-ttl>` in + the response. + By default the expired answer will be used after a resolution attempt + errored out or is taking more than + :ref:`serve-expired-client-timeout<unbound.conf.serve-expired-client-timeout>` + to resolve. + + Default: no + + +@@UAHL@unbound.conf@serve-expired-ttl@@: *<seconds>* + Limit serving of expired responses to configured seconds after expiration. + ``0`` disables the limit. + This option only applies when + :ref:`serve-expired<unbound.conf.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 + + +@@UAHL@unbound.conf@serve-expired-ttl-reset@@: *<yes or no>* + Set the TTL of expired records to the + :ref:`serve-expired-ttl<unbound.conf.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 + + +@@UAHL@unbound.conf@serve-expired-reply-ttl@@: *<seconds>* + TTL value to use when replying with expired data. + If + :ref:`serve-expired-client-timeout<unbound.conf.serve-expired-client-timeout>` + is also used then it is RECOMMENDED to use 30 as the value (:rfc:`8767`). + + Default: 30 + + +@@UAHL@unbound.conf@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 immediately responding with + expired data. + Setting this to ``0`` will disable this behavior and instead serve the + expired record immediately from the cache before attempting to refresh it + via resolution. + + Default: 1800 + + +@@UAHL@unbound.conf@serve-original-ttl@@: *<yes or no>* + If enabled, Unbound will always return the original TTL as received from + the upstream name server rather than the decrementing 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 :ref:`cache-min-ttl<unbound.conf.cache-min-ttl>` + and :ref:`cache-max-ttl<unbound.conf.cache-max-ttl>` are ignored. + + Default: no + + +@@UAHL@unbound.conf@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 instead 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" + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@add-holddown@@: *<seconds>* + Instruct the + :ref:`auto-trust-anchor-file<unbound.conf.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) + + +@@UAHL@unbound.conf@del-holddown@@: *<seconds>* + Instruct the + :ref:`auto-trust-anchor-file<unbound.conf.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) + + +@@UAHL@unbound.conf@keep-missing@@: *<seconds>* + Instruct the + :ref:`auto-trust-anchor-file<unbound.conf.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 missing anchors, as per the RFC. + + Default: 31622400 (366 days) + + +@@UAHL@unbound.conf@permit-small-holddown@@: *<yes or no>* + Debug option that allows the autotrust 5011 rollover timers to assume very + small values. + + Default: no + + +@@UAHL@unbound.conf@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 gigabytes (1024*1024 bytes in a megabyte). + + Default: 4m + + +@@UAHL@unbound.conf@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 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) + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 enabled, 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 + + +@@UAHL@unbound.conf@insecure-lan-zones@@: *<yes or no>* + If enabled, then reverse lookups in private address space are not + validated. + This is usually required whenever + :ref:`unblock-lan-zones<unbound.conf.unblock-lan-zones>` is used. + + Default: no + + +@@UAHL@unbound.conf@local-zone@@: *<zone> <type>* + Configure a local zone. + The type determines the answer to give if there is no match from + :ref:`local-data<unbound.conf.local-data>`. + The types are + :ref:`deny<unbound.conf.local-zone.type.deny>`, + :ref:`refuse<unbound.conf.local-zone.type.refuse>`, + :ref:`static<unbound.conf.local-zone.type.static>`, + :ref:`transparent<unbound.conf.local-zone.type.transparent>`, + :ref:`redirect<unbound.conf.local-zone.type.redirect>`, + :ref:`nodefault<unbound.conf.local-zone.type.nodefault>`, + :ref:`typetransparent<unbound.conf.local-zone.type.typetransparent>`, + :ref:`inform<unbound.conf.local-zone.type.inform>`, + :ref:`inform_deny<unbound.conf.local-zone.type.inform_deny>`, + :ref:`inform_redirect<unbound.conf.local-zone.type.inform_redirect>`, + :ref:`always_transparent<unbound.conf.local-zone.type.always_transparent>`, + :ref:`block_a<unbound.conf.local-zone.type.block_a>`, + :ref:`always_refuse<unbound.conf.local-zone.type.always_refuse>`, + :ref:`always_nxdomain<unbound.conf.local-zone.type.always_nxdomain>`, + :ref:`always_null<unbound.conf.local-zone.type.always_null>`, + :ref:`noview<unbound.conf.local-zone.type.noview>`, + and are explained below. + After that the default settings are listed. + Use :ref:`local-data<unbound.conf.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 :ref:`stub-zone<unbound.conf.stub>` for it as detailed in the + stub zone section below. + A :ref:`stub-zone<unbound.conf.stub>` can be used to have unbound + send queries to another server, an authoritative server, to fetch the + information. + With a :ref:`forward-zone<unbound.conf.forward>`, unbound sends + queries to a server that is a recursive server to fetch the information. + With an :ref:`auth-zone<unbound.conf.auth>` a zone can be loaded from + file and used, it can be used like a local zone for users downstream, or + the :ref:`auth-zone<unbound.conf.auth>` information can be used to fetch + information from when resolving like it is an upstream server. + The :ref:`forward-zone<unbound.conf.forward>` and + :ref:`auth-zone<unbound.conf.auth>` options are described in their + sections below. + If you want to perform filtering of the information that the users can + fetch, the :ref:`local-zone<unbound.conf.local-zone>` and + :ref:`local-data<unbound.conf.local-data>` statements allow for this, but + also the :ref:`rpz<unbound.conf.rpz>` functionality can be used, described + in the RPZ section. + + @@UAHL@unbound.conf.local-zone.type@deny@@ + Do not send an answer, drop the query. + If there is a match from local data, the query is answered. + + @@UAHL@unbound.conf.local-zone.type@refuse@@ + Send an error message reply, with rcode REFUSED. + If there is a match from local data, the query is answered. + + @@UAHL@unbound.conf.local-zone.type@static@@ + If there is a match from local data, the query is answered. + Otherwise, the query is answered with NODATA or NXDOMAIN. + For a negative answer a SOA is included in the answer if present as + :ref:`local-data<unbound.conf.local-data>` for the zone apex domain. + + @@UAHL@unbound.conf.local-zone.type@transparent@@ + If there is a match from :ref:`local-data<unbound.conf.local-data>`, + the query is answered. + Otherwise if the query has a different name, the query is resolved + normally. + If the query is for a name given in + :ref:`local-data<unbound.conf.local-data>` but no such type of data is + given in localdata, then a NOERROR NODATA answer is returned. + If no :ref:`local-zone<unbound.conf.local-zone>` is given + :ref:`local-data<unbound.conf.local-data>` causes a transparent zone + to be created by default. + + @@UAHL@unbound.conf.local-zone.type@typetransparent@@ + If there is a match from local data, the query is answered. + 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 + :ref:`transparent<unbound.conf.local-zone.type.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 NODATA reply for AAAA + queries. + + @@UAHL@unbound.conf.local-zone.type@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: + + .. code-block:: text + + 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. + + @@UAHL@unbound.conf.local-zone.type@inform@@ + The query is answered normally, same as + :ref:`transparent<unbound.conf.local-zone.type.transparent>`. + The client IP address (@portnumber) is printed to the logfile. + The log message is: + + .. code-block:: text + + timestamp, unbound-pid, info: zonename inform IP@port queryname type class. + + This option can be used for normal resolution, but machines looking up + infected names are logged, eg. to run antivirus on them. + + @@UAHL@unbound.conf.local-zone.type@inform_deny@@ + The query is dropped, like + :ref:`deny<unbound.conf.local-zone.type.deny>`, and logged, like + :ref:`inform<unbound.conf.local-zone.type.inform>`. + Ie. find infected machines without answering the queries. + + @@UAHL@unbound.conf.local-zone.type@inform_redirect@@ + The query is redirected, like + :ref:`redirect<unbound.conf.local-zone.type.redirect>`, and logged, + like :ref:`inform<unbound.conf.local-zone.type.inform>`. + Ie. answer queries with fixed data and also log the machines that ask. + + @@UAHL@unbound.conf.local-zone.type@always_transparent@@ + Like :ref:`transparent<unbound.conf.local-zone.type.transparent>`, but + ignores local data and resolves normally. + + @@UAHL@unbound.conf.local-zone.type@block_a@@ + Like :ref:`transparent<unbound.conf.local-zone.type.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. + + @@UAHL@unbound.conf.local-zone.type@always_refuse@@ + Like :ref:`refuse<unbound.conf.local-zone.type.refuse>`, but ignores + local data and refuses the query. + + @@UAHL@unbound.conf.local-zone.type@always_nxdomain@@ + Like :ref:`static<unbound.conf.local-zone.type.static>`, but ignores + local data and returns NXDOMAIN for the query. + + @@UAHL@unbound.conf.local-zone.type@always_nodata@@ + Like :ref:`static<unbound.conf.local-zone.type.static>`, but ignores + local data and returns NODATA for the query. + + @@UAHL@unbound.conf.local-zone.type@always_deny@@ + Like :ref:`deny<unbound.conf.local-zone.type.deny>`, but ignores local + data and drops the query. + + @@UAHL@unbound.conf.local-zone.type@always_null@@ + Always returns ``0.0.0.0`` or ``::0`` for every name in the zone. + Like :ref:`redirect<unbound.conf.local-zone.type.redirect>` with zero + data for A and AAAA. + Ignores local data in the zone. + Used for some block lists. + + @@UAHL@unbound.conf.local-zone.type@noview@@ + Breaks out of that view and moves towards the global local zones for + answer to the query. + If the :ref:`view-first<unbound.conf.view.view-first>` is no, it'll + resolve normally. + If :ref:`view-first<unbound.conf.view.view-first>` is enabled, it'll + break perform that step and check the global answers. + For when the view has view specific overrides but some zone has to be + answered from global local zone contents. + + @@UAHL@unbound.conf.local-zone.type@nodefault@@ + Used to turn off default contents for AS112 zones. + The other types also turn off default contents for the zone. + The :ref:`nodefault<unbound.conf.local-zone.type.nodefault>` option has + no other effect than turning off default contents for the given zone. + Use :ref:`nodefault<unbound.conf.local-zone.type.nodefault>` if you use + exactly that zone, if you want to use a subzone, use + :ref:`transparent<unbound.conf.local-zone.type.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 private 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 + :ref:`local-zone<unbound.conf.local-zone>` of that name, or using the + :ref:`nodefault<unbound.conf.local-zone.type.nodefault>` type. + Below is a list of the default zone contents. + + @@UAHL@unbound.conf.local-zone.defaults@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: + + .. code-block:: text + + 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" + + @@UAHL@unbound.conf.local-zone.defaults@reverse IPv4 loopback@@ + Default content: + + .. code-block:: text + + 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." + + @@UAHL@unbound.conf.local-zone.defaults@reverse IPv6 loopback@@ + Default content: + + .. code-block:: text + + 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." + + @@UAHL@unbound.conf.local-zone.defaults@home.arpa@@ (:rfc:`8375`) + Default content: + + .. code-block:: text + + 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" + + @@UAHL@unbound.conf.local-zone.defaults@resolver.arpa@@ (:rfc:`9462`) + Default content: + + .. code-block:: text + + 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" + + @@UAHL@unbound.conf.local-zone.defaults@service.arpa@@ (draft-ietf-dnssd-srp-25) + Default content: + + .. code-block:: text + + 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" + + @@UAHL@unbound.conf.local-zone.defaults@onion@@ (:rfc:`7686`) + Default content: + + .. code-block:: text + + 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" + + @@UAHL@unbound.conf.local-zone.defaults@test@@ (:rfc:`6761`) + Default content: + + .. code-block:: text + + 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" + + @@UAHL@unbound.conf.local-zone.defaults@invalid@@ (:rfc:`6761`) + Default content: + + .. code-block:: text + + 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" + + @@UAHL@unbound.conf.local-zone.defaults@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 :ref:`local-zone<unbound.conf.local-zone>` is set static and as + :ref:`local-data<unbound.conf.local-data>` SOA and NS records are + provided. + + @@UAHL@unbound.conf.local-zone.defaults@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 + Address Space). + + @@UAHL@unbound.conf.local-zone.defaults@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.`` + + @@UAHL@unbound.conf.local-zone.defaults@reverse IPv6 Locally Assigned Local Addresses@@ (:rfc:`4193`) + Reverse data for zone ``D.F.ip6.arpa``. + + @@UAHL@unbound.conf.local-zone.defaults@reverse IPv6 Link Local Addresses@@ (:rfc:`4291`) + Reverse data for zones ``8.E.F.ip6.arpa`` to ``B.E.F.ip6.arpa``. + + @@UAHL@unbound.conf.local-zone.defaults@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: + + .. code-block:: text + + 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 :ref:`local-zone<unbound.conf.local-zone>` statement. + This also works with the other default zones. + + +@@UAHL@unbound.conf@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 + :ref:`local-zone<unbound.conf.local-zone>` as redirect. + If not matched exactly, the :ref:`local-zone<unbound.conf.local-zone>` + type determines further processing. + If :ref:`local-data<unbound.conf.local-data>` is configured that is not a + subdomain of a :ref:`local-zone<unbound.conf.local-zone>`, a + :ref:`transparent local-zone<unbound.conf.local-zone.type.transparent>` is + configured. + For record types such as TXT, use single quotes, as in: + + .. code-block:: text + + local-data: 'example. TXT "text"' + + .. note:: + If you need more complicated authoritative data, with referrals, + wildcards, CNAME/DNAME support, or DNSSEC authoritative service, setup + a :ref:`stub-zone<unbound.conf.stub>` for it as detailed in the stub + zone section below. + + +@@UAHL@unbound.conf@local-data-ptr@@: *"IPaddr name"* + Configure local data shorthand for a PTR record with the reversed 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"`` + + +@@UAHL@unbound.conf@local-zone-tag@@: *<zone> <"list of tags">* + Assign tags to local zones. + Tagged localzones will only be applied when the used + :ref:`access-control<unbound.conf.access-control>` element has a matching + tag. + Tags must be defined in :ref:`define-tag<unbound.conf.define-tag>`. + Enclose list of tags in quotes (``""``) and put spaces between tags. + When there are multiple tags it checks if the intersection of the list of + tags for the query and :ref:`local-zone-tag<unbound.conf.local-zone-tag>` + is non-empty. + + +@@UAHL@unbound.conf@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 configured for the local zone + (both tagged and untagged) and regardless the type configured using + :ref:`access-control-tag-action<unbound.conf.access-control-tag-action>`. + + +@@UAHL@unbound.conf@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 + :ref:`access-control-tag-action<unbound.conf.access-control-tag-action>`, + but there are some exceptions. + + Actions for :ref:`response-ip<unbound.conf.response-ip>` are different + from those for :ref:`local-zone<unbound.conf.local-zone>` in that in case + of the former there is no point of such conditions as "the query matches it + but there is no local data". + Because of this difference, the semantics of + :ref:`response-ip<unbound.conf.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 configuration to be rejected as faulty. + The *deny* action is non-conditional, 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. + + +@@UAHL@unbound.conf@response-ip-data@@: *<IP-netblock> <"resource record string">* + This requires use of the ``respip`` module. + + This specifies the action data for + :ref:`response-ip<unbound.conf.response-ip>` with action being to redirect + as specified by *<"resource record string">*. + *<"Resource record string">* is similar to that of + :ref:`access-control-tag-action<unbound.conf.access-control-tag-action>`, + 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 + :ref:`response-ip-data<unbound.conf.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. + + +@@UAHL@unbound.conf@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 :ref:`access-control-tag<unbound.conf.access-control-tag>` is + defined for the client and it includes one of the tags for the response IP, + the corresponding + :ref:`access-control-tag-action<unbound.conf.access-control-tag-action>` + will apply. + Tag matching rule is the same as that for + :ref:`access-control-tag<unbound.conf.access-control-tag>` and + :ref:`local-zone<unbound.conf.local-zone>`. + Unlike :ref:`local-zone-tag<unbound.conf.local-zone-tag>`, + :ref:`response-ip-tag<unbound.conf.response-ip-tag>` can be defined for an + *<IP-netblock>* even if no :ref:`response-ip<unbound.conf.response-ip>` is + defined for that netblock. + If multiple :ref:`response-ip-tag<unbound.conf.response-ip-tag>` options + are specified 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 + :ref:`access-control-tag-action<unbound.conf.access-control-tag-action>` + that has a matching tag with + :ref:`response-ip-tag<unbound.conf.response-ip-tag>` can be those that are + "invalid" for :ref:`response-ip<unbound.conf.response-ip>` listed above, + since + :ref:`access-control-tag-action<unbound.conf.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 + :ref:`response-ip-data<unbound.conf.response-ip-data>` will generally + result in NOERROR/NODATA instead of NXDOMAIN, since the + :ref:`response-ip<unbound.conf.response-ip>` data are inherently type + specific, and non-existence of data does not indicate anything 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 :ref:`response-ip<unbound.conf.response-ip>` + configuration, then the result will be NOERROR/NODATA. + The only case where NXDOMAIN is returned is when an + :ref:`always_nxdomain<unbound.conf.local-zone.type.always_nxdomain>` + action applies. + + +@@UAHL@unbound.conf@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 responses 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 + + +@@UAHL@unbound.conf@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 structure likely does not + need to be large. + + Default: 4m + + +@@UAHL@unbound.conf@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) + + +@@UAHL@unbound.conf@ratelimit-factor@@: *<number>* + Set the amount of queries to rate limit when the limit is exceeded. + If set to 0, all queries are dropped for domains 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 + + +@@UAHL@unbound.conf@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, except for + :ref:`ratelimit-factor<unbound.conf.ratelimit-factor>`, until demand + decreases below the configured ratelimit for a 2 second rate window. + Useful to set :ref:`ratelimit<unbound.conf.ratelimit>` to a suspicious + rate to aggressively limit unusually high traffic. + + Default: no + + +@@UAHL@unbound.conf@ratelimit-for-domain@@: *<domain> <number qps or 0>* + Override the global :ref:`ratelimit<unbound.conf.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. + + +@@UAHL@unbound.conf@ratelimit-below-domain@@: *<domain> <number qps or 0>* + Override the global :ref:`ratelimit<unbound.conf.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 + :ref:`ratelimit-for-domain<unbound.conf.ratelimit-for-domain>` to set + that, you might want to use different settings for a top-level-domain and + subdomains. + A value of 0 will disable ratelimiting for domain names that end in this + name. + + +@@UAHL@unbound.conf@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 completely dropped and will not receive a reply, SERVFAIL + or otherwise. + 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, + :ref:`ip-ratelimit-cookie<unbound.conf.ip-ratelimit-cookie>` + can be used instead. + + Default: 0 (disabled) + + +@@UAHL@unbound.conf@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 reply, SERVFAIL + or otherwise. + IP ratelimiting happens before looking in the cache. + This option could be useful in combination with + :ref:`allow_cookie<unbound.conf.access-control.action.allow_cookie>`, in an + attempt to mitigate other amplification attacks than UDP reflections (e.g., + attacks targeting Unbound itself) which are already handled with DNS + Cookies. + If used, the value is suggested to be higher than + :ref:`ip-ratelimit<unbound.conf.ip-ratelimit>` e.g., tenfold. + + Default: 0 (disabled) + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 automatically to be a power of + 2 close to the number of configured threads in multi-threaded environments. + + Default: (unconfigured) + + +@@UAHL@unbound.conf@ip-ratelimit-factor@@: *<number>* + Set the amount of queries to rate limit when the limit is exceeded. + 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 + + +@@UAHL@unbound.conf@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, except for + :ref:`ip-ratelimit-factor<unbound.conf.ip-ratelimit-factor>`, until demand + decreases below the configured ratelimit for a 2 second rate window. + Useful to set :ref:`ip-ratelimit<unbound.conf.ip-ratelimit>` to a + suspicious rate to aggressively limit unusually high traffic. + + Default: no + + +@@UAHL@unbound.conf@outbound-msg-retry@@: *<number>* + The number of retries, per upstream nameserver in a delegation, that + Unbound will attempt in case a throwaway response is received. + 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 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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. + Changing this value needs caution as it can allow long CNAME chains to be + accepted, where Unbound needs to verify (resolve) each link individually. + + Default: 11 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 resolver from overly long indirection + chains. + Clips off the remainder of the reply packet at that point. + + Default: 11 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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 :ref:`prefetch<unbound.conf.prefetch>` is enabled (or + :ref:`serve-expired<unbound.conf.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 :ref:`fast-server-num<unbound.conf.fast-server-num>` option can be + used to specify the size of the fastest servers set. + + Default: 0 + + +@@UAHL@unbound.conf@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 + :ref:`fast-server-permil<unbound.conf.fast-server-permil>` option, that + turns this on or off. + + Default: 3 + + +@@UAHL@unbound.conf@answer-cookie@@: *<yes or no>* + If enabled, Unbound will answer to requests containing DNS Cookies as + specified in RFC 7873 and RFC 9018. + + Default: no + + +@@UAHL@unbound.conf@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 example hex string would be "000102030405060708090a0b0c0d0e0f". + + .. note:: + This option is ignored if a + :ref:`cookie-secret-file<unbound.conf.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 + + +@@UAHL@unbound.conf@cookie-secret-file@@: *<filename>* + File from which the secrets are read used in DNS Cookie calculations. + When this file exists, the secrets in this file are used and the secret + specified by the + :ref:`cookie-secret<unbound.conf.cookie-secret>` option is ignored. + Enable it by setting a filename, like + "/usr/local/etc/unbound_cookiesecrets.txt". + The content of this file must be manipulated with the + :ref:`add_cookie_secret<unbound-control.commands.add_cookie_secret>`, + :ref:`drop_cookie_secret<unbound-control.commands.drop_cookie_secret>` and + :ref:`activate_cookie_secret<unbound-control.commands.activate_cookie_secret>` + commands to the :doc:`unbound-control(8)</manpages/unbound-control>` tool. + Please see that manpage on how to perform a safe cookie secret rollover. + + Default: "" (disabled) + + +@@UAHL@unbound.conf@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. + + +@@UAHL@unbound.conf@edns-client-string-opcode@@: *<opcode>* + EDNS0 option code for the + :ref:`edns-client-string<unbound.conf.edns-client-string>` option, from 0 + to 65535. + A value from the 'Reserved for Local/Experimental' range (65001-65534) + should be used. + + Default: 65001 + + +@@UAHL@unbound.conf@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 :ref:`val-log-level<unbound.conf.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 + + +@@UAHL@unbound.conf@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:: + :ref:`ede: yes<unbound.conf.ede>` needs to be set as well for this to + work. + + Default: no + + +@@UAHL@unbound.conf@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 Report-Channel + EDNS0 option on their replies specifying the reporting agent for the zone. + Any errors encountered during resolution that would result in Unbound + generating an Extended DNS Error (:rfc:`8914`) will be reported to the + zone's reporting agent. + + The :ref:`ede<unbound.conf.ede>` option does not need to be enabled for + this to work. + + It is advised that the + :ref:`qname-minimisation<unbound.conf.qname-minimisation>` option is also + enabled to increase privacy on the outgoing reports. + + Default: no + +.. _unbound.conf.remote: + +Remote Control Options +^^^^^^^^^^^^^^^^^^^^^^ + +In the **remote-control:** clause are the declarations for the remote control +facility. +If this is enabled, the :doc:`unbound-control(8)</manpages/unbound-control>` +utility can be used to send commands to the running Unbound server. +The server uses these clauses to setup TLSv1 security for the connection. +The :doc:`unbound-control(8)</manpages/unbound-control>` utility also reads the +**remote-control:** section for options. +To setup the correct self-signed certificates use the +*unbound-control-setup(8)* utility. + + +@@UAHL@unbound.conf.remote@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 + + +@@UAHL@unbound.conf.remote@control-interface@@: *<IP address or interface name 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 configured, the access bits are set to allow the group + members to access 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. + + +@@UAHL@unbound.conf.remote@control-port@@: *<port number>* + The port number to listen on for IPv4 or IPv6 control interfaces. + + .. note:: + If you change this and permissions have been dropped, you must restart + the server for the change to take effect. + + Default: 8953 + + +@@UAHL@unbound.conf.remote@control-use-cert@@: *<yes or no>* + For localhost + :ref:`control-interface<unbound.conf.remote.control-interface>` you can + disable the use of TLS by setting this option to "no". + For local sockets, TLS is disabled and the value of this option is ignored. + + Default: yes + + +@@UAHL@unbound.conf.remote@server-key-file@@: *<private key file>* + Path to the server private key. + This file is generated by the + :doc:`unbound-control-setup(8)</manpages/unbound-control>` utility. + This file is used by the Unbound server, but not by + :doc:`unbound-control(8)</manpages/unbound-control>`. + + Default: unbound_server.key + + +@@UAHL@unbound.conf.remote@server-cert-file@@: *<certificate file.pem>* + Path to the server self signed certificate. + This file is generated by the + :doc:`unbound-control-setup(8)</manpages/unbound-control>` utility. + This file is used by the Unbound server, and also by + :doc:`unbound-control(8)</manpages/unbound-control>`. + + Default: unbound_server.pem + + +@@UAHL@unbound.conf.remote@control-key-file@@: *<private key file>* + Path to the control client private key. + This file is generated by the + :doc:`unbound-control-setup(8)</manpages/unbound-control>` utility. + This file is used by :doc:`unbound-control(8)</manpages/unbound-control>`. + + Default: unbound_control.key + + +@@UAHL@unbound.conf.remote@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 + :doc:`unbound-control-setup(8)</manpages/unbound-control>` utility. + This file is used by :doc:`unbound-control(8)</manpages/unbound-control>`. + + Default: unbound_control.pem + +.. _unbound.conf.stub: + +Stub Zone Options +^^^^^^^^^^^^^^^^^ + +There may be multiple **stub-zone:** clauses. +Each with a :ref:`name<unbound.conf.stub.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 authority servers, not recursors; Unbound performs the +recursive processing 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 authoritative server on a different host (or different port). +Enter a config entry for Unbound with: + +.. code-block:: text + + 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 authoritative +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 :ref:`server<unbound.conf.server>` statements for +:ref:`domain-insecure<unbound.conf.domain-insecure>` and for +:ref:`local-zone: \<name\> nodefault<unbound.conf.local-zone.type.nodefault>` +for the zone if it is a locally served zone. +The insecure clause stops DNSSEC from invalidating the zone. +The :ref:`local-zone: nodefault<unbound.conf.local-zone.type.nodefault>` (or +:ref:`transparent<unbound.conf.local-zone.type.transparent>`) clause makes the +(reverse-) zone bypass Unbound's filtering of :rfc:`1918` zones. + + +@@UAHL@unbound.conf.stub@name@@: *<domain name>* + Name of the stub zone. + This is the full domain name of the zone. + + +@@UAHL@unbound.conf.stub@stub-host@@: *<domain name>* + Name of stub zone nameserver. + Is itself resolved before it is used. + + 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 + :ref:`tls-port<unbound.conf.tls-port>`. + + +@@UAHL@unbound.conf.stub@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 + :ref:`tls-port<unbound.conf.tls-port>`. + + +@@UAHL@unbound.conf.stub@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 outdated, the resolver picks up a + correct list online. + + Default: no + + +@@UAHL@unbound.conf.stub@stub-first@@: *<yes or no>* + If enabled, a query is attempted without the stub clause 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 clause. + + Default: no + + +@@UAHL@unbound.conf.stub@stub-tls-upstream@@: *<yes or no>* + Enabled or disable whether the queries to this stub use TLS for transport. + + Default: no + + +@@UAHL@unbound.conf.stub@stub-ssl-upstream@@: *<yes or no>* + Alternate syntax for + :ref:`stub-tls-upstream<unbound.conf.stub.stub-tls-upstream>`. + + +@@UAHL@unbound.conf.stub@stub-tcp-upstream@@: *<yes or no>* + If it is set to "yes" then upstream queries use TCP only for transport + regardless of global flag :ref:`tcp-upstream<unbound.conf.tcp-upstream>`. + + Default: no + + +@@UAHL@unbound.conf.stub@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 + +.. _unbound.conf.forward: + +Forward Zone Options +^^^^^^^^^^^^^^^^^^^^ + +There may be multiple **forward-zone:** clauses. +Each with a :ref:`name<unbound.conf.forward.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 :ref:`forward-host<unbound.conf.forward.forward-host>` +and :ref:`forward-addr<unbound.conf.forward.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 :ref:`forward-zone<unbound.conf.forward>` entry with name +``"."`` and a :ref:`forward-addr<unbound.conf.forward.forward-addr>` target +will forward all queries to that other server (unless it can answer from the +cache). + + +@@UAHL@unbound.conf.forward@name@@: *<domain name>* + Name of the forward zone. + This is the full domain name of the zone. + + +@@UAHL@unbound.conf.forward@forward-host@@: *<domain name>* + Name of server to forward to. + Is itself resolved before it is used. + + 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 + :ref:`tls-port<unbound.conf.tls-port>`. + + +@@UAHL@unbound.conf.forward@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 + :ref:`tls-port<unbound.conf.tls-port>`. + + At high verbosity it logs the TLS certificate, with TLS enabled. + If you leave out the ``'#'`` and auth name from the + :ref:`forward-addr<unbound.conf.forward.forward-addr>`, any name is + accepted. + The cert must also match a CA from the + :ref:`tls-cert-bundle<unbound.conf.tls-cert-bundle>`. + + +@@UAHL@unbound.conf.forward@forward-first@@: *<yes or no>* + If a forwarded query is met with a SERVFAIL error, and this option is + enabled, Unbound will fall back to normal recursive resolution for this + query as if no query forwarding had been specified. + + Default: no + + +@@UAHL@unbound.conf.forward@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 + :ref:`tls-cert-bundle<unbound.conf.tls-cert-bundle>` or use + :ref:`tls-win-cert<unbound.conf.tls-win-cert>` to load CA certs, otherwise + the connections cannot be authenticated. + + Default: no + + +@@UAHL@unbound.conf.forward@forward-ssl-upstream@@: *<yes or no>* + Alternate syntax for + :ref:`forward-tls-upstream<unbound.conf.forward.forward-tls-upstream>`. + + +@@UAHL@unbound.conf.forward@forward-tcp-upstream@@: *<yes or no>* + If it is set to "yes" then upstream queries use TCP only for transport + regardless of global flag :ref:`tcp-upstream<unbound.conf.tcp-upstream>`. + + Default: no + + +@@UAHL@unbound.conf.forward@forward-no-cache@@: *<yes or no>* + If enabled, data inside the forward is not cached. + This is useful when you want immediate changes to be visible. + + Default: no + +.. _unbound.conf.auth: + +Authority Zone Options +^^^^^^^^^^^^^^^^^^^^^^ + +Authority zones are configured with **auth-zone:**, and each one must have a +:ref:`name<unbound.conf.auth.name>`. +There can be multiple ones, by listing multiple auth-zone 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 :ref:`for-downstream: yes<unbound.conf.auth.for-downstream>` (default), +authority zones are processed after **local-zones** and before cache. +When used in this manner, Unbound responds 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 :ref:`for-upstream: yes<unbound.conf.auth.for-upstream>` (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 resolving. + +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 +:ref:`for-downstream: no<unbound.conf.auth.for-downstream>`, +:ref:`for-upstream: yes<unbound.conf.auth.for-upstream>` +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 answer. + +Authority zones can be read from 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 +detect 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 SERVFAIL, 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. + + +@@UAHL@unbound.conf.auth@name@@: *<zone name>* + Name of the authority zone. + + +@@UAHL@unbound.conf.auth@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 + :ref:`url<unbound.conf.auth.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 dependency on retrieving that IP address. + + +@@UAHL@unbound.conf.auth@master@@: *<IP address or host name>* + Alternate syntax for :ref:`primary<unbound.conf.auth.primary>`. + + +@@UAHL@unbound.conf.auth@url@@: *<URL to zone file>* + Where to download a zonefile for the zone. + With HTTP or HTTPS. + An example for the url is: + + .. code-block:: text + + 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 primaries 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 :ref:`tls-cert-bundle<unbound.conf.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. + + +@@UAHL@unbound.conf.auth@allow-notify@@: *<IP address or host name or netblockIP/prefix>* + With :ref:`allow-notify<unbound.conf.auth.allow-notify>` you can specify + additional sources of notifies. + 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 :ref:`primary<unbound.conf.auth.primary>` and + :ref:`url<unbound.conf.auth.url>` statements are allowed notify by + default. + + +@@UAHL@unbound.conf.auth@fallback-enabled@@: *<yes or no>* + If enabled, Unbound falls back to querying the internet as a resolver for + this zone when lookups fail. + For example for DNSSEC validation failures. + + Default: no + + +@@UAHL@unbound.conf.auth@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 :ref:`for-downstream: no<unbound.conf.auth.for-downstream>` and + :ref:`for-upstream: yes<unbound.conf.auth.for-upstream>` are set, then + Unbound will DNSSEC validate the contents of the zone before serving the + zone contents to clients and store validation results in the cache. + + Default: yes + + + +@@UAHL@unbound.conf.auth@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 downstream + clients, and use the zone data as a local copy to speed up lookups. + + Default: yes + + +@@UAHL@unbound.conf.auth@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 + comments from the zone file. + When there is a DNSSEC chain of trust, DNSSEC signatures are checked too. + + Default: no + + +@@UAHL@unbound.conf.auth@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 + :ref:`zonemd-permissive-mode<unbound.conf.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 + + +@@UAHL@unbound.conf.auth@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, Unbound will attempt to fetch zone + data (eg. from the primary servers). + +.. _unbound.conf.view: + +View Options +^^^^^^^^^^^^ + +There may be multiple **view:** clauses. +Each with a :ref:`name<unbound.conf.view.name>` and zero or more +:ref:`local-zone<unbound.conf.view.local-zone>` and +:ref:`local-data<unbound.conf.view.local-data>` attributes. +Views can also contain :ref:`view-first<unbound.conf.view.view-first>`, +:ref:`response-ip<unbound.conf.response-ip>`, +:ref:`response-ip-data<unbound.conf.response-ip-data>` and +:ref:`local-data-ptr<unbound.conf.view.local-data-ptr>` attributes. +View can be mapped to requests by specifying the view name in an +:ref:`access-control-view<unbound.conf.access-control-view>` attribute. +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. + + +@@UAHL@unbound.conf.view@name@@: *<view name>* + Name of the view. + Must be unique. + This name is used in the + :ref:`access-control-view<unbound.conf.access-control-view>` attribute. + + +@@UAHL@unbound.conf.view@local-zone@@: *<zone> <type>* + View specific local zone elements. + Has the same types and behaviour as the global + :ref:`local-zone<unbound.conf.local-zone>` elements. + When there is at least one *local-zone:* specified and :ref:`view-first: + no<unbound.conf.view.view-first>` is set, the default local-zones will be + added to this view. + Defaults can be disabled using the nodefault type. + When :ref:`view-first: yes<unbound.conf.view.view-first>` is set or when a + view does not have a :ref:`local-zone<unbound.conf.view.local-zone>`, the + global :ref:`local-zone<unbound.conf.local-zone>` will be used including + it's default zones. + + +@@UAHL@unbound.conf.view@local-data@@: *"<resource record string>"* + View specific local data elements. + Has the same behaviour as the global + :ref:`local-data<unbound.conf.local-data>` elements. + + +@@UAHL@unbound.conf.view@local-data-ptr@@: *"IPaddr name"* + View specific local-data-ptr elements. + Has the same behaviour as the global + :ref:`local-data-ptr<unbound.conf.local-data-ptr>` elements. + + +@@UAHL@unbound.conf.view@view-first@@: *<yes or no>* + If enabled, it attempts to use the global + :ref:`local-zone<unbound.conf.local-zone>` and + :ref:`local-data<unbound.conf.local-data>` if there is no match in the + view specific options. + + Default: no + +Python Module Options +^^^^^^^^^^^^^^^^^^^^^ + +The **python:** clause 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 +:ref:`module-config<unbound.conf.module-config>` option (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 :ref:`chroot<unbound.conf.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 :ref:`python-script<unbound.conf.python.python-script>` path should +be specified as an absolute path relative to the new root, or as a relative +path to the working directory. + + +@@UAHL@unbound.conf.python@python-script@@: *<python file>* + The script file to load. + Repeat this option for every python module instance added to the + :ref:`module-config<unbound.conf.module-config>` option. + +Dynamic Library Module Options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The **dynlib:** clause 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 +:ref:`module-config<unbound.conf.module-config>` attribute. +Multiple instances of dynamic libraries are supported by adding the word +``dynlib`` more than once. + +The :ref:`dynlib-file<unbound.conf.dynlib.dynlib-file>` path should be +specified as an absolute path relative to the new path set by +:ref:`chroot<unbound.conf.chroot>`, or as a relative path to the working +directory. + + +@@UAHL@unbound.conf.dynlib@dynlib-file@@: *<dynlib file>* + The dynamic library file to load. + Repeat this option for every dynlib module instance added to the + :ref:`module-config<unbound.conf.module-config>` option. + +DNS64 Module Options +^^^^^^^^^^^^^^^^^^^^ + +The ``dns64`` module must be configured in the +:ref:`module-config<unbound.conf.module-config>` directive, e.g.: + +.. code-block:: text + + module-config: "dns64 validator iterator" + +and be compiled into the daemon to be enabled. + +.. note:: + These settings go in the :ref:`server:<unbound.conf.server>` section. + + +@@UAHL@unbound.conf.dns64@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 + + +@@UAHL@unbound.conf.dns64@dns64-synthall@@: *<yes or no>* + .. warning:: Debugging feature! + + If enabled, synthesize all AAAA records despite the presence of actual AAAA + records. + + Default: no + + +@@UAHL@unbound.conf.dns64@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 multiple times, list a new domain for which it applies, one + per line. + Applies also to names underneath the name given. + +NAT64 Operation +^^^^^^^^^^^^^^^ + +NAT64 operation allows using a NAT64 prefix for outbound requests to IPv4-only +servers. +It is controlled by two options in the +:ref:`server:<unbound.conf.server>` section: + + +@@UAHL@unbound.conf.nat64@do-nat64@@: *<yes or no>* + Use NAT64 to reach IPv4-only servers. + Consider also enabling :ref:`prefer-ip6<unbound.conf.prefer-ip6>` + to prefer native IPv6 connections to nameservers. + + Default: no + + +@@UAHL@unbound.conf.nat64@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. + + Default: 64:ff9b::/96 (same as :ref:`dns64-prefix<unbound.conf.dns64.dns64-prefix>`) + +DNSCrypt Options +^^^^^^^^^^^^^^^^ + +The **dnscrypt:** clause 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 secret/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 + + +@@UAHL@unbound.conf.dnscrypt@dnscrypt-enable@@: *<yes or no>* + Whether or not the dnscrypt config should be enabled. + You may define configuration but not activate it. + + Default: no + + +@@UAHL@unbound.conf.dnscrypt@dnscrypt-port@@: *<port number>* + On which port should dnscrypt should be activated. + + .. note:: + There should be a matching interface option defined in the + :ref:`server:<unbound.conf.server>` section for this port. + + +@@UAHL@unbound.conf.dnscrypt@dnscrypt-provider@@: *<provider name>* + The provider name to use to distribute certificates. + This is of the form: + + .. code-block:: text + + 2.dnscrypt-cert.example.com. + + .. important:: The name *MUST* end with a dot. + + +@@UAHL@unbound.conf.dnscrypt@dnscrypt-secret-key@@: *<path to secret key file>* + Path to the time limited secret key file. + This option may be specified multiple times. + + +@@UAHL@unbound.conf.dnscrypt@dnscrypt-provider-cert@@: *<path to cert file>* + Path to the certificate related to the + :ref:`dnscrypt-secret-key<unbound.conf.dnscrypt.dnscrypt-secret-key>`. + This option may be specified multiple times. + + +@@UAHL@unbound.conf.dnscrypt@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 + :ref:`dnscrypt-provider<unbound.conf.dnscrypt.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. + Likewise, it would allow one to prime the new cert/key without distributing + the new cert yet, this can be useful when using a network 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. + + +@@UAHL@unbound.conf.dnscrypt@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 substantial amount of CPU. + + Default: 4m + + +@@UAHL@unbound.conf.dnscrypt@dnscrypt-shared-secret-cache-slabs@@: *<number>* + Number of slabs in the dnscrypt shared secrets 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) + + +@@UAHL@unbound.conf.dnscrypt@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 + + +@@UAHL@unbound.conf.dnscrypt@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 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ECS module must be configured in the +:ref:`module-config<unbound.conf.module-config>` directive, e.g.: + +.. code-block:: text + + module-config: "subnetcache validator iterator" + +and be compiled into the daemon to be enabled. + +.. note:: + These settings go in the :ref:`server:<unbound.conf.server>` section. + +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 indicated 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 +:ref:`send-client-subnet<unbound.conf.ecs.send-client-subnet>`. +The option will always be forwarded, regardless the allowed addresses, when +:ref:`client-subnet-always-forward: yes<unbound.conf.ecs.client-subnet-always-forward>` +is set. +In this case the lookup in the regular cache is skipped. + +The maximum size of the ECS cache is controlled by +:ref:`msg-cache-size<unbound.conf.msg-cache-size>` in the configuration file. +On top of that, for each query only 100 different subnets are allowed to be +stored for each address family. +Exceeding that number, older entries will be purged from cache. + +Note that due to the nature of how EDNS Client Subnet works, by segregating the +client IP space in order to try and have tailored responses for prefixes of +unknown sizes, resolution and cache response performance 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 +:ref:`serve-expired\*<unbound.conf.serve-expired>` and +:ref:`prefetch<unbound.conf.prefetch>` options. + + +@@UAHL@unbound.conf.ecs@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. + Authorities not listed will not receive edns-subnet information, unless + domain in query is specified in + :ref:`client-subnet-zone<unbound.conf.ecs.client-subnet-zone>`. + + +@@UAHL@unbound.conf.ecs@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 + :ref:`send-client-subnet<unbound.conf.ecs.send-client-subnet>`. + + +@@UAHL@unbound.conf.ecs@client-subnet-always-forward@@: *<yes or no>* + Specify whether the ECS address check (configured using + :ref:`send-client-subnet<unbound.conf.ecs.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 enabled, the address check is skipped when the client query contains an + ECS record. + And the lookup in the regular cache is skipped. + + Default: no + + +@@UAHL@unbound.conf.ecs@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 + + +@@UAHL@unbound.conf.ecs@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 + + +@@UAHL@unbound.conf.ecs@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 + + +@@UAHL@unbound.conf.ecs@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. + Default: 0 + + +@@UAHL@unbound.conf.ecs@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 + + +@@UAHL@unbound.conf.ecs@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 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The IPsec module must be configured in the +:ref:`module-config<unbound.conf.module-config>` directive, e.g.: + +.. code-block:: text + + module-config: "ipsecmod validator iterator" + +and be compiled into Unbound by using ``--enable-ipsecmod`` to be enabled. + +.. note:: + These settings go in the :ref:`server:<unbound.conf.server>` section. + +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 answer was found, Unbound will call an external hook passing the +following 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 +:ref:`ipsecmod-max-ttl<unbound.conf.ipsecmod-max-ttl>`. + +The same procedure is also followed when +:ref:`prefetch: yes<unbound.conf.prefetch>` is set, but the A/AAAA answer is +given to the client before the hook is called. +:ref:`ipsecmod-max-ttl<unbound.conf.ipsecmod-max-ttl>` ensures that the A/AAAA +answer given from cache is still relevant for opportunistic IPsec. + + +@@UAHL@unbound.conf@ipsecmod-enabled@@: *<yes or no>* + Specifies whether the IPsec module is enabled or not. + The IPsec module still needs to be defined in the + :ref:`module-config<unbound.conf.module-config>` directive. + This option facilitates turning on/off the module without + restarting/reloading Unbound. + + Default: yes + + +@@UAHL@unbound.conf@ipsecmod-hook@@: *<filename>* + Specifies the external hook that Unbound will call with *system(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 + :ref:`module-config<unbound.conf.module-config>` directive. + + +@@UAHL@unbound.conf@ipsecmod-strict@@: *<yes or no>* + If enabled Unbound requires the external hook to return a success value of + 0. + Failing to do so Unbound will reply with SERVFAIL. + The A/AAAA answer will also not be cached. + + Default: no + + +@@UAHL@unbound.conf@ipsecmod-max-ttl@@: *<seconds>* + Time to live maximum for A/AAAA cached records after calling the external + hook. + + Default: 3600 + + +@@UAHL@unbound.conf@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 + + +@@UAHL@unbound.conf@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). + + +@@UAHL@unbound.conf@ipsecmod-whitelist@@: *<domain>* + Alternate syntax for :ref:`ipsecmod-allow<unbound.conf.ipsecmod-allow>`. + +Cache DB Module Options +^^^^^^^^^^^^^^^^^^^^^^^ + +The Cache DB module must be configured in the +:ref:`module-config<unbound.conf.module-config>` directive, e.g.: + +.. code-block:: text + + module-config: "validator cachedb iterator" + +and be compiled into the daemon with ``--enable-cachedb``. + +If this module is enabled and configured, the specified backend database 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 installed +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-recently-used eviction policy. + +Additionally, the +:ref:`redis-expire-records<unbound.conf.cachedb.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 reconnect 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 assumption hold. + +The **cachedb:** clause gives custom settings of the cache DB module. + + +@@UAHL@unbound.conf.cachedb@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 configuration, ``redis`` backend may also be + used as described above. + + Default: testframe + + +@@UAHL@unbound.conf.cachedb@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 database is shared by multiple Unbound instances, all + instances must use the same secret seed. + + Default: "default" + + +@@UAHL@unbound.conf.cachedb@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 + + +@@UAHL@unbound.conf.cachedb@cachedb-check-when-serve-expired@@: *<yes or no>* + If enabled, the cachedb is checked before an expired response is returned. + When + :ref:`serve-expired<unbound.conf.serve-expired>` + is enabled, without + :ref:`serve-expired-client-timeout<unbound.conf.serve-expired-client-timeout>` + , it then does not immediately respond 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 response is sent. + If also + :ref:`serve-expired-client-timeout<unbound.conf.serve-expired-client-timeout>` + is enabled, the expired response is delayed until the timeout expires. + Unless the lookup succeeds within the timeout. + + Default: yes + +The following **cachedb:** options are specific to the ``redis`` backend. + + +@@UAHL@unbound.conf.cachedb@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 otherwise Unbound will have + to resolve the name of the server every time it establishes a connection to + the server. + + Default: 127.0.0.1 + + +@@UAHL@unbound.conf.cachedb@redis-server-port@@: *<port number>* + The TCP port number of the Redis server. + + Default: 6379 + + +@@UAHL@unbound.conf.cachedb@redis-server-path@@: *<unix socket path>* + The unix socket path to connect to the Redis server. + Unix sockets may have better throughput than the IP address option. + + Default: "" (disabled) + + +@@UAHL@unbound.conf.cachedb@redis-server-password@@: *"<password>"* + The Redis AUTH password to use for the Redis server. + Only relevant if Redis is configured for client password authorisation. + + Default: "" (disabled) + + +@@UAHL@unbound.conf.cachedb@redis-timeout@@: *<msec>* + The period until when Unbound waits for a response from the Redis 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 + + +@@UAHL@unbound.conf.cachedb@redis-command-timeout@@: *<msec>* + The timeout to use for Redis commands, in milliseconds. + If ``0``, it uses the + :ref:`redis-timeout<unbound.conf.cachedb.redis-timeout>` + value. + + Default: 0 + + +@@UAHL@unbound.conf.cachedb@redis-connect-timeout@@: *<msec>* + The timeout to use for Redis connection set up, in milliseconds. + If ``0``, it uses the + :ref:`redis-timeout<unbound.conf.cachedb.redis-timeout>` + value. + + Default: 0 + + +@@UAHL@unbound.conf.cachedb@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 + :ref:`serve-expired<unbound.conf.serve-expired>` and + :ref:`serve-expired-ttl: 0<unbound.conf.serve-expired-ttl>`, this option is + internally reverted to "no". + + .. note:: + Redis "SET ... EX" support is required for this option (Redis >= 2.6.12). + + Default: no + + +@@UAHL@unbound.conf.cachedb@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 persisted in the same RDB/AOF file. + If unsure about using this option, Redis documentation + (https://redis.io/commands/select/) suggests not to use a single Redis + instance for multiple unrelated applications. + The default database in Redis is 0 while other logical databases need to be + explicitly SELECT'ed upon connecting. + + Default: 0 + + +@@UAHL@unbound.conf.cachedb@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 otherwise 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/replication/#read-only-replica). + If specified, all Redis read commands will go to this replica server, while + the write commands will go to the + :ref:`redis-server-host<unbound.conf.cachedb.redis-server-host>`. + + Default: "" (disabled). + + +@@UAHL@unbound.conf.cachedb@redis-replica-server-port@@: *<port number>* + The TCP port number of the Redis replica server. + + Default: 6379 + + +@@UAHL@unbound.conf.cachedb@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 option. + + Default: "" (disabled) + + +@@UAHL@unbound.conf.cachedb@redis-replica-server-password@@: *"<password>"* + The Redis AUTH password to use for the Redis server. + Only relevant if Redis is configured for client password authorisation. + + Default: "" (disabled) + + +@@UAHL@unbound.conf.cachedb@redis-replica-timeout@@: *<msec>* + The period until when Unbound waits for a response from the Redis 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 + + +@@UAHL@unbound.conf.cachedb@redis-replica-command-timeout@@: *<msec>* + The timeout to use for Redis replica commands, in milliseconds. + If ``0``, it uses the + :ref:`redis-replica-timeout<unbound.conf.cachedb.redis-replica-timeout>` + value. + + Default: 0 + + +@@UAHL@unbound.conf.cachedb@redis-replica-connect-timeout@@: *<msec>* + The timeout to use for Redis replica connection set up, in milliseconds. + If ``0``, it uses the + :ref:`redis-replica-timeout<unbound.conf.cachedb.redis-replica-timeout>` + value. + + Default: 0 + + +@@UAHL@unbound.conf.cachedb@redis-replica-logical-db@@: *<logical database index>* + Same as :ref:`redis-logical-db<unbound.conf.cachedb.redis-logical-db>` but + for the Redis replica server. + + Default: 0 + + +.. _unbound.conf.dnstap: + +DNSTAP Logging Options +^^^^^^^^^^^^^^^^^^^^^^ + +DNSTAP support, when compiled in by using ``--enable-dnstap``, is enabled in +the **dnstap:** section. +This starts an extra thread (when compiled with threading) that writes the log +information to the destination. +If Unbound is compiled without threading it does not spawn a thread, but +connects per-process to the destination. + + +@@UAHL@unbound.conf.dnstap@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 + + +@@UAHL@unbound.conf.dnstap@dnstap-bidirectional@@: *<yes or no>* + Use frame streams in bidirectional mode to transfer DNSTAP messages. + + Default: yes + + +@@UAHL@unbound.conf.dnstap@dnstap-socket-path@@: *<file name>* + Sets the unix socket file name for connecting to the server that is + listening on that socket. + + Default: @DNSTAP_SOCKET_PATH@ + + +@@UAHL@unbound.conf.dnstap@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: "" + + +@@UAHL@unbound.conf.dnstap@dnstap-tls@@: *<yes or no>* + Set this to use TLS to connect to the server specified in + :ref:`dnstap-ip<unbound.conf.dnstap.dnstap-ip>`. + If set to no, TCP is used to connect to the server. + + Default: yes + + +@@UAHL@unbound.conf.dnstap@dnstap-tls-server-name@@: *<name of TLS authentication>* + The TLS server name to authenticate the server with. + Used when :ref:`dnstap-tls: yes<unbound.conf.dnstap.dnstap-tls>` is set. + If ``""`` it is ignored. + + Default: "" + + +@@UAHL@unbound.conf.dnstap@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: "" + + +@@UAHL@unbound.conf.dnstap@dnstap-tls-client-key-file@@: *<file name>* + The client key file for TLS client authentication. + If ``""`` client authentication is not used. + + Default: "" + + +@@UAHL@unbound.conf.dnstap@dnstap-tls-client-cert-file@@: *<file name>* + The client cert file for TLS client authentication. + + Default: "" + + +@@UAHL@unbound.conf.dnstap@dnstap-send-identity@@: *<yes or no>* + If enabled, the server identity is included in the log messages. + + Default: no + + +@@UAHL@unbound.conf.dnstap@dnstap-send-version@@: *<yes or no>* + If enabled, the server version if included in the log messages. + + Default: no + + +@@UAHL@unbound.conf.dnstap@dnstap-identity@@: *<string>* + The identity to send with messages, if ``""`` the hostname is used. + + Default: "" + + +@@UAHL@unbound.conf.dnstap@dnstap-version@@: *<string>* + The version to send with messages, if ``""`` the package version is used. + + Default: "" + + +@@UAHL@unbound.conf.dnstap@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 environment, 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) + + +@@UAHL@unbound.conf.dnstap@dnstap-log-resolver-query-messages@@: *<yes or no>* + Enable to log resolver query messages. + These are messages from Unbound to upstream servers. + + Default: no + + +@@UAHL@unbound.conf.dnstap@dnstap-log-resolver-response-messages@@: *<yes or no>* + Enable to log resolver response messages. + These are replies from upstream servers to Unbound. + + Default: no + + +@@UAHL@unbound.conf.dnstap@dnstap-log-client-query-messages@@: *<yes or no>* + Enable to log client query messages. + These are client queries to Unbound. + + Default: no + + +@@UAHL@unbound.conf.dnstap@dnstap-log-client-response-messages@@: *<yes or no>* + Enable to log client response messages. + These are responses from Unbound to clients. + + Default: no + + +@@UAHL@unbound.conf.dnstap@dnstap-log-forwarder-query-messages@@: *<yes or no>* + Enable to log forwarder query messages. + + Default: no + + +@@UAHL@unbound.conf.dnstap@dnstap-log-forwarder-response-messages@@: *<yes or no>* + Enable to log forwarder response messages. + + Default: no + +.. _unbound.conf.rpz: + +Response Policy Zone Options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Response Policy Zones are configured with **rpz:**, and each one must have a +:ref:`name<unbound.conf.rpz.name>` attribute. +There can be multiple ones, by listing multiple RPZ clauses, each with a +different name. +RPZ clauses 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 +:ref:`module-config<unbound.conf.module-config>`, e.g.: + +.. code-block:: text + + module-config: "respip validator iterator" + +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 +:ref:`local-zone<unbound.conf.local-zone>` and before any +:ref:`auth-zone<unbound.conf.auth>`. + +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``: + +.. code-block:: text + + example.com CNAME . + +The triggers are encoded in the name on the left + +.. code-block:: text + + 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 + +.. code-block:: text + + 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. + +The RPZ zones can be configured in the config file with these settings in the +**rpz:** block. + + +@@UAHL@unbound.conf.rpz@name@@: *<zone name>* + Name of the authority zone. + + +@@UAHL@unbound.conf.rpz@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 + :ref:`url<unbound.conf.rpz.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 dependency on retrieving that IP address. + + +@@UAHL@unbound.conf.rpz@master@@: *<IP address or host name>* + Alternate syntax for :ref:`primary<unbound.conf.rpz.primary>`. + + +@@UAHL@unbound.conf.rpz@url@@: *<url to zonefile>* + Where to download a zonefile for the zone. + With HTTP or HTTPS. + An example for the url is: + + .. code-block:: text + + 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 primaries 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 :ref:`tls-cert-bundle<unbound.conf.tls-cert-bundle>` and + the hostname from the url are used to authenticate the connection. + + +@@UAHL@unbound.conf.rpz@allow-notify@@: *<IP address or host name or netblockIP/prefix>* + With :ref:`allow-notify<unbound.conf.rpz.allow-notify>` you can specify + additional sources of notifies. + 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 :ref:`primary<unbound.conf.rpz.primary>` and + :ref:`url<unbound.conf.rpz.url>` statements are allowed notify by + default. + + +@@UAHL@unbound.conf.rpz@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, Unbound will attempt to fetch zone + data (eg. from the primary servers). + + +@@UAHL@unbound.conf.rpz@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*. + + +@@UAHL@unbound.conf.rpz@rpz-cname-override@@: *<domain>* + The CNAME target domain to use if the cname action is configured for + :ref:`rpz-action-override<unbound.conf.rpz.rpz-action-override>`. + + +@@UAHL@unbound.conf.rpz@rpz-log@@: *<yes or no>* + Log all applied RPZ actions for this RPZ zone. + + Default: no + + +@@UAHL@unbound.conf.rpz@rpz-log-name@@: *<name>* + Specify a string to be part of the log line, for easy referencing. + + +@@UAHL@unbound.conf.rpz@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 + + +@@UAHL@unbound.conf.rpz@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 + + +@@UAHL@unbound.conf.rpz@tags@@: *"<list of tags>"* + Limit the policies from this RPZ clause to clients with a matching tag. + + Tags need to be defined in :ref:`define-tag<unbound.conf.define-tag>` and + can be assigned to client addresses using + :ref:`access-control-tag<unbound.conf.access-control-tag>` or + :ref:`interface-tag<unbound.conf.interface-tag>`. + Enclose list of tags in quotes (``""``) and put spaces between tags. + + If no tags are specified the policies from this clause 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 exceptional for the DNS. +DNSSEC validation is enabled, just add trust anchors. +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 receive full service, which on BSD-32bit tops out at 30-40 +Mb after heavy usage. + +.. code-block:: text + + # 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 +----- + +@UNBOUND_RUN_DIR@ + default Unbound working directory. + +@UNBOUND_CHROOT_DIR@ + default *chroot(2)* location. + +@ub_conf_file@ + Unbound configuration file. + +@UNBOUND_PIDFILE@ + default Unbound pidfile with process ID of the running daemon. + +unbound.log + Unbound log file. + Default is to log to *syslog(3)*. + +See Also +-------- + +:doc:`unbound(8)</manpages/unbound>`, +:doc:`unbound-checkonf(8)</manpages/unbound-checkconf>`. |
