mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-01-06 06:49:35 -05:00
5878 lines
179 KiB
Groff
5878 lines
179 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.
|
|
.nr rst2man-indent-level 0
|
|
.
|
|
.de1 rstReportMargin
|
|
\\$1 \\n[an-margin]
|
|
level \\n[rst2man-indent-level]
|
|
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
-
|
|
\\n[rst2man-indent0]
|
|
\\n[rst2man-indent1]
|
|
\\n[rst2man-indent2]
|
|
..
|
|
.de1 INDENT
|
|
.\" .rstReportMargin pre:
|
|
. RS \\$1
|
|
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
|
|
. nr rst2man-indent-level +1
|
|
.\" .rstReportMargin post:
|
|
..
|
|
.de UNINDENT
|
|
. RE
|
|
.\" indent \\n[an-margin]
|
|
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.nr rst2man-indent-level -1
|
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
|
..
|
|
.TH "UNBOUND.CONF" "5" "@date@" "@version@" "Unbound"
|
|
.SH NAME
|
|
unbound.conf \- Unbound @version@ configuration file.
|
|
.SH SYNOPSIS
|
|
.sp
|
|
\fBunbound.conf\fP
|
|
.SH DESCRIPTION
|
|
.sp
|
|
\fBunbound.conf\fP is used to configure \fI\%unbound(8)\fP\&.
|
|
.sp
|
|
The utility \fI\%unbound\-checkconf(8)\fP can be
|
|
used to check \fBunbound.conf\fP prior to usage.
|
|
.SH FILE FORMAT
|
|
.sp
|
|
Whitespace is used to separate keywords.
|
|
Whitespace indentation is insignificant, but is still recommended for visual
|
|
clarity.
|
|
Comments start with \fB#\fP and last to the end of line.
|
|
Empty lines are ignored, as is whitespace at the beginning of a line.
|
|
.sp
|
|
Attribute keywords end with a colon (\fB:\fP) and they are either options or
|
|
section clauses (group options together).
|
|
.sp
|
|
The configuration file is logically divided into \fBsections\fP where each section
|
|
is introduced by a \fI\%section clause\fP\&.
|
|
.SH EXAMPLE
|
|
.sp
|
|
An example minimal config file is shown below; most settings are the defaults.
|
|
Copy this to \fB@ub_conf_file@\fP and start the server with:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
$ unbound \-c @ub_conf_file@
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Stop the server with:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
$ kill \(gacat @UNBOUND_PIDFILE@\(ga
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
The source distribution contains an extensive \fBexample.conf\fP file with
|
|
all the options.
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
# unbound.conf(5) config file for unbound(8).
|
|
server:
|
|
directory: \(dq@UNBOUND_RUN_DIR@\(dq
|
|
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 @UNBOUND_RUN_DIR@/dev/urandom
|
|
# and mount \-\-bind \-n /dev/log @UNBOUND_RUN_DIR@/dev/log
|
|
chroot: \(dq@UNBOUND_CHROOT_DIR@\(dq
|
|
# logfile: \(dq@UNBOUND_RUN_DIR@/unbound.log\(dq #uncomment to use logfile.
|
|
pidfile: \(dq@UNBOUND_PIDFILE@\(dq
|
|
# 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
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH SECTION CLAUSES
|
|
.sp
|
|
The recognized section clauses are:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.INDENT 0.0
|
|
.TP
|
|
.B \fI\%server:\fP
|
|
Most of the configuration is found in this section.
|
|
.TP
|
|
.B \fI\%remote\-control:\fP
|
|
Configuration for the facility used by
|
|
\fI\%unbound\-control(8)\fP\&.
|
|
.TP
|
|
.B \fI\%stub\-zone:\fP
|
|
Configuration for a zone that redirects to specific authoritative name
|
|
servers, e.g. for zones not generally available on the greater
|
|
Internet.
|
|
.TP
|
|
.B \fI\%forward\-zone:\fP
|
|
Configuration for a zone that forwards to specific DNS resolvers.
|
|
.TP
|
|
.B \fI\%auth\-zone:\fP
|
|
Configuration for local authoritative zones.
|
|
.TP
|
|
.B \fI\%view:\fP
|
|
Overriding a small subset of configuration for incoming requests.
|
|
Requests are mapped to views with
|
|
\fI\%access\-control\-view\fP and
|
|
\fI\%interface\-view\fP\&.
|
|
.TP
|
|
.B \fI\%python:\fP
|
|
Configuration for the optional \fBpython\fP script module.
|
|
.TP
|
|
.B \fI\%dynlib:\fP
|
|
Configuration for the optional \fBdynlib\fP module that loads dynamic
|
|
libraries into Unbound.
|
|
.TP
|
|
.B \fI\%dnscrypt:\fP
|
|
Configuration for the optional DNSCrypt feature.
|
|
.TP
|
|
.B \fI\%cachedb:\fP
|
|
Configuration for the optional \fBcachedb\fP module that can interface
|
|
with second level caches, currently Redis or Redis\-complatible
|
|
databases.
|
|
.TP
|
|
.B \fI\%dnstap:\fP
|
|
Configuration of the optional dnstap logging feature; a flexible,
|
|
structured binary log format for DNS software.
|
|
.TP
|
|
.B \fI\%rpz:\fP
|
|
Configuration for Response Policy Zones that allows for DNS filtering.
|
|
Requires the \fBrespip\fP module.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Section clauses can be repeated throughout the file (or included files) to
|
|
logically group options in one visually cohesive group.
|
|
This may be particularly useful for the \fBserver:\fP clause with its myriad of
|
|
options.
|
|
.SH INCLUDING FILES
|
|
.sp
|
|
Files can be included using the \fBinclude:\fP 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 \fI\%chroot\fP, 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 \fI\%directory:
|
|
dir\fP\&.
|
|
Wildcards can be used to include multiple files, see \fIglob(7)\fP\&.
|
|
.sp
|
|
For a more structural include option, the \fBinclude\-toplevel:\fP directive can
|
|
be used.
|
|
This closes whatever section clause is currently active (if any) and forces the
|
|
use of section clauses in the included files and right after this directive.
|
|
.SH SERVER OPTIONS
|
|
.sp
|
|
These options are part of the \fBserver:\fP section.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B verbosity: \fI<number>\fP
|
|
The verbosity level.
|
|
.INDENT 7.0
|
|
.TP
|
|
.B Level 0
|
|
No verbosity, only errors.
|
|
.TP
|
|
.B Level 1
|
|
Gives operational information.
|
|
.TP
|
|
.B Level 2
|
|
Gives detailed operational information including short information per
|
|
query.
|
|
.TP
|
|
.B Level 3
|
|
Gives query level information, output per query.
|
|
.TP
|
|
.B Level 4
|
|
Gives algorithm level information.
|
|
.TP
|
|
.B Level 5
|
|
Logs client identification for cache misses.
|
|
.UNINDENT
|
|
.sp
|
|
The verbosity can also be increased from the command line and during run
|
|
time via remote control. See \fI\%unbound(8)\fP and
|
|
\fI\%unbound\-control(8)\fP respectively.
|
|
.sp
|
|
Default: 1
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B statistics\-interval: \fI<seconds>\fP
|
|
The number of seconds between printing statistics to the log for every
|
|
thread.
|
|
Disable with value \fB0\fP or \fB\(dq\(dq\fP\&.
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B statistics\-cumulative: \fI<yes or no>\fP
|
|
If enabled, statistics are cumulative since starting Unbound, without
|
|
clearing the statistics counters after logging the statistics.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B extended\-statistics: \fI<yes or no>\fP
|
|
If enabled, extended statistics are printed from
|
|
\fI\%unbound\-control(8)\fP\&.
|
|
The counters are listed in
|
|
\fI\%unbound\-control(8)\fP\&.
|
|
Keeping track of more statistics takes time.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B statistics\-inhibit\-zero: \fI<yes or no>\fP
|
|
If enabled, selected extended statistics with a value of 0 are inhibited
|
|
from printing with
|
|
\fI\%unbound\-control(8)\fP\&.
|
|
These are query types, query classes, query opcodes, answer rcodes
|
|
(except NOERROR, FORMERR, SERVFAIL, NXDOMAIN, NOTIMPL, REFUSED)
|
|
and PRZ actions.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B num\-threads: \fI<number>\fP
|
|
The number of threads to create to serve clients. Use 1 for no threading.
|
|
.sp
|
|
Default: 1
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B port: \fI<port number>\fP
|
|
The port number on which the server responds to queries.
|
|
.sp
|
|
Default: 53
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface: \fI<IP address or interface name[@port]>\fP
|
|
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.
|
|
.sp
|
|
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 (\fBkill \-HUP\fP) but only on
|
|
restart.
|
|
.sp
|
|
A port number can be specified with @port (without spaces between interface
|
|
and port number), if not specified the default port (from
|
|
\fI\%port\fP) is used.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-address: \fI<IP address or interface name[@port]>\fP
|
|
Same as \fI\%interface\fP (for ease of
|
|
compatibility with \fI\%nsd.conf(5)\fP).
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface\-automatic: \fI<yes or no>\fP
|
|
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 \fI\%ip\-transparent\fP, but
|
|
this option services all interfaces whilst with
|
|
\fI\%ip\-transparent\fP you can select which
|
|
(future) interfaces Unbound provides service on.
|
|
This feature is experimental, and needs support in your OS for particular
|
|
socket options.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface\-automatic\-ports: \fI\(dq<string>\(dq\fP
|
|
List the port numbers that
|
|
\fI\%interface\-automatic\fP listens on.
|
|
If empty, the default port is listened on.
|
|
The port numbers are separated by spaces in the string.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B outgoing\-interface: \fI<IPv4/IPv6 address or IPv6 netblock>\fP
|
|
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
|
|
\fI\%interface\fP and
|
|
\fI\%outgoing\-interface\fP lines, the
|
|
interfaces are then used for both purposes.
|
|
Outgoing queries are sent via a random outgoing interface to counter
|
|
spoofing.
|
|
.sp
|
|
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
|
|
\fI\%outgoing\-interface\fP options, but do
|
|
not specify both an individual IPv6 address and an IPv6 netblock, or the
|
|
randomisation will be compromised.
|
|
Consider combining with \fI\%prefer\-ip6: yes\fP 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:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
ip \-6 addr add mynetblock/64 dev lo && \e
|
|
ip \-6 route add local mynetblock/64 dev lo
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B outgoing\-range: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 4096 (libevent) / 960 (minievent) / 48 (windows)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B outgoing\-port\-permit: \fI<port number or range>\fP
|
|
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 \(dqlow\-high\(dq, without spaces.
|
|
.sp
|
|
The \fI\%outgoing\-port\-permit\fP and
|
|
\fI\%outgoing\-port\-avoid\fP 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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B outgoing\-port\-avoid: \fI<port number or range>\fP
|
|
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 \(dqlow\-high\(dq, without spaces.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B outgoing\-num\-tcp: \fI<number>\fP
|
|
Number of outgoing TCP buffers to allocate per thread.
|
|
If set to 0, or if \fI\%do\-tcp: no\fP is set, no TCP
|
|
queries to authoritative servers are done.
|
|
For larger installations increasing this value is a good idea.
|
|
.sp
|
|
Default: 10
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B incoming\-num\-tcp: \fI<number>\fP
|
|
Number of incoming TCP buffers to allocate per thread.
|
|
If set to 0, or if \fI\%do\-tcp: no\fP is set, no TCP
|
|
queries from clients are accepted.
|
|
For larger installations increasing this value is a good idea.
|
|
.sp
|
|
Default: 10
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B edns\-buffer\-size: \fI<number>\fP
|
|
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
|
|
\fI\%msg\-buffer\-size\fP (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
|
|
\fI\%outgoing\-num\-tcp\fP).
|
|
.sp
|
|
Default: 1232 (\fI\%DNS Flag Day 2020 recommendation\fP)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-udp\-size: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 1232 (same as \fI\%edns\-buffer\-size\fP)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stream\-wait\-size: \fI<number>\fP
|
|
Number of bytes size maximum to use for waiting stream buffers.
|
|
A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq 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.
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B msg\-buffer\-size: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 65552
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B msg\-cache\-size: \fI<number>\fP
|
|
Number of bytes size of the message cache.
|
|
A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
|
|
or gigabytes (1024*1024 bytes in a megabyte).
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B msg\-cache\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B num\-queries\-per\-thread: \fI<number>\fP
|
|
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 \fI\%jostle\-timeout\fP), 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.
|
|
.sp
|
|
Default: 2048 (libevent) / 512 (minievent) / 24 (windows)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B jostle\-timeout: \fI<msec>\fP
|
|
Timeout used when the server is very busy.
|
|
Set to a value that usually results in one roundtrip to the authority
|
|
servers.
|
|
.sp
|
|
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.
|
|
.sp
|
|
The effect is that the qps for long\-lasting queries is about:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
(num\-queries\-per\-thread / 2) / (average time for such long queries) qps
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
The qps for short queries can be about:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
(num\-queries\-per\-thread / 2) / (jostle\-timeout in whole seconds) qps per thread
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
about (2048/2)*5 = 5120 qps by default.
|
|
.sp
|
|
Default: 200
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B delay\-close: \fI<msec>\fP
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B udp\-connect: \fI<yes or no>\fP
|
|
Perform \fIconnect(2)\fP for UDP sockets that mitigates ICMP side channel
|
|
leakage.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B unknown\-server\-time\-limit: \fI<msec>\fP
|
|
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.
|
|
.sp
|
|
Default: 376
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B discard\-timeout: \fI<msec>\fP
|
|
The wait time in msec where recursion requests are dropped.
|
|
This is to stop a large number of replies from accumulating.
|
|
They receive no reply, the work item continues to recurse.
|
|
For UDP the replies are dropped, for stream connections the reply
|
|
is not dropped if the stream connection is still open ready to receive
|
|
answers.
|
|
It is nice to be a bit larger than
|
|
\fI\%serve\-expired\-client\-timeout\fP
|
|
if that is enabled.
|
|
A value of \fB1900\fP msec is suggested.
|
|
The value \fB0\fP disables it.
|
|
.sp
|
|
Default: 1900
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B wait\-limit: \fI<number>\fP
|
|
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 \fB0\fP disables all wait limits.
|
|
.sp
|
|
Default: 1000
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B wait\-limit\-cookie: \fI<number>\fP
|
|
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 already validates the client address, this option allows
|
|
to override a configured
|
|
\fI\%wait\-limit\fP value usually with a higher one
|
|
for cookie validated queries.
|
|
The value \fB0\fP disables wait limits for cookie validated queries.
|
|
.sp
|
|
Default: 10000
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B wait\-limit\-netblock: \fI<netblock>\fP \fI<number>\fP
|
|
The wait limit for the netblock.
|
|
If not given the
|
|
\fI\%wait\-limit\fP
|
|
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 \fB\-1\fP disables wait limits for the netblock.
|
|
By default the loopback has a wait limit netblock of \fB\-1\fP, it is not
|
|
limited, because it is separated from the rest of network for spoofed
|
|
packets.
|
|
The loopback addresses \fB127.0.0.0/8\fP and \fB::1/128\fP are default at \fB\-1\fP\&.
|
|
.sp
|
|
Default: (none)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B wait\-limit\-cookie\-netblock: \fI<netblock>\fP \fI<number>\fP
|
|
The wait limit for the netblock, when the query has a DNS Cookie.
|
|
If not given, the
|
|
\fI\%wait\-limit\-cookie\fP
|
|
value is used.
|
|
The value \fB\-1\fP disables wait limits for the netblock.
|
|
The loopback addresses \fB127.0.0.0/8\fP and \fB::1/128\fP are default at \fB\-1\fP\&.
|
|
.sp
|
|
Default: (none)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B so\-rcvbuf: \fI<number>\fP
|
|
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
|
|
\fBnetstat \-su\fP).
|
|
Otherwise, the number of bytes to ask for, try \(dq4m\(dq on a busy server.
|
|
.sp
|
|
The OS caps it at a maximum, on linux Unbound needs root permission to
|
|
bypass the limit, or the admin can use \fBsysctl net.core.rmem_max\fP\&.
|
|
.sp
|
|
On BSD change \fBkern.ipc.maxsockbuf\fP in \fB/etc/sysctl.conf\fP\&.
|
|
.sp
|
|
On OpenBSD change header and recompile kernel.
|
|
.sp
|
|
On Solaris \fBndd \-set /dev/udp udp_max_buf 8388608\fP\&.
|
|
.sp
|
|
Default: 0 (use system value)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B so\-sndbuf: \fI<number>\fP
|
|
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:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
send: resource temporarily unavailable
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
can get logged, the buffer overrun is also visible by \fBnetstat \-su\fP\&.
|
|
If set to 0 it uses the system value.
|
|
Specify the number of bytes to ask for, try \(dq8m\(dq on a very busy server.
|
|
.sp
|
|
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.
|
|
.sp
|
|
The OS caps it at a maximum, on linux Unbound needs root permission to
|
|
bypass the limit, or the admin can use \fBsysctl net.core.wmem_max\fP\&.
|
|
.sp
|
|
On BSD, Solaris changes are similar to
|
|
\fI\%so\-rcvbuf\fP\&.
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B so\-reuseport: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
On Linux it is supported in kernels >= 3.9.
|
|
.sp
|
|
On other systems, FreeBSD, OSX it may also work.
|
|
.sp
|
|
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.
|
|
.sp
|
|
At extreme load it could be better to turn it off to distribute the queries
|
|
evenly, reported for Linux systems (4.4.x).
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-transparent: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
This is a lot like
|
|
\fI\%interface\-automatic\fP, but that one
|
|
services all interfaces and with this option you can select which (future)
|
|
interfaces Unbound provides service on.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-freebind: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Exists only on Linux, where the similar
|
|
\fI\%ip\-transparent\fP option is also
|
|
available.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-dscp: \fI<number>\fP
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rrset\-cache\-size: \fI<number>\fP
|
|
Number of bytes size of the RRset cache.
|
|
A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
|
|
or gigabytes (1024*1024 bytes in a megabyte).
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rrset\-cache\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cache\-max\-ttl: \fI<seconds>\fP
|
|
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.
|
|
.sp
|
|
Default: 86400 (1 day)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cache\-min\-ttl: \fI<seconds>\fP
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cache\-max\-negative\-ttl: \fI<seconds>\fP
|
|
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.
|
|
.sp
|
|
Default: 3600
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cache\-min\-negative\-ttl: \fI<seconds>\fP
|
|
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
|
|
\fI\%cache\-min\-ttl\fP
|
|
is configured, it will take effect instead.
|
|
In that case you can set this to \fB1\fP to honor the upstream TTL.
|
|
This applies to NXDOMAIN and NODATA answers.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B infra\-host\-ttl: \fI<seconds>\fP
|
|
Time to live for entries in the host cache.
|
|
The host cache contains roundtrip timing, lameness and EDNS support
|
|
information.
|
|
.sp
|
|
Default: 900
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B infra\-cache\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B infra\-cache\-numhosts: \fI<number>\fP
|
|
Number of hosts for which information is cached.
|
|
.sp
|
|
Default: 10000
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B infra\-cache\-min\-rtt: \fI<msec>\fP
|
|
Lower limit for dynamic retransmit timeout calculation in infrastructure
|
|
cache.
|
|
Increase this value if using forwarders needing more time to do recursive
|
|
name resolution.
|
|
.sp
|
|
Default: 50
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B infra\-cache\-max\-rtt: \fI<msec>\fP
|
|
Upper limit for dynamic retransmit timeout calculation in infrastructure
|
|
cache.
|
|
.sp
|
|
Default: 120000 (2 minutes)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B infra\-keep\-probing: \fI<yes or no>\fP
|
|
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
|
|
\fI\%infra\-host\-ttl\fP time to get probed
|
|
again.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B define\-tag: \fI\(dq<list of tags>\(dq\fP
|
|
Define the tags that can be used with
|
|
\fI\%local\-zone\fP and
|
|
\fI\%access\-control\fP\&.
|
|
Enclose the list between quotes (\fB\(dq\(dq\fP) and put spaces between tags.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-ip4: \fI<yes or no>\fP
|
|
Enable or disable whether IPv4 queries are answered or issued.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-ip6: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B prefer\-ip4: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B prefer\-ip6: \fI<yes or no>\fP
|
|
If enabled, prefer IPv6 transport for sending DNS queries to internet
|
|
nameservers.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-udp: \fI<yes or no>\fP
|
|
Enable or disable whether UDP queries are answered or issued.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-tcp: \fI<yes or no>\fP
|
|
Enable or disable whether TCP queries are answered or issued.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tcp\-mss: \fI<number>\fP
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B outgoing\-tcp\-mss: \fI<number>\fP
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tcp\-idle\-timeout: \fI<msec>\fP
|
|
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
|
|
\fI\%edns\-tcp\-keepalive\-timeout\fP
|
|
if
|
|
\fI\%edns\-tcp\-keepalive\fP
|
|
is enabled.
|
|
.sp
|
|
Default: 30000 (30 seconds)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tcp\-reuse\-timeout: \fI<msec>\fP
|
|
The period Unbound will keep TCP persistent connections open to authority
|
|
servers.
|
|
.sp
|
|
Default: 60000 (60 seconds)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-reuse\-tcp\-queries: \fI<number>\fP
|
|
The maximum number of queries that can be sent on a persistent TCP
|
|
connection.
|
|
.sp
|
|
Default: 200
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tcp\-auth\-query\-timeout: \fI<number>\fP
|
|
Timeout in milliseconds for TCP queries to auth servers.
|
|
.sp
|
|
Default: 3000 (3 seconds)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B edns\-tcp\-keepalive: \fI<yes or no>\fP
|
|
Enable or disable EDNS TCP Keepalive.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B edns\-tcp\-keepalive\-timeout: \fI<msec>\fP
|
|
Overrides
|
|
\fI\%tcp\-idle\-timeout\fP
|
|
when
|
|
\fI\%edns\-tcp\-keepalive\fP
|
|
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.
|
|
.sp
|
|
Default: 120000 (2 minutes)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B sock\-queue\-timeout: \fI<sec>\fP
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tcp\-upstream: \fI<yes or no>\fP
|
|
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
|
|
\fI\%forward\-tcp\-upstream\fP or
|
|
\fI\%stub\-tcp\-upstream\fP
|
|
respectively.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B udp\-upstream\-without\-downstream: \fI<yes or no>\fP
|
|
Enable UDP upstream even if \fI\%do\-udp: no\fP is set.
|
|
Useful for TLS service providers, that want no UDP downstream but use UDP
|
|
to fetch data upstream.
|
|
.sp
|
|
Default: no (no changes)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-upstream: \fI<yes or no>\fP
|
|
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
|
|
\fI\%tls\-service\-key\fP).
|
|
.sp
|
|
If you enable this, also configure a
|
|
\fI\%tls\-cert\-bundle\fP or use
|
|
\fI\%tls\-win\-cert\fP or
|
|
\fI\%tls\-system\-cert\fP to load CA certs,
|
|
otherwise the connections cannot be authenticated.
|
|
.sp
|
|
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
|
|
\fI\%forward\-tls\-upstream\fP\&.
|
|
And also with
|
|
\fI\%stub\-tls\-upstream\fP\&.
|
|
If the
|
|
\fI\%tls\-upstream\fP
|
|
option is enabled, it is for all the forwards and stubs, where the
|
|
\fI\%forward\-tls\-upstream\fP
|
|
and
|
|
\fI\%stub\-tls\-upstream\fP
|
|
options are ignored, as if they had been set to yes.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ssl\-upstream: \fI<yes or no>\fP
|
|
Alternate syntax for \fI\%tls\-upstream\fP\&.
|
|
If both are present in the config file the last is used.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-service\-key: \fI<file>\fP
|
|
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
|
|
\fI\%tls\-port\fP or
|
|
\fI\%https\-port\fP\&.
|
|
The file must contain the private key for the TLS session, the public
|
|
certificate is in the \fI\%tls\-service\-pem\fP
|
|
file and it must also be specified if
|
|
\fI\%tls\-service\-key\fP 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
|
|
\fI\%tls\-port\fP and
|
|
\fI\%https\-port\fP do not provide normal DNS TCP
|
|
service.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Unbound needs to be compiled with libnghttp2 in order to provide
|
|
DNS\-over\-HTTPS.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ssl\-service\-key: \fI<file>\fP
|
|
Alternate syntax for \fI\%tls\-service\-key\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-service\-pem: \fI<file>\fP
|
|
The public key certificate pem file for the tls service.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ssl\-service\-pem: \fI<file>\fP
|
|
Alternate syntax for \fI\%tls\-service\-pem\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-port: \fI<number>\fP
|
|
The port number on which to provide TCP TLS service.
|
|
Only interfaces configured with that port number as @number get the TLS
|
|
service.
|
|
.sp
|
|
Default: 853
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ssl\-port: \fI<number>\fP
|
|
Alternate syntax for \fI\%tls\-port\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-cert\-bundle: \fI<file>\fP
|
|
If null or \fB\(dq\(dq\fP, no file is used.
|
|
Set it to the certificate bundle file, for example
|
|
\fB/etc/pki/tls/certs/ca\-bundle.crt\fP\&.
|
|
These certificates are used for authenticating connections made to outside
|
|
peers.
|
|
For example \fI\%auth\-zone urls\fP, and also
|
|
DNS\-over\-TLS connections.
|
|
It is read at start up before permission drop and chroot.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ssl\-cert\-bundle: \fI<file>\fP
|
|
Alternate syntax for \fI\%tls\-cert\-bundle\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-win\-cert: \fI<yes or no>\fP
|
|
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 \fI\%tls\-cert\-bundle\fP option on
|
|
other systems.
|
|
On other systems, this option enables the system certificates.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-system\-cert: \fI<yes or no>\fP
|
|
This the same as the
|
|
\fI\%tls\-win\-cert\fP option, under a
|
|
different name.
|
|
Because it is not windows specific.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-additional\-port: \fI<portnr>\fP
|
|
List port numbers as
|
|
\fI\%tls\-additional\-port\fP, 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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-session\-ticket\-keys: \fI<file>\fP
|
|
If not \fB\(dq\(dq\fP, 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.
|
|
.sp
|
|
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:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
dd if=/dev/random bs=1 count=80 of=ticket.dat
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-ciphers: \fI<string with cipher list>\fP
|
|
Set the list of ciphers to allow when serving TLS.
|
|
Use \fB\(dq\(dq\fP for default ciphers.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-ciphersuites: \fI<string with ciphersuites list>\fP
|
|
Set the list of ciphersuites to allow when serving TLS.
|
|
This is for newer TLS 1.3 connections.
|
|
Use \fB\(dq\(dq\fP for default ciphersuites.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-use\-sni: \fI<yes or no>\fP
|
|
Enable or disable sending the SNI extension on TLS connections.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Changing the value requires a reload.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tls\-use\-system\-policy\-versions: \fI<yes or no>\fP
|
|
Enable or disable general\-puspose version\-flexible TLS server configuration
|
|
when serving TLS.
|
|
This will allow the whole list of available TLS versions provided by the
|
|
crypto library, which may have been further restricted by the system\(aqs
|
|
crypto policy.
|
|
.sp
|
|
By default Unbound only uses the latest available TLS version.
|
|
.sp
|
|
\fBCAUTION:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Use only if you want to support legacy TLS client connections.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Changing the value requires a reload.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B pad\-responses: \fI<yes or no>\fP
|
|
If enabled, TLS serviced queries that contained an EDNS Padding option will
|
|
cause responses padded to the closest multiple of the size specified in
|
|
\fI\%pad\-responses\-block\-size\fP\&.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B pad\-responses\-block\-size: \fI<number>\fP
|
|
The block size with which to pad responses serviced over TLS.
|
|
Only responses to padded queries will be padded.
|
|
.sp
|
|
Default: 468
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B pad\-queries: \fI<yes or no>\fP
|
|
If enabled, all queries sent over TLS upstreams will be padded to the
|
|
closest multiple of the size specified in
|
|
\fI\%pad\-queries\-block\-size\fP\&.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B pad\-queries\-block\-size: \fI<number>\fP
|
|
The block size with which to pad queries sent over TLS upstreams.
|
|
.sp
|
|
Default: 128
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B https\-port: \fI<number>\fP
|
|
The port number on which to provide DNS\-over\-HTTPS service.
|
|
Only interfaces configured with that port number as @number get the HTTPS
|
|
service.
|
|
.sp
|
|
Default: 443
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B http\-endpoint: \fI<endpoint string>\fP
|
|
The HTTP endpoint to provide DNS\-over\-HTTPS service on.
|
|
.sp
|
|
Default: /dns\-query
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B http\-max\-streams: \fI<number of streams>\fP
|
|
Number used in the SETTINGS_MAX_CONCURRENT_STREAMS parameter in the HTTP/2
|
|
SETTINGS frame for DNS\-over\-HTTPS connections.
|
|
.sp
|
|
Default: 100
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B http\-query\-buffer\-size: \fI<size in bytes>\fP
|
|
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 \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
|
|
or gigabytes (1024*1024 bytes in a megabyte).
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B http\-response\-buffer\-size: \fI<size in bytes>\fP
|
|
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 \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
|
|
or gigabytes (1024*1024 bytes in a megabyte).
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B http\-nodelay: \fI<yes or no>\fP
|
|
Set TCP_NODELAY socket option on sockets used to provide DNS\-over\-HTTPS
|
|
service.
|
|
Ignored if the option is not available.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B http\-notls\-downstream: \fI<yes or no>\fP
|
|
Disable use of TLS for the downstream DNS\-over\-HTTP connections.
|
|
Useful for local back end servers.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B proxy\-protocol\-port: \fI<portnr>\fP
|
|
List port numbers as
|
|
\fI\%proxy\-protocol\-port\fP, and when
|
|
interfaces are defined, eg. with the @port suffix, as this port number,
|
|
they support and expect PROXYv2.
|
|
.sp
|
|
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).
|
|
.sp
|
|
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.
|
|
.sp
|
|
PROXYv2 is supported for UDP and TCP/TLS listening interfaces.
|
|
.sp
|
|
There is no support for PROXYv2 on a DoH, DoQ or DNSCrypt listening interface.
|
|
.sp
|
|
Can list multiple, each on a new statement.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B quic\-port: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 853
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B quic\-size: \fI<size in bytes>\fP
|
|
Maximum number of bytes for all QUIC buffers and data combined.
|
|
A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq 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.
|
|
.sp
|
|
Default: 8m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B use\-systemd: \fI<yes or no>\fP
|
|
Enable or disable systemd socket activation.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-daemonize: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tcp\-connection\-limit: \fI<IP netblock> <limit>\fP
|
|
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.
|
|
.sp
|
|
Default: (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B access\-control: \fI<IP netblock> <action>\fP
|
|
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
|
|
\fI\%refuse\fP is used.
|
|
The order of the access\-control statements therefore does not matter.
|
|
The action can be
|
|
\fI\%deny\fP,
|
|
\fI\%refuse\fP,
|
|
\fI\%allow\fP,
|
|
\fI\%allow_setrd\fP,
|
|
\fI\%allow_snoop\fP,
|
|
\fI\%allow_cookie\fP,
|
|
\fI\%deny_non_local\fP or
|
|
\fI\%refuse_non_local\fP\&.
|
|
.INDENT 7.0
|
|
.TP
|
|
.B deny
|
|
Stops queries from hosts from that netblock.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B refuse
|
|
Stops queries too, but sends a DNS rcode REFUSED error message back.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B 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.
|
|
.sp
|
|
The \fI\%allow\fP 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.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B allow_setrd
|
|
Ignores the recursion desired (RD) bit and treats all requests as if
|
|
the recursion desired bit is set.
|
|
.sp
|
|
Note that this behavior violates \fI\%RFC 1034\fP 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.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B allow_snoop
|
|
Gives non\-recursive access too.
|
|
This gives both recursive and non recursive access.
|
|
The name \fIallow_snoop\fP 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).
|
|
.sp
|
|
In that case use
|
|
\fI\%allow_snoop\fP for
|
|
your administration host.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B allow_cookie
|
|
Allows access only to UDP queries that contain a valid DNS Cookie as
|
|
specified in RFC 7873 and RFC 9018, when the
|
|
\fI\%answer\-cookie\fP 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 \fIallow_cookie\fP action will also accept requests over stateful
|
|
transports, regardless of the presence of an DNS Cookie and regardless
|
|
of the \fI\%answer\-cookie\fP 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.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B deny_non_local
|
|
The
|
|
\fI\%deny_non_local\fP
|
|
action is for hosts that are only allowed to query for the
|
|
authoritative \fI\%local\-data\fP, they are not
|
|
allowed full recursion but only the static data.
|
|
Messages that are disallowed are dropped.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B refuse_non_local
|
|
The
|
|
\fI\%refuse_non_local\fP
|
|
action is for hosts that are only allowed to query for the
|
|
authoritative \fI\%local\-data\fP, they are not
|
|
allowed full recursion but only the static data.
|
|
Messages that are disallowed receive error code REFUSED.
|
|
.UNINDENT
|
|
.sp
|
|
By default only localhost (the 127.0.0.0/8 IP netblock, not the loopback
|
|
interface) is implicitly \fIallowed\fP, the rest is refused.
|
|
The default is \fIrefused\fP, 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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B access\-control\-tag: \fI<IP netblock> \(dq<list of tags>\(dq\fP
|
|
Assign tags to \fI\%access\-control\fP
|
|
elements.
|
|
Clients using this access control element use localzones that are tagged
|
|
with one of these tags.
|
|
.sp
|
|
Tags must be defined in \fI\%define\-tag\fP\&.
|
|
Enclose list of tags in quotes (\fB\(dq\(dq\fP) and put spaces between tags.
|
|
.sp
|
|
If \fI\%access\-control\-tag\fP is
|
|
configured for a netblock that does not have an
|
|
\fI\%access\-control\fP, an access\-control
|
|
element with action \fI\%allow\fP
|
|
is configured for this netblock.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B access\-control\-tag\-action: \fI<IP netblock> <tag> <action>\fP
|
|
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
|
|
\fI\%access\-control\-tag\fP and
|
|
\fI\%local\-zone\-tag\fP where \(dqfirst\(dq comes
|
|
from the order of the \fI\%define\-tag\fP values.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B access\-control\-tag\-data: \fI<IP netblock> <tag> \(dq<resource record string>\(dq\fP
|
|
Set redirect data for particular tag for given access control element.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B access\-control\-view: \fI<IP netblock> <view name>\fP
|
|
Set view for given access control element.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface\-action: \fI<ip address or interface name [@port]> <action>\fP
|
|
Similar to \fI\%access\-control\fP but for
|
|
interfaces.
|
|
.sp
|
|
The action is the same as the ones defined under
|
|
\fI\%access\-control\fP\&.
|
|
.sp
|
|
Default action for interfaces is
|
|
\fI\%refuse\fP\&.
|
|
By default only localhost (the 127.0.0.0/8 IP netblock, not the loopback
|
|
interface) is implicitly allowed through the default
|
|
\fI\%access\-control\fP behavior.
|
|
This also means that any attempt to use the \fBinterface\-*:\fP options for
|
|
the loopback interface will not work as they will be overridden by the
|
|
implicit default \(dqaccess\-control: 127.0.0.0/8 allow\(dq option.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The interface needs to be already specified with
|
|
\fI\%interface\fP and that any
|
|
\fBaccess\-control*:\fP option overrides all \fBinterface\-*:\fP
|
|
options for targeted clients.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface\-tag: \fI<ip address or interface name [@port]> <\(dqlist of tags\(dq>\fP
|
|
Similar to \fI\%access\-control\-tag\fP but
|
|
for interfaces.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The interface needs to be already specified with
|
|
\fI\%interface\fP and that any
|
|
\fBaccess\-control*:\fP option overrides all \fBinterface\-*:\fP
|
|
options for targeted clients.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface\-tag\-action: \fI<ip address or interface name [@port]> <tag> <action>\fP
|
|
Similar to
|
|
\fI\%access\-control\-tag\-action\fP
|
|
but for interfaces.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The interface needs to be already specified with
|
|
\fI\%interface\fP and that any
|
|
\fBaccess\-control*:\fP option overrides all \fBinterface\-*:\fP
|
|
options for targeted clients.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface\-tag\-data: \fI<ip address or interface name [@port]> <tag> <\(dqresource record string\(dq>\fP
|
|
Similar to
|
|
\fI\%access\-control\-tag\-data\fP but
|
|
for interfaces.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The interface needs to be already specified with
|
|
\fI\%interface\fP and that any
|
|
\fBaccess\-control*:\fP option overrides all \fBinterface\-*:\fP
|
|
options for targeted clients.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B interface\-view: \fI<ip address or interface name [@port]> <view name>\fP
|
|
Similar to \fI\%access\-control\-view\fP
|
|
but for interfaces.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The interface needs to be already specified with
|
|
\fI\%interface\fP and that any
|
|
\fBaccess\-control*:\fP option overrides all \fBinterface\-*:\fP
|
|
options for targeted clients.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B chroot: \fI<directory>\fP
|
|
If \fI\%chroot\fP 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.
|
|
.sp
|
|
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.
|
|
.sp
|
|
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 \fB/var/run/unbound.pid\fP and the chroot
|
|
to be \fB/var/unbound\fP, for example.
|
|
Note that Unbound is not able to remove the pidfile after termination when
|
|
it is located outside of the chroot directory.
|
|
.sp
|
|
Additionally, Unbound may need to access \fB/dev/urandom\fP (for entropy)
|
|
from inside the chroot.
|
|
.sp
|
|
If given, a \fIchroot(2)\fP is done to the given directory.
|
|
If you give \fB\(dq\(dq\fP no \fIchroot(2)\fP is performed.
|
|
.sp
|
|
Default: @UNBOUND_CHROOT_DIR@
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B username: \fI<name>\fP
|
|
If given, after binding the port the user privileges are dropped.
|
|
If you give username: \fB\(dq\(dq\fP no user change is performed.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: @UNBOUND_USERNAME@
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B directory: \fI<directory>\fP
|
|
Sets the working directory for the program.
|
|
On Windows the string \(dq%EXECUTABLE%\(dq tries to change to the directory that
|
|
\fBunbound.exe\fP resides in.
|
|
If you give a \fI\%server: directory:
|
|
<directory>\fP before
|
|
\fI\%include\fP file statements then those includes
|
|
can be relative to the working directory.
|
|
.sp
|
|
Default: @UNBOUND_RUN_DIR@
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B logfile: \fI<filename>\fP
|
|
If \fB\(dq\(dq\fP is given, logging goes to stderr, or nowhere once daemonized.
|
|
The logfile is appended to, in the following format:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
[seconds since 1970] unbound[pid:tid]: type: message.
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
If this option is given, the \fI\%use\-syslog\fP
|
|
option is internally set to \fBno\fP\&.
|
|
.sp
|
|
The logfile is reopened (for append) when the config file is reread, on
|
|
SIGHUP.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B use\-syslog: \fI<yes or no>\fP
|
|
Sets Unbound to send log messages to the syslogd, using \fIsyslog(3)\fP\&.
|
|
The log facility LOG_DAEMON is used, with identity \(dqunbound\(dq.
|
|
The logfile setting is overridden when
|
|
\fI\%use\-syslog: yes\fP is set.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-identity: \fI<string>\fP
|
|
If \fB\(dq\(dq\fP is given, then the name of the executable, usually
|
|
\(dqunbound\(dq 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.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-time\-ascii: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no (prints the seconds since 1970 in brackets)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-time\-iso: \fI<yes or no>\fP
|
|
Log time in ISO8601 format, if
|
|
\fI\%log\-time\-ascii: yes\fP
|
|
is also set.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-queries: \fI<yes or no>\fP
|
|
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 \fB\(aq?\(aq\fP\&.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-replies: \fI<yes or no>\fP
|
|
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 \fB\(aq?\(aq\fP\&.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-tag\-queryreply: \fI<yes or no>\fP
|
|
Prints the word \(aqquery\(aq and \(aqreply\(aq with
|
|
\fI\%log\-queries\fP and
|
|
\fI\%log\-replies\fP\&.
|
|
This makes filtering logs easier.
|
|
.sp
|
|
Default: no (backwards compatible)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-destaddr: \fI<yes or no>\fP
|
|
Prints the destination address, port and type in the
|
|
\fI\%log\-replies\fP output.
|
|
This disambiguates what type of traffic, eg. UDP or TCP, and to what local
|
|
port the traffic was sent to.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-local\-actions: \fI<yes or no>\fP
|
|
Print log lines to inform about local zone actions.
|
|
These lines are like the \fI\%local\-zone type
|
|
inform\fP print outs, but they are also
|
|
printed for the other types of local zones.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B log\-servfail: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B pidfile: \fI<filename>\fP
|
|
The process id is written to the file.
|
|
Default is \fB\(dq@UNBOUND_PIDFILE@\(dq\fP\&.
|
|
So,
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
kill \-HUP \(gacat @UNBOUND_PIDFILE@\(ga
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
triggers a reload,
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
kill \-TERM \(gacat @UNBOUND_PIDFILE@\(ga
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
gracefully terminates.
|
|
.sp
|
|
Default: @UNBOUND_PIDFILE@
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B root\-hints: \fI<filename>\fP
|
|
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, and then it is
|
|
possible to use a root hints file with specific servers.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B hide\-identity: \fI<yes or no>\fP
|
|
If enabled \(aqid.server\(aq and \(aqhostname.bind\(aq queries are REFUSED.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B identity: \fI<string>\fP
|
|
Set the identity to report.
|
|
If set to \fB\(dq\(dq\fP, then the hostname of the server is returned.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B hide\-version: \fI<yes or no>\fP
|
|
If enabled \(aqversion.server\(aq and \(aqversion.bind\(aq queries are REFUSED.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B version: \fI<string>\fP
|
|
Set the version to report.
|
|
If set to \fB\(dq\(dq\fP, then the package version is returned.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B hide\-http\-user\-agent: \fI<yes or no>\fP
|
|
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
|
|
\fI\%http\-user\-agent\fP below.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B http\-user\-agent: \fI<string>\fP
|
|
Set the HTTP User\-Agent header for outgoing HTTP requests.
|
|
If set to \fB\(dq\(dq\fP, then the package name and version are used.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B nsid: \fI<string>\fP
|
|
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 \(aqascii_\(aq prefix and then an ASCII
|
|
string.
|
|
.sp
|
|
Default: (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B hide\-trustanchor: \fI<yes or no>\fP
|
|
If enabled \(aqtrustanchor.unbound\(aq queries are REFUSED.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B target\-fetch\-policy: \fI<\(dqlist of numbers\(dq>\fP
|
|
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.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Enclose the list between quotes (\fB\(dq\(dq\fP) and put spaces between numbers.
|
|
Setting all zeroes, \(dq0 0 0 0 0\(dq gives behaviour closer to that of BIND 9,
|
|
while setting \(dq\-1 \-1 \-1 \-1 \-1\(dq gives behaviour rumoured to be closer to
|
|
that of BIND 8.
|
|
.sp
|
|
Default: \(dq3 2 1 0 0\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-short\-bufsize: \fI<yes or no>\fP
|
|
Very small EDNS buffer sizes from queries are ignored.
|
|
.sp
|
|
Default: yes (per \fI\%RFC 6891\fP)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-large\-queries: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-glue: \fI<yes or no>\fP
|
|
Will trust glue only if it is within the servers authority.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-unverified\-glue: \fI<yes or no>\fP
|
|
Will trust only in\-zone glue.
|
|
Will try to resolve all out of zone (\fIunverified\fP) glue.
|
|
Will fallback to the original glue if unable to resolve.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-dnssec\-stripped: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-below\-nxdomain: \fI<yes or no>\fP
|
|
From \fI\%RFC 8020\fP (with title \(dqNXDOMAIN: There Really Is Nothing
|
|
Underneath\(dq), 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.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The NXDOMAIN must be secure, this means NSEC3 with optout is
|
|
insufficient.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-referral\-path: \fI<yes or no>\fP
|
|
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
|
|
\fI\%target\-fetch\-policy\fP to increase
|
|
the max depth that is checked to.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-algo\-downgrade: \fI<yes or no>\fP
|
|
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
|
|
\fI\%RFC 4509\fP (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.
|
|
\fI\%RFC 6840\fP mandates that zone signers must produce zones signed with all
|
|
advertised algorithms, but sometimes they do not.
|
|
\fI\%RFC 6840\fP 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 \fI\%RFC 6840\fP
|
|
for DNSSEC validation and should only be used to perform a signature
|
|
completeness test to support troubleshooting.
|
|
.sp
|
|
\fBWARNING:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Using this option may break DNSSEC resolution with non \fI\%RFC 6840\fP
|
|
conforming signers and/or in multi\-signer configurations that don\(aqt
|
|
send all the advertised signatures.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B harden\-unknown\-additional: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B use\-caps\-for\-id: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B caps\-exempt: \fI<domain>\fP
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B caps\-whitelist: \fI<domain>\fP
|
|
Alternate syntax for \fI\%caps\-exempt\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B qname\-minimisation: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B qname\-minimisation\-strict: \fI<yes or no>\fP
|
|
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
|
|
\fI\%qname\-minimisation\fP is enabled.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B aggressive\-nsec: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B private\-address: \fI<IP address or subnet>\fP
|
|
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.
|
|
.sp
|
|
Some names can be allowed to contain your private addresses, by default all
|
|
the \fI\%local\-data\fP that you configured is
|
|
allowed to, and you can specify additional names using
|
|
\fI\%private\-domain\fP\&.
|
|
No private addresses are enabled by default.
|
|
.sp
|
|
We consider to enable this for the \fI\%RFC 1918\fP private IP address space by
|
|
default in later releases.
|
|
That would enable private addresses for \fB10.0.0.0/8\fP, \fB172.16.0.0/12\fP,
|
|
\fB192.168.0.0/16\fP, \fB169.254.0.0/16\fP, \fBfd00::/8\fP and \fBfe80::/10\fP,
|
|
since the RFC standards say these addresses should not be visible on the
|
|
public internet.
|
|
.sp
|
|
Turning on \fB127.0.0.0/8\fP would hinder many spamblocklists as they use
|
|
that.
|
|
Adding \fB::ffff:0:0/96\fP stops IPv4\-mapped IPv6 addresses from bypassing
|
|
the filter.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B private\-domain: \fI<domain name>\fP
|
|
Allow this domain, and all its subdomains to contain private addresses.
|
|
Give multiple times to allow multiple domain names to contain private
|
|
addresses.
|
|
.sp
|
|
Default: (none)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B unwanted\-reply\-threshold: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-not\-query\-address: \fI<IP address>\fP
|
|
Do not query the given IP address.
|
|
Can be IPv4 or IPv6.
|
|
Append /num to indicate a classless delegation netblock, for example like
|
|
\fB10.2.3.4/24\fP or \fB2001::11/64\fP\&.
|
|
.sp
|
|
Default: (none)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-not\-query\-localhost: \fI<yes or no>\fP
|
|
If yes, localhost is added to the
|
|
\fI\%do\-not\-query\-address\fP entries,
|
|
both IPv6 \fB::1\fP and IPv4 \fB127.0.0.1/8\fP\&.
|
|
If no, then localhost can be used to send queries to.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B prefetch: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B prefetch\-key: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B deny\-any: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rrset\-roundrobin: \fI<yes or no>\fP
|
|
If yes, Unbound rotates RRSet order in response (the random number is taken
|
|
from the query ID, for speed and thread safety).
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B minimal\-responses: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B disable\-dnssec\-lame\-check: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B module\-config: \fI\(dq<module names>\(dq\fP
|
|
Module configuration, a list of module names separated by spaces, surround
|
|
the string with quotes (\fB\(dq\(dq\fP).
|
|
The modules can be \fBrespip\fP, \fBvalidator\fP, or \fBiterator\fP (and possibly
|
|
more, see below).
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The ordering of the modules is significant, the order decides the order
|
|
of processing.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Setting this to just \(dqiterator\(dq will result in a non\-validating server.
|
|
Setting this to \(dqvalidator iterator\(dq will turn on DNSSEC validation.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
You must also set trust\-anchors for validation to be useful.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Adding \fBrespip\fP to the front will cause RPZ processing to be done on all
|
|
queries.
|
|
.sp
|
|
Most modules that need to be listed here have to be listed at the beginning
|
|
of the line.
|
|
.sp
|
|
The \fBsubnetcache\fP module has to be listed just before the iterator.
|
|
.sp
|
|
The \fBpython\fP module can be listed in different places, it then processes
|
|
the output of the module it is just before.
|
|
.sp
|
|
The \fBdynlib\fP module can be listed pretty much anywhere, it is only a very
|
|
thin wrapper that allows dynamic libraries to run in its place.
|
|
.sp
|
|
Default: \(dqvalidator iterator\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B trust\-anchor\-file: \fI<filename>\fP
|
|
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.
|
|
.sp
|
|
Default: \(dq\(dq (no trust anchor file)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B auto\-trust\-anchor\-file: \fI<filename>\fP
|
|
File with trust anchor for one zone, which is tracked with \fI\%RFC 5011\fP
|
|
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
|
|
\fI\%trust\-anchor\-file\fP\&.
|
|
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 \fI\%chroot\fP (if that is
|
|
used).
|
|
.sp
|
|
Default: \(dq\(dq (no auto trust anchor file)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B trust\-anchor: \fI\(dq<Resource Record>\(dq\fP
|
|
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 \fI\%trust\-anchor\-file\fP\&.
|
|
The resource record is entered in the same format as \fIdig(1)\fP or \fIdrill(1)\fP
|
|
prints them, the same format as in the zone file.
|
|
Has to be on a single line, with \fB\(dq\(dq\fP 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.
|
|
.sp
|
|
Default: (none)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B trusted\-keys\-file: \fI<filename>\fP
|
|
File with trusted keys for validation.
|
|
Specify more than one file with several entries, one file per entry.
|
|
Like \fI\%trust\-anchor\-file\fP but has a
|
|
different file format.
|
|
Format is BIND\-9 style format, the \fBtrusted\-keys { name flag proto algo
|
|
\(dqkey\(dq; };\fP clauses are read.
|
|
It is possible to use wildcards with this statement, the wildcard is
|
|
expanded on start and on reload.
|
|
.sp
|
|
Default: \(dq\(dq (no trusted keys file)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B trust\-anchor\-signaling: \fI<yes or no>\fP
|
|
Send \fI\%RFC 8145\fP key tag query after trust anchor priming.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B root\-key\-sentinel: \fI<yes or no>\fP
|
|
Root key trust anchor sentinel.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B domain\-insecure: \fI<domain name>\fP
|
|
Sets \fI<domain name>\fP to be insecure, DNSSEC chain of trust is ignored
|
|
towards the \fI<domain name>\fP\&.
|
|
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).
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: (none)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-override\-date: \fI<rrsig\-style date spec>\fP
|
|
.sp
|
|
\fBWARNING:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Debugging feature!
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-sig\-skew\-min: \fI<seconds>\fP
|
|
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.
|
|
.sp
|
|
Default: 3600 (1 hour)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-sig\-skew\-max: \fI<seconds>\fP
|
|
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.
|
|
.sp
|
|
Default: 86400 (24 hours)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-max\-restart: \fI<number>\fP
|
|
The maximum number the validator should restart validation with another
|
|
authority in case of failed validation.
|
|
.sp
|
|
Default: 5
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-bogus\-ttl: \fI<seconds>\fP
|
|
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.
|
|
.sp
|
|
Default: 60
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-clean\-additional: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-log\-level: \fI<number>\fP
|
|
Have the validator print validation failures to the log.
|
|
Regardless of the verbosity setting.
|
|
.sp
|
|
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.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-permissive\-mode: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ignore\-cd\-flag: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B disable\-edns\-do: \fI<yes or no>\fP
|
|
Disable the EDNS DO flag in upstream requests.
|
|
It breaks DNSSEC validation for Unbound\(aqs 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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B serve\-expired: \fI<yes or no>\fP
|
|
If enabled, Unbound attempts to serve old responses from cache with a TTL
|
|
of \fI\%serve\-expired\-reply\-ttl\fP in
|
|
the response.
|
|
By default the expired answer will be used after a resolution attempt
|
|
errored out or is taking more than
|
|
\fI\%serve\-expired\-client\-timeout\fP
|
|
to resolve.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B serve\-expired\-ttl: \fI<seconds>\fP
|
|
Limit serving of expired responses to configured seconds after expiration.
|
|
\fB0\fP disables the limit.
|
|
This option only applies when
|
|
\fI\%serve\-expired\fP is enabled.
|
|
A suggested value per RFC 8767 is between 86400 (1 day) and 259200 (3 days).
|
|
The default is 86400.
|
|
.sp
|
|
Default: 86400
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B serve\-expired\-ttl\-reset: \fI<yes or no>\fP
|
|
Set the TTL of expired records to the
|
|
\fI\%serve\-expired\-ttl\fP 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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B serve\-expired\-reply\-ttl: \fI<seconds>\fP
|
|
TTL value to use when replying with expired data.
|
|
If
|
|
\fI\%serve\-expired\-client\-timeout\fP
|
|
is also used then it is RECOMMENDED to use 30 as the value (\fI\%RFC 8767\fP).
|
|
.sp
|
|
This value is capped by the original TTL of the record.
|
|
This means that records with higher original TTL than this value will use
|
|
this value for expired replies.
|
|
Records with lower original TTL than this value will use their original TTL
|
|
for expired replies.
|
|
.sp
|
|
Default: 30
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B serve\-expired\-client\-timeout: \fI<msec>\fP
|
|
Time in milliseconds before replying to the client with expired data.
|
|
This essentially enables the serve\-stale behavior as specified in
|
|
\fI\%RFC 8767\fP that first tries to resolve before immediately responding with
|
|
expired data.
|
|
Setting this to \fB0\fP will disable this behavior and instead serve the
|
|
expired record immediately from the cache before attempting to refresh it
|
|
via resolution.
|
|
.sp
|
|
Default: 1800
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B serve\-original\-ttl: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Enabling this feature does not impact cache expiry, it only changes the TTL
|
|
Unbound embeds in responses to queries.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
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.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The values set using \fI\%cache\-min\-ttl\fP
|
|
and \fI\%cache\-max\-ttl\fP are ignored.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B val\-nsec3\-keysize\-iterations: <\(dqlist of values\(dq>
|
|
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 \(dq1024 65535\(dq there is no restriction to NSEC3 iteration
|
|
values.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
This table must be kept short; a very long list could cause slower
|
|
operation.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: \(dq1024 150 2048 150 4096 150\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B zonemd\-permissive\-mode: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B add\-holddown: \fI<seconds>\fP
|
|
Instruct the
|
|
\fI\%auto\-trust\-anchor\-file\fP probe
|
|
mechanism for \fI\%RFC 5011\fP autotrust updates to add new trust anchors only
|
|
after they have been visible for this time.
|
|
.sp
|
|
Default: 2592000 (30 days as per the RFC)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B del\-holddown: \fI<seconds>\fP
|
|
Instruct the
|
|
\fI\%auto\-trust\-anchor\-file\fP probe
|
|
mechanism for \fI\%RFC 5011\fP autotrust updates to remove revoked trust anchors
|
|
after they have been kept in the revoked list for this long.
|
|
.sp
|
|
Default: 2592000 (30 days as per the RFC)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B keep\-missing: \fI<seconds>\fP
|
|
Instruct the
|
|
\fI\%auto\-trust\-anchor\-file\fP probe
|
|
mechanism for \fI\%RFC 5011\fP 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.
|
|
.sp
|
|
Default: 31622400 (366 days)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B permit\-small\-holddown: \fI<yes or no>\fP
|
|
Debug option that allows the autotrust 5011 rollover timers to assume very
|
|
small values.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B key\-cache\-size: \fI<number>\fP
|
|
Number of bytes size of the key cache.
|
|
A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
|
|
or gigabytes (1024*1024 bytes in a megabyte).
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B key\-cache\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B neg\-cache\-size: \fI<number>\fP
|
|
Number of bytes size of the aggressive negative cache.
|
|
A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
|
|
or gigabytes (1024*1024 bytes in a megabyte).
|
|
.sp
|
|
Default: 1m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B unblock\-lan\-zones: \fI<yes or no>\fP
|
|
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 \(aqlan\(aq
|
|
upstream.
|
|
When enabled, only localhost, \fB127.0.0.1\fP reverse and \fB::1\fP 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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B insecure\-lan\-zones: \fI<yes or no>\fP
|
|
If enabled, then reverse lookups in private address space are not
|
|
validated.
|
|
This is usually required whenever
|
|
\fI\%unblock\-lan\-zones\fP is used.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-zone: \fI<zone> <type>\fP
|
|
Configure a local zone.
|
|
The type determines the answer to give if there is no match from
|
|
\fI\%local\-data\fP\&.
|
|
The types are
|
|
\fI\%deny\fP,
|
|
\fI\%refuse\fP,
|
|
\fI\%static\fP,
|
|
\fI\%transparent\fP,
|
|
\fI\%redirect\fP,
|
|
\fI\%nodefault\fP,
|
|
\fI\%typetransparent\fP,
|
|
\fI\%inform\fP,
|
|
\fI\%inform_deny\fP,
|
|
\fI\%inform_redirect\fP,
|
|
\fI\%always_transparent\fP,
|
|
\fI\%block_a\fP,
|
|
\fI\%always_refuse\fP,
|
|
\fI\%always_nxdomain\fP,
|
|
\fI\%always_null\fP,
|
|
\fI\%noview\fP,
|
|
and are explained below.
|
|
After that the default settings are listed.
|
|
Use \fI\%local\-data\fP to enter data into the
|
|
local zone.
|
|
Answers for local zones are authoritative DNS answers.
|
|
By default the zones are class IN.
|
|
.sp
|
|
If you need more complicated authoritative data, with referrals,
|
|
wildcards, CNAME/DNAME support, or DNSSEC authoritative service,
|
|
setup a \fI\%stub\-zone\fP for it as detailed in the
|
|
stub zone section below.
|
|
A \fI\%stub\-zone\fP can be used to have unbound
|
|
send queries to another server, an authoritative server, to fetch the
|
|
information.
|
|
With a \fI\%forward\-zone\fP, unbound sends
|
|
queries to a server that is a recursive server to fetch the information.
|
|
With an \fI\%auth\-zone\fP a zone can be loaded from
|
|
file and used, it can be used like a local zone for users downstream, or
|
|
the \fI\%auth\-zone\fP information can be used to fetch
|
|
information from when resolving like it is an upstream server.
|
|
The \fI\%forward\-zone\fP and
|
|
\fI\%auth\-zone\fP options are described in their
|
|
sections below.
|
|
If you want to perform filtering of the information that the users can
|
|
fetch, the \fI\%local\-zone\fP and
|
|
\fI\%local\-data\fP statements allow for this, but
|
|
also the \fI\%rpz\fP functionality can be used, described
|
|
in the RPZ section.
|
|
.INDENT 7.0
|
|
.TP
|
|
.B deny
|
|
Do not send an answer, drop the query.
|
|
If there is a match from local data, the query is answered.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B refuse
|
|
Send an error message reply, with rcode REFUSED.
|
|
If there is a match from local data, the query is answered.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B 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
|
|
\fI\%local\-data\fP for the zone apex domain.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B transparent
|
|
If there is a match from \fI\%local\-data\fP,
|
|
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
|
|
\fI\%local\-data\fP but no such type of data is
|
|
given in localdata, then a NOERROR NODATA answer is returned.
|
|
If no \fI\%local\-zone\fP is given
|
|
\fI\%local\-data\fP causes a transparent zone
|
|
to be created by default.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B 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
|
|
\fI\%transparent\fP 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.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B 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:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqexample.com.\(dq redirect
|
|
local\-data: \(dqexample.com. A 127.0.0.1\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
queries for \fBwww.example.com\fP and \fBwww.foo.example.com\fP are
|
|
redirected, so that users with web browsers cannot access sites with
|
|
suffix example.com.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B inform
|
|
The query is answered normally, same as
|
|
\fI\%transparent\fP\&.
|
|
The client IP address (@portnumber) is printed to the logfile.
|
|
The log message is:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
timestamp, unbound\-pid, info: zonename inform IP@port queryname type class.
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
This option can be used for normal resolution, but machines looking up
|
|
infected names are logged, eg. to run antivirus on them.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B inform_deny
|
|
The query is dropped, like
|
|
\fI\%deny\fP, and logged, like
|
|
\fI\%inform\fP\&.
|
|
Ie. find infected machines without answering the queries.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B inform_redirect
|
|
The query is redirected, like
|
|
\fI\%redirect\fP, and logged,
|
|
like \fI\%inform\fP\&.
|
|
Ie. answer queries with fixed data and also log the machines that ask.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B always_transparent
|
|
Like \fI\%transparent\fP, but
|
|
ignores local data and resolves normally.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B block_a
|
|
Like \fI\%transparent\fP, 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.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B always_refuse
|
|
Like \fI\%refuse\fP, but ignores
|
|
local data and refuses the query.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B always_nxdomain
|
|
Like \fI\%static\fP, but ignores
|
|
local data and returns NXDOMAIN for the query.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B always_nodata
|
|
Like \fI\%static\fP, but ignores
|
|
local data and returns NODATA for the query.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B always_deny
|
|
Like \fI\%deny\fP, but ignores local
|
|
data and drops the query.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B always_null
|
|
Always returns \fB0.0.0.0\fP or \fB::0\fP for every name in the zone.
|
|
Like \fI\%redirect\fP with zero
|
|
data for A and AAAA.
|
|
Ignores local data in the zone.
|
|
Used for some block lists.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B noview
|
|
Breaks out of that view and moves towards the global local zones for
|
|
answer to the query.
|
|
If the \fI\%view\-first\fP is no, it\(aqll
|
|
resolve normally.
|
|
If \fI\%view\-first\fP is enabled, it\(aqll
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B nodefault
|
|
Used to turn off default contents for AS112 zones.
|
|
The other types also turn off default contents for the zone.
|
|
The \fI\%nodefault\fP option has
|
|
no other effect than turning off default contents for the given zone.
|
|
Use \fI\%nodefault\fP if you use
|
|
exactly that zone, if you want to use a subzone, use
|
|
\fI\%transparent\fP\&.
|
|
.UNINDENT
|
|
.sp
|
|
The default zones are localhost, reverse \fB127.0.0.1\fP and \fB::1\fP, the
|
|
\fBhome.arpa\fP, \fBresolver.arpa\fP, \fBservice.arpa\fP, \fBonion\fP, \fBtest\fP,
|
|
\fBinvalid\fP 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.
|
|
.sp
|
|
The defaults can be turned off by specifying your own
|
|
\fI\%local\-zone\fP of that name, or using the
|
|
\fI\%nodefault\fP type.
|
|
Below is a list of the default zone contents.
|
|
.INDENT 7.0
|
|
.TP
|
|
.B 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:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqlocalhost.\(dq redirect
|
|
local\-data: \(dqlocalhost. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dqlocalhost. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
local\-data: \(dqlocalhost. 10800 IN A 127.0.0.1\(dq
|
|
local\-data: \(dqlocalhost. 10800 IN AAAA ::1\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B reverse IPv4 loopback
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dq127.in\-addr.arpa.\(dq static
|
|
local\-data: \(dq127.in\-addr.arpa. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dq127.in\-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
local\-data: \(dq1.0.0.127.in\-addr.arpa. 10800 IN PTR localhost.\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B reverse IPv6 loopback
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dq1.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.\(dq static
|
|
local\-data: \(dq1.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.\(dq
|
|
local\-data: \(dq1.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\(dq
|
|
local\-data: \(dq1.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.\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
home.arpa (\fI\%RFC 8375\fP)
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqhome.arpa.\(dq static
|
|
local\-data: \(dqhome.arpa. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dqhome.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
resolver.arpa (\fI\%RFC 9462\fP)
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqresolver.arpa.\(dq static
|
|
local\-data: \(dqresolver.arpa. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dqresolver.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B service.arpa (draft\-ietf\-dnssd\-srp\-25)
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqservice.arpa.\(dq static
|
|
local\-data: \(dqservice.arpa. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dqservice.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
onion (\fI\%RFC 7686\fP)
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqonion.\(dq static
|
|
local\-data: \(dqonion. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dqonion. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
test (\fI\%RFC 6761\fP)
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqtest.\(dq static
|
|
local\-data: \(dqtest. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dqtest. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
invalid (\fI\%RFC 6761\fP)
|
|
Default content:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: \(dqinvalid.\(dq static
|
|
local\-data: \(dqinvalid. 10800 IN NS localhost.\(dq
|
|
local\-data: \(dqinvalid. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
reverse local use zones (\fI\%RFC 1918\fP)
|
|
Reverse data for zones \fB10.in\-addr.arpa\fP, \fB16.172.in\-addr.arpa\fP to
|
|
\fB31.172.in\-addr.arpa\fP, \fB168.192.in\-addr.arpa\fP\&.
|
|
The \fI\%local\-zone\fP is set static and as
|
|
\fI\%local\-data\fP SOA and NS records are
|
|
provided.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
special\-use IPv4 Addresses (\fI\%RFC 3330\fP)
|
|
Reverse data for zones \fB0.in\-addr.arpa\fP (this), \fB254.169.in\-addr.arpa\fP (link\-local),
|
|
\fB2.0.192.in\-addr.arpa\fP (TEST NET 1), \fB100.51.198.in\-addr.arpa\fP
|
|
(TEST NET 2), \fB113.0.203.in\-addr.arpa\fP (TEST NET 3),
|
|
\fB255.255.255.255.in\-addr.arpa\fP (broadcast).
|
|
And from \fB64.100.in\-addr.arpa\fP to \fB127.100.in\-addr.arpa\fP (Shared
|
|
Address Space).
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
reverse IPv6 unspecified (\fI\%RFC 4291\fP)
|
|
Reverse data for zone
|
|
\fB0.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.\fP
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
reverse IPv6 Locally Assigned Local Addresses (\fI\%RFC 4193\fP)
|
|
Reverse data for zone \fBD.F.ip6.arpa\fP\&.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
reverse IPv6 Link Local Addresses (\fI\%RFC 4291\fP)
|
|
Reverse data for zones \fB8.E.F.ip6.arpa\fP to \fBB.E.F.ip6.arpa\fP\&.
|
|
.UNINDENT
|
|
.INDENT 7.0
|
|
.TP
|
|
.B reverse IPv6 Example Prefix
|
|
Reverse data for zone \fB8.B.D.0.1.0.0.2.ip6.arpa\fP\&.
|
|
This zone is used for tutorials and examples.
|
|
You can remove the block on this zone with:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-zone: 8.B.D.0.1.0.0.2.ip6.arpa. nodefault
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
You can also selectively unblock a part of the zone by making that part
|
|
transparent with a \fI\%local\-zone\fP statement.
|
|
This also works with the other default zones.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-data: \fI\(dq<resource record string>\(dq\fP
|
|
Configure local data, which is served in reply to queries for it.
|
|
The query has to match exactly unless you configure the
|
|
\fI\%local\-zone\fP as redirect.
|
|
If not matched exactly, the \fI\%local\-zone\fP
|
|
type determines further processing.
|
|
If \fI\%local\-data\fP is configured that is not a
|
|
subdomain of a \fI\%local\-zone\fP, a
|
|
\fI\%transparent local\-zone\fP is
|
|
configured.
|
|
For record types such as TXT, use single quotes, as in:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
local\-data: \(aqexample. TXT \(dqtext\(dq\(aq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
If you need more complicated authoritative data, with referrals,
|
|
wildcards, CNAME/DNAME support, or DNSSEC authoritative service, setup
|
|
a \fI\%stub\-zone\fP for it as detailed in the stub
|
|
zone section below.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-data\-ptr: \fI\(dqIPaddr name\(dq\fP
|
|
Configure local data shorthand for a PTR record with the reversed IPv4 or
|
|
IPv6 address and the host name.
|
|
For example \fB\(dq192.0.2.4 www.example.com\(dq\fP\&.
|
|
TTL can be inserted like this: \fB\(dq2001:DB8::4 7200 www.example.com\(dq\fP
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-zone\-tag: \fI<zone> <\(dqlist of tags\(dq>\fP
|
|
Assign tags to local zones.
|
|
Tagged localzones will only be applied when the used
|
|
\fI\%access\-control\fP element has a matching
|
|
tag.
|
|
Tags must be defined in \fI\%define\-tag\fP\&.
|
|
Enclose list of tags in quotes (\fB\(dq\(dq\fP) and put spaces between tags.
|
|
When there are multiple tags it checks if the intersection of the list of
|
|
tags for the query and \fI\%local\-zone\-tag\fP
|
|
is non\-empty.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-zone\-override: \fI<zone> <IP netblock> <type>\fP
|
|
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
|
|
\fI\%access\-control\-tag\-action\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B response\-ip: \fI<IP\-netblock> <action>\fP
|
|
This requires use of the \fBrespip\fP module.
|
|
.sp
|
|
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.
|
|
\fI<action>\fP has generally the same semantics as that for
|
|
\fI\%access\-control\-tag\-action\fP,
|
|
but there are some exceptions.
|
|
.sp
|
|
Actions for \fI\%response\-ip\fP are different
|
|
from those for \fI\%local\-zone\fP in that in case
|
|
of the former there is no point of such conditions as \(dqthe query matches it
|
|
but there is no local data\(dq.
|
|
Because of this difference, the semantics of
|
|
\fI\%response\-ip\fP actions are modified or
|
|
simplified as follows: The \fIstatic\fP, \fIrefuse\fP, \fItransparent\fP,
|
|
\fItypetransparent\fP, and \fInodefault\fP actions are invalid for \fIresponse\-ip\fP\&.
|
|
Using any of these will cause the configuration to be rejected as faulty.
|
|
The \fIdeny\fP action is non\-conditional, i.e. it always results in dropping
|
|
the corresponding query.
|
|
The resolution result before applying the \fIdeny\fP action is still cached and
|
|
can be used for other queries.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B response\-ip\-data: \fI<IP\-netblock> <\(dqresource record string\(dq>\fP
|
|
This requires use of the \fBrespip\fP module.
|
|
.sp
|
|
This specifies the action data for
|
|
\fI\%response\-ip\fP with action being to redirect
|
|
as specified by \fI<\(dqresource record string\(dq>\fP\&.
|
|
\fI<\(dqResource record string\(dq>\fP is similar to that of
|
|
\fI\%access\-control\-tag\-data\fP,
|
|
but it must be of either AAAA, A or CNAME types.
|
|
If the \fI<IP\-netblock>\fP 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
|
|
\fI\%response\-ip\-data\fP for the same
|
|
\fI<IP\-netblock>\fP\&.
|
|
Also, CNAME and other types of records must not coexist for the same
|
|
\fI<IP\-netblock>\fP, following the normal rules for CNAME records.
|
|
The textual domain name for the CNAME does not have to be explicitly
|
|
terminated with a dot (\fB\(dq.\(dq\fP); the root name is assumed to be the origin
|
|
for the name.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B response\-ip\-tag: \fI<IP\-netblock> <\(dqlist of tags\(dq>\fP
|
|
This requires use of the \fBrespip\fP module.
|
|
.sp
|
|
Assign tags to response \fI<IP\-netblock>\fP\&.
|
|
If the IP address in an AAAA or A RR in the answer section of a response
|
|
matches the specified \fI<IP\-netblock>\fP, the specified tags are assigned to
|
|
the IP address.
|
|
Then, if an \fI\%access\-control\-tag\fP is
|
|
defined for the client and it includes one of the tags for the response IP,
|
|
the corresponding
|
|
\fI\%access\-control\-tag\-action\fP
|
|
will apply.
|
|
Tag matching rule is the same as that for
|
|
\fI\%access\-control\-tag\fP and
|
|
\fI\%local\-zone\fP\&.
|
|
Unlike \fI\%local\-zone\-tag\fP,
|
|
\fI\%response\-ip\-tag\fP can be defined for an
|
|
\fI<IP\-netblock>\fP even if no \fI\%response\-ip\fP is
|
|
defined for that netblock.
|
|
If multiple \fI\%response\-ip\-tag\fP options
|
|
are specified for the same \fI<IP\-netblock>\fP 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.
|
|
.sp
|
|
Actions specified in an
|
|
\fI\%access\-control\-tag\-action\fP
|
|
that has a matching tag with
|
|
\fI\%response\-ip\-tag\fP can be those that are
|
|
\(dqinvalid\(dq for \fI\%response\-ip\fP listed above,
|
|
since
|
|
\fI\%access\-control\-tag\-action\fP
|
|
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
|
|
\fI\%response\-ip\-data\fP will generally
|
|
result in NOERROR/NODATA instead of NXDOMAIN, since the
|
|
\fI\%response\-ip\fP 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 \fI\%response\-ip\fP
|
|
configuration, then the result will be NOERROR/NODATA.
|
|
The only case where NXDOMAIN is returned is when an
|
|
\fI\%always_nxdomain\fP
|
|
action applies.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ratelimit: \fI<number or 0>\fP
|
|
Enable ratelimiting of queries sent to nameserver for performing recursion.
|
|
0 disables the feature.
|
|
This option is experimental at this time.
|
|
.sp
|
|
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.
|
|
.sp
|
|
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.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Configured forwarders are excluded from ratelimiting.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ratelimit\-size: \fI<memory size>\fP
|
|
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.
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ratelimit\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ratelimit\-factor: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 10
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ratelimit\-backoff: \fI<yes or no>\fP
|
|
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
|
|
\fI\%ratelimit\-factor\fP, until demand
|
|
decreases below the configured ratelimit for a 2 second rate window.
|
|
Useful to set \fI\%ratelimit\fP to a suspicious
|
|
rate to aggressively limit unusually high traffic.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ratelimit\-for\-domain: \fI<domain> <number qps or 0>\fP
|
|
Override the global \fI\%ratelimit\fP 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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ratelimit\-below\-domain: \fI<domain> <number qps or 0>\fP
|
|
Override the global \fI\%ratelimit\fP 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
|
|
\fI\%ratelimit\-for\-domain\fP 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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-ratelimit: \fI<number or 0>\fP
|
|
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,
|
|
\fI\%ip\-ratelimit\-cookie\fP
|
|
can be used instead.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-ratelimit\-cookie: \fI<number or 0>\fP
|
|
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
|
|
\fI\%allow_cookie\fP, 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
|
|
\fI\%ip\-ratelimit\fP e.g., tenfold.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-ratelimit\-size: \fI<memory size>\fP
|
|
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.
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-ratelimit\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-ratelimit\-factor: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 10
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ip\-ratelimit\-backoff: \fI<yes or no>\fP
|
|
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
|
|
\fI\%ip\-ratelimit\-factor\fP, until demand
|
|
decreases below the configured ratelimit for a 2 second rate window.
|
|
Useful to set \fI\%ip\-ratelimit\fP to a
|
|
suspicious rate to aggressively limit unusually high traffic.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B outbound\-msg\-retry: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 5
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-sent\-count: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 32
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-query\-restarts: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 11
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B iter\-scrub\-ns: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 20
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B iter\-scrub\-cname: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 11
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-global\-quota: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 200
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B iter\-scrub\-promiscuous: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B fast\-server\-permil: \fI<number>\fP
|
|
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 \fI\%prefetch\fP is enabled (or
|
|
\fI\%serve\-expired\fP), 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 \fI\%fast\-server\-num\fP option can be
|
|
used to specify the size of the fastest servers set.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B fast\-server\-num: \fI<number>\fP
|
|
Set the number of servers that should be used for fast server selection.
|
|
Only use the fastest specified number of servers with the
|
|
\fI\%fast\-server\-permil\fP option, that
|
|
turns this on or off.
|
|
.sp
|
|
Default: 3
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B answer\-cookie: \fI<yes or no>\fP
|
|
If enabled, Unbound will answer to requests containing DNS Cookies as
|
|
specified in RFC 7873 and RFC 9018.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cookie\-secret: \fI\(dq<128 bit hex string>\(dq\fP
|
|
Server\(aqs 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\(aqs Server Cookies.
|
|
An example hex string would be \(dq000102030405060708090a0b0c0d0e0f\(dq.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
This option is ignored if a
|
|
\fI\%cookie\-secret\-file\fP is present.
|
|
In that case the secrets from that file are used in DNS Cookie
|
|
calculations.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: 128 bits random secret generated at startup time
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cookie\-secret\-file: \fI<filename>\fP
|
|
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
|
|
\fI\%cookie\-secret\fP option is ignored.
|
|
Enable it by setting a filename, like
|
|
\(dq/usr/local/etc/unbound_cookiesecrets.txt\(dq.
|
|
The content of this file must be manipulated with the
|
|
\fI\%add_cookie_secret\fP,
|
|
\fI\%drop_cookie_secret\fP and
|
|
\fI\%activate_cookie_secret\fP
|
|
commands to the \fI\%unbound\-control(8)\fP tool.
|
|
Please see that manpage on how to perform a safe cookie secret rollover.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B edns\-client\-string: \fI<IP netblock> <string>\fP
|
|
Include an EDNS0 option containing configured ASCII string in queries with
|
|
destination address matching the configured \fI<IP netblock>\fP\&.
|
|
This configuration option can be used multiple times.
|
|
The most specific match will be used.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B edns\-client\-string\-opcode: \fI<opcode>\fP
|
|
EDNS0 option code for the
|
|
\fI\%edns\-client\-string\fP option, from 0
|
|
to 65535.
|
|
A value from the \(aqReserved for Local/Experimental\(aq range (65001\-65534)
|
|
should be used.
|
|
.sp
|
|
Default: 65001
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ede: \fI<yes or no>\fP
|
|
If enabled, Unbound will respond with Extended DNS Error codes
|
|
(\fI\%RFC 8914\fP).
|
|
These EDEs provide additional information with a response mainly for, but
|
|
not limited to, DNS and DNSSEC errors.
|
|
.sp
|
|
When the \fI\%val\-log\-level\fP option is also
|
|
set to \fB2\fP, responses with Extended DNS Errors concerning DNSSEC failures
|
|
will also contain a descriptive text message about the reason for the
|
|
failure.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ede\-serve\-expired: \fI<yes or no>\fP
|
|
If enabled, Unbound will attach an Extended DNS Error (\fI\%RFC 8914\fP) \fICode 3
|
|
\- Stale Answer\fP as EDNS0 option to the expired response.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
\fI\%ede: yes\fP needs to be set as well for this to
|
|
work.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dns\-error\-reporting: \fI<yes or no>\fP
|
|
If enabled, Unbound will send DNS Error Reports (\fI\%RFC 9567\fP).
|
|
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 (\fI\%RFC 8914\fP) will be reported to the
|
|
zone\(aqs reporting agent.
|
|
.sp
|
|
The \fI\%ede\fP option does not need to be enabled for
|
|
this to work.
|
|
.sp
|
|
It is advised that the
|
|
\fI\%qname\-minimisation\fP option is also
|
|
enabled to increase privacy on the outgoing reports.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.SH REMOTE CONTROL OPTIONS
|
|
.sp
|
|
These options are part of the \fBremote\-control:\fP section and are the
|
|
declarations for the remote control facility.
|
|
.sp
|
|
If this is enabled, the \fI\%unbound\-control(8)\fP
|
|
utility can be used to send commands to the running Unbound server.
|
|
The server uses these options to setup TLS security for the connection.
|
|
The \fI\%unbound\-control(8)\fP utility also reads
|
|
this \fBremote\-control:\fP section for options.
|
|
To setup the correct self\-signed certificates use the
|
|
\fBunbound\-control\-setup(8)\fP utility.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B control\-enable: \fI<yes or no>\fP
|
|
The option is used to enable remote control.
|
|
If turned off, the server does not listen for control commands.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B control\-interface: \fI<IP address or interface name or path>\fP
|
|
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.
|
|
.sp
|
|
By default localhost (\fB127.0.0.1\fP and \fB::1\fP) is listened to.
|
|
Use \fB0.0.0.0\fP and \fB::0\fP 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.
|
|
.sp
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B control\-port: \fI<port number>\fP
|
|
The port number to listen on for IPv4 or IPv6 control interfaces.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
If you change this and permissions have been dropped, you must restart
|
|
the server for the change to take effect.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: 8953
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B control\-use\-cert: \fI<yes or no>\fP
|
|
For localhost
|
|
\fI\%control\-interface\fP you can
|
|
disable the use of TLS by setting this option to \(dqno\(dq.
|
|
For local sockets, TLS is disabled and the value of this option is ignored.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B server\-key\-file: \fI<private key file>\fP
|
|
Path to the server private key.
|
|
This file is generated by the
|
|
\fI\%unbound\-control\-setup(8)\fP utility.
|
|
This file is used by the Unbound server, but not by
|
|
\fI\%unbound\-control(8)\fP\&.
|
|
.sp
|
|
Default: unbound_server.key
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B server\-cert\-file: \fI<certificate file.pem>\fP
|
|
Path to the server self signed certificate.
|
|
This file is generated by the
|
|
\fI\%unbound\-control\-setup(8)\fP utility.
|
|
This file is used by the Unbound server, and also by
|
|
\fI\%unbound\-control(8)\fP\&.
|
|
.sp
|
|
Default: unbound_server.pem
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B control\-key\-file: \fI<private key file>\fP
|
|
Path to the control client private key.
|
|
This file is generated by the
|
|
\fI\%unbound\-control\-setup(8)\fP utility.
|
|
This file is used by \fI\%unbound\-control(8)\fP\&.
|
|
.sp
|
|
Default: unbound_control.key
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B control\-cert\-file: \fI<certificate file.pem>\fP
|
|
Path to the control client certificate.
|
|
This certificate has to be signed with the server certificate.
|
|
This file is generated by the
|
|
\fI\%unbound\-control\-setup(8)\fP utility.
|
|
This file is used by \fI\%unbound\-control(8)\fP\&.
|
|
.sp
|
|
Default: unbound_control.pem
|
|
.UNINDENT
|
|
.SH STUB ZONE OPTIONS
|
|
.sp
|
|
These options are part of the \fBstub\-zone:\fP section.
|
|
.sp
|
|
There may be multiple \fBstub\-zone:\fP sections.
|
|
Each with a \fI\%name\fP 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.
|
|
.sp
|
|
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:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
stub\-addr: <ip address of host[@port]>
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
The Unbound resolver can then access the data, without referring to the public
|
|
internet for it.
|
|
.sp
|
|
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 (\(aqauthentic\(aq), but the AA (\(aqauthoritative\(aq) bit is not
|
|
set on these replies.
|
|
.sp
|
|
Consider adding \fI\%server\fP statements for
|
|
\fI\%domain\-insecure\fP and for
|
|
\fI\%local\-zone: <name> nodefault\fP
|
|
for the zone if it is a locally served zone.
|
|
The \fI\%domain\-insecure\fP option stops DNSSEC
|
|
from invalidating the zone.
|
|
The \fI\%local\-zone: nodefault\fP (or
|
|
\fI\%transparent\fP) option makes the
|
|
(reverse\-) zone bypass Unbound\(aqs filtering of \fI\%RFC 1918\fP zones.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B name: \fI<domain name>\fP
|
|
Name of the stub zone.
|
|
This is the full domain name of the zone.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-host: \fI<domain name>\fP
|
|
Name of stub zone nameserver.
|
|
Is itself resolved before it is used.
|
|
.sp
|
|
To use a non\-default port for DNS communication append \fB\(aq@\(aq\fP with the
|
|
port number.
|
|
.sp
|
|
If TLS is enabled, then you can append a \fB\(aq#\(aq\fP and a name, then it\(aqll
|
|
check the TLS authentication certificates with that name.
|
|
.sp
|
|
If you combine the \fB\(aq@\(aq\fP and \fB\(aq#\(aq\fP, the \fB\(aq@\(aq\fP comes first.
|
|
If only \fB\(aq#\(aq\fP is used the default port is the configured
|
|
\fI\%tls\-port\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-addr: \fI<IP address>\fP
|
|
IP address of stub zone nameserver.
|
|
Can be IPv4 or IPv6.
|
|
.sp
|
|
To use a non\-default port for DNS communication append \fB\(aq@\(aq\fP with the
|
|
port number.
|
|
.sp
|
|
If TLS is enabled, then you can append a \fB\(aq#\(aq\fP and a name, then it\(aqll
|
|
check the tls authentication certificates with that name.
|
|
.sp
|
|
If you combine the \fB\(aq@\(aq\fP and \fB\(aq#\(aq\fP, the \fB\(aq@\(aq\fP comes first.
|
|
If only \fB\(aq#\(aq\fP is used the default port is the configured
|
|
\fI\%tls\-port\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-prime: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-first: \fI<yes or no>\fP
|
|
If enabled, a query is attempted without this stub section if it fails.
|
|
The data could not be retrieved and would have caused SERVFAIL because the
|
|
servers are unreachable, instead it is tried without this stub section.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-tls\-upstream: \fI<yes or no>\fP
|
|
Enabled or disable whether the queries to this stub use TLS for transport.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-ssl\-upstream: \fI<yes or no>\fP
|
|
Alternate syntax for
|
|
\fI\%stub\-tls\-upstream\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-tcp\-upstream: \fI<yes or no>\fP
|
|
If it is set to \(dqyes\(dq then upstream queries use TCP only for transport
|
|
regardless of global flag \fI\%tcp\-upstream\fP\&.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B stub\-no\-cache: \fI<yes or no>\fP
|
|
If enabled, data inside the stub is not cached.
|
|
This is useful when you want immediate changes to be visible.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.SH FORWARD ZONE OPTIONS
|
|
.sp
|
|
These options are part of the \fBforward\-zone:\fP section.
|
|
.sp
|
|
There may be multiple \fBforward\-zone:\fP sections.
|
|
Each with a \fI\%name\fP 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 \fI\%forward\-host\fP
|
|
and \fI\%forward\-addr\fP 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 \fI\%forward\-zone\fP entry with name
|
|
\fB\(dq.\(dq\fP and a \fI\%forward\-addr\fP target
|
|
will forward all queries to that other server (unless it can answer from the
|
|
cache).
|
|
.INDENT 0.0
|
|
.TP
|
|
.B name: \fI<domain name>\fP
|
|
Name of the forward zone.
|
|
This is the full domain name of the zone.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B forward\-host: \fI<domain name>\fP
|
|
Name of server to forward to.
|
|
Is itself resolved before it is used.
|
|
.sp
|
|
To use a non\-default port for DNS communication append \fB\(aq@\(aq\fP with the
|
|
port number.
|
|
.sp
|
|
If TLS is enabled, then you can append a \fB\(aq#\(aq\fP and a name, then it\(aqll
|
|
check the TLS authentication certificates with that name.
|
|
.sp
|
|
If you combine the \fB\(aq@\(aq\fP and \fB\(aq#\(aq\fP, the \fB\(aq@\(aq\fP comes first.
|
|
If only \fB\(aq#\(aq\fP is used the default port is the configured
|
|
\fI\%tls\-port\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B forward\-addr: \fI<IP address>\fP
|
|
IP address of server to forward to.
|
|
Can be IPv4 or IPv6.
|
|
.sp
|
|
To use a non\-default port for DNS communication append \fB\(aq@\(aq\fP with the
|
|
port number.
|
|
.sp
|
|
If TLS is enabled, then you can append a \fB\(aq#\(aq\fP and a name, then it\(aqll
|
|
check the tls authentication certificates with that name.
|
|
.sp
|
|
If you combine the \fB\(aq@\(aq\fP and \fB\(aq#\(aq\fP, the \fB\(aq@\(aq\fP comes first.
|
|
If only \fB\(aq#\(aq\fP is used the default port is the configured
|
|
\fI\%tls\-port\fP\&.
|
|
.sp
|
|
At high verbosity it logs the TLS certificate, with TLS enabled.
|
|
If you leave out the \fB\(aq#\(aq\fP and auth name from the
|
|
\fI\%forward\-addr\fP, any name is
|
|
accepted.
|
|
The cert must also match a CA from the
|
|
\fI\%tls\-cert\-bundle\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B forward\-first: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B forward\-tls\-upstream: \fI<yes or no>\fP
|
|
Enabled or disable whether the queries to this forwarder use TLS for
|
|
transport.
|
|
If you enable this, also configure a
|
|
\fI\%tls\-cert\-bundle\fP or use
|
|
\fI\%tls\-win\-cert\fP to load CA certs, otherwise
|
|
the connections cannot be authenticated.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B forward\-ssl\-upstream: \fI<yes or no>\fP
|
|
Alternate syntax for
|
|
\fI\%forward\-tls\-upstream\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B forward\-tcp\-upstream: \fI<yes or no>\fP
|
|
If it is set to \(dqyes\(dq then upstream queries use TCP only for transport
|
|
regardless of global flag \fI\%tcp\-upstream\fP\&.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B forward\-no\-cache: \fI<yes or no>\fP
|
|
If enabled, data inside the forward is not cached.
|
|
This is useful when you want immediate changes to be visible.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.SH AUTHORITY ZONE OPTIONS
|
|
.sp
|
|
These options are part of the \fBauth\-zone:\fP section.
|
|
.sp
|
|
Authority zones are configured with \fBauth\-zone:\fP, and each one must have a
|
|
\fI\%name\fP\&.
|
|
There can be multiple ones, by listing multiple \fBauth\-zone\fP section 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.
|
|
.sp
|
|
With \fI\%for\-downstream: yes\fP (default),
|
|
authority zones are processed after \fBlocal\-zones\fP 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.
|
|
.sp
|
|
With \fI\%for\-upstream: yes\fP (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.
|
|
.sp
|
|
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.
|
|
.sp
|
|
An interesting configuration is
|
|
\fI\%for\-downstream: no\fP,
|
|
\fI\%for\-upstream: yes\fP
|
|
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.
|
|
.sp
|
|
Authority zones can be read from a zonefile.
|
|
And can be kept updated via AXFR and IXFR.
|
|
After update the zonefile is rewritten.
|
|
The update mechanism uses the SOA timer values and performs SOA UDP queries to
|
|
detect zone changes.
|
|
.sp
|
|
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.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B name: \fI<zone name>\fP
|
|
Name of the authority zone.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B primary: \fI<IP address or host name>\fP
|
|
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.
|
|
.sp
|
|
To use a non\-default port for DNS communication append \fB\(aq@\(aq\fP with the
|
|
port number.
|
|
.sp
|
|
You can append a \fB\(aq#\(aq\fP and a name, then AXFR over TLS can be used and the
|
|
TLS authentication certificates will be checked with that name.
|
|
.sp
|
|
If you combine the \fB\(aq@\(aq\fP and \fB\(aq#\(aq\fP, the \fB\(aq@\(aq\fP 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
|
|
\fI\%url\fP to download the zonefile as a text file
|
|
from a webserver that would work.
|
|
.sp
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B master: \fI<IP address or host name>\fP
|
|
Alternate syntax for \fI\%primary\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B url: \fI<URL to zone file>\fP
|
|
Where to download a zonefile for the zone.
|
|
With HTTP or HTTPS.
|
|
An example for the url is:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
http://www.example.com/example.org.zone
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Multiple url statements can be given, they are tried in turn.
|
|
.sp
|
|
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.
|
|
.sp
|
|
For HTTPS, the \fI\%tls\-cert\-bundle\fP and
|
|
the hostname from the url are used to authenticate the connection.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Avoid dependencies on name lookups by using a notation like
|
|
\fB\(dqhttp://192.0.2.1/unbound\-primaries/example.com.zone\(dq\fP, with an explicit
|
|
IP address.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B allow\-notify: \fI<IP address or host name or netblockIP/prefix>\fP
|
|
With \fI\%allow\-notify\fP 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.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The primaries from \fI\%primary\fP and
|
|
\fI\%url\fP statements are allowed notify by
|
|
default.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B fallback\-enabled: \fI<yes or no>\fP
|
|
If enabled, Unbound falls back to querying the internet as a resolver for
|
|
this zone when lookups fail.
|
|
For example for DNSSEC validation failures.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B for\-downstream: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Turn it off if you want Unbound to provide recursion for the zone but have
|
|
a local copy of zone data.
|
|
.sp
|
|
If \fI\%for\-downstream: no\fP and
|
|
\fI\%for\-upstream: yes\fP 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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B for\-upstream: \fI<yes or no>\fP
|
|
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\(aqll fetch the data directly from the zone data.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B zonemd\-check: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B zonemd\-reject\-absence: \fI<yes or no>\fP
|
|
Enable this option to reject the absence of the ZONEMD record.
|
|
Without it, when ZONEMD is not there it is not checked.
|
|
.sp
|
|
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.
|
|
.sp
|
|
The action upon failure is controlled by the
|
|
\fI\%zonemd\-permissive\-mode\fP option,
|
|
for log only or also block the zone.
|
|
.sp
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B zonefile: \fI<filename>\fP
|
|
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).
|
|
.UNINDENT
|
|
.SH VIEW OPTIONS
|
|
.sp
|
|
These options are part of the \fBview:\fP section.
|
|
.sp
|
|
There may be multiple \fBview:\fP sections.
|
|
Each with a \fI\%name\fP and zero or more
|
|
\fI\%local\-zone\fP and
|
|
\fI\%local\-data\fP options.
|
|
Views can also contain \fI\%view\-first\fP,
|
|
\fI\%response\-ip\fP,
|
|
\fI\%response\-ip\-data\fP and
|
|
\fI\%local\-data\-ptr\fP options.
|
|
View can be mapped to requests by specifying the view name in an
|
|
\fI\%access\-control\-view\fP option.
|
|
Options from matching views will override global options.
|
|
Global options will be used if no matching view is found, or when the matching
|
|
view does not have the option specified.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B name: \fI<view name>\fP
|
|
Name of the view.
|
|
Must be unique.
|
|
This name is used in the
|
|
\fI\%access\-control\-view\fP option.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-zone: \fI<zone> <type>\fP
|
|
View specific local zone elements.
|
|
Has the same types and behaviour as the global
|
|
\fI\%local\-zone\fP elements.
|
|
When there is at least one \fIlocal\-zone:\fP specified and \fI\%view\-first:
|
|
no\fP is set, the default local\-zones will be
|
|
added to this view.
|
|
Defaults can be disabled using the nodefault type.
|
|
When \fI\%view\-first: yes\fP is set or when a
|
|
view does not have a \fI\%local\-zone\fP, the
|
|
global \fI\%local\-zone\fP will be used including
|
|
it\(aqs default zones.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-data: \fI\(dq<resource record string>\(dq\fP
|
|
View specific local data elements.
|
|
Has the same behaviour as the global
|
|
\fI\%local\-data\fP elements.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B local\-data\-ptr: \fI\(dqIPaddr name\(dq\fP
|
|
View specific local\-data\-ptr elements.
|
|
Has the same behaviour as the global
|
|
\fI\%local\-data\-ptr\fP elements.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B response\-ip: \fI<IP\-netblock> <action>\fP
|
|
This requires use of the \fBrespip\fP module.
|
|
.sp
|
|
Similar to \fI\%response\-ip\fP but
|
|
only applies to this view.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B response\-ip\-data: \fI<IP\-netblock> <\(dqresource record string\(dq>\fP
|
|
This requires use of the \fBrespip\fP module.
|
|
.sp
|
|
Similar to \fI\%response\-ip\-data\fP but
|
|
only applies to this view.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B view\-first: \fI<yes or no>\fP
|
|
If enabled, it attempts to use the global
|
|
\fI\%local\-zone\fP and
|
|
\fI\%local\-data\fP if there is no match in the
|
|
view specific options.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.SH PYTHON MODULE OPTIONS
|
|
.sp
|
|
These options are part of the \fBpython:\fP section.
|
|
.sp
|
|
The \fBpython:\fP section gives the settings for the \fIpython(1)\fP 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
|
|
\fBpython\fP has to be put in the
|
|
\fI\%module\-config\fP option (usually first, or
|
|
between the validator and iterator).
|
|
Multiple instances of the python module are supported by adding the word
|
|
\fBpython\fP more than once.
|
|
.sp
|
|
If the \fI\%chroot\fP option is enabled, you should make
|
|
sure Python\(aqs library directory structure is bind mounted in the new root
|
|
environment, see \fImount(8)\fP\&.
|
|
Also the \fI\%python\-script\fP path should
|
|
be specified as an absolute path relative to the new root, or as a relative
|
|
path to the working directory.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B python\-script: \fI<python file>\fP
|
|
The script file to load.
|
|
Repeat this option for every python module instance added to the
|
|
\fI\%module\-config\fP option.
|
|
.UNINDENT
|
|
.SH DYNAMIC LIBRARY MODULE OPTIONS
|
|
.sp
|
|
These options are part of the \fBdynlib:\fP section.
|
|
.sp
|
|
The \fBdynlib:\fP section gives the settings for the \fBdynlib\fP 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
|
|
\fBdynlib\fP has to be put in the
|
|
\fI\%module\-config\fP option.
|
|
Multiple instances of dynamic libraries are supported by adding the word
|
|
\fBdynlib\fP more than once.
|
|
.sp
|
|
The \fI\%dynlib\-file\fP path should be
|
|
specified as an absolute path relative to the new path set by
|
|
\fI\%chroot\fP, or as a relative path to the working
|
|
directory.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dynlib\-file: \fI<dynlib file>\fP
|
|
The dynamic library file to load.
|
|
Repeat this option for every dynlib module instance added to the
|
|
\fI\%module\-config\fP option.
|
|
.UNINDENT
|
|
.SH DNS64 MODULE OPTIONS
|
|
.sp
|
|
These options are part of the \fBserver:\fP section.
|
|
.sp
|
|
The \fBdns64\fP module must be configured in the
|
|
\fI\%module\-config\fP directive, e.g.:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
module\-config: \(dqdns64 validator iterator\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
and be compiled into the daemon to be enabled.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
If combining the \fBrespip\fP and \fBdns64\fP modules, the \fBrespip\fP module
|
|
needs to appear before the \fBdns64\fP module in the
|
|
\fI\%module\-config\fP
|
|
configuration option so that response IP and/or RPZ feeds can properly
|
|
filter responses regardless of DNS64 synthesis.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dns64\-prefix: \fI<IPv6 prefix>\fP
|
|
This sets the DNS64 prefix to use to synthesize AAAA records with.
|
|
It must be /96 or shorter.
|
|
.sp
|
|
Default: 64:ff9b::/96
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dns64\-synthall: \fI<yes or no>\fP
|
|
.sp
|
|
\fBWARNING:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Debugging feature!
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
If enabled, synthesize all AAAA records despite the presence of actual AAAA
|
|
records.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dns64\-ignore\-aaaa: \fI<domain name>\fP
|
|
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.
|
|
.UNINDENT
|
|
.SH NAT64 OPTIONS
|
|
.sp
|
|
These options are part of the \fBserver:\fP section.
|
|
.sp
|
|
NAT64 operation allows using a NAT64 prefix for outbound requests to IPv4\-only
|
|
servers.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B do\-nat64: \fI<yes or no>\fP
|
|
Use NAT64 to reach IPv4\-only servers.
|
|
Consider also enabling \fI\%prefer\-ip6\fP
|
|
to prefer native IPv6 connections to nameservers.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B nat64\-prefix: \fI<IPv6 prefix>\fP
|
|
Use a specific NAT64 prefix to reach IPv4\-only servers.
|
|
The prefix length must be one of /32, /40, /48, /56, /64 or /96.
|
|
.sp
|
|
Default: 64:ff9b::/96 (same as \fI\%dns64\-prefix\fP)
|
|
.UNINDENT
|
|
.SH DNSCRYPT OPTIONS
|
|
.sp
|
|
These options are part of the \fBdnscrypt:\fP section.
|
|
.sp
|
|
The \fBdnscrypt:\fP section gives the settings of the dnscrypt channel.
|
|
While those options are available, they are only meaningful if Unbound was
|
|
compiled with \fB\-\-enable\-dnscrypt\fP\&.
|
|
Currently certificate and secret/public keys cannot be generated by Unbound.
|
|
You can use dnscrypt\-wrapper to generate those:
|
|
\fI\%https://github.com/cofyc/dnscrypt\-wrapper/blob/master/README.md#usage\fP
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-enable: \fI<yes or no>\fP
|
|
Whether or not the dnscrypt config should be enabled.
|
|
You may define configuration but not activate it.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-port: \fI<port number>\fP
|
|
On which port should dnscrypt should be activated.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
There should be a matching interface option defined in the
|
|
\fI\%server:\fP section for this port.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-provider: \fI<provider name>\fP
|
|
The provider name to use to distribute certificates.
|
|
This is of the form:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
2.dnscrypt\-cert.example.com.
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
\fBIMPORTANT:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The name \fIMUST\fP end with a dot.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-secret\-key: \fI<path to secret key file>\fP
|
|
Path to the time limited secret key file.
|
|
This option may be specified multiple times.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-provider\-cert: \fI<path to cert file>\fP
|
|
Path to the certificate related to the
|
|
\fI\%dnscrypt\-secret\-key\fP\&.
|
|
This option may be specified multiple times.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-provider\-cert\-rotated: \fI<path to cert file>\fP
|
|
Path to a certificate that we should be able to serve existing connection
|
|
from but do not want to advertise over
|
|
\fI\%dnscrypt\-provider\fP \(aqs TXT
|
|
record certs distribution.
|
|
.sp
|
|
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.
|
|
.sp
|
|
By priming the cert, the servers can handle both old and new certs traffic
|
|
while distributing only one.
|
|
.sp
|
|
This option may be specified multiple times.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-shared\-secret\-cache\-size: \fI<memory size>\fP
|
|
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.
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-shared\-secret\-cache\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-nonce\-cache\-size: \fI<memory size>\fP
|
|
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.
|
|
.sp
|
|
Default: 4m
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnscrypt\-nonce\-cache\-slabs: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: (unconfigured)
|
|
.UNINDENT
|
|
.SH EDNS CLIENT SUBNET MODULE OPTIONS
|
|
.sp
|
|
These options are part of the \fBserver:\fP section.
|
|
.sp
|
|
The ECS module must be configured in the
|
|
\fI\%module\-config\fP directive, e.g.:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
module\-config: \(dqsubnetcache validator iterator\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
and be compiled into the daemon to be enabled.
|
|
.sp
|
|
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\(aqs 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.
|
|
.sp
|
|
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
|
|
\fI\%send\-client\-subnet\fP\&.
|
|
The option will always be forwarded, regardless the allowed addresses, when
|
|
\fI\%client\-subnet\-always\-forward: yes\fP
|
|
is set.
|
|
In this case the lookup in the regular cache is skipped.
|
|
.sp
|
|
The maximum size of the ECS cache is controlled by
|
|
\fI\%msg\-cache\-size\fP 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.
|
|
.sp
|
|
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.
|
|
.sp
|
|
This module does not interact with the
|
|
\fI\%serve\-expired*\fP and
|
|
\fI\%prefetch\fP options.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B send\-client\-subnet: \fI<IP address>\fP
|
|
Send client source address to this authority.
|
|
Append /num to indicate a classless delegation netblock, for example like
|
|
\fB10.2.3.4/24\fP or \fB2001::11/64\fP\&.
|
|
Can be given multiple times.
|
|
Authorities not listed will not receive edns\-subnet information, unless
|
|
domain in query is specified in
|
|
\fI\%client\-subnet\-zone\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B client\-subnet\-zone: \fI<domain>\fP
|
|
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
|
|
\fI\%send\-client\-subnet\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B client\-subnet\-always\-forward: \fI<yes or no>\fP
|
|
Specify whether the ECS address check (configured using
|
|
\fI\%send\-client\-subnet\fP) 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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-client\-subnet\-ipv6: \fI<number>\fP
|
|
Specifies the maximum prefix length of the client source address we are
|
|
willing to expose to third parties for IPv6.
|
|
.sp
|
|
Default: 56
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-client\-subnet\-ipv4: \fI<number>\fP
|
|
Specifies the maximum prefix length of the client source address we are
|
|
willing to expose to third parties for IPv4.
|
|
.sp
|
|
Default: 24
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B min\-client\-subnet\-ipv6: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B min\-client\-subnet\-ipv4: \fI<number>\fP
|
|
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
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-ecs\-tree\-size\-ipv4: \fI<number>\fP
|
|
Specifies the maximum number of subnets ECS answers kept in the ECS radix
|
|
tree.
|
|
This number applies for each qname/qclass/qtype tuple.
|
|
.sp
|
|
Default: 100
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B max\-ecs\-tree\-size\-ipv6: \fI<number>\fP
|
|
Specifies the maximum number of subnets ECS answers kept in the ECS radix
|
|
tree.
|
|
This number applies for each qname/qclass/qtype tuple.
|
|
.sp
|
|
Default: 100
|
|
.UNINDENT
|
|
.SH OPPORTUNISTIC IPSEC SUPPORT MODULE OPTIONS
|
|
.sp
|
|
These options are part of the \fBserver:\fP section.
|
|
.sp
|
|
The IPsec module must be configured in the
|
|
\fI\%module\-config\fP directive, e.g.:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
module\-config: \(dqipsecmod validator iterator\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
and be compiled into Unbound by using \fB\-\-enable\-ipsecmod\fP to be enabled.
|
|
.sp
|
|
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:
|
|
.INDENT 0.0
|
|
.TP
|
|
.B QNAME
|
|
Domain name of the A/AAAA and IPSECKEY query.
|
|
In string format.
|
|
.TP
|
|
.B IPSECKEY TTL
|
|
TTL of the IPSECKEY RRset.
|
|
.TP
|
|
.B A/AAAA
|
|
String of space separated IP addresses present in the A/AAAA RRset.
|
|
The IP addresses are in string format.
|
|
.TP
|
|
.B IPSECKEY
|
|
String of space separated IPSECKEY RDATA present in the IPSECKEY RRset.
|
|
The IPSECKEY RDATA are in DNS presentation format.
|
|
.UNINDENT
|
|
.sp
|
|
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\(aqt surpass
|
|
\fI\%ipsecmod\-max\-ttl\fP\&.
|
|
.sp
|
|
The same procedure is also followed when
|
|
\fI\%prefetch: yes\fP is set, but the A/AAAA answer is
|
|
given to the client before the hook is called.
|
|
\fI\%ipsecmod\-max\-ttl\fP ensures that the A/AAAA
|
|
answer given from cache is still relevant for opportunistic IPsec.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ipsecmod\-enabled: \fI<yes or no>\fP
|
|
Specifies whether the IPsec module is enabled or not.
|
|
The IPsec module still needs to be defined in the
|
|
\fI\%module\-config\fP directive.
|
|
This option facilitates turning on/off the module without
|
|
restarting/reloading Unbound.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ipsecmod\-hook: \fI<filename>\fP
|
|
Specifies the external hook that Unbound will call with \fIsystem(3)\fP\&.
|
|
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
|
|
\fI\%module\-config\fP directive.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ipsecmod\-strict: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ipsecmod\-max\-ttl: \fI<seconds>\fP
|
|
Time to live maximum for A/AAAA cached records after calling the external
|
|
hook.
|
|
.sp
|
|
Default: 3600
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ipsecmod\-ignore\-bogus: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ipsecmod\-allow: \fI<domain>\fP
|
|
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).
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B ipsecmod\-whitelist: \fI<domain>\fP
|
|
Alternate syntax for \fI\%ipsecmod\-allow\fP\&.
|
|
.UNINDENT
|
|
.SH CACHE DB MODULE OPTIONS
|
|
.sp
|
|
These options are part of the \fBcachedb:\fP section.
|
|
.sp
|
|
The Cache DB module must be configured in the
|
|
\fI\%module\-config\fP directive, e.g.:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
module\-config: \(dqvalidator cachedb iterator\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
and be compiled into the daemon with \fB\-\-enable\-cachedb\fP\&.
|
|
.sp
|
|
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.
|
|
.sp
|
|
This module interacts with the \fIserve\-expired\-*\fP options and will reply with
|
|
expired data if Unbound is configured for that.
|
|
.sp
|
|
If Unbound was built with \fB\-\-with\-libhiredis\fP on a system that has installed
|
|
the hiredis C client library of Redis, then the \fBredis\fP 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.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
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.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Additionally, the
|
|
\fI\%redis\-expire\-records\fP 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).
|
|
.sp
|
|
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\(aqs the administrator\(aqs responsibility to make the assumption hold.
|
|
.sp
|
|
The \fBcachedb:\fP section gives custom settings of the cache DB module.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B backend: \fI<backend name>\fP
|
|
Specify the backend database name.
|
|
The default database is the in\-memory backend named \fBtestframe\fP, which,
|
|
as the name suggests, is not of any practical use.
|
|
Depending on the build\-time configuration, \fBredis\fP backend may also be
|
|
used as described above.
|
|
.sp
|
|
Default: testframe
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B secret\-seed: \fI\(dq<secret string>\(dq\fP
|
|
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.
|
|
.sp
|
|
Default: \(dqdefault\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cachedb\-no\-store: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B cachedb\-check\-when\-serve\-expired: \fI<yes or no>\fP
|
|
If enabled, the cachedb is checked before an expired response is returned.
|
|
When
|
|
\fI\%serve\-expired\fP
|
|
is enabled, without
|
|
\fI\%serve\-expired\-client\-timeout\fP
|
|
, 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
|
|
\fI\%serve\-expired\-client\-timeout\fP
|
|
is enabled, the expired response is delayed until the timeout expires.
|
|
Unless the lookup succeeds within the timeout.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.sp
|
|
The following \fBcachedb:\fP options are specific to the \fBredis\fP backend.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-server\-host: \fI<server address or name>\fP
|
|
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.
|
|
.sp
|
|
Default: 127.0.0.1
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-server\-port: \fI<port number>\fP
|
|
The TCP port number of the Redis server.
|
|
.sp
|
|
Default: 6379
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-server\-path: \fI<unix socket path>\fP
|
|
The unix socket path to connect to the Redis server.
|
|
Unix sockets may have better throughput than the IP address option.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-server\-password: \fI\(dq<password>\(dq\fP
|
|
The Redis AUTH password to use for the Redis server.
|
|
Only relevant if Redis is configured for client password authorisation.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-timeout: \fI<msec>\fP
|
|
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.
|
|
.sp
|
|
Default: 100
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-command\-timeout: \fI<msec>\fP
|
|
The timeout to use for Redis commands, in milliseconds.
|
|
If \fB0\fP, it uses the
|
|
\fI\%redis\-timeout\fP
|
|
value.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-connect\-timeout: \fI<msec>\fP
|
|
The timeout to use for Redis connection set up, in milliseconds.
|
|
If \fB0\fP, it uses the
|
|
\fI\%redis\-timeout\fP
|
|
value.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-expire\-records: \fI<yes or no>\fP
|
|
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
|
|
\fI\%serve\-expired\fP and
|
|
\fI\%serve\-expired\-ttl: 0\fP, this option is
|
|
internally reverted to \(dqno\(dq.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
Redis \(dqSET ... EX\(dq support is required for this option (Redis >= 2.6.12).
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-logical\-db: \fI<logical database index>\fP
|
|
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
|
|
(\fI\%https://redis.io/commands/select/\fP) 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\(aqed upon connecting.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-server\-host: \fI<server address or name>\fP
|
|
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.
|
|
.sp
|
|
This server is treated as a read\-only replica server
|
|
(\fI\%https://redis.io/docs/management/replication/#read\-only\-replica\fP).
|
|
If specified, all Redis read commands will go to this replica server, while
|
|
the write commands will go to the
|
|
\fI\%redis\-server\-host\fP\&.
|
|
.sp
|
|
Default: \(dq\(dq (disabled).
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-server\-port: \fI<port number>\fP
|
|
The TCP port number of the Redis replica server.
|
|
.sp
|
|
Default: 6379
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-server\-path: \fI<unix socket path>\fP
|
|
The unix socket path to connect to the Redis replica server.
|
|
Unix sockets may have better throughput than the IP address option.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-server\-password: \fI\(dq<password>\(dq\fP
|
|
The Redis AUTH password to use for the Redis server.
|
|
Only relevant if Redis is configured for client password authorisation.
|
|
.sp
|
|
Default: \(dq\(dq (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-timeout: \fI<msec>\fP
|
|
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.
|
|
.sp
|
|
Default: 100
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-command\-timeout: \fI<msec>\fP
|
|
The timeout to use for Redis replica commands, in milliseconds.
|
|
If \fB0\fP, it uses the
|
|
\fI\%redis\-replica\-timeout\fP
|
|
value.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-connect\-timeout: \fI<msec>\fP
|
|
The timeout to use for Redis replica connection set up, in milliseconds.
|
|
If \fB0\fP, it uses the
|
|
\fI\%redis\-replica\-timeout\fP
|
|
value.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B redis\-replica\-logical\-db: \fI<logical database index>\fP
|
|
Same as \fI\%redis\-logical\-db\fP but
|
|
for the Redis replica server.
|
|
.sp
|
|
Default: 0
|
|
.UNINDENT
|
|
.SH DNSTAP OPTIONS
|
|
.sp
|
|
These options are part of the \fBdnstap:\fP section.
|
|
.sp
|
|
DNSTAP is a flexible, structured binary log format for DNS software.
|
|
When compiled in by using \fB\-\-enable\-dnstap\fP, it can be enabled in the
|
|
\fBdnstap:\fP 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.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-enable: \fI<yes or no>\fP
|
|
If dnstap is enabled.
|
|
If yes, it connects to the DNSTAP server and if any of the
|
|
\fIdnstap\-log\-..\-messages:\fP options is enabled it sends logs for those
|
|
messages to the server.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-bidirectional: \fI<yes or no>\fP
|
|
Use frame streams in bidirectional mode to transfer DNSTAP messages.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-socket\-path: \fI<file name>\fP
|
|
Sets the unix socket file name for connecting to the server that is
|
|
listening on that socket.
|
|
.sp
|
|
Default: @DNSTAP_SOCKET_PATH@
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-ip: \fI<IPaddress[@port]>\fP
|
|
If \fB\(dq\(dq\fP, the unix socket is used, if set with an IP address (IPv4 or
|
|
IPv6) that address is used to connect to the server.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-tls: \fI<yes or no>\fP
|
|
Set this to use TLS to connect to the server specified in
|
|
\fI\%dnstap\-ip\fP\&.
|
|
If set to no, TCP is used to connect to the server.
|
|
.sp
|
|
Default: yes
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-tls\-server\-name: \fI<name of TLS authentication>\fP
|
|
The TLS server name to authenticate the server with.
|
|
Used when \fI\%dnstap\-tls: yes\fP is set.
|
|
If \fB\(dq\(dq\fP it is ignored.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-tls\-cert\-bundle: \fI<file name of cert bundle>\fP
|
|
The pem file with certs to verify the TLS server certificate.
|
|
If \fB\(dq\(dq\fP the server default cert bundle is used, or the windows cert
|
|
bundle on windows.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-tls\-client\-key\-file: \fI<file name>\fP
|
|
The client key file for TLS client authentication.
|
|
If \fB\(dq\(dq\fP client authentication is not used.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-tls\-client\-cert\-file: \fI<file name>\fP
|
|
The client cert file for TLS client authentication.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-send\-identity: \fI<yes or no>\fP
|
|
If enabled, the server identity is included in the log messages.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-send\-version: \fI<yes or no>\fP
|
|
If enabled, the server version if included in the log messages.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-identity: \fI<string>\fP
|
|
The identity to send with messages, if \fB\(dq\(dq\fP the hostname is used.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-version: \fI<string>\fP
|
|
The version to send with messages, if \fB\(dq\(dq\fP the package version is used.
|
|
.sp
|
|
Default: \(dq\(dq
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-sample\-rate: \fI<number>\fP
|
|
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.
|
|
.sp
|
|
Default: 0 (disabled)
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-log\-resolver\-query\-messages: \fI<yes or no>\fP
|
|
Enable to log resolver query messages.
|
|
These are messages from Unbound to upstream servers.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-log\-resolver\-response\-messages: \fI<yes or no>\fP
|
|
Enable to log resolver response messages.
|
|
These are replies from upstream servers to Unbound.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-log\-client\-query\-messages: \fI<yes or no>\fP
|
|
Enable to log client query messages.
|
|
These are client queries to Unbound.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-log\-client\-response\-messages: \fI<yes or no>\fP
|
|
Enable to log client response messages.
|
|
These are responses from Unbound to clients.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-log\-forwarder\-query\-messages: \fI<yes or no>\fP
|
|
Enable to log forwarder query messages.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B dnstap\-log\-forwarder\-response\-messages: \fI<yes or no>\fP
|
|
Enable to log forwarder response messages.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.SH RESPONSE POLICY ZONE OPTIONS
|
|
.sp
|
|
These options are part of the \fBrpz:\fP section.
|
|
.sp
|
|
Response Policy Zones are configured with \fBrpz:\fP section clauses, and each
|
|
one must have a \fI\%name\fP option.
|
|
There can be multiple ones, by listing multiple \fBrpz:\fP section clauses, each
|
|
with a different name.
|
|
RPZ sections are applied in order of configuration and any match from an
|
|
earlier RPZ zone will terminate the RPZ lookup.
|
|
Note that a PASSTHRU action is still considered a match.
|
|
.sp
|
|
The respip module needs to be added to the
|
|
\fI\%module\-config\fP, e.g.:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
module\-config: \(dqrespip validator iterator\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
If combining the \fBrespip\fP and \fBdns64\fP modules, the \fBrespip\fP module
|
|
needs to appear before the \fBdns64\fP module in the
|
|
\fI\%module\-config\fP
|
|
configuration option so that response IP and/or RPZ feeds can properly
|
|
filter responses regardless of DNS64 synthesis.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
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
|
|
\fI\%local\-zone\fP and before any
|
|
\fI\%auth\-zone\fP\&.
|
|
.sp
|
|
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.
|
|
.sp
|
|
An example RPZ record, that answers \fBexample.com\fP with \fBNXDOMAIN\fP:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
example.com CNAME .
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
The triggers are encoded in the name on the left
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
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
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
The netblock is written as \fB<netblocklen>.<ip address in reverse>\fP\&.
|
|
For IPv6 use \fB\(aqzz\(aq\fP for \fB\(aq::\(aq\fP\&.
|
|
Specify individual addresses with scope length of 32 or 128.
|
|
For example, \fB24.10.100.51.198.rpz\-ip\fP is \fB198.51.100.10/24\fP and
|
|
\fB32.10.zz.db8.2001.rpz\-ip\fP is \fB2001:db8:0:0:0:0:0:10/32\fP\&.
|
|
.sp
|
|
The actions are specified with the record on the right
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
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
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Other records like AAAA, TXT and other CNAMEs (not rpz\-..) can also be used to
|
|
answer queries with that content.
|
|
.INDENT 0.0
|
|
.TP
|
|
.B name: \fI<zone name>\fP
|
|
Name of the authority zone.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B primary: \fI<IP address or host name>\fP
|
|
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.
|
|
.sp
|
|
To use a non\-default port for DNS communication append \fB\(aq@\(aq\fP with the
|
|
port number.
|
|
.sp
|
|
You can append a \fB\(aq#\(aq\fP and a name, then AXFR over TLS can be used and the
|
|
TLS authentication certificates will be checked with that name.
|
|
.sp
|
|
If you combine the \fB\(aq@\(aq\fP and \fB\(aq#\(aq\fP, the \fB\(aq@\(aq\fP 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
|
|
\fI\%url\fP to download the zonefile as a text file
|
|
from a webserver that would work.
|
|
.sp
|
|
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.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B master: \fI<IP address or host name>\fP
|
|
Alternate syntax for \fI\%primary\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B url: \fI<url to zonefile>\fP
|
|
Where to download a zonefile for the zone.
|
|
With HTTP or HTTPS.
|
|
An example for the url is:
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
http://www.example.com/example.org.zone
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
Multiple url statements can be given, they are tried in turn.
|
|
.sp
|
|
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.
|
|
.sp
|
|
For HTTPS, the \fI\%tls\-cert\-bundle\fP and
|
|
the hostname from the url are used to authenticate the connection.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B allow\-notify: \fI<IP address or host name or netblockIP/prefix>\fP
|
|
With \fI\%allow\-notify\fP 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.
|
|
.sp
|
|
\fBNOTE:\fP
|
|
.INDENT 7.0
|
|
.INDENT 3.5
|
|
The primaries from \fI\%primary\fP and
|
|
\fI\%url\fP statements are allowed notify by
|
|
default.
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B zonefile: \fI<filename>\fP
|
|
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).
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rpz\-action\-override: \fI<action>\fP
|
|
Always use this RPZ action for matching triggers from this zone.
|
|
Possible actions are: \fInxdomain\fP, \fInodata\fP, \fIpassthru\fP, \fIdrop\fP, \fIdisabled\fP
|
|
and \fIcname\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rpz\-cname\-override: \fI<domain>\fP
|
|
The CNAME target domain to use if the cname action is configured for
|
|
\fI\%rpz\-action\-override\fP\&.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rpz\-log: \fI<yes or no>\fP
|
|
Log all applied RPZ actions for this RPZ zone.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rpz\-log\-name: \fI<name>\fP
|
|
Specify a string to be part of the log line, for easy referencing.
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B rpz\-signal\-nxdomain\-ra: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B for\-downstream: \fI<yes or no>\fP
|
|
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.
|
|
.sp
|
|
Default: no
|
|
.UNINDENT
|
|
.INDENT 0.0
|
|
.TP
|
|
.B tags: \fI\(dq<list of tags>\(dq\fP
|
|
Limit the policies from this RPZ section to clients with a matching tag.
|
|
.sp
|
|
Tags need to be defined in \fI\%define\-tag\fP and
|
|
can be assigned to client addresses using
|
|
\fI\%access\-control\-tag\fP or
|
|
\fI\%interface\-tag\fP\&.
|
|
Enclose list of tags in quotes (\fB\(dq\(dq\fP) and put spaces between tags.
|
|
.sp
|
|
If no tags are specified the policies from this section will be applied for
|
|
all clients.
|
|
.UNINDENT
|
|
.SH MEMORY CONTROL EXAMPLE
|
|
.sp
|
|
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.
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
# 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, \(aqno huge stuff\(aq.
|
|
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: \(dq2 1 0 0 0 0\(dq
|
|
harden\-large\-queries: \(dqyes\(dq
|
|
harden\-short\-bufsize: \(dqyes\(dq
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH FILES
|
|
.INDENT 0.0
|
|
.TP
|
|
.B @UNBOUND_RUN_DIR@
|
|
default Unbound working directory.
|
|
.TP
|
|
.B @UNBOUND_CHROOT_DIR@
|
|
default \fIchroot(2)\fP location.
|
|
.TP
|
|
.B @ub_conf_file@
|
|
Unbound configuration file.
|
|
.TP
|
|
.B @UNBOUND_PIDFILE@
|
|
default Unbound pidfile with process ID of the running daemon.
|
|
.TP
|
|
.B unbound.log
|
|
Unbound log file.
|
|
Default is to log to \fIsyslog(3)\fP\&.
|
|
.UNINDENT
|
|
.SH SEE ALSO
|
|
.sp
|
|
\fI\%unbound(8)\fP,
|
|
\fI\%unbound\-checkonf(8)\fP\&.
|
|
.SH AUTHOR
|
|
Unbound developers are mentioned in the CREDITS file in the distribution.
|
|
.SH COPYRIGHT
|
|
1999-2025, NLnet Labs
|
|
.\" Generated by docutils manpage writer.
|
|
.
|