diff options
Diffstat (limited to 'contrib/unbound/doc/unbound-control.rst')
-rw-r--r-- | contrib/unbound/doc/unbound-control.rst | 1374 |
1 files changed, 1374 insertions, 0 deletions
diff --git a/contrib/unbound/doc/unbound-control.rst b/contrib/unbound/doc/unbound-control.rst new file mode 100644 index 000000000000..bc548f51d064 --- /dev/null +++ b/contrib/unbound/doc/unbound-control.rst @@ -0,0 +1,1374 @@ +.. + 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 + +.. program:: unbound-control + +unbound-control(8) +================== + +Synopsis +-------- + +**unbound-control** [``-hq``] [``-c cfgfile``] [``-s server``] command + +Description +----------- + +``unbound-control`` performs remote administration on the +:doc:`unbound(8)</manpages/unbound>` DNS server. +It reads the configuration file, contacts the Unbound server over TLS sends the +command and displays the result. + +The available options are: + +.. option:: -h + + Show the version and commandline option help. + +.. option:: -c <cfgfile> + + The config file to read with settings. + If not given the default config file + :file:`@ub_conf_file@` is used. + +.. option:: -s <server[@port]> + + IPv4 or IPv6 address of the server to contact. + If not given, the address is read from the config file. + +.. option:: -q + + Quiet, if the option is given it does not print anything if it works ok. + +Commands +-------- + +There are several commands that the server understands. + + +@@UAHL@unbound-control.commands@start@@ + Start the server. + Simply execs :doc:`unbound(8)</manpages/unbound>`. + The ``unbound`` executable is searched for in the **PATH** set in the + environment. + It is started with the config file specified using :option:`-c` or the + default config file. + + +@@UAHL@unbound-control.commands@stop@@ + Stop the server. + The server daemon exits. + + +@@UAHL@unbound-control.commands@reload@@ + Reload the server. + This flushes the cache and reads the config file fresh. + + +@@UAHL@unbound-control.commands@reload_keep_cache@@ + Reload the server but try to keep the RRset and message cache if + (re)configuration allows for it. + That means the caches sizes and the number of threads must not change + between reloads. + + +@@UAHL@unbound-control.commands@fast_reload@@ [``+dpv``] + Reload the server, but keep downtime to a minimum, so that user queries + keep seeing service. + This needs the code compiled with threads. + The config is loaded in a thread, and prepared, then it briefly pauses the + existing server and updates config options. + The intent is that the pause does not impact the service of user queries. + The cache is kept. + Also user queries worked on are kept and continue, but with the new config + options. + + .. note:: + This command is experimental at this time. + + The amount of temporal memory needed during a fast_reload is twice the + amount needed for configuration. + This is because Unbound temporarily needs to store both current + configuration values and new ones while trying to fast_reload. + Zones loaded from disk (authority zones and RPZ zones) are included in such + memory needs. + + Options that can be changed are for + :ref:`forwards<unbound.conf.forward>`, + :ref:`stubs<unbound.conf.stub>`, + :ref:`views<unbound.conf.view>`, + :ref:`authority zones<unbound.conf.auth>`, + :ref:`RPZ zones<unbound.conf.rpz>` and + :ref:`local zones<unbound.conf.local-zone>`. + + Also + :ref:`access-control<unbound.conf.access-control>` and similar options, + :ref:`interface-action<unbound.conf.interface-action>` and similar + options and + :ref:`tcp-connection-limit<unbound.conf.tcp-connection-limit>`. + It can reload some + :ref:`define-tag<unbound.conf.define-tag>` + changes, more on that below. + Further options include + :ref:`insecure-lan-zones<unbound.conf.insecure-lan-zones>`, + :ref:`domain-insecure<unbound.conf.domain-insecure>`, + :ref:`trust-anchor-file<unbound.conf.trust-anchor-file>`, + :ref:`trust-anchor<unbound.conf.trust-anchor>`, + :ref:`trusted-keys-file<unbound.conf.trusted-keys-file>`, + :ref:`auto-trust-anchor-file<unbound.conf.auto-trust-anchor-file>`, + :ref:`edns-client-string<unbound.conf.edns-client-string>`, + ipset, + :ref:`log-identity<unbound.conf.log-identity>`, + :ref:`infra-cache-numhosts<unbound.conf.infra-cache-numhosts>`, + :ref:`msg-cache-size<unbound.conf.msg-cache-size>`, + :ref:`rrset-cache-size<unbound.conf.rrset-cache-size>`, + :ref:`key-cache-size<unbound.conf.key-cache-size>`, + :ref:`ratelimit-size<unbound.conf.ratelimit-size>`, + :ref:`neg-cache-size<unbound.conf.neg-cache-size>`, + :ref:`num-queries-per-thread<unbound.conf.num-queries-per-thread>`, + :ref:`jostle-timeout<unbound.conf.jostle-timeout>`, + :ref:`use-caps-for-id<unbound.conf.use-caps-for-id>`, + :ref:`unwanted-reply-threshold<unbound.conf.unwanted-reply-threshold>`, + :ref:`tls-use-sni<unbound.conf.tls-use-sni>`, + :ref:`outgoing-tcp-mss<unbound.conf.outgoing-tcp-mss>`, + :ref:`ip-dscp<unbound.conf.ip-dscp>`, + :ref:`max-reuse-tcp-queries<unbound.conf.max-reuse-tcp-queries>`, + :ref:`tcp-reuse-timeout<unbound.conf.tcp-reuse-timeout>`, + :ref:`tcp-auth-query-timeout<unbound.conf.tcp-auth-query-timeout>`, + :ref:`delay-close<unbound.conf.delay-close>`. + + It does not work with + :ref:`interface<unbound.conf.interface>` and + :ref:`outgoing-interface<unbound.conf.outgoing-interface>` changes, + also not with + :ref:`remote control<unbound.conf.remote>`, + :ref:`outgoing-port-permit<unbound.conf.outgoing-port-permit>`, + :ref:`outgoing-port-avoid<unbound.conf.outgoing-port-avoid>`, + :ref:`msg-buffer-size<unbound.conf.msg-buffer-size>`, + any **\*-slabs** options and + :ref:`statistics-interval<unbound.conf.statistics-interval>` changes. + + For :ref:`dnstap<unbound.conf.dnstap>` these options can be changed: + :ref:`dnstap-log-resolver-query-messages<unbound.conf.dnstap.dnstap-log-resolver-query-messages>`, + :ref:`dnstap-log-resolver-response-messages<unbound.conf.dnstap.dnstap-log-resolver-response-messages>`, + :ref:`dnstap-log-client-query-messages<unbound.conf.dnstap.dnstap-log-client-query-messages>`, + :ref:`dnstap-log-client-response-messages<unbound.conf.dnstap.dnstap-log-client-response-messages>`, + :ref:`dnstap-log-forwarder-query-messages<unbound.conf.dnstap.dnstap-log-forwarder-query-messages>` and + :ref:`dnstap-log-forwarder-response-messages<unbound.conf.dnstap.dnstap-log-forwarder-response-messages>`. + + It does not work with these options: + :ref:`dnstap-enable<unbound.conf.dnstap.dnstap-enable>`, + :ref:`dnstap-bidirectional<unbound.conf.dnstap.dnstap-bidirectional>`, + :ref:`dnstap-socket-path<unbound.conf.dnstap.dnstap-socket-path>`, + :ref:`dnstap-ip<unbound.conf.dnstap.dnstap-ip>`, + :ref:`dnstap-tls<unbound.conf.dnstap.dnstap-tls>`, + :ref:`dnstap-tls-server-name<unbound.conf.dnstap.dnstap-tls-server-name>`, + :ref:`dnstap-tls-cert-bundle<unbound.conf.dnstap.dnstap-tls-cert-bundle>`, + :ref:`dnstap-tls-client-key-file<unbound.conf.dnstap.dnstap-tls-client-key-file>` and + :ref:`dnstap-tls-client-cert-file<unbound.conf.dnstap.dnstap-tls-client-cert-file>`. + + The options + :ref:`dnstap-send-identity<unbound.conf.dnstap.dnstap-send-identity>`, + :ref:`dnstap-send-version<unbound.conf.dnstap.dnstap-send-version>`, + :ref:`dnstap-identity<unbound.conf.dnstap.dnstap-identity>`, and + :ref:`dnstap-version<unbound.conf.dnstap.dnstap-version>` can be loaded + when ``+p`` is not used. + + The ``+v`` option makes the output verbose which includes the time it took + to do the reload. + With ``+vv`` it is more verbose which includes the amount of memory that + was allocated temporarily to perform the reload; this amount of memory can + be big if the config has large contents. + In the timing output the 'reload' time is the time during which the server + was paused. + + The ``+p`` option makes the reload not pause threads, they keep running. + Locks are acquired, but items are updated in sequence, so it is possible + for threads to see an inconsistent state with some options from the old + and some options from the new config, such as cache TTL parameters from the + old config and forwards from the new config. + The stubs and forwards are updated at the same time, so that they are + viewed consistently, either old or new values together. + The option makes the reload time take eg. 3 microseconds instead of 0.3 + milliseconds during which the worker threads are interrupted. + So, the interruption is much shorter, at the expense of some inconsistency. + After the reload itself, every worker thread is briefly contacted to make + them release resources, this makes the delete timing a little longer, and + takes up time from the remote control servicing worker thread. + + With the nopause option (``+p``), the reload does not work to reload some + options, that fast reload works on without the nopause option: + :ref:`val-bogus-ttl<unbound.conf.val-bogus-ttl>`, + :ref:`val-override-date<unbound.conf.val-override-date>`, + :ref:`val-sig-skew-min<unbound.conf.val-sig-skew-min>`, + :ref:`val-sig-skew-max<unbound.conf.val-sig-skew-max>`, + :ref:`val-max-restart<unbound.conf.val-max-restart>`, + :ref:`val-nsec3-keysize-iterations<unbound.conf.val-nsec3-keysize-iterations>`, + :ref:`target-fetch-policy<unbound.conf.target-fetch-policy>`, + :ref:`outbound-msg-retry<unbound.conf.outbound-msg-retry>`, + :ref:`max-sent-count<unbound.conf.max-sent-count>`, + :ref:`max-query-restarts<unbound.conf.max-query-restarts>`, + :ref:`do-not-query-address<unbound.conf.do-not-query-address>`, + :ref:`do-not-query-localhost<unbound.conf.do-not-query-localhost>`, + :ref:`private-address<unbound.conf.private-address>`, + :ref:`private-domain<unbound.conf.private-domain>`, + :ref:`caps-exempt<unbound.conf.caps-exempt>`, + :ref:`nat64-prefix<unbound.conf.nat64.nat64-prefix>`, + :ref:`do-nat64<unbound.conf.nat64.do-nat64>`, + :ref:`infra-host-ttl<unbound.conf.infra-host-ttl>`, + :ref:`infra-keep-probing<unbound.conf.infra-keep-probing>`, + :ref:`ratelimit<unbound.conf.ratelimit>`, + :ref:`ip-ratelimit<unbound.conf.ip-ratelimit>`, + :ref:`ip-ratelimit-cookie<unbound.conf.ip-ratelimit-cookie>`, + :ref:`wait-limit-netblock<unbound.conf.wait-limit-netblock>`, + :ref:`wait-limit-cookie-netblock<unbound.conf.wait-limit-cookie-netblock>`, + :ref:`ratelimit-below-domain<unbound.conf.ratelimit-below-domain>`, + :ref:`ratelimit-for-domain<unbound.conf.ratelimit-for-domain>`. + + The ``+d`` option makes the reload drop queries that the worker threads are + working on. + This is like + :ref:`flush_requestlist<unbound-control.commands.flush_requestlist>`. + Without it the queries are kept so that users keep getting answers for + those queries that are currently processed. + The drop makes it so that queries during the life time of the + query processing see only old, or only new config options. + + When there are changes to the config tags, from the + :ref:`define-tag<unbound.conf.define-tag>` option, + then the ``+d`` option is implicitly turned on with a warning printout, and + queries are dropped. + This is to stop references to the old tag information, by the old + queries. + If the number of tags is increased in the newly loaded config, by + adding tags at the end, then the implicit ``+d`` option is not needed. + + For response ip, that is actions associated with IP addresses, and perhaps + intersected with access control tag and action information, those settings + are stored with a query when it comes in based on its source IP address. + The old information is kept with the query until the queries are done. + This is gone when those queries are resolved and finished, or it is + possible to flush the requestlist with ``+d``. + + +@@UAHL@unbound-control.commands@verbosity@@ *number* + Change verbosity value for logging. + Same values as the **verbosity:** keyword in + :doc:`unbound.conf(5)</manpages/unbound.conf>`. + This new setting lasts until the server is issued a reload (taken from + config file again), or the next verbosity control command. + + +@@UAHL@unbound-control.commands@log_reopen@@ + Reopen the logfile, close and open it. + Useful for logrotation to make the daemon release the file it is logging + to. + If you are using syslog it will attempt to close and open the syslog (which + may not work if chrooted). + + +@@UAHL@unbound-control.commands@stats@@ + Print statistics. + Resets the internal counters to zero, this can be controlled using the + **statistics-cumulative:** config statement. + Statistics are printed with one ``[name]: [value]`` per line. + + +@@UAHL@unbound-control.commands@stats_noreset@@ + Peek at statistics. + Prints them like the stats command does, but does not reset the internal + counters to zero. + + +@@UAHL@unbound-control.commands@status@@ + Display server status. + Exit code 3 if not running (the connection to the port is refused), 1 on + error, 0 if running. + + +@@UAHL@unbound-control.commands@local_zone@@ *name type* + Add new local zone with name and type. + Like local-zone config statement. + If the zone already exists, the type is changed to the given argument. + + +@@UAHL@unbound-control.commands@local_zone_remove@@ *name* + Remove the local zone with the given name. + Removes all local data inside it. + If the zone does not exist, the command succeeds. + + +@@UAHL@unbound-control.commands@local_data@@ *RR data...* + Add new local data, the given resource record. + Like **local-data:** keyword, except for when no covering zone exists. + In that case this remote control command creates a transparent zone with + the same name as this record. + + +@@UAHL@unbound-control.commands@local_data_remove@@ *name* + Remove all RR data from local name. + If the name already has no items, nothing happens. + Often results in NXDOMAIN for the name (in a static zone), but if the name + has become an empty nonterminal (there is still data in domain names below + the removed name), NOERROR nodata answers are the result for that name. + + +@@UAHL@unbound-control.commands@local_zones@@ + Add local zones read from stdin of unbound-control. + Input is read per line, with name space type on a line. + For bulk additions. + + +@@UAHL@unbound-control.commands@local_zones_remove@@ + Remove local zones read from stdin of unbound-control. + Input is one name per line. + For bulk removals. + + +@@UAHL@unbound-control.commands@local_datas@@ + Add local data RRs read from stdin of unbound-control. + Input is one RR per line. + For bulk additions. + + +@@UAHL@unbound-control.commands@local_datas_remove@@ + Remove local data RRs read from stdin of unbound-control. + Input is one name per line. + For bulk removals. + + +@@UAHL@unbound-control.commands@dump_cache@@ + The contents of the cache is printed in a text format to stdout. + You can redirect it to a file to store the cache in a file. + Not supported in remote Unbounds in multi-process operation. + + +@@UAHL@unbound-control.commands@load_cache@@ + The contents of the cache is loaded from stdin. + Uses the same format as dump_cache uses. + Loading the cache with old, or wrong data can result in old or wrong data + returned to clients. + Loading data into the cache in this way is supported in order to aid with + debugging. + Not supported in remote Unbounds in multi-process operation. + + +@@UAHL@unbound-control.commands@cache_lookup@@ [``+t``] *names* + Print to stdout the RRsets and messages that are in the cache. + For every name listed the content at or under the name is printed. + Several names separated by spaces can be given, each is printed. + When subnetcache is enabled, also matching entries from the subnet + cache are printed. + + The ``+t`` option allows tld and root names. + With it names like 'com' and '.' can be used, but it takes a lot of + effort to look up in the cache. + + +@@UAHL@unbound-control.commands@lookup@@ *name* + Print to stdout the name servers that would be used to look up the name + specified. + + +@@UAHL@unbound-control.commands@flush@@ [``+c``] *name* + Remove the name from the cache. + Removes the types A, AAAA, NS, SOA, CNAME, DNAME, MX, PTR, SRV, NAPTR, + SVCB and HTTPS. + Because that is fast to do. + Other record types can be removed using **flush_type** or **flush_zone**. + + The ``+c`` option removes the items also from the cachedb cache. + If cachedb is in use. + + +@@UAHL@unbound-control.commands@flush_type@@ [``+c``] *name type* + Remove the name, type information from the cache. + + The ``+c`` option removes the items also from the cachedb cache. + If cachedb is in use. + + +@@UAHL@unbound-control.commands@flush_zone@@ [``+c``] name + Remove all information at or below the name from the cache. + The rrsets and key entries are removed so that new lookups will be + performed. + This needs to walk and inspect the entire cache, and is a slow operation. + The entries are set to expired in the implementation of this command (so, + with serve-expired enabled, it'll serve that information but schedule a + prefetch for new information). + + The ``+c`` option removes the items also from the cachedb cache. + If cachedb is in use. + + +@@UAHL@unbound-control.commands@flush_bogus@@ [``+c``] + Remove all bogus data from the cache. + + The ``+c`` option removes the items also from the cachedb cache. + If cachedb is in use. + + +@@UAHL@unbound-control.commands@flush_negative@@ [``+c``] + Remove all negative data from the cache. + This is nxdomain answers, nodata answers and servfail answers. + Also removes bad key entries (which could be due to failed lookups) from + the dnssec key cache, and iterator last-resort lookup failures from the + rrset cache. + + The ``+c`` option removes the items also from the cachedb cache. + If cachedb is in use. + + +@@UAHL@unbound-control.commands@flush_stats@@ + Reset statistics to zero. + + +@@UAHL@unbound-control.commands@flush_requestlist@@ + Drop the queries that are worked on. + Stops working on the queries that the server is working on now. + The cache is unaffected. + No reply is sent for those queries, probably making those users request + again later. + Useful to make the server restart working on queries with new settings, + such as a higher verbosity level. + + +@@UAHL@unbound-control.commands@dump_requestlist@@ + Show what is worked on. + Prints all queries that the server is currently working on. + Prints the time that users have been waiting. + For internal requests, no time is printed. + And then prints out the module status. + This prints the queries from the first thread, and not queries that are + being serviced from other threads. + + +@@UAHL@unbound-control.commands@flush_infra@@ *all|IP* + If all then entire infra cache is emptied. + If a specific IP address, the entry for that address is removed from the + cache. + It contains EDNS, ping and lameness data. + + +@@UAHL@unbound-control.commands@dump_infra@@ + Show the contents of the infra cache. + + +@@UAHL@unbound-control.commands@set_option@@ *opt: val* + Set the option to the given value without a reload. + The cache is therefore not flushed. + The option must end with a ``':'`` and whitespace must be between the + option and the value. + Some values may not have an effect if set this way, the new values are not + written to the config file, not all options are supported. + This is different from the set_option call in libunbound, where all values + work because Unbound has not been initialized. + + The values that work are: statistics-interval, statistics-cumulative, + do-not-query-localhost, harden-short-bufsize, harden-large-queries, + harden-glue, harden-dnssec-stripped, harden-below-nxdomain, + harden-referral-path, prefetch, prefetch-key, log-queries, hide-identity, + hide-version, identity, version, val-log-level, val-log-squelch, + ignore-cd-flag, add-holddown, del-holddown, keep-missing, tcp-upstream, + ssl-upstream, max-udp-size, ratelimit, ip-ratelimit, cache-max-ttl, + cache-min-ttl, cache-max-negative-ttl. + + +@@UAHL@unbound-control.commands@get_option@@ *opt* + Get the value of the option. + Give the option name without a trailing ``':'``. + The value is printed. + If the value is ``""``, nothing is printed and the connection closes. + On error ``'error ...'`` is printed (it gives a syntax error on unknown + option). + For some options a list of values, one on each line, is printed. + The options are shown from the config file as modified with set_option. + For some options an override may have been taken that does not show up with + this command, not results from e.g. the verbosity and forward control + commands. + Not all options work, see list_stubs, list_forwards, list_local_zones and + list_local_data for those. + + +@@UAHL@unbound-control.commands@list_stubs@@ + List the stub zones in use. + These are printed one by one to the output. + This includes the root hints in use. + + +@@UAHL@unbound-control.commands@list_forwards@@ + List the forward zones in use. + These are printed zone by zone to the output. + + +@@UAHL@unbound-control.commands@list_insecure@@ + List the zones with domain-insecure. + + +@@UAHL@unbound-control.commands@list_local_zones@@ + List the local zones in use. + These are printed one per line with zone type. + + +@@UAHL@unbound-control.commands@list_local_data@@ + List the local data RRs in use. + The resource records are printed. + + +@@UAHL@unbound-control.commands@insecure_add@@ *zone* + Add a domain-insecure for the given zone, like the statement in + unbound.conf. + Adds to the running Unbound without affecting the cache + contents (which may still be bogus, use flush_zone to remove it), does not + affect the config file. + + +@@UAHL@unbound-control.commands@insecure_remove@@ *zone* + Removes domain-insecure for the given zone. + + +@@UAHL@unbound-control.commands@forward_add@@ [``+it``] *zone addr ...* + Add a new forward zone to running Unbound. + With ``+i`` option also adds a domain-insecure for the zone (so it can + resolve insecurely if you have a DNSSEC root trust anchor configured for + other names). + The addr can be IP4, IP6 or nameserver names, like forward-zone config in + unbound.conf. + The ``+t`` option sets it to use TLS upstream, like + :ref:`forward-tls-upstream: yes<unbound.conf.forward.forward-tls-upstream>`. + + +@@UAHL@unbound-control.commands@forward_remove@@ [``+i``] *zone* + Remove a forward zone from running Unbound. + The ``+i`` also removes a domain-insecure for the zone. + + +@@UAHL@unbound-control.commands@stub_add@@ [``+ipt``] *zone addr ...* + Add a new stub zone to running Unbound. + With ``+i`` option also adds a domain-insecure for the zone. + With ``+p`` the stub zone is set to prime, without it it is set to + notprime. + The addr can be IP4, IP6 or nameserver names, like the **stub-zone:** + config in unbound.conf. + The ``+t`` option sets it to use TLS upstream, like + :ref:`stub-tls-upstream: yes<unbound.conf.stub.stub-tls-upstream>`. + + +@@UAHL@unbound-control.commands@stub_remove@@ [``+i``] *zone* + Remove a stub zone from running Unbound. + The ``+i`` also removes a domain-insecure for the zone. + + +@@UAHL@unbound-control.commands@forward@@ [*off* | *addr ...* ] + Setup forwarding mode. + Configures if the server should ask other upstream nameservers, should go + to the internet root nameservers itself, or show the current config. + You could pass the nameservers after a DHCP update. + + Without arguments the current list of addresses used to forward all queries + to is printed. + On startup this is from the forward-zone ``"."`` configuration. + Afterwards it shows the status. + It prints off when no forwarding is used. + + If off is passed, forwarding is disabled and the root nameservers are + used. + This can be used to avoid to avoid buggy or non-DNSSEC supporting + nameservers returned from DHCP. + But may not work in hotels or hotspots. + + If one or more IPv4 or IPv6 addresses are given, those are then used to + forward queries to. + The addresses must be separated with spaces. + With ``'@port'`` the port number can be set explicitly (default port is 53 + (DNS)). + + By default the forwarder information from the config file for the root + ``"."`` is used. + The config file is not changed, so after a reload these changes are gone. + Other forward zones from the config file are not affected by this command. + + +@@UAHL@unbound-control.commands@ratelimit_list@@ [``+a``] + List the domains that are ratelimited. + Printed one per line with current estimated qps and qps limit from config. + With ``+a`` it prints all domains, not just the ratelimited domains, with + their estimated qps. + The ratelimited domains return an error for uncached (new) queries, but + cached queries work as normal. + + +@@UAHL@unbound-control.commands@ip_ratelimit_list@@ [``+a``] + List the ip addresses that are ratelimited. + Printed one per line with current estimated qps and qps limit from config. + With ``+a`` it prints all ips, not just the ratelimited ips, with their + estimated qps. + The ratelimited ips are dropped before checking the cache. + + +@@UAHL@unbound-control.commands@list_auth_zones@@ + List the auth zones that are configured. + Printed one per line with a status, indicating if the zone is expired and + current serial number. + Configured RPZ zones are included. + + +@@UAHL@unbound-control.commands@auth_zone_reload@@ *zone* + Reload the auth zone (or RPZ zone) from zonefile. + The zonefile is read in overwriting the current contents of the zone in + memory. + This changes the auth zone contents itself, not the cache contents. + Such cache contents exists if you set Unbound to validate with + **for-upstream: yes** and that can be cleared with **flush_zone** *zone*. + + +@@UAHL@unbound-control.commands@auth_zone_transfer@@ *zone* + Transfer the auth zone (or RPZ zone) from master. + The auth zone probe sequence is started, where the masters are probed to + see if they have an updated zone (with the SOA serial check). + And then the zone is transferred for a newer zone version. + + +@@UAHL@unbound-control.commands@rpz_enable@@ *zone* + Enable the RPZ zone if it had previously been disabled. + + +@@UAHL@unbound-control.commands@rpz_disable@@ *zone* + Disable the RPZ zone. + + +@@UAHL@unbound-control.commands@view_list_local_zones@@ *view* + *list_local_zones* for given view. + + +@@UAHL@unbound-control.commands@view_local_zone@@ *view name type* + *local_zone* for given view. + + +@@UAHL@unbound-control.commands@view_local_zone_remove@@ *view name* + *local_zone_remove* for given view. + + +@@UAHL@unbound-control.commands@view_list_local_data@@ *view* + *list_local_data* for given view. + + +@@UAHL@unbound-control.commands@view_local_data@@ *view RR data...* + *local_data* for given view. + + +@@UAHL@unbound-control.commands@view_local_data_remove@@ *view name* + *local_data_remove* for given view. + + +@@UAHL@unbound-control.commands@view_local_datas_remove@@ *view* + Remove a list of *local_data* for given view from stdin. + Like *local_datas_remove*. + + +@@UAHL@unbound-control.commands@view_local_datas@@ *view* + Add a list of *local_data* for given view from stdin. + Like *local_datas*. + + +@@UAHL@unbound-control.commands@add_cookie_secret@@ *secret* + Add or replace a cookie secret persistently. + *secret* needs to be an 128 bit hex string. + + Cookie secrets can be either **active** or **staging**. + **Active** cookie secrets are used to create DNS Cookies, but verification + of a DNS Cookie succeeds with any of the **active** or **staging** cookie + secrets. + The state of the current cookie secrets can be printed with the + :ref:`print_cookie_secrets<unbound-control.commands.print_cookie_secrets>` + command. + + When there are no cookie secrets configured yet, the *secret* is added as + **active**. + If there is already an **active** cookie secret, the *secret* is added as + **staging** or replacing an existing **staging** secret. + + To "roll" a cookie secret used in an anycast set. + The new secret has to be added as **staging** secret to **all** nodes in + the anycast set. + When **all** nodes can verify DNS Cookies with the new secret, the new + secret can be activated with the + :ref:`activate_cookie_secret<unbound-control.commands.activate_cookie_secret>` + command. + After **all** nodes have the new secret **active** for at least one hour, + the previous secret can be dropped with the + :ref:`drop_cookie_secret<unbound-control.commands.drop_cookie_secret>` + command. + + Persistence is accomplished by writing to a file which is configured with + the + :ref:`cookie-secret-file<unbound.conf.cookie-secret-file>` + option in the server section of the config file. + This is disabled by default, "". + + +@@UAHL@unbound-control.commands@drop_cookie_secret@@ + Drop the **staging** cookie secret. + + +@@UAHL@unbound-control.commands@activate_cookie_secret@@ + Make the current **staging** cookie secret **active**, and the current + **active** cookie secret **staging**. + + +@@UAHL@unbound-control.commands@print_cookie_secrets@@ + Show the current configured cookie secrets with their status. + +Exit Code +--------- + +The ``unbound-control`` program exits with status code 1 on error, 0 on +success. + +Set Up +------ + +The setup requires a self-signed certificate and private keys for both the +server and client. +The script ``unbound-control-setup`` generates these in the default run +directory, or with ``-d`` in another directory. +If you change the access control permissions on the key files you can decide +who can use ``unbound-control``, by default owner and group but not all users. +Run the script under the same username as you have configured in +:file:`unbound.conf` or as root, so that the daemon is permitted to read the +files, for example with: + +.. code-block:: bash + + sudo -u unbound unbound-control-setup + +If you have not configured a username in :file:`unbound.conf`, the keys need +read permission for the user credentials under which the daemon is started. +The script preserves private keys present in the directory. +After running the script as root, turn on +:ref:`control-enable<unbound.conf.remote.control-enable>` in +:file:`unbound.conf`. + +Statistic Counters +------------------ + +The :ref:`stats<unbound-control.commands.stats>` and +:ref:`stats_noreset<unbound-control.commands.stats_noreset>` commands show a +number of statistic counters: + + +@@UAHL@unbound-control.stats@threadX.num.queries@@ + number of queries received by thread + + +@@UAHL@unbound-control.stats@threadX.num.queries_ip_ratelimited@@ + number of queries rate limited by thread + + +@@UAHL@unbound-control.stats@threadX.num.queries_cookie_valid@@ + number of queries with a valid DNS Cookie by thread + + +@@UAHL@unbound-control.stats@threadX.num.queries_cookie_client@@ + number of queries with a client part only DNS Cookie by thread + + +@@UAHL@unbound-control.stats@threadX.num.queries_cookie_invalid@@ + number of queries with an invalid DNS Cookie by thread + + +@@UAHL@unbound-control.stats@threadX.num.queries_discard_timeout@@ + number of queries removed due to discard-timeout by thread + + +@@UAHL@unbound-control.stats@threadX.num.queries_wait_limit@@ + number of queries removed due to wait-limit by thread + + +@@UAHL@unbound-control.stats@threadX.num.cachehits@@ + number of queries that were successfully answered using a cache lookup + + +@@UAHL@unbound-control.stats@threadX.num.cachemiss@@ + number of queries that needed recursive processing + + +@@UAHL@unbound-control.stats@threadX.num.dnscrypt.crypted@@ + number of queries that were encrypted and successfully decapsulated by + dnscrypt. + + +@@UAHL@unbound-control.stats@threadX.num.dnscrypt.cert@@ + number of queries that were requesting dnscrypt certificates. + + +@@UAHL@unbound-control.stats@threadX.num.dnscrypt.cleartext@@ + number of queries received on dnscrypt port that were cleartext and not a + request for certificates. + + +@@UAHL@unbound-control.stats@threadX.num.dnscrypt.malformed@@ + number of request that were neither cleartext, not valid dnscrypt messages. + + +@@UAHL@unbound-control.stats@threadX.num.dns_error_reports@@ + number of DNS Error Reports generated by thread + + +@@UAHL@unbound-control.stats@threadX.num.prefetch@@ + number of cache prefetches performed. + This number is included in cachehits, as the original query had the + unprefetched answer from cache, and resulted in recursive processing, + taking a slot in the requestlist. + Not part of the recursivereplies (or the histogram thereof) or cachemiss, + as a cache response was sent. + + +@@UAHL@unbound-control.stats@threadX.num.expired@@ + number of replies that served an expired cache entry. + + +@@UAHL@unbound-control.stats@threadX.num.queries_timed_out@@ + number of queries that are dropped because they waited in the UDP socket + buffer for too long. + + +@@UAHL@unbound-control.stats@threadX.query.queue_time_us.max@@ + The maximum wait time for packets in the socket buffer, in microseconds. + This is only reported when + :ref:`sock-queue-timeout<unbound.conf.sock-queue-timeout>` is enabled. + + +@@UAHL@unbound-control.stats@threadX.num.recursivereplies@@ + The number of replies sent to queries that needed recursive processing. + Could be smaller than threadX.num.cachemiss if due to timeouts no replies + were sent for some queries. + + +@@UAHL@unbound-control.stats@threadX.requestlist.avg@@ + The average number of requests in the internal recursive processing request + list on insert of a new incoming recursive processing query. + + +@@UAHL@unbound-control.stats@threadX.requestlist.max@@ + Maximum size attained by the internal recursive processing request list. + + +@@UAHL@unbound-control.stats@threadX.requestlist.overwritten@@ + Number of requests in the request list that were overwritten by newer + entries. + This happens if there is a flood of queries that recursive processing and + the server has a hard time. + + +@@UAHL@unbound-control.stats@threadX.requestlist.exceeded@@ + Queries that were dropped because the request list was full. + This happens if a flood of queries need recursive processing, and the + server can not keep up. + + +@@UAHL@unbound-control.stats@threadX.requestlist.current.all@@ + Current size of the request list, includes internally generated queries + (such as priming queries and glue lookups). + + +@@UAHL@unbound-control.stats@threadX.requestlist.current.user@@ + Current size of the request list, only the requests from client queries. + + +@@UAHL@unbound-control.stats@threadX.recursion.time.avg@@ + Average time it took to answer queries that needed recursive processing. + Note that queries that were answered from the cache are not in this average. + + +@@UAHL@unbound-control.stats@threadX.recursion.time.median@@ + The median of the time it took to answer queries that needed recursive + processing. + The median means that 50% of the user queries were answered in less than + this time. + Because of big outliers (usually queries to non responsive servers), the + average can be bigger than the median. + This median has been calculated by interpolation from a histogram. + + +@@UAHL@unbound-control.stats@threadX.tcpusage@@ + The currently held tcp buffers for incoming connections. + A spot value on the time of the request. + This helps you spot if the incoming-num-tcp buffers are full. + + +@@UAHL@unbound-control.stats@total.num.queries@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.queries_ip_ratelimited@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.queries_cookie_valid@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.queries_cookie_client@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.queries_cookie_invalid@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.queries_discard_timeout@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.queries_wait_limit@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.cachehits@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.cachemiss@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.dnscrypt.crypted@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.dnscrypt.cert@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.dnscrypt.cleartext@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.dnscrypt.malformed@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.dns_error_reports@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.prefetch@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.expired@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.num.queries_timed_out@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.query.queue_time_us.max@@ + the maximum of the thread values. + + +@@UAHL@unbound-control.stats@total.num.recursivereplies@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.requestlist.avg@@ + averaged over threads. + + +@@UAHL@unbound-control.stats@total.requestlist.max@@ + the maximum of the thread requestlist.max values. + + +@@UAHL@unbound-control.stats@total.requestlist.overwritten@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.requestlist.exceeded@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.requestlist.current.all@@ + summed over threads. + + +@@UAHL@unbound-control.stats@total.recursion.time.median@@ + averaged over threads. + + +@@UAHL@unbound-control.stats@total.tcpusage@@ + summed over threads. + + +@@UAHL@unbound-control.stats@time.now@@ + current time in seconds since 1970. + + +@@UAHL@unbound-control.stats@time.up@@ + uptime since server boot in seconds. + + +@@UAHL@unbound-control.stats@time.elapsed@@ + time since last statistics printout, in seconds. + +Extended Statistics +------------------- + + +@@UAHL@unbound-control.stats@mem.cache.rrset@@ + Memory in bytes in use by the RRset cache. + + +@@UAHL@unbound-control.stats@mem.cache.message@@ + Memory in bytes in use by the message cache. + + +@@UAHL@unbound-control.stats@mem.cache.dnscrypt_shared_secret@@ + Memory in bytes in use by the dnscrypt shared secrets cache. + + +@@UAHL@unbound-control.stats@mem.cache.dnscrypt_nonce@@ + Memory in bytes in use by the dnscrypt nonce cache. + + +@@UAHL@unbound-control.stats@mem.mod.iterator@@ + Memory in bytes in use by the iterator module. + + +@@UAHL@unbound-control.stats@mem.mod.validator@@ + Memory in bytes in use by the validator module. + Includes the key cache and negative cache. + + +@@UAHL@unbound-control.stats@mem.streamwait@@ + Memory in bytes in used by the TCP and TLS stream wait buffers. + These are answers waiting to be written back to the clients. + + +@@UAHL@unbound-control.stats@mem.http.query_buffer@@ + Memory in bytes used by the HTTP/2 query buffers. + Containing (partial) DNS queries waiting for request stream completion. + + +@@UAHL@unbound-control.stats@mem.http.response_buffer@@ + Memory in bytes used by the HTTP/2 response buffers. + Containing DNS responses waiting to be written back to the clients. + + +@@UAHL@unbound-control.stats@mem.quic@@ + Memory in bytes used by QUIC. + Containing connection information, stream information, queries read and + responses written back to the clients. + +@@UAHL@unbound-control.stats@histogram@@.<sec>.<usec>.to.<sec>.<usec> + Shows a histogram, summed over all threads. + Every element counts the recursive queries whose reply time fit between the + lower and upper bound. + Times larger or equal to the lowerbound, and smaller than the upper bound. + There are 40 buckets, with bucket sizes doubling. + + +@@UAHL@unbound-control.stats@num.query.type.A@@ + The total number of queries over all threads with query type A. + Printed for the other query types as well, but only for the types for which + queries were received, thus =0 entries are omitted for brevity. + + +@@UAHL@unbound-control.stats@num.query.type.other@@ + Number of queries with query types 256-65535. + + +@@UAHL@unbound-control.stats@num.query.class.IN@@ + The total number of queries over all threads with query class IN + (internet). + Also printed for other classes (such as CH (CHAOS) sometimes used for + debugging), or NONE, ANY, used by dynamic update. + num.query.class.other is printed for classes 256-65535. + + +@@UAHL@unbound-control.stats@num.query.opcode.QUERY@@ + The total number of queries over all threads with query opcode QUERY. + Also printed for other opcodes, UPDATE, ... + + +@@UAHL@unbound-control.stats@num.query.tcp@@ + Number of queries that were made using TCP towards the Unbound server. + + +@@UAHL@unbound-control.stats@num.query.tcpout@@ + Number of queries that the Unbound server made using TCP outgoing towards + other servers. + + +@@UAHL@unbound-control.stats@num.query.udpout@@ + Number of queries that the Unbound server made using UDP outgoing towards + other servers. + + +@@UAHL@unbound-control.stats@num.query.tls@@ + Number of queries that were made using TLS towards the Unbound server. + These are also counted in num.query.tcp, because TLS uses TCP. + + +@@UAHL@unbound-control.stats@num.query.tls.resume@@ + Number of TLS session resumptions, these are queries over TLS towards the + Unbound server where the client negotiated a TLS session resumption key. + + +@@UAHL@unbound-control.stats@num.query.https@@ + Number of queries that were made using HTTPS towards the Unbound server. + These are also counted in num.query.tcp and num.query.tls, because HTTPS + uses TLS and TCP. + + +@@UAHL@unbound-control.stats@num.query.quic@@ + Number of queries that were made using QUIC towards the Unbound server. + These are also counted in num.query.tls, because TLS is used for these + queries. + + +@@UAHL@unbound-control.stats@num.query.ipv6@@ + Number of queries that were made using IPv6 towards the Unbound server. + + +@@UAHL@unbound-control.stats@num.query.flags.RD@@ + The number of queries that had the RD flag set in the header. + Also printed for flags QR, AA, TC, RA, Z, AD, CD. + Note that queries with flags QR, AA or TC may have been rejected because of + that. + + +@@UAHL@unbound-control.stats@num.query.edns.present@@ + number of queries that had an EDNS OPT record present. + + +@@UAHL@unbound-control.stats@num.query.edns.DO@@ + number of queries that had an EDNS OPT record with the DO (DNSSEC OK) bit + set. + These queries are also included in the num.query.edns.present number. + + +@@UAHL@unbound-control.stats@num.query.ratelimited@@ + The number of queries that are turned away from being send to nameserver + due to ratelimiting. + + +@@UAHL@unbound-control.stats@num.query.dnscrypt.shared_secret.cachemiss@@ + The number of dnscrypt queries that did not find a shared secret in the + cache. + This can be use to compute the shared secret hitrate. + + +@@UAHL@unbound-control.stats@num.query.dnscrypt.replay@@ + The number of dnscrypt queries that found a nonce hit in the nonce cache + and hence are considered a query replay. + + +@@UAHL@unbound-control.stats@num.answer.rcode.NXDOMAIN@@ + The number of answers to queries, from cache or from recursion, that had + the return code NXDOMAIN. + Also printed for the other return codes. + + +@@UAHL@unbound-control.stats@num.answer.rcode.nodata@@ + The number of answers to queries that had the pseudo return code nodata. + This means the actual return code was NOERROR, but additionally, no data + was carried in the answer (making what is called a NOERROR/NODATA answer). + These queries are also included in the num.answer.rcode.NOERROR number. + Common for AAAA lookups when an A record exists, and no AAAA. + + +@@UAHL@unbound-control.stats@num.answer.secure@@ + Number of answers that were secure. + The answer validated correctly. + The AD bit might have been set in some of these answers, where the client + signalled (with DO or AD bit in the query) that they were ready to accept + the AD bit in the answer. + + +@@UAHL@unbound-control.stats@num.answer.bogus@@ + Number of answers that were bogus. + These answers resulted in SERVFAIL to the client because the answer failed + validation. + + +@@UAHL@unbound-control.stats@num.rrset.bogus@@ + The number of rrsets marked bogus by the validator. + Increased for every RRset inspection that fails. + + +@@UAHL@unbound-control.stats@num.valops@@ + The number of validation operations performed by the validator. + Increased for every RRSIG verification operation regardless of the + validation result. + The RRSIG and key combination needs to first pass some sanity checks before + Unbound even performs the verification, e.g., length/protocol checks. + + +@@UAHL@unbound-control.stats@unwanted.queries@@ + Number of queries that were refused or dropped because they failed the + access control settings. + + +@@UAHL@unbound-control.stats@unwanted.replies@@ + Replies that were unwanted or unsolicited. + Could have been random traffic, delayed duplicates, very late answers, or + could be spoofing attempts. + Some low level of late answers and delayed duplicates are to be expected + with the UDP protocol. + Very high values could indicate a threat (spoofing). + + +@@UAHL@unbound-control.stats@msg.cache.count@@ + The number of items (DNS replies) in the message cache. + + +@@UAHL@unbound-control.stats@rrset.cache.count@@ + The number of RRsets in the rrset cache. + This includes rrsets used by the messages in the message cache, but also + delegation information. + + +@@UAHL@unbound-control.stats@infra.cache.count@@ + The number of items in the infra cache. + These are IP addresses with their timing and protocol support information. + + +@@UAHL@unbound-control.stats@key.cache.count@@ + The number of items in the key cache. + These are DNSSEC keys, one item per delegation point, and their validation + status. + + +@@UAHL@unbound-control.stats@msg.cache.max_collisions@@ + The maximum number of hash table collisions in the msg cache. + This is the number of hashes that are identical when a new element is + inserted in the hash table. + If the value is very large, like hundreds, something is wrong with the + performance of the hash table, hash values are incorrect or malicious. + + +@@UAHL@unbound-control.stats@rrset.cache.max_collisions@@ + The maximum number of hash table collisions in the rrset cache. + This is the number of hashes that are identical when a new element is + inserted in the hash table. + If the value is very large, like hundreds, something is wrong with the + performance of the hash table, hash values are incorrect or malicious. + + +@@UAHL@unbound-control.stats@dnscrypt_shared_secret.cache.count@@ + The number of items in the shared secret cache. + These are precomputed shared secrets for a given client public key/server + secret key pair. + Shared secrets are CPU intensive and this cache allows Unbound to avoid + recomputing the shared secret when multiple dnscrypt queries are sent from + the same client. + + +@@UAHL@unbound-control.stats@dnscrypt_nonce.cache.count@@ + The number of items in the client nonce cache. + This cache is used to prevent dnscrypt queries replay. + The client nonce must be unique for each client public key/server secret + key pair. + This cache should be able to host QPS * `replay window` interval keys to + prevent replay of a query during `replay window` seconds. + + +@@UAHL@unbound-control.stats@num.query.authzone.up@@ + The number of queries answered from auth-zone data, upstream queries. + These queries would otherwise have been sent (with fallback enabled) to the + internet, but are now answered from the auth zone. + + +@@UAHL@unbound-control.stats@num.query.authzone.down@@ + The number of queries for downstream answered from auth-zone data. + These queries are from downstream clients, and have had an answer from the + data in the auth zone. + + +@@UAHL@unbound-control.stats@num.query.aggressive.NOERROR@@ + The number of queries answered using cached NSEC records with NODATA RCODE. + These queries would otherwise have been sent to the internet, but are now + answered using cached data. + + +@@UAHL@unbound-control.stats@num.query.aggressive.NXDOMAIN@@ + The number of queries answered using cached NSEC records with NXDOMAIN + RCODE. + These queries would otherwise have been sent to the internet, but are now + answered using cached data. + + +@@UAHL@unbound-control.stats@num.query.subnet@@ + Number of queries that got an answer that contained EDNS client subnet + data. + + +@@UAHL@unbound-control.stats@num.query.subnet_cache@@ + Number of queries answered from the edns client subnet cache. + These are counted as cachemiss by the main counters, but hit the client + subnet specific cache after getting processed by the edns client subnet + module. + + +@@UAHL@unbound-control.stats@num.query.cachedb@@ + Number of queries answered from the external cache of cachedb. + These are counted as cachemiss by the main counters, but hit the cachedb + external cache after getting processed by the cachedb module. + +@@UAHL@unbound-control.stats@num.rpz.action@@.<rpz_action> + Number of queries answered using configured RPZ policy, per RPZ action + type. + Possible actions are: nxdomain, nodata, passthru, drop, tcp-only, + local-data, disabled, and cname-override. + +Files +----- + +@ub_conf_file@ + Unbound configuration file. + +@UNBOUND_RUN_DIR@ + directory with private keys (:file:`unbound_server.key` and + :file:`unbound_control.key`) and self-signed certificates + (:file:`unbound_server.pem` and :file:`unbound_control.pem`). + +See Also +-------- + +:doc:`unbound.conf(5)</manpages/unbound.conf>`, +:doc:`unbound(8)</manpages/unbound>`. |