<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chapter 4. Advanced DNS Features</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="prev" href="Bv9ARM.ch03.html" title="Chapter 3. Name Server Configuration">
</dl></dd>
</dl>
</div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="notify"></a>Notify</h2></div></div></div>
-<p>
+ <p>
<acronym class="acronym">DNS</acronym> NOTIFY is a mechanism that allows master
servers to notify their slave servers of changes to a zone's data. In
response to a <span class="command"><strong>NOTIFY</strong></span> from a master server, the
slave will check to see that its version of the zone is the
current version and, if not, initiate a zone transfer.
</p>
-<p>
+
+ <p>
For more information about <acronym class="acronym">DNS</acronym>
<span class="command"><strong>NOTIFY</strong></span>, see the description of the
<span class="command"><strong>notify</strong></span> option in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a> and
<a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>. The <span class="command"><strong>NOTIFY</strong></span>
protocol is specified in RFC 1996.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
As a slave zone can also be a master to other slaves, <span class="command"><strong>named</strong></span>,
zones that it loads.
</p>
</div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="dynamic_update"></a>Dynamic Update</h2></div></div></div>
-<p>
+
+ <p>
Dynamic Update is a method for adding, replacing or deleting
records in a master server by sending it a special form of DNS
messages. The format and meaning of these messages is specified
in RFC 2136.
</p>
-<p>
+
+ <p>
Dynamic update is enabled by including an
<span class="command"><strong>allow-update</strong></span> or an <span class="command"><strong>update-policy</strong></span>
clause in the <span class="command"><strong>zone</strong></span> statement.
</p>
-<p>
+
+ <p>
If the zone's <span class="command"><strong>update-policy</strong></span> is set to
<strong class="userinput"><code>local</code></strong>, updates to the zone
will be permitted for the key <code class="varname">local-ddns</code>,
which will be generated by <span class="command"><strong>named</strong></span> at startup.
See <a class="xref" href="Bv9ARM.ch05.html#dynamic_update_policies" title="Dynamic Update Policies">the section called “Dynamic Update Policies”</a> for more details.
</p>
-<p>
+
+ <p>
Dynamic updates using Kerberos signed requests can be made
using the TKEY/GSS protocol by setting either the
<span class="command"><strong>tkey-gssapi-keytab</strong></span> option, or alternatively
policies for the zone, using the Kerberos principal as the
signer for the request.
</p>
-<p>
+
+ <p>
Updating of secure zones (zones using DNSSEC) follows RFC
3007: RRSIG, NSEC and NSEC3 records affected by updates are
automatically regenerated by the server using an online
zone key. Update authorization is based on transaction
signatures and an explicit server policy.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="journal"></a>The journal file</h3></div></div></div>
-<p>
+
+ <p>
All changes made to a zone using dynamic update are stored
in the zone's journal file. This file is automatically created
by the server when the first dynamic update takes place.
file unless specifically overridden. The journal file is in a
binary format and should not be edited manually.
</p>
-<p>
+
+ <p>
The server will also occasionally write ("dump")
the complete contents of the updated zone to its zone file.
This is not done immediately after
will be removed when the dump is complete, and can be safely
ignored.
</p>
-<p>
+
+ <p>
When a server is restarted after a shutdown or crash, it will replay
the journal file to incorporate into the zone any updates that
took
place after the last zone dump.
</p>
-<p>
+
+ <p>
Changes that result from incoming incremental zone transfers are
also
journaled in a similar way.
</p>
-<p>
+
+ <p>
The zone files of dynamic zones cannot normally be edited by
hand because they are not guaranteed to contain the most recent
dynamic changes — those are only in the journal file.
The only way to ensure that the zone file of a dynamic zone
is up to date is to run <span class="command"><strong>rndc stop</strong></span>.
</p>
-<p>
+
+ <p>
If you have to make changes to a dynamic zone
manually, the following procedure will work:
Disable dynamic updates to the zone using
<span class="command"><strong>rndc thaw <em class="replaceable"><code>zone</code></em></strong></span>
to reload the changed zone and re-enable dynamic updates.
</p>
-<p>
+
+ <p>
<span class="command"><strong>rndc sync <em class="replaceable"><code>zone</code></em></strong></span>
will update the zone file with changes from the journal file
without stopping dynamic updates; this may be useful for viewing
file after updating the zone file, use
<span class="command"><strong>rndc sync -clean</strong></span>.
</p>
-</div>
-</div>
-<div class="section">
+
+ </div>
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="incremental_zone_transfers"></a>Incremental Zone Transfers (IXFR)</h2></div></div></div>
-<p>
+
+ <p>
The incremental zone transfer (IXFR) protocol is a way for
secondary servers to transfer only changed data, instead of having to
transfer the entire zone. The IXFR protocol is specified in RFC
1995. See <a class="xref" href="Bv9ARM.ch10.html#proposed_standards" title="Proposed Standards">Proposed Standards</a>.
</p>
-<p>
+
+ <p>
When acting as a primary server, <acronym class="acronym">BIND</acronym> 9
supports IXFR for those zones
where the necessary change history information is available. These
<span class="command"><strong>ixfr-from-differences</strong></span> is set
to <strong class="userinput"><code>yes</code></strong>.
</p>
-<p>
+
+ <p>
When acting as a secondary server, <acronym class="acronym">BIND</acronym> 9 will
attempt to use IXFR unless
it is explicitly disabled. For more information about disabling
IXFR, see the description of the <span class="command"><strong>request-ixfr</strong></span> clause
of the <span class="command"><strong>server</strong></span> statement.
</p>
-<p>
+
+ <p>
When a secondary server receives a zone via AXFR, it creates a
new copy of the zone database and then swaps it into place; during
the loading process, queries continue to be served from the old
instead. The threshold at which this determination is made can
be configured using the <span class="command"><strong>max-ixfr-ratio</strong></span> option.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="split_dns"></a>Split DNS</h2></div></div></div>
-<p>
+
+ <p>
Setting up different views, or visibility, of the DNS space to
internal and external resolvers is usually referred to as a
<span class="emphasis"><em>Split DNS</em></span> setup. There are several
reasons an organization would want to set up its DNS this way.
</p>
-<p>
+ <p>
One common reason for setting up a DNS system this way is
to hide "internal" DNS information from "external" clients on the
Internet. There is some debate as to whether or not this is actually
choose to use a Split DNS to present a consistent view of itself
to the outside world.
</p>
-<p>
+ <p>
Another common reason for setting up a Split DNS system is
to allow internal networks that are behind filters or in RFC 1918
space (reserved IP space, as documented in RFC 1918) to resolve DNS
on the Internet. Split DNS can also be used to allow mail from outside
back in to the internal network.
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="split_dns_sample"></a>Example split DNS setup</h3></div></div></div>
-<p>
+ <p>
Let's say a company named <span class="emphasis"><em>Example, Inc.</em></span>
(<code class="literal">example.com</code>)
has several corporate sites that have an internal network with
Internet Protocol (IP) space and an external demilitarized zone (DMZ),
or "outside" section of a network, that is available to the public.
</p>
-<p>
+ <p>
<span class="emphasis"><em>Example, Inc.</em></span> wants its internal clients
to be able to resolve external hostnames and to exchange mail with
people on the outside. The company also wants its internal resolvers
to have access to certain internal-only zones that are not available
at all outside of the internal network.
</p>
-<p>
+ <p>
In order to accomplish this, the company will set up two sets
of name servers. One set will be on the inside network (in the
reserved
"proxy"
hosts that can talk to both sides of its network, in the DMZ.
</p>
-<p>
+ <p>
The internal servers will be configured to forward all queries,
except queries for <code class="filename">site1.internal</code>, <code class="filename">site2.internal</code>, <code class="filename">site1.example.com</code>,
and <code class="filename">site2.example.com</code>, to the servers
for <code class="filename">site1.example.com</code>, <code class="filename">site2.example.com</code>, <code class="filename">site1.internal</code>,
and <code class="filename">site2.internal</code>.
</p>
-<p>
+ <p>
To protect the <code class="filename">site1.internal</code> and <code class="filename">site2.internal</code> domains,
the internal name servers must be configured to disallow all queries
to these domains from any external hosts, including the bastion
hosts.
</p>
-<p>
+ <p>
The external servers, which are on the bastion hosts, will
be configured to serve the "public" version of the <code class="filename">site1</code> and <code class="filename">site2.example.com</code> zones.
This could include things such as the host records for public servers
(<code class="filename">www.example.com</code> and <code class="filename">ftp.example.com</code>),
and mail exchange (MX) records (<code class="filename">a.mx.example.com</code> and <code class="filename">b.mx.example.com</code>).
</p>
-<p>
+ <p>
In addition, the public <code class="filename">site1</code> and <code class="filename">site2.example.com</code> zones
should have special MX records that contain wildcard (`*') records
pointing to the bastion hosts. This is needed because external mail
be delivered to the bastion host, which can then forward it on to
internal hosts.
</p>
-<p>
+ <p>
Here's an example of a wildcard MX record:
</p>
-<pre class="programlisting">* IN MX 10 external1.example.com.</pre>
-<p>
+ <pre class="programlisting">* IN MX 10 external1.example.com.</pre>
+ <p>
Now that they accept mail on behalf of anything in the internal
network, the bastion hosts will need to know how to deliver mail
to internal hosts. In order for this to work properly, the resolvers
the bastion hosts will need to be configured to point to the internal
name servers for DNS resolution.
</p>
-<p>
+ <p>
Queries for internal hostnames will be answered by the internal
servers, and queries for external hostnames will be forwarded back
out to the DNS servers on the bastion hosts.
</p>
-<p>
+ <p>
In order for all this to work properly, internal clients will
need to be configured to query <span class="emphasis"><em>only</em></span> the internal
name servers for DNS queries. This could also be enforced via
selective
filtering on the network.
</p>
-<p>
+ <p>
If everything has been set properly, <span class="emphasis"><em>Example, Inc.</em></span>'s
internal clients will now be able to:
</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
+
Look up any hostnames in the <code class="literal">site1</code>
and
<code class="literal">site2.example.com</code> zones.
- </li>
+
+ </li>
<li class="listitem">
+
Look up any hostnames in the <code class="literal">site1.internal</code> and
<code class="literal">site2.internal</code> domains.
- </li>
-<li class="listitem">Look up any hostnames on the Internet.</li>
-<li class="listitem">Exchange mail with both internal and external people.</li>
+
+ </li>
+<li class="listitem">
+ Look up any hostnames on the Internet.
+ </li>
+<li class="listitem">
+ Exchange mail with both internal and external people.
+ </li>
</ul></div>
-<p>
+ <p>
Hosts on the Internet will be able to:
</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
+
Look up any hostnames in the <code class="literal">site1</code>
and
<code class="literal">site2.example.com</code> zones.
- </li>
+
+ </li>
<li class="listitem">
+
Exchange mail with anyone in the <code class="literal">site1</code> and
<code class="literal">site2.example.com</code> zones.
- </li>
+
+ </li>
</ul></div>
-<p>
+
+ <p>
Here is an example configuration for the setup we just
described above. Note that this is only configuration information;
for information on how to configure your zone files, see <a class="xref" href="Bv9ARM.ch03.html#sample_configuration" title="Sample Configurations">the section called “Sample Configurations”</a>.
</p>
-<p>
+
+ <p>
Internal DNS server config:
</p>
+
<pre class="programlisting">
acl internals { 172.16.72.0/24; 192.168.1.0/24; };
allow-transfer { internals; }
};
</pre>
-<p>
+
+ <p>
External (bastion host) DNS server config:
</p>
+
<pre class="programlisting">
acl internals { 172.16.72.0/24; 192.168.1.0/24; };
allow-transfer { internals; externals; }
};
</pre>
-<p>
+
+ <p>
In the <code class="filename">resolv.conf</code> (or equivalent) on
the bastion host(s):
</p>
+
<pre class="programlisting">
search ...
nameserver 172.16.72.2
nameserver 172.16.72.3
nameserver 172.16.72.4
</pre>
-</div>
-</div>
-<div class="section">
+
+ </div>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="tsig"></a>TSIG</h2></div></div></div>
-<p>
+
+ <p>
TSIG (Transaction SIGnatures) is a mechanism for authenticating DNS
messages, originally specified in RFC 2845. It allows DNS messages
to be cryptographically signed using a shared secret. TSIG can
is critical to the integrity of the server, such as with dynamic
UPDATE messages or zone transfers from a master to a slave server.
</p>
-<p>
+ <p>
This is a guide to setting up TSIG in <acronym class="acronym">BIND</acronym>.
It describes the configuration syntax and the process of creating
TSIG keys.
</p>
-<p>
+ <p>
<span class="command"><strong>named</strong></span> supports TSIG for server-to-server
communication, and some of the tools included with
<acronym class="acronym">BIND</acronym> support it for sending messages to
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
-<a class="xref" href="man.nsupdate.html" title="nsupdate"><span class="refentrytitle"><span class="application">nsupdate</span></span>(1)</a> supports TSIG via the
+ <a class="xref" href="man.nsupdate.html" title="nsupdate"><span class="refentrytitle"><span class="application">nsupdate</span></span>(1)</a> supports TSIG via the
<code class="option">-k</code>, <code class="option">-l</code> and
<code class="option">-y</code> command line options, or via
the <span class="command"><strong>key</strong></span> command when running
interactively.
</li>
<li class="listitem">
-<a class="xref" href="man.dig.html" title="dig"><span class="refentrytitle">dig</span>(1)</a> supports TSIG via the
+ <a class="xref" href="man.dig.html" title="dig"><span class="refentrytitle">dig</span>(1)</a> supports TSIG via the
<code class="option">-k</code> and <code class="option">-y</code> command
line options.
</li>
</ul></div>
<p>
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.6.5"></a>Generating a Shared Key</h3></div></div></div>
-<p>
+ <p>
TSIG keys can be generated using the <span class="command"><strong>tsig-keygen</strong></span>
command; the output of the command is a <span class="command"><strong>key</strong></span> directive
suitable for inclusion in <code class="filename">named.conf</code>. The
key name, algorithm and size can be specified by command line parameters;
the defaults are "tsig-key", HMAC-SHA256, and 256 bits, respectively.
</p>
-<p>
+ <p>
Any string which is a valid DNS name can be used as a key name.
For example, a key to be shared between servers called
<span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span> could
<pre class="programlisting">
$ tsig-keygen host1-host2. > host1-host2.key
</pre>
-<p>
+ <p>
This key may then be copied to both hosts. The key name and secret
must be identical on both hosts.
(Note: copying a shared secret from one server to another is beyond
the scope of the DNS. A secure transport mechanism should be used:
secure FTP, SSL, ssh, telephone, encrypted email, etc.)
</p>
-<p>
+ <p>
<span class="command"><strong>tsig-keygen</strong></span> can also be run as
<span class="command"><strong>ddns-confgen</strong></span>, in which case its output includes
additional configuration text for setting up dynamic DNS in
<span class="command"><strong>named</strong></span>. See <a class="xref" href="man.ddns-confgen.html" title="ddns-confgen"><span class="refentrytitle"><span class="application">ddns-confgen</span></span>(8)</a>
for details.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.6.6"></a>Loading A New Key</h3></div></div></div>
-<p>
+ <p>
For a key shared between servers called
<span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span>,
the following could be added to each server's
secret "DAopyf1mhCbFVZw7pgmNPBoLUq8wEUT7UuPoLENP2HY=";
};
</pre>
-<p>
+ <p>
(This is the same key generated above using
<span class="command"><strong>tsig-keygen</strong></span>.)
</p>
-<p>
+ <p>
Since this text contains a secret, it
is recommended that either <code class="filename">named.conf</code> not be
world-readable, or that the <span class="command"><strong>key</strong></span> directive
included in <code class="filename">named.conf</code> via the
<span class="command"><strong>include</strong></span> directive.
</p>
-<p>
+ <p>
Once a key has been added to <code class="filename">named.conf</code> and the
server has been restarted or reconfigured, the server can recognize
the key. If the server receives a message signed by the
key, it will be able to verify the signature. If the signature
is valid, the response will be signed using the same key.
</p>
-<p>
+ <p>
TSIG keys that are known to a server can be listed using the
command <span class="command"><strong>rndc tsig-list</strong></span>.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.6.7"></a>Instructing the Server to Use a Key</h3></div></div></div>
-<p>
+ <p>
A server sending a request to another server must be told whether
to use a key, and if so, which key to use.
</p>
-<p>
+ <p>
For example, a key may be specified for each server in the
<span class="command"><strong>masters</strong></span> statement in the definition of a
slave zone; in this case, all SOA QUERY messages, NOTIFY
or slave zone, causing NOTIFY messages to be signed using
the specified key.
</p>
-<p>
+ <p>
Keys can also be specified in a <span class="command"><strong>server</strong></span>
directive. Adding the following on <span class="emphasis"><em>host1</em></span>,
if the IP address of <span class="emphasis"><em>host2</em></span> is 10.1.2.3, would
keys { host1-host2. ;};
};
</pre>
-<p>
+ <p>
Multiple keys may be present in the <span class="command"><strong>keys</strong></span>
statement, but only the first one is used. As this directive does
not contain secrets, it can be used in a world-readable file.
</p>
-<p>
+ <p>
Requests sent by <span class="emphasis"><em>host2</em></span> to <span class="emphasis"><em>host1</em></span>
would <span class="emphasis"><em>not</em></span> be signed, unless a similar
<span class="command"><strong>server</strong></span> directive were in <span class="emphasis"><em>host2</em></span>'s
configuration file.
</p>
-<p>
+ <p>
Whenever any server sends a TSIG-signed DNS request, it will expect
the response to be signed with the same key. If a response is not
signed, or if the signature is not valid, the response will be
rejected.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.6.8"></a>TSIG-Based Access Control</h3></div></div></div>
-<p>
+ <p>
TSIG keys may be specified in ACL definitions and ACL directives
such as <span class="command"><strong>allow-query</strong></span>, <span class="command"><strong>allow-transfer</strong></span>
and <span class="command"><strong>allow-update</strong></span>.
The above key would be denoted in an ACL element as
<span class="command"><strong>key host1-host2.</strong></span>
</p>
-<p>
+ <p>
An example of an <span class="command"><strong>allow-update</strong></span> directive using
a TSIG key:
</p>
<pre class="programlisting">
allow-update { !{ !localnets; any; }; key host1-host2. ;};
</pre>
-<p>
+ <p>
This allows dynamic updates to succeed only if the UPDATE
request comes from an address in <span class="command"><strong>localnets</strong></span>,
<span class="emphasis"><em>and</em></span> if it is signed using the
<span class="command"><strong>host1-host2.</strong></span> key.
</p>
-<p>
+ <p>
See <a class="xref" href="Bv9ARM.ch05.html#dynamic_update_policies" title="Dynamic Update Policies">the section called “Dynamic Update Policies”</a> for a discussion of
the more flexible <span class="command"><strong>update-policy</strong></span> statement.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.6.9"></a>Errors</h3></div></div></div>
-<p>
+ <p>
Processing of TSIG-signed messages can result in several errors:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
In all of the above cases, the server will return a response code
of NOTAUTH (not authenticated).
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="tkey"></a>TKEY</h2></div></div></div>
-<p>
+
+ <p>
TKEY (Transaction KEY) is a mechanism for automatically negotiating
a shared secret between two hosts, originally specified in RFC 2930.
</p>
-<p>
+ <p>
There are several TKEY "modes" that specify how a key is to be
generated or assigned. <acronym class="acronym">BIND</acronym> 9 implements only
one of these modes: Diffie-Hellman key exchange. Both hosts are
required to have a KEY record with algorithm DH (though this
record is not required to be present in a zone).
</p>
-<p>
+ <p>
The TKEY process is initiated by a client or server by sending
a query of type TKEY to a TKEY-aware server. The query must include
an appropriate KEY record in the additional section, and
can then be used by to sign subsequent transactions between the
two servers.
</p>
-<p>
+ <p>
TSIG keys known by the server, including TKEY-negotiated keys, can
be listed using <span class="command"><strong>rndc tsig-list</strong></span>.
</p>
-<p>
+ <p>
TKEY-negotiated keys can be deleted from a server using
<span class="command"><strong>rndc tsig-delete</strong></span>. This can also be done via
the TKEY protocol itself, by sending an authenticated TKEY query
specifying the "key deletion" mode.
</p>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="sig0"></a>SIG(0)</h2></div></div></div>
-<p>
+
+ <p>
<acronym class="acronym">BIND</acronym> partially supports DNSSEC SIG(0)
transaction signatures as specified in RFC 2535 and RFC 2931.
SIG(0) uses public/private keys to authenticate messages. Access control
is performed in the same manner as TSIG keys; privileges can be
granted or denied in ACL directives based on the key name.
</p>
-<p>
+ <p>
When a SIG(0) signed message is received, it will only be
verified if the key is known and trusted by the server. The
server will not attempt to recursively fetch or validate the
key.
</p>
-<p>
+ <p>
SIG(0) signing of multiple-message TCP streams is not supported.
</p>
-<p>
+ <p>
The only tool shipped with <acronym class="acronym">BIND</acronym> 9 that
generates SIG(0) signed messages is <span class="command"><strong>nsupdate</strong></span>.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="DNSSEC"></a>DNSSEC</h2></div></div></div>
-<p>
+ <p>
Cryptographic authentication of DNS information is possible
through the DNS Security (<span class="emphasis"><em>DNSSEC-bis</em></span>) extensions,
defined in RFC 4033, RFC 4034, and RFC 4035.
This section describes the creation and use of DNSSEC signed zones.
</p>
-<p>
+
+ <p>
In order to set up a DNSSEC secure zone, there are a series
of steps which must be followed. <acronym class="acronym">BIND</acronym>
9 ships
that the tools shipped with BIND 9.2.x and earlier are not compatible
with the current ones.
</p>
-<p>
+
+ <p>
There must also be communication with the administrators of
the parent and/or child zone to transmit keys. A zone's security
status must be indicated by the parent zone for a DNSSEC capable
delegation
point.
</p>
-<p>
+
+ <p>
For other servers to trust data in this zone, they must
either be statically configured with this zone's zone key or the
zone key of another zone above this one in the DNS tree.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="generating_dnssec_keys"></a>Generating Keys</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>dnssec-keygen</strong></span> program is used to
generate keys.
</p>
-<p>
+
+ <p>
A secure zone must contain one or more zone keys. The zone keys will
sign all other records in the zone, as well as the zone keys of any
secure delegated zones. Zone keys must have the same name as the
currently the are two algorithms: RSASHA256 and ECDSAP256SHA256.
ECDSAP256SHA256 is recommended for current and future deployments.
</p>
-<p>
+
+ <p>
The following command will generate a ECDSAP256SHA256 key for
the <code class="filename">child.example</code> zone:
</p>
-<p>
+
+ <p>
<strong class="userinput"><code>dnssec-keygen -a ECDSAP256SHA256 -n ZONE child.example.</code></strong>
</p>
-<p>
+
+ <p>
Two output files will be produced:
<code class="filename">Kchild.example.+013+12345.key</code> and
<code class="filename">Kchild.example.+013+12345.private</code> (where 12345 is
and the public key (in the <code class="filename">.key</code> file) is used for
signature verification.
</p>
-<p>
+
+ <p>
To generate another key with the same properties (but with
a different key tag), repeat the above command.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>dnssec-keyfromlabel</strong></span> program is used
to get a key pair from a crypto hardware and build the key
files. Its usage is similar to <span class="command"><strong>dnssec-keygen</strong></span>.
</p>
-<p>
+
+ <p>
The public keys should be inserted into the zone file by
including the <code class="filename">.key</code> files using
<span class="command"><strong>$INCLUDE</strong></span> statements.
</p>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="dnssec_signing"></a>Signing the Zone</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>dnssec-signzone</strong></span> program is used
to sign a zone.
</p>
-<p>
+
+ <p>
Any <code class="filename">keyset</code> files corresponding to
secure sub-zones should be present. The zone signer will
generate <code class="literal">NSEC</code>, <code class="literal">NSEC3</code>
is not specified, then DS RRsets for the secure child
zones need to be added manually.
</p>
-<p>
+
+ <p>
The following command signs the zone, assuming it is in a
file called <code class="filename">zone.child.example</code>. By
default, all zone keys which have an available private key are
used to generate signatures.
</p>
-<p>
+
+ <p>
<strong class="userinput"><code>dnssec-signzone -o child.example zone.child.example</code></strong>
</p>
-<p>
+
+ <p>
One output file is produced:
<code class="filename">zone.child.example.signed</code>. This
file
as the
input file for the zone.
</p>
-<p><span class="command"><strong>dnssec-signzone</strong></span>
+
+ <p><span class="command"><strong>dnssec-signzone</strong></span>
will also produce a keyset and dsset files. These are used
to provide the parent zone administrators with the
<code class="literal">DNSKEYs</code> (or their corresponding
<code class="literal">DS</code> records) that are the secure entry
point to the zone.
</p>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="dnssec_config"></a>Configuring Servers for DNSSEC</h3></div></div></div>
-<p>
+ <p>
To enable <span class="command"><strong>named</strong></span> to validate answers
received from other servers, the
<span class="command"><strong>dnssec-validation</strong></span> option must be set to
either <strong class="userinput"><code>yes</code></strong> or <strong class="userinput"><code>auto</code></strong>.
</p>
-<p>
+ <p>
When <span class="command"><strong>dnssec-validation</strong></span> is set to
<strong class="userinput"><code>auto</code></strong>, a trust anchor for the DNS
root zone will automatically be used. This trust anchor is
provided as part of BIND and is kept up to date using RFC 5011
key management.
</p>
-<p>
+ <p>
When <span class="command"><strong>dnssec-validation</strong></span> is set to
<strong class="userinput"><code>yes</code></strong>, DNSSEC validation will only occur
if at least one trust anchor has been explicitly configured
<span class="command"><strong>managed-keys</strong></span> and <span class="command"><strong>trusted-keys</strong></span>
statements, both deprecated).
</p>
-<p>
+ <p>
When <span class="command"><strong>dnssec-validation</strong></span> is set to
<strong class="userinput"><code>no</code></strong>, DNSSEC validation will not occur.
</p>
-<p>
+ <p>
The default is <strong class="userinput"><code>auto</code></strong> unless BIND is
built with <span class="command"><strong>configure --disable-auto-validation</strong></span>,
in which case the default is <strong class="userinput"><code>yes</code></strong>.
</p>
-<p>
+
+ <p>
The keys specified in <span class="command"><strong>trust-anchors</strong></span>
copies of DNSKEY RRs for zones that are used to form the
first link in the cryptographic chain of trust. Keys configured
will be kept up to date automatically after the first time
<span class="command"><strong>named</strong></span> runs.
</p>
-<p>
+
+ <p>
<span class="command"><strong>trust-anchors</strong></span> is described in more detail
later in this document.
</p>
-<p>
+
+ <p>
Unlike <acronym class="acronym">BIND</acronym> 8, <acronym class="acronym">BIND</acronym>
9 does not verify signatures on load, so zone keys for
authoritative zones do not need to be specified in the
configuration file.
</p>
-<p>
+
+ <p>
After DNSSEC gets established, a typical DNSSEC configuration
will look something like the following. It has one or
more public keys for the root. This allows answers from
is immune to compromises in the DNSSEC components of the security
of parent zones.
</p>
+
<pre class="programlisting">
trust-anchors {
/* Root Key */
dnssec-validation yes;
};
</pre>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
None of the keys listed in this example are valid. In particular,
the root key is not valid.
</p>
</div>
-<p>
+
+ <p>
When DNSSEC validation is enabled and properly configured,
the resolver will reject any answers from signed, secure zones
which fail to validate, and will return SERVFAIL to the client.
</p>
-<p>
+
+ <p>
Responses may fail to validate for any of several reasons,
including missing, expired, or invalid signatures, a key which
does not match the DS RRset in the parent zone, or an insecure
response from a zone which, according to its parent, should have
been secure.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
When the validator receives a response from an unsigned zone
that has a signed parent, it must confirm with the parent
that the zone was intentionally left unsigned. It does
this by verifying, via signed and validated NSEC/NSEC3 records,
that the parent zone contains no DS records for the child.
</p>
-<p>
+ <p>
If the validator <span class="emphasis"><em>can</em></span> prove that the zone
is insecure, then the response is accepted. However, if it
cannot, then it must assume an insecure response to be a
forgery; it rejects the response and logs an error.
</p>
-<p>
+ <p>
The logged error reads "insecurity proof failed" and
"got insecure response; parent indicates it should be secure".
</p>
-</div>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="dnssec.dynamic.zones"></a>DNSSEC, Dynamic Zones, and Automatic Signing</h2></div></div></div>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.2"></a>Converting from insecure to secure</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.2"></a>Converting from insecure to secure</h3></div></div></div>
+
+ </div>
+ <p>
Changing a zone from insecure to secure can be done in three
ways: using a dynamic DNS update, use the
<span class="command"><strong>auto-dnssec</strong></span> zone option, or set a DNSSEC
policy for the zone with <span class="command"><strong>dnssec-policy</strong></span>.
</p>
-<p>
+ <p>
For either method, you need to configure
<span class="command"><strong>named</strong></span> so that it can see the
<code class="filename">K*</code> files which contain the public and private
<span class="command"><strong>named</strong></span> if <span class="command"><strong>dnssec-policy</strong></span> is
used). Keys should be placed in the key-directory, as specified in
<code class="filename">named.conf</code>:</p>
-<pre class="programlisting">
+ <pre class="programlisting">
zone example.net {
type master;
update-policy local;
key-directory "dynamic/example.net";
};
</pre>
-<p>
+ <p>
If one KSK and one ZSK DNSKEY key have been generated, this
configuration will cause all records in the zone to be signed
with the ZSK, and the DNSKEY RRset to be signed with the KSK as
well. An NSEC chain will be generated as part of the initial
signing process.
</p>
-<p>
+ <p>
With <span class="command"><strong>dnssec-policy</strong></span> you specify what keys should
be KSK and/or ZSK. If you want a key to sign all records with a key
you will need to specify a CSK:
</p>
-<pre class="programlisting">
+ <pre class="programlisting">
dnssec-policy csk {
keys {
csk key-directory lifetime P5Y algorithm 13;
};
};
</pre>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.9"></a>Dynamic DNS update method</h3></div></div></div></div>
-<p>To insert the keys via dynamic update:</p>
-<pre class="screen">
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.9"></a>Dynamic DNS update method</h3></div></div></div>
+
+ </div>
+ <p>To insert the keys via dynamic update:</p>
+ <pre class="screen">
% nsupdate
> ttl 3600
> update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
> update add example.net DNSKEY 257 3 7 AwEAAd/7odU/64o2LGsifbLtQmtO8dFDtTAZXSX2+X3e/UNlq9IHq3Y0 XtC0Iuawl/qkaKVxXe2lo8Ct+dM6UehyCqk=
> send
</pre>
-<p>
+ <p>
While the update request will complete almost immediately,
the zone will not be completely signed until
<span class="command"><strong>named</strong></span> has had time to walk the zone and
will be added last, to signal that there is a complete NSEC
chain.
</p>
-<p>
+ <p>
If you wish to sign using NSEC3 instead of NSEC, you should
add an NSEC3PARAM record to the initial update request. If you
wish the NSEC3 chain to have the OPTOUT bit set, set it in the
flags field of the NSEC3PARAM record.
</p>
-<pre class="screen">
+ <pre class="screen">
% nsupdate
> ttl 3600
> update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
> update add example.net NSEC3PARAM 1 1 100 1234567890
> send
</pre>
-<p>
+ <p>
Again, this update request will complete almost
immediately; however, the record won't show up until
<span class="command"><strong>named</strong></span> has had a chance to build/remove the
the state of the operation (see below for more details), and will
be removed once the operation completes.
</p>
-<p>
+ <p>
While the initial signing and NSEC/NSEC3 chain generation
is happening, other updates are possible as well.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.17"></a>Fully automatic zone signing</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.17"></a>Fully automatic zone signing</h3></div></div></div>
+
+ </div>
+ <p>
To enable automatic signing, you can set a
<span class="command"><strong>dnssec-policy</strong></span>, or add the
<span class="command"><strong>auto-dnssec</strong></span> option to the zone statement in
<code class="constant">allow</code> or
<code class="constant">maintain</code>.
</p>
-<p>
+ <p>
With <span class="command"><strong>auto-dnssec allow</strong></span>,
<span class="command"><strong>named</strong></span> can search the key directory for keys
matching the zone, insert them into the zone, and use them to
sign the zone. It will do so only when it receives an
<span class="command"><strong>rndc sign <zonename></strong></span>.
</p>
-<p>
+ <p>
<span class="command"><strong>auto-dnssec maintain</strong></span> includes the above
functionality, but will also automatically adjust the zone's
(See <a class="xref" href="man.dnssec-keygen.html" title="dnssec-keygen"><span class="refentrytitle"><span class="application">dnssec-keygen</span></span>(8)</a> and
<a class="xref" href="man.dnssec-settime.html" title="dnssec-settime"><span class="refentrytitle"><span class="application">dnssec-settime</span></span>(8)</a> for more information.)
</p>
-<p>
+ <p>
<span class="command"><strong>dnssec-policy</strong></span> is like
<span class="command"><strong>auto-dnssec maintain</strong></span>, but will also automatically
create new keys when necessary. Also any configuration related
to DNSSEC signing is retrieved from the policy (ignoring existing
DNSSEC named.conf options).
</p>
-<p>
+ <p>
<span class="command"><strong>named</strong></span> will periodically search the key directory
for keys matching the zone, and if the keys' metadata indicates
that any change should be made the zone, such as adding, removing,
to a maximum of 24 hours. The <span class="command"><strong>rndc loadkeys</strong></span> forces
<span class="command"><strong>named</strong></span> to check for key updates immediately.
</p>
-<p>
+ <p>
If keys are present in the key directory the first time the zone
is loaded, the zone will be signed immediately, without waiting for an
<span class="command"><strong>rndc sign</strong></span> or <span class="command"><strong>rndc loadkeys</strong></span>
command. (Those commands can still be used when there are unscheduled
key changes, however.)
</p>
-<p>
+ <p>
When new keys are added to a zone, the TTL is set to match that
of any existing DNSKEY RRset. If there is no existing DNSKEY RRset,
then the TTL will be set to the TTL specified when the key was
created (using the <span class="command"><strong>dnssec-keygen -L</strong></span> option), if
any, or to the SOA TTL.
</p>
-<p>
+ <p>
If you wish the zone to be signed using NSEC3 instead of NSEC,
submit an NSEC3PARAM record via dynamic update prior to the
scheduled publication and activation of the keys. If you wish the
the zone is signed and the NSEC3 chain is completed, the NSEC3PARAM
record will appear in the zone.
</p>
-<p>
+ <p>
Using the
<span class="command"><strong>auto-dnssec</strong></span> option requires the zone to be
configured to allow dynamic updates, by adding an
configuration. If this has not been done, the configuration will
fail.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.27"></a>Private-type records</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.27"></a>Private-type records</h3></div></div></div>
+
+ </div>
+ <p>
The state of the signing process is signaled by
private-type records (with a default type value of 65534). When
signing is complete, these records will have a nonzero value for
the final octet (for those records which have a nonzero initial
octet).
</p>
-<p>
+ <p>
The private type record format: If the first octet is
non-zero then the record indicates that the zone needs to be
signed with the key matching the record, or that all signatures
that match the record should be removed.
</p>
-<p>
+ <p>
</p>
<div class="literallayout"><p><br>
<br>
</p></div>
<p>
</p>
-<p>
+ <p>
Only records flagged as "complete" can be removed via
dynamic update. Attempts to remove other private type records
will be silently ignored.
</p>
-<p>
+ <p>
If the first octet is zero (this is a reserved algorithm
number that should never appear in a DNSKEY record) then the
record indicates changes to the NSEC3 chains are in progress. The
rest of the record contains an NSEC3PARAM record. The flag field
tells what operation to perform based on the flag bits.
</p>
-<p>
+ <p>
</p>
<div class="literallayout"><p><br>
<br>
</p></div>
<p>
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.34"></a>DNSKEY rollovers</h3></div></div></div></div>
-<p>
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.34"></a>DNSKEY rollovers</h3></div></div></div>
+
+ </div>
+ <p>
As with insecure-to-secure conversions, rolling DNSSEC
keys can be done in two ways: using a dynamic DNS update, or the
<span class="command"><strong>auto-dnssec</strong></span> zone option.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.36"></a>Dynamic DNS update method</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.36"></a>Dynamic DNS update method</h3></div></div></div>
+
+ </div>
+ <p>
To perform key rollovers via dynamic update, you need to add
the <code class="filename">K*</code> files for the new keys so that
<span class="command"><strong>named</strong></span> can find them. You can then add the new
records will be updated so that the last octet is non
zero.
</p>
-<p>
+ <p>
If this is for a KSK you need to inform the parent and any
trust anchor repositories of the new KSK.
</p>
-<p>
+ <p>
You should then wait for the maximum TTL in the zone before
removing the old DNSKEY. If it is a KSK that is being updated,
you also need to wait for the DS RRset in the parent to be
be able to verify at least one signature when you remove the old
DNSKEY.
</p>
-<p>
+ <p>
The old DNSKEY can be removed via UPDATE. Take care to
specify the correct key.
<span class="command"><strong>named</strong></span> will clean out any signatures generated
by the old key after the update completes.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.41"></a>Automatic key rollovers</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.41"></a>Automatic key rollovers</h3></div></div></div>
+
+ </div>
+ <p>
When a new key reaches its activation date (as set by
<span class="command"><strong>dnssec-keygen</strong></span> or <span class="command"><strong>dnssec-settime</strong></span>),
if the <span class="command"><strong>auto-dnssec</strong></span> zone option is set to
completes in 30 days, after which it will be safe to remove the
old key from the DNSKEY RRset.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.43"></a>NSEC3PARAM rollovers via UPDATE</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.43"></a>NSEC3PARAM rollovers via UPDATE</h3></div></div></div>
+
+ </div>
+ <p>
Add the new NSEC3PARAM record via dynamic update. When the
new NSEC3 chain has been generated, the NSEC3PARAM flag field
will be zero. At this point you can remove the old NSEC3PARAM
record. The old chain will be removed after the update request
completes.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.45"></a>Converting from NSEC to NSEC3</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.45"></a>Converting from NSEC to NSEC3</h3></div></div></div>
+
+ </div>
+ <p>
To do this, you just need to add an NSEC3PARAM record. When
the conversion is complete, the NSEC chain will have been removed
and the NSEC3PARAM record will have a zero flag field. The NSEC3
chain will be generated before the NSEC chain is
destroyed.
</p>
-<p>
+ <p>
NSEC3 is not supported yet with <span class="command"><strong>dnssec-policy</strong></span>.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.48"></a>Converting from NSEC3 to NSEC</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.48"></a>Converting from NSEC3 to NSEC</h3></div></div></div>
+
+ </div>
+ <p>
To do this, use <span class="command"><strong>nsupdate</strong></span> to
remove all NSEC3PARAM records with a zero flag
field. The NSEC chain will be generated before the NSEC3 chain is
removed.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.50"></a>Converting from secure to insecure</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.50"></a>Converting from secure to insecure</h3></div></div></div>
+
+ </div>
+ <p>
To convert a signed zone to unsigned using dynamic DNS,
delete all the DNSKEY records from the zone apex using
<span class="command"><strong>nsupdate</strong></span>. All signatures, NSEC or NSEC3 chains,
and associated NSEC3PARAM records will be removed automatically.
This will take place after the update request completes.</p>
-<p> This requires the
+ <p> This requires the
<span class="command"><strong>dnssec-secure-to-insecure</strong></span> option to be set to
<strong class="userinput"><code>yes</code></strong> in
<code class="filename">named.conf</code>.</p>
-<p>In addition, if the <span class="command"><strong>auto-dnssec maintain</strong></span>
+ <p>In addition, if the <span class="command"><strong>auto-dnssec maintain</strong></span>
zone statement is used, it should be removed or changed to
<span class="command"><strong>allow</strong></span> instead (or it will re-sign).
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.54"></a>Periodic re-signing</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.54"></a>Periodic re-signing</h3></div></div></div>
+
+ </div>
+ <p>
In any secure zone which supports dynamic updates, <span class="command"><strong>named</strong></span>
will periodically re-sign RRsets which have not been re-signed as
a result of some update action. The signature lifetimes will be
adjusted so as to spread the re-sign load over time rather than
all at once.
</p>
-<div class="section"><div class="titlepage"><div><div><h3 class="title">
-<a name="id-1.5.10.56"></a>NSEC3 and OPTOUT</h3></div></div></div></div>
-<p>
+
+ <div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id-1.5.10.56"></a>NSEC3 and OPTOUT</h3></div></div></div>
+
+ </div>
+ <p>
<span class="command"><strong>named</strong></span> only supports creating new NSEC3 chains
where all the NSEC3 records in the zone have the same OPTOUT
state.
changed.
</p>
</div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="rfc5011.support"></a>Dynamic Trust Anchor Management</h2></div></div></div>
-<p>
+
+ <p>
BIND is able to maintain DNSSEC trust anchors using RFC 5011 key
management. This feature allows <span class="command"><strong>named</strong></span> to keep track
of changes to critical DNSSEC keys without any need for the operator to
make changes to configuration files.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.11.3"></a>Validating Resolver</h3></div></div></div>
-<p>To configure a validating resolver to use RFC 5011 to
+
+
+ <p>To configure a validating resolver to use RFC 5011 to
maintain a trust anchor, configure the trust anchor using a
<span class="command"><strong>trust-anchors</strong></span> statement and the
<span class="command"><strong>initial-key</strong></span> or <span class="command"><strong>initial-ds</strong></span>
keyword. Information about this can be found in
<a class="xref" href="Bv9ARM.ch05.html#trust-anchors" title="trust-anchors Statement Definition and Usage">the section called “<span class="command"><strong>trust-anchors</strong></span> Statement Definition
and Usage”</a>.</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.11.4"></a>Authoritative Server</h3></div></div></div>
-<p>To set up an authoritative zone for RFC 5011 trust anchor
+
+ <p>To set up an authoritative zone for RFC 5011 trust anchor
maintenance, generate two (or more) key signing keys (KSKs) for
the zone. Sign the zone with one of them; this is the "active"
KSK. All KSKs which do not sign the zone are "stand-by"
keys.</p>
-<p>Any validating resolver which is configured to use the
+ <p>Any validating resolver which is configured to use the
active KSK as an RFC 5011-managed trust anchor will take note
of the stand-by KSKs in the zone's DNSKEY RRset, and store them
for future reference. The resolver will recheck the zone
anchor for the zone. Any time after this 30-day acceptance
timer has completed, the active KSK can be revoked, and the
zone can be "rolled over" to the newly accepted key.</p>
-<p>The easiest way to place a stand-by key in a zone is to
+ <p>The easiest way to place a stand-by key in a zone is to
use the "smart signing" features of
<span class="command"><strong>dnssec-keygen</strong></span> and
<span class="command"><strong>dnssec-signzone</strong></span>. If a key with a publication
the future, "
<span class="command"><strong>dnssec-signzone -S</strong></span>" will include the DNSKEY
record in the zone, but will not sign with it:</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>dnssec-keygen -K keys -f KSK -P now -A now+2y example.net</code></strong>
$ <strong class="userinput"><code>dnssec-signzone -S -K keys example.net</code></strong>
</pre>
-<p>To revoke a key, the new command
+ <p>To revoke a key, the new command
<span class="command"><strong>dnssec-revoke</strong></span> has been added. This adds the
REVOKED bit to the key flags and re-generates the
<code class="filename">K*.key</code> and
<code class="filename">K*.private</code> files.</p>
-<p>After revoking the active key, the zone must be signed
+ <p>After revoking the active key, the zone must be signed
with both the revoked KSK and the new active KSK. (Smart
signing takes care of this automatically.)</p>
-<p>Once a key has been revoked and used to sign the DNSKEY
+ <p>Once a key has been revoked and used to sign the DNSKEY
RRset in which it appears, that key will never again be
accepted as a valid trust anchor by the resolver. However,
validation can proceed using the new active key (which had been
accepted by the resolver when it was a stand-by key).</p>
-<p>See RFC 5011 for more details on key rollover
+ <p>See RFC 5011 for more details on key rollover
scenarios.</p>
-<p>When a key has been revoked, its key ID changes,
+ <p>When a key has been revoked, its key ID changes,
increasing by 128, and wrapping around at 65535. So, for
example, the key "<code class="filename">Kexample.com.+005+10000</code>" becomes
"<code class="filename">Kexample.com.+005+10128</code>".</p>
-<p>If two keys have IDs exactly 128 apart, and one is
+ <p>If two keys have IDs exactly 128 apart, and one is
revoked, then the two key IDs will collide, causing several
problems. To prevent this,
<span class="command"><strong>dnssec-keygen</strong></span> will not generate a new key if
another key is present which may collide. This checking will
only occur if the new keys are written to the same directory
which holds all other keys in use for that zone.</p>
-<p>Older versions of BIND 9 did not have this precaution.
+ <p>Older versions of BIND 9 did not have this precaution.
Exercise caution if using key revocation on keys that were
generated by previous releases, or if using keys stored in
multiple directories or on multiple machines.</p>
-<p>It is expected that a future release of BIND 9 will
+ <p>It is expected that a future release of BIND 9 will
address this problem in a different way, by storing revoked
keys with their original unrevoked key IDs.</p>
+ </div>
</div>
-</div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="pkcs11"></a>PKCS#11 (Cryptoki) support</h2></div></div></div>
-<p>
+
+ <p>
PKCS#11 (Public Key Cryptography Standard #11) defines a
platform-independent API for the control of hardware security
modules (HSMs) and other cryptographic support devices.
</p>
-<p>
+ <p>
BIND 9 is known to work with three HSMs: The AEP Keyper, which has
been tested with Debian Linux, Solaris x86 and Windows Server 2003;
the Thales nShield, tested with Debian Linux; and the Sun SCA 6000
a software-based HSM simulator library produced by the OpenDNSSEC
project.
</p>
-<p>
+ <p>
PKCS#11 makes use of a "provider library": a dynamically loadable
library which provides a low-level PKCS#11 interface to drive the HSM
hardware. The PKCS#11 provider library comes from the HSM vendor, and
it is specific to the HSM to be controlled.
</p>
-<p>
+ <p>
There are two available mechanisms for PKCS#11 support in BIND 9:
OpenSSL-based PKCS#11 and native PKCS#11. When using the first
mechanism, BIND uses a modified version of OpenSSL, which loads
OpenSSL completely; BIND loads the provider library itself, and uses
the PKCS#11 API to drive the HSM directly.
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.12.6"></a>Prerequisites</h3></div></div></div>
-<p>
+
+ <p>
See the documentation provided by your HSM vendor for
information about installing, initializing, testing and
troubleshooting the HSM.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.12.7"></a>Native PKCS#11</h3></div></div></div>
-<p>
+
+ <p>
Native PKCS#11 mode will only work with an HSM capable of carrying
out <span class="emphasis"><em>every</em></span> cryptographic operation BIND 9 may
need. The HSM's provider library must have a complete implementation
native PKCS#11, it is expected that OpenSSL-based PKCS#11 will
be deprecated.)
</p>
-<p>
+ <p>
To build BIND with native PKCS#11, configure as follows:
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>cd bind9</code></strong>
$ <strong class="userinput"><code>./configure --enable-native-pkcs11 \
--with-pkcs11=<em class="replaceable"><code>provider-library-path</code></em></code></strong>
</pre>
-<p>
+ <p>
This will cause all BIND tools, including <span class="command"><strong>named</strong></span>
and the <span class="command"><strong>dnssec-*</strong></span> and <span class="command"><strong>pkcs11-*</strong></span>
tools, to use the PKCS#11 provider library specified in
<span class="command"><strong>dnssec-*</strong></span> tools, or the <code class="option">-m</code> in
the <span class="command"><strong>pkcs11-*</strong></span> tools.)
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.7.6"></a>Building SoftHSMv2</h4></div></div></div>
-<p>
+
+ <p>
SoftHSMv2, the latest development version of SoftHSM, is available
from
<a class="link" href="https://github.com/opendnssec/SoftHSMv2" target="_top">
cryptographic functions, but when using it for native PKCS#11 in
BIND, OpenSSL is required.
</p>
-<p>
+ <p>
By default, the SoftHSMv2 configuration file is
<em class="replaceable"><code>prefix</code></em>/etc/softhsm2.conf (where
<em class="replaceable"><code>prefix</code></em> is configured at compile time).
variable. The SoftHSMv2 cryptographic store must be installed and
initialized before using it with BIND.
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code> cd SoftHSMv2 </code></strong>
$ <strong class="userinput"><code> configure --with-crypto-backend=openssl --prefix=/opt/pkcs11/usr </code></strong>
$ <strong class="userinput"><code> make </code></strong>
$ <strong class="userinput"><code> make install </code></strong>
$ <strong class="userinput"><code> /opt/pkcs11/usr/bin/softhsm-util --init-token 0 --slot 0 --label softhsmv2 </code></strong>
</pre>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.12.8"></a>OpenSSL-based PKCS#11</h3></div></div></div>
-<p>
+
+ <p>
OpenSSL-based PKCS#11 mode uses a modified version of the
OpenSSL library; stock OpenSSL does not fully support PKCS#11.
ISC provides a patch to OpenSSL to correct this. This patch is
modified by ISC to provide new features such as PIN management and
key-by-reference.
</p>
-<p>
+ <p>
There are two "flavors" of PKCS#11 support provided by
the patched OpenSSL, one of which must be chosen at
configuration time. The correct choice depends on the HSM
hardware:
</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <p>
Use 'crypto-accelerator' with HSMs that have hardware
cryptographic acceleration features, such as the SCA 6000
board. This causes OpenSSL to run all supported
cryptographic operations in the HSM.
- </p></li>
-<li class="listitem"><p>
+ </p>
+ </li>
+<li class="listitem">
+ <p>
Use 'sign-only' with HSMs that are designed to
function primarily as secure key storage devices, but lack
hardware acceleration. These devices are highly secure, but
such as zone signing, and to use the system CPU for all
other computationally-intensive operations. The AEP Keyper
is an example of such a device.
- </p></li>
+ </p>
+ </li>
</ul></div>
-<p>
+ <p>
The modified OpenSSL code is included in the BIND 9 release,
in the form of a context diff against the latest versions of
OpenSSL. OpenSSL 0.9.8, 1.0.0, 1.0.1 and 1.0.2 are supported;
follow, we use OpenSSL 0.9.8, but the same methods work with
OpenSSL 1.0.0 through 1.0.2.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
The OpenSSL patches as of this writing (January 2016)
is expected to change.
</p>
</div>
-<p>
+ <p>
Before building BIND 9 with PKCS#11 support, it will be
necessary to build OpenSSL with the patch in place, and configure
it with the path to your HSM's PKCS#11 provider library.
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.8.8"></a>Patching OpenSSL</h4></div></div></div>
-<pre class="screen">
+
+ <pre class="screen">
$ <strong class="userinput"><code>wget <a class="link" href="" target="_top">http://www.openssl.org/source/openssl-0.9.8zc.tar.gz</a></code></strong>
</pre>
-<p>Extract the tarball:</p>
-<pre class="screen">
+ <p>Extract the tarball:</p>
+ <pre class="screen">
$ <strong class="userinput"><code>tar zxf openssl-0.9.8zc.tar.gz</code></strong>
</pre>
-<p>Apply the patch from the BIND 9 release:</p>
-<pre class="screen">
+ <p>Apply the patch from the BIND 9 release:</p>
+ <pre class="screen">
$ <strong class="userinput"><code>patch -p1 -d openssl-0.9.8zc \
< bind9/bin/pkcs11/openssl-0.9.8zc-patch</code></strong>
</pre>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
The patch file may not be compatible with the
install GNU patch.
</p>
</div>
-<p>
+ <p>
When building OpenSSL, place it in a non-standard
location so that it does not interfere with OpenSSL libraries
elsewhere on the system. In the following examples, we choose
to install into "/opt/pkcs11/usr". We will use this location
when we configure BIND 9.
</p>
-<p>
+ <p>
Later, when building BIND 9, the location of the custom-built
OpenSSL library will need to be specified via configure.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.8.9"></a>Building OpenSSL for the AEP Keyper on Linux</h4></div></div></div>
-<p>
+
+
+ <p>
The AEP Keyper is a highly secure key storage device,
but does not provide hardware cryptographic acceleration. It
can carry out cryptographic operations, but it is probably
slower than your system's CPU. Therefore, we choose the
'sign-only' flavor when building OpenSSL.
</p>
-<p>
+ <p>
The Keyper-specific PKCS#11 provider library is
delivered with the Keyper software. In this example, we place
it /opt/pkcs11/usr/lib:
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>cp pkcs11.GCC4.0.2.so.4.05 /opt/pkcs11/usr/lib/libpkcs11.so</code></strong>
</pre>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
$ <strong class="userinput"><code>./Configure linux-x86_64 \
--pk11-libname=/opt/pkcs11/usr/lib/libpkcs11.so \
--pk11-flavor=sign-only \
--prefix=/opt/pkcs11/usr</code></strong>
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.8.10"></a>Building OpenSSL for the SCA 6000 on Solaris</h4></div></div></div>
-<p>
+
+
+ <p>
The SCA-6000 PKCS#11 provider is installed as a system
library, libpkcs11. It is a true crypto accelerator, up to 4
times faster than any CPU, so the flavor shall be
'crypto-accelerator'.
</p>
-<p>
+ <p>
In this example, we are building on Solaris x86 on an
AMD64 system.
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
$ <strong class="userinput"><code>./Configure solaris64-x86_64-cc \
--pk11-libname=/usr/lib/64/libpkcs11.so \
--pk11-flavor=crypto-accelerator \
--prefix=/opt/pkcs11/usr</code></strong>
</pre>
-<p>
+ <p>
(For a 32-bit build, use "solaris-x86-cc" and /usr/lib/libpkcs11.so.)
</p>
-<p>
+ <p>
After configuring, run
<span class="command"><strong>make</strong></span> and
<span class="command"><strong>make test</strong></span>.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.8.11"></a>Building OpenSSL for SoftHSM</h4></div></div></div>
-<p>
+
+
+ <p>
SoftHSM (version 1) is a software library developed by the
OpenDNSSEC project
(<a class="link" href="http://www.opendnssec.org" target="_top">
less secure than a true HSM, it can allow you to experiment
with PKCS#11 when an HSM is not available.
</p>
-<p>
+ <p>
The SoftHSM cryptographic store must be installed and
initialized before using it with OpenSSL, and the SOFTHSM_CONF
environment variable must always point to the SoftHSM configuration
file:
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code> cd softhsm-1.3.7 </code></strong>
$ <strong class="userinput"><code> configure --prefix=/opt/pkcs11/usr </code></strong>
$ <strong class="userinput"><code> make </code></strong>
$ <strong class="userinput"><code> echo "0:/opt/pkcs11/softhsm.db" > $SOFTHSM_CONF </code></strong>
$ <strong class="userinput"><code> /opt/pkcs11/usr/bin/softhsm --init-token 0 --slot 0 --label softhsm </code></strong>
</pre>
-<p>
+ <p>
SoftHSM can perform all cryptographic operations, but
since it only uses your system CPU, there is no advantage to using
it for anything but signing. Therefore, we choose the 'sign-only'
flavor when building OpenSSL.
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
$ <strong class="userinput"><code>./Configure linux-x86_64 \
--pk11-libname=/opt/pkcs11/usr/lib/libsofthsm.so \
--pk11-flavor=sign-only \
--prefix=/opt/pkcs11/usr</code></strong>
</pre>
-<p>
+ <p>
After configuring, run "<span class="command"><strong>make</strong></span>"
and "<span class="command"><strong>make test</strong></span>".
</p>
-</div>
-<p>
+ </div>
+ <p>
Once you have built OpenSSL, run
"<span class="command"><strong>apps/openssl engine pkcs11</strong></span>" to confirm
that PKCS#11 support was compiled in correctly. The output
should be one of the following lines, depending on the flavor
selected:
</p>
-<pre class="screen">
+ <pre class="screen">
(pkcs11) PKCS #11 engine support (sign only)
</pre>
-<p>Or:</p>
-<pre class="screen">
+ <p>Or:</p>
+ <pre class="screen">
(pkcs11) PKCS #11 engine support (crypto accelerator)
</pre>
-<p>
+ <p>
Next, run
"<span class="command"><strong>apps/openssl engine pkcs11 -t</strong></span>". This will
attempt to initialize the PKCS#11 engine. If it is able to
do so successfully, it will report
<span class="quote">“<span class="quote"><code class="literal">[ available ]</code></span>”</span>.
</p>
-<p>
+ <p>
If the output is correct, run
"<span class="command"><strong>make install</strong></span>" which will install the
modified OpenSSL suite to <code class="filename">/opt/pkcs11/usr</code>.
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.8.18"></a>Configuring BIND 9 for Linux with the AEP Keyper</h4></div></div></div>
-<pre class="screen">
+
+
+ <pre class="screen">
$ <strong class="userinput"><code>cd ../bind9</code></strong>
$ <strong class="userinput"><code>./configure \
--with-openssl=/opt/pkcs11/usr \
--with-pkcs11=/opt/pkcs11/usr/lib/libpkcs11.so</code></strong>
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.8.19"></a>Configuring BIND 9 for Solaris with the SCA 6000</h4></div></div></div>
-<pre class="screen">
+
+
+ <pre class="screen">
$ <strong class="userinput"><code>cd ../bind9</code></strong>
$ <strong class="userinput"><code>./configure CC="cc -xarch=amd64" \
--with-openssl=/opt/pkcs11/usr \
--with-pkcs11=/usr/lib/64/libpkcs11.so</code></strong>
</pre>
-<p>(For a 32-bit build, omit CC="cc -xarch=amd64".)</p>
-<p>
+ <p>(For a 32-bit build, omit CC="cc -xarch=amd64".)</p>
+ <p>
If configure complains about OpenSSL not working, you
may have a 32/64-bit architecture mismatch. Or, you may have
incorrectly specified the path to OpenSSL (it should be the
same as the --prefix argument to the OpenSSL
Configure).
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.5.12.8.20"></a>Configuring BIND 9 for SoftHSM</h4></div></div></div>
-<pre class="screen">
+
+
+ <pre class="screen">
$ <strong class="userinput"><code>cd ../bind9</code></strong>
$ <strong class="userinput"><code>./configure \
--with-openssl=/opt/pkcs11/usr \
--with-pkcs11=/opt/pkcs11/usr/lib/libsofthsm.so</code></strong>
</pre>
-</div>
-<p>
+ </div>
+ <p>
After configuring, run
"<span class="command"><strong>make</strong></span>",
"<span class="command"><strong>make test</strong></span>" and
"<span class="command"><strong>make install</strong></span>".
</p>
-<p>
+ <p>
(Note: If "make test" fails in the "pkcs11" system test, you may
have forgotten to set the SOFTHSM_CONF environment variable.)
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.12.9"></a>PKCS#11 Tools</h3></div></div></div>
-<p>
+
+ <p>
BIND 9 includes a minimal set of tools to operate the
HSM, including
<span class="command"><strong>pkcs11-keygen</strong></span> to generate a new key pair
<span class="command"><strong>pkcs11-destroy</strong></span> to remove objects, and
<span class="command"><strong>pkcs11-tokens</strong></span> to list available tokens.
</p>
-<p>
+ <p>
In UNIX/Linux builds, these tools are built only if BIND
9 is configured with the --with-pkcs11 option. (Note: If
--with-pkcs11 is set to "yes", rather than to the path of the
PKCS11_PROVIDER environment variable to specify the path to the
provider.)
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.12.10"></a>Using the HSM</h3></div></div></div>
-<p>
+
+ <p>
For OpenSSL-based PKCS#11, we must first set up the runtime
environment so the OpenSSL and PKCS#11 libraries can be loaded:
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>export LD_LIBRARY_PATH=/opt/pkcs11/usr/lib:${LD_LIBRARY_PATH}</code></strong>
</pre>
-<p>
+ <p>
This causes <span class="command"><strong>named</strong></span> and other binaries to load
the OpenSSL library from <code class="filename">/opt/pkcs11/usr/lib</code>
rather than from the default location. This step is not necessary
when using native PKCS#11.
</p>
-<p>
+ <p>
Some HSMs require other environment variables to be set.
For example, when operating an AEP Keyper, it is necessary to
specify the location of the "machine" file, which stores
<code class="filename">/opt/Keyper/PKCS11Provider/machine</code>,
use:
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>export KEYPER_LIBRARY_PATH=/opt/Keyper/PKCS11Provider</code></strong>
</pre>
-<p>
+ <p>
Such environment variables must be set whenever running
any tool that uses the HSM, including
<span class="command"><strong>pkcs11-keygen</strong></span>,
<span class="command"><strong>dnssec-keygen</strong></span>, and
<span class="command"><strong>named</strong></span>.
</p>
-<p>
+ <p>
We can now create and use keys in the HSM. In this case,
we will create a 2048 bit key and give it the label
"sample-ksk":
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>pkcs11-keygen -b 2048 -l sample-ksk</code></strong>
</pre>
-<p>To confirm that the key exists:</p>
-<pre class="screen">
+ <p>To confirm that the key exists:</p>
+ <pre class="screen">
$ <strong class="userinput"><code>pkcs11-list</code></strong>
Enter PIN:
object[0]: handle 2147483658 class 3 label[8] 'sample-ksk' id[0]
object[1]: handle 2147483657 class 2 label[8] 'sample-ksk' id[0]
</pre>
-<p>
+ <p>
Before using this key to sign a zone, we must create a
pair of BIND 9 key files. The "dnssec-keyfromlabel" utility
does this. In this case, we will be using the HSM key
"sample-ksk" as the key-signing key for "example.net":
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>dnssec-keyfromlabel -l sample-ksk -f KSK example.net</code></strong>
</pre>
-<p>
+ <p>
The resulting K*.key and K*.private files can now be used
to sign the zone. Unlike normal K* files, which contain both
public and private key data, these files will contain only the
remains stored within the HSM. Signing with the private key takes
place inside the HSM.
</p>
-<p>
+ <p>
If you wish to generate a second key in the HSM for use
as a zone-signing key, follow the same procedure above, using a
different keylabel, a smaller key size, and omitting "-f KSK"
from the dnssec-keyfromlabel arguments:
</p>
-<p>
+ <p>
(Note: When using OpenSSL-based PKCS#11 the label is an arbitrary
string which identifies the key. With native PKCS#11, the label is
a PKCS#11 URI string which may include other details about the key
and the HSM, including its PIN. See
<a class="xref" href="man.dnssec-keyfromlabel.html" title="dnssec-keyfromlabel"><span class="refentrytitle"><span class="application">dnssec-keyfromlabel</span></span>(8)</a> for details.)
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>pkcs11-keygen -b 1024 -l sample-zsk</code></strong>
$ <strong class="userinput"><code>dnssec-keyfromlabel -l sample-zsk example.net</code></strong>
</pre>
-<p>
+ <p>
Alternatively, you may prefer to generate a conventional
on-disk key, using dnssec-keygen:
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>dnssec-keygen example.net</code></strong>
</pre>
-<p>
+ <p>
This provides less security than an HSM key, but since
HSMs can be slow or cumbersome to use for security reasons, it
may be more efficient to reserve HSM keys for use in the less
there is no speed advantage to using on-disk keys, as cryptographic
operations will be done by the HSM regardless.)
</p>
-<p>
+ <p>
Now you can sign the zone. (Note: If not using the -S
option to <span class="command"><strong>dnssec-signzone</strong></span>, it will be
necessary to add the contents of both <code class="filename">K*.key</code>
files to the zone master file before signing it.)
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>dnssec-signzone -S example.net</code></strong>
Enter PIN:
Verifying the zone using the following algorithms:
Algorithm: NSEC3RSASHA1: ZSKs: 1, KSKs: 1 active, 0 revoked, 0 stand-by
example.net.signed
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.12.11"></a>Specifying the engine on the command line</h3></div></div></div>
-<p>
+
+ <p>
When using OpenSSL-based PKCS#11, the "engine" to be used by
OpenSSL can be specified in <span class="command"><strong>named</strong></span> and all of
the BIND <span class="command"><strong>dnssec-*</strong></span> tools by using the "-E
for some reason you wish to use a different OpenSSL
engine.
</p>
-<p>
+ <p>
If you wish to disable use of the "pkcs11" engine —
for troubleshooting purposes, or because the HSM is unavailable
— set the engine to the empty string. For example:
</p>
-<pre class="screen">
+ <pre class="screen">
$ <strong class="userinput"><code>dnssec-signzone -E '' -S example.net</code></strong>
</pre>
-<p>
+ <p>
This causes
<span class="command"><strong>dnssec-signzone</strong></span> to run as if it were compiled
without the --with-pkcs11 option.
</p>
-<p>
+ <p>
When built with native PKCS#11 mode, the "engine" option has a
different meaning: it specifies the path to the PKCS#11 provider
library. This may be useful when testing a new provider library.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.12.12"></a>Running named with automatic zone re-signing</h3></div></div></div>
-<p>
+
+ <p>
If you want <span class="command"><strong>named</strong></span> to dynamically re-sign zones
using HSM keys, and/or to to sign new records inserted via nsupdate,
then <span class="command"><strong>named</strong></span> must have access to the HSM PIN. In OpenSSL-based PKCS#11,
(in the above examples,
<code class="filename">/opt/pkcs11/usr/ssl/openssl.cnf</code>).
</p>
-<p>
+ <p>
The location of the openssl.cnf file can be overridden by
setting the OPENSSL_CONF environment variable before running
<span class="command"><strong>named</strong></span>.
</p>
-<p>Sample openssl.cnf:</p>
-<pre class="programlisting">
+ <p>Sample openssl.cnf:</p>
+ <pre class="programlisting">
openssl_conf = openssl_def
[ openssl_def ]
engines = engine_section
[ pkcs11_section ]
PIN = <em class="replaceable"><code><PLACE PIN HERE></code></em>
</pre>
-<p>
+ <p>
This will also allow the dnssec-* tools to access the HSM
without PIN entry. (The pkcs11-* tools access the HSM directly,
not via OpenSSL, so a PIN will still be required to use
them.)
</p>
-<p>
+ <p>
In native PKCS#11 mode, the PIN can be provided in a file specified
as an attribute of the key's label. For example, if a key had the label
<strong class="userinput"><code>pkcs11:object=local-zsk;pin-source=/etc/hsmpin</code></strong>,
then the PIN would be read from the file
<code class="filename">/etc/hsmpin</code>.
</p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Warning</h3>
-<p>
+ <p>
Placing the HSM's PIN in a text file in this manner may reduce the
security advantage of using an HSM. Be sure this is what you want to
do before configuring the system in this way.
</p>
+ </div>
+ </div>
</div>
-</div>
-</div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="dlz-info"></a>DLZ (Dynamically Loadable Zones)</h2></div></div></div>
-<p>
+
+ <p>
DLZ (Dynamically Loadable Zones) is an extension to BIND 9 that allows
zone data to be retrieved directly from an external database. There is
no required format or schema. DLZ drivers exist for several different
database backends including PostgreSQL, MySQL, and LDAP and can be
written for any other.
</p>
-<p>
+ <p>
Historically, DLZ drivers had to be statically linked with the <span class="command"><strong>named</strong></span>
binary and were turned on via a configure option at compile time (for
example, <strong class="userinput"><code>"configure --with-dlz-ldap"</code></strong>).
<code class="filename">contrib/dlz/drivers</code> are still linked this
way.
</p>
-<p>
+ <p>
In BIND 9.8 and higher, it is possible to link some DLZ modules
dynamically at runtime, via the DLZ "dlopen" driver, which acts as a
generic wrapper around a shared object implementing the DLZ API. The
but are still needed for the older drivers in
<code class="filename">contrib/dlz/drivers</code>.
</p>
-<p>
+
+ <p>
When the DLZ module provides data to <span class="command"><strong>named</strong></span>, it does so in text format.
The response is converted to DNS wire format by <span class="command"><strong>named</strong></span>. This
conversion, and the lack of any internal caching, places significant
DNS notify; slaves are not automatically informed of changes to the
zones in the database.)
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.13.6"></a>Configuring DLZ</h3></div></div></div>
-<p>
+
+ <p>
A DLZ database is configured with a <span class="command"><strong>dlz</strong></span>
statement in <code class="filename">named.conf</code>:
</p>
-<pre class="screen">
+ <pre class="screen">
dlz example {
database "dlopen driver.so <code class="option">args</code>";
search yes;
};
</pre>
-<p>
+ <p>
This specifies a DLZ module to search when answering queries; the
module is implemented in <code class="filename">driver.so</code> and is
loaded at runtime by the dlopen DLZ driver. Multiple
they contain an answer for the query name; the best available
answer will be returned to the client.
</p>
-<p>
+ <p>
The <code class="option">search</code> option in the above example can be
omitted, because <code class="literal">yes</code> is the default value.
</p>
-<p>
+ <p>
If <code class="option">search</code> is set to <code class="literal">no</code>, then
this DLZ module is <span class="emphasis"><em>not</em></span> searched for the best
match when a query is received. Instead, zones in this DLZ must be
zone's data. For example, to implement NXDOMAIN redirection using
a DLZ module for back-end storage of redirection rules:
</p>
-<pre class="screen">
+ <pre class="screen">
dlz other {
database "dlopen driver.so <code class="option">args</code>";
search no;
dlz other;
};
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.13.7"></a>Sample DLZ Driver</h3></div></div></div>
-<p>
+
+ <p>
For guidance in implementation of DLZ modules, the directory
<code class="filename">contrib/dlz/example</code> contains a basic
dynamically-linkable DLZ module--i.e., one which can be
to the module as an argument in the <span class="command"><strong>dlz</strong></span>
statement:
</p>
-<pre class="screen">
+ <pre class="screen">
dlz other {
database "dlopen driver.so example.nil";
};
</pre>
-<p>
+ <p>
In the above example, the module is configured to create a zone
"example.nil", which can answer queries and AXFR requests, and
accept DDNS updates. At runtime, prior to any updates, the zone
contains an SOA, NS, and a single A record at the apex:
</p>
-<pre class="screen">
+ <pre class="screen">
example.nil. 3600 IN SOA example.nil. hostmaster.example.nil. (
123 900 600 86400 3600
)
example.nil. 3600 IN NS example.nil.
example.nil. 1800 IN A 10.53.0.1
</pre>
-<p>
+ <p>
The sample driver is capable of retrieving information about the
querying client, and altering its response on the basis of this
information. To demonstrate this feature, the example driver
e.g., by providing different address records for a particular name
depending on the network from which the query arrived.
</p>
-<p>
+ <p>
Documentation of the DLZ module API can be found in
<code class="filename">contrib/dlz/example/README</code>. This directory also
contains the header file <code class="filename">dlz_minimal.h</code>, which
defines the API and should be included by any dynamically-linkable
DLZ module.
</p>
+ </div>
</div>
-</div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="dyndb-info"></a>DynDB (Dynamic Database)</h2></div></div></div>
-<p>
+
+ <p>
DynDB is an extension to BIND 9 which, like DLZ
(see <a class="xref" href="Bv9ARM.ch04.html#dlz-info" title="DLZ (Dynamically Loadable Zones)">the section called “DLZ (Dynamically Loadable Zones)”</a>), allows zone data to be
retrieved from an external database. Unlike DLZ, a DynDB module
data source, providing the same performance and functionality
as zones served natively by BIND.
</p>
-<p>
+ <p>
A DynDB module supporting LDAP has been created by Red Hat
and is available from
<a class="link" href="https://fedorahosted.org/bind-dyndb-ldap/" target="_top">https://fedorahosted.org/bind-dyndb-ldap/</a>.
</p>
-<p>
+ <p>
A sample DynDB module for testing and developer guidance
is included with the BIND source code, in the directory
<code class="filename">bin/tests/system/dyndb/driver</code>.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.14.5"></a>Configuring DynDB</h3></div></div></div>
-<p>
+
+ <p>
A DynDB database is configured with a <span class="command"><strong>dyndb</strong></span>
statement in <code class="filename">named.conf</code>:
</p>
-<pre class="screen">
+ <pre class="screen">
dyndb example "driver.so" {
<em class="replaceable"><code>parameters</code></em>
};
</pre>
-<p>
+ <p>
The file <code class="filename">driver.so</code> is a DynDB module which
implements the full DNS database API. Multiple
<span class="command"><strong>dyndb</strong></span> statements can be specified, to load
is responding to queries. Zone configuration is handled internally
by the DynDB module.
</p>
-<p>
+ <p>
The <em class="replaceable"><code>parameters</code></em> are passed as an opaque
string to the DynDB module's initialization routine. Configuration
syntax will differ depending on the driver.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.14.6"></a>Sample DynDB Module</h3></div></div></div>
-<p>
+
+ <p>
For guidance in implementation of DynDB modules, the directory
<code class="filename">bin/tests/system/dyndb/driver</code>.
contains a basic DynDB module.
to the module as arguments in the <span class="command"><strong>dyndb</strong></span>
statement:
</p>
-<pre class="screen">
+ <pre class="screen">
dyndb sample "sample.so" { example.nil. arpa. };
</pre>
-<p>
+ <p>
In the above example, the module is configured to create a zone
"example.nil", which can answer queries and AXFR requests, and
accept DDNS updates. At runtime, prior to any updates, the zone
contains an SOA, NS, and a single A record at the apex:
</p>
-<pre class="screen">
+ <pre class="screen">
example.nil. 86400 IN SOA example.nil. example.nil. (
0 28800 7200 604800 86400
)
example.nil. 86400 IN NS example.nil.
example.nil. 86400 IN A 127.0.0.1
</pre>
-<p>
+ <p>
When the zone is updated dynamically, the DynDB module will determine
whether the updated RR is an address (i.e., type A or AAAA) and if
so, it will automatically update the corresponding PTR record in a
reverse zone. (Updates are not stored permanently; all updates are
lost when the server is restarted.)
</p>
+ </div>
</div>
-</div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="catz-info"></a>Catalog Zones</h2></div></div></div>
-<p>
+
+ <p>
A "catalog zone" is a special DNS zone that contains a list of
other zones to be served, along with their configuration parameters.
Zones listed in a catalog zone are called "member zones".
configuration changes can be propagated using the standard AXFR/IXFR
zone transfer mechanism.
</p>
-<p>
+ <p>
Catalog zones' format and behavior are specified as an internet draft
for interoperability among DNS implementations. As of this release, the
latest revision of the DNS catalog zones draft can be found here:
https://datatracker.ietf.org/doc/draft-muks-dnsop-dns-catalog-zones/
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.15.4"></a>Principle of Operation</h3></div></div></div>
-<p>
+ <p>
Normally, if a zone is to be served by a slave server, the
<code class="filename">named.conf</code> file on the server must list the
zone, or the zone must be added using <span class="command"><strong>rndc addzone</strong></span>.
in maintaining consistent zone configuration on all the slave
servers can be significant.
</p>
-<p>
+ <p>
A catalog zone is a way to ease this administrative burden. It is a
DNS zone that lists member zones that should be served by slave servers.
When a slave server receives an update to the catalog zone, it adds,
removes, or reconfigures member zones based on the data received.
</p>
-<p>
+ <p>
To use a catalog zone, it must first be set up as a normal zone on
the master and the on slave servers that will be configured to use
it. It must also be added to a <code class="option">catalog-zones</code> list
a policy zone is configured as a normal zone and also listed in
a <code class="option">response-policy</code> statement.)
</p>
-<p>
+ <p>
To use the catalog zone feature to serve a new member zone:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
+<li class="listitem">
+ <p>
Set up the the member zone to be served on the master as normal.
This could be done by editing <code class="filename">named.conf</code>,
or by running <span class="command"><strong>rndc addzone</strong></span>.
- </p></li>
-<li class="listitem"><p>
+ </p>
+ </li>
+<li class="listitem">
+ <p>
Add an entry to the catalog zone for the new member zone.
This could be done by editing the catalog zone's master file
and running <span class="command"><strong>rndc reload</strong></span>, or by updating
the zone using <span class="command"><strong>nsupdate</strong></span>.
- </p></li>
+ </p>
+ </li>
</ul></div>
<p>
The change to the catalog zone will be propagated from the master to all
BIND will immediately initiate a transfer of zone contents from the
master. Once complete, the slave will start serving the member zone.
</p>
-<p>
+ <p>
Removing a member zone from a slave server requires nothing more than
deleting the member zone's entry in the catalog zone. The change to the
catalog zone is propagated to the slave server using the normal AXFR/IXFR
by editing the configuration file or running
<span class="command"><strong>rndc delzone</strong></span>.)
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.15.5"></a>Configuring Catalog Zones</h3></div></div></div>
-<p>
+ <p>
Catalog zones are configured with a <span class="command"><strong>catalog-zones</strong></span>
statement in the <code class="literal">options</code> or <code class="literal">view</code>
section of <code class="filename">named.conf</code>. For example,
min-update-interval 10;
};
</pre>
-<p>
+ <p>
This statement specifies that the zone
<code class="literal">catalog.example</code> is a catalog zone. This zone must be
properly configured in the same view. In most configurations, it would
be a slave zone.
</p>
-<p>
+ <p>
The options following the zone name are not required, and may be
specified in any order:
</p>
-<p>
+ <p>
The <code class="option">default-masters</code> option defines the default masters
for member zones listed in a catalog zone. This can be overridden by
options within a catalog zone. If no such options are included, then
member zones will transfer their contents from the servers listed in
this option.
</p>
-<p>
+ <p>
The <code class="option">in-memory</code> option, if set to <code class="literal">yes</code>,
causes member zones to be stored only in memory. This is functionally
equivalent to configuring a slave zone without a <code class="option">file</code>.
will be stored locally in a file whose name is automatically generated
from the view name, catalog zone name, and member zone name.
</p>
-<p>
+ <p>
The <code class="option">zone-directory</code> option causes local copies of
member zones' master files (if <code class="option">in-memory</code> is not set
to <code class="literal">yes</code>) to be stored in the specified directory.
A non-absolute pathname in <code class="option">zone-directory</code> is
assumed to be relative to the working directory.
</p>
-<p>
+ <p>
The <code class="option">min-update-interval</code> option sets the minimum
interval between processing of updates to catalog zones, in seconds.
If an update to a catalog zone (for example, via IXFR) happens less
recent update, then the changes will not be carried out until this
interval has elapsed. The default is <code class="literal">5</code> seconds.
</p>
-<p>
+ <p>
Catalog zones are defined on a per-view basis. Configuring a non-empty
<code class="option">catalog-zones</code> statement in a view will automatically
turn on <code class="option">allow-new-zones</code> for that view. (Note: this
means <span class="command"><strong>rndc addzone</strong></span> and <span class="command"><strong>rndc delzone</strong></span>
will also work in any view that supports catalog zones.)
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.15.6"></a>Catalog Zone format</h3></div></div></div>
-<p>
+ <p>
A catalog zone is a regular DNS zone; therefore, it has to have a
single <code class="literal">SOA</code> and at least one <code class="literal">NS</code>
record.
</p>
-<p>
+ <p>
A record stating the version of the catalog zone format is
also required. If the version number listed is not supported by
the server, then a catalog zone may not be used by that server.
catalog.example. IN NS nsexample.
version.catalog.example. IN TXT "1"
</pre>
-<p>
+ <p>
Note that this record must have the domain name
version.<em class="replaceable"><code>catalog-zone-name</code></em>. This illustrates
how the meaning of data stored in a catalog zone is indicated by the
the domain name label immediately before the catalog zone domain.
</p>
-<p>
+ <p>
Catalog zone options can be set either globally for the whole catalog
zone or for a single member zone. Global options override the settings
in the configuration file and member zone options override global
options.
</p>
-<p>
+ <p>
Global options are set at the apex of the catalog zone, e.g.:
</p>
<pre class="screen">
masters.catalog.example. IN AAAA 2001:db8::1
</pre>
-<p>BIND currently supports the following options:</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+ <p>BIND currently supports the following options:</p>
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
-<p>A simple <code class="option">masters</code> definition:</p>
-<pre class="screen">
+ <p>A simple <code class="option">masters</code> definition:</p>
+ <pre class="screen">
masters.catalog.example. IN A 192.0.2.1
</pre>
-<p>
+ <p>
This option defines a master server for the member zones - it
can be either an A or AAAA record. If multiple masters are set the
order in which they are used is random.
</p>
-</li>
+ </li>
<li class="listitem">
-<p>A <code class="option">masters</code> with a TSIG key defined:</p>
-<pre class="screen">
+ <p>A <code class="option">masters</code> with a TSIG key defined:</p>
+ <pre class="screen">
label.masters.catalog.example. IN A 192.0.2.2
label.masters.catalog.example. IN TXT "tsig_key_name"
</pre>
-<p>
+ <p>
This option defines a master server for the member zone with a TSIG
key set. The TSIG key must be configured in the configuration file.
<code class="option">label</code> can be any valid DNS label.
</p>
-</li>
+ </li>
<li class="listitem">
-<p><code class="option">allow-query</code> and
+ <p><code class="option">allow-query</code> and
<code class="option">allow-transfer</code> ACLs:</p>
-<pre class="screen">
+ <pre class="screen">
allow-query.catalog.example. IN APL 1:10.0.0.1/24
allow-transfer.catalog.example. IN APL !1:10.0.0.1/32 1:10.0.0.0/24
</pre>
-<p>
+ <p>
These options are the equivalents of <code class="option">allow-query</code>
and <code class="option">allow-transfer</code> in a zone declaration in the
<code class="filename">named.conf</code> configuration file. The ACL is
policy is to deny access. For the syntax of the APL RR see RFC
3123
</p>
-</li>
+ </li>
</ul></div>
-<p>
+ <p>
A member zone is added by including a <code class="literal">PTR</code>
resource record in the <code class="literal">zones</code> sub-domain of the
catalog zone. The record label is a <code class="literal">SHA-1</code> hash
<pre class="screen">
5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN PTR domain.example.
</pre>
-<p>
+ <p>
The hash is necessary to identify options for a specific member
zone. The member zone-specific options are defined the same way as
global options, but in the member zone subdomain:
label.masters.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN TXT "tsig_key"
allow-query.5960775ba382e7a4e09263fc06e7c00569b6a05c.zones.catalog.example. IN APL 1:10.0.0.0/24
</pre>
-<p>
+ <p>
As would be expected, options defined for a specific zone override
the global options defined in the catalog zone. These in turn override
the global options defined in the <code class="literal">catalog-zones</code>
statement in the configuration file.
</p>
-<p>
+ <p>
(Note that none of the global records an option will be inherited if
any records are defined for that option for the specific zone. For
example, if the zone had a <code class="literal">masters</code> record of type
A but not AAAA, then it would <span class="emphasis"><em>not</em></span> inherit the
type AAAA record from the global option.)
</p>
+ </div>
</div>
-</div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="ipv6"></a>IPv6 Support in <acronym class="acronym">BIND</acronym> 9</h2></div></div></div>
-<p>
+ <p>
<acronym class="acronym">BIND</acronym> 9 fully supports all currently
defined forms of IPv6 name to address and address to name
lookups. It will also use IPv6 addresses to make queries when
running on an IPv6 capable system.
</p>
-<p>
+
+ <p>
For forward lookups, <acronym class="acronym">BIND</acronym> 9 supports
only AAAA records. RFC 3363 deprecated the use of A6 records,
and client-side support for A6 records was accordingly removed
for A6 records, and accept zone transfer for a zone containing A6
records.
</p>
-<p>
+
+ <p>
For IPv6 reverse lookups, <acronym class="acronym">BIND</acronym> 9 supports
the traditional "nibble" format used in the
<span class="emphasis"><em>ip6.arpa</em></span> domain, as well as the older, deprecated
In particular, an authoritative <acronym class="acronym">BIND</acronym> 9
name server will not load a zone file containing binary labels.
</p>
-<p>
+
+ <p>
For an overview of the format and structure of IPv6 addresses,
see <a class="xref" href="Bv9ARM.ch10.html#ipv6addresses" title="IPv6 addresses (AAAA)">the section called “IPv6 addresses (AAAA)”</a>.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.16.6"></a>Address Lookups Using AAAA Records</h3></div></div></div>
-<p>
+
+ <p>
The IPv6 AAAA record is a parallel to the IPv4 A record,
and, unlike the deprecated A6 record, specifies the entire
IPv6 address in a single record. For example,
</p>
+
<pre class="programlisting">
$ORIGIN example.com.
host 3600 IN AAAA 2001:db8::1
</pre>
-<p>
+
+ <p>
Use of IPv4-in-IPv6 mapped addresses is not recommended.
If a host has an IPv4 address, use an A record, not
a AAAA, with <code class="literal">::ffff:192.168.42.1</code> as
the address.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="id-1.5.16.7"></a>Address to Name Lookups Using Nibble Format</h3></div></div></div>
-<p>
+
+ <p>
When looking up an address in nibble format, the address
components are simply reversed, just as in IPv4, and
<code class="literal">ip6.arpa.</code> is appended to the
a host with address
<code class="literal">2001:db8::1</code>.
</p>
+
<pre class="programlisting">
$ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 14400 IN PTR (
host.example.com. )
</pre>
-</div>
-</div>
-</div>
+
+ </div>
+ </div>
+ </div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chapter 5. BIND 9 Configuration Reference</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="prev" href="Bv9ARM.ch04.html" title="Chapter 4. Advanced DNS Features">
</dl></dd>
</dl>
</div>
-<p>
+
+ <p>
<acronym class="acronym">BIND</acronym> 9 configuration is broadly similar
to <acronym class="acronym">BIND</acronym> 8; however, there are a few new
areas
if they can be more efficiently implemented using the new features
found in <acronym class="acronym">BIND</acronym> 9.
</p>
-<p>
+
+ <p>
<acronym class="acronym">BIND</acronym> 4 configuration files can be
converted to the new format
using the shell script
<code class="filename">contrib/named-bootconf/named-bootconf.sh</code>.
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="configuration_file_elements"></a>Configuration File Elements</h2></div></div></div>
-<p>
+
+ <p>
Following is a list of elements used throughout the <acronym class="acronym">BIND</acronym> configuration
file documentation:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.855in" class="1">
<col width="3.770in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<div class="section">
+</table>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="address_match_lists"></a>Address Match Lists</h3></div></div></div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.6.4.4.2"></a>Syntax</h4></div></div></div>
+
<pre class="programlisting"><em class="replaceable"><code>address_match_list</code></em> = <em class="replaceable"><code>address_match_list_element</code></em> <span class="command"><strong>;</strong></span> ...
<em class="replaceable"><code>address_match_list_element</code></em> = [ <span class="command"><strong>!</strong></span> ] ( <em class="replaceable"><code>ip_address</code></em> | <em class="replaceable"><code>ip_prefix</code></em> |
<span class="command"><strong>key</strong></span> <em class="replaceable"><code>key_id</code></em> | <em class="replaceable"><code>acl_name</code></em> | <span class="command"><strong>{</strong></span> <em class="replaceable"><code>address_match_list</code></em> <span class="command"><strong>}</strong></span> )
</pre>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.6.4.4.3"></a>Definition and Usage</h4></div></div></div>
-<p>
+
+ <p>
Address match lists are primarily used to determine access
control for various server operations. They are also used in
the <span class="command"><strong>listen-on</strong></span> and <span class="command"><strong>sortlist</strong></span>
statements. The elements which constitute an address match
list can be any of the following:
</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">an IP address (IPv4 or IPv6)</li>
-<li class="listitem">an IP prefix (in `/' notation)</li>
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ an IP address (IPv4 or IPv6)
+ </li>
+<li class="listitem">
+ an IP prefix (in `/' notation)
+ </li>
<li class="listitem">
+
a key ID, as defined by the <span class="command"><strong>key</strong></span>
statement
- </li>
-<li class="listitem">the name of an address match list defined with
+
+ </li>
+<li class="listitem">
+ the name of an address match list defined with
the <span class="command"><strong>acl</strong></span> statement
- </li>
-<li class="listitem">a nested address match list enclosed in braces</li>
+
+ </li>
+<li class="listitem">
+ a nested address match list enclosed in braces
+ </li>
</ul></div>
-<p>
+
+ <p>
Elements can be negated with a leading exclamation mark (`!'),
and the match list names "any", "none", "localhost", and
"localnets" are predefined. More information on those names
can be found in the description of the acl statement.
</p>
-<p>
+
+ <p>
The addition of the key clause made the name of this syntactic
element something of a misnomer, since security keys can be used
to validate access without regard to a host or network address.
Nonetheless, the term "address match list" is still used
throughout the documentation.
</p>
-<p>
+
+ <p>
When a given IP address or prefix is compared to an address
match list, the comparison takes place in approximately O(1)
time. However, key comparisons require that the list of keys
be traversed until a matching key is found, and therefore may
be somewhat slower.
</p>
-<p>
+
+ <p>
The interpretation of a match depends on whether the list is being
used for access control, defining <span class="command"><strong>listen-on</strong></span> ports, or in a
<span class="command"><strong>sortlist</strong></span>, and whether the element was negated.
</p>
-<p>
+
+ <p>
When used as an access control list, a non-negated match
allows access and a negated match denies access. If
there is no match, access is denied. The clauses
server to refuse queries on any of the machine's
addresses which do not match the list.
</p>
-<p>
+
+ <p>
Order of insertion is significant. If more than one element
in an ACL is found to match a given IP address or prefix,
preference will be given to the one that came
that problem by having 1.2.3.13 blocked by the negation, but
all other 1.2.3.* hosts fall through.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="comment_syntax"></a>Comment Syntax</h3></div></div></div>
-<p>
+
+ <p>
The <acronym class="acronym">BIND</acronym> 9 comment syntax allows for
comments to appear
anywhere that whitespace may appear in a <acronym class="acronym">BIND</acronym> configuration
file. To appeal to programmers of all kinds, they can be written
in the C, C++, or shell/perl style.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.6.4.5.3"></a>Syntax</h4></div></div></div>
-<p>
+
+ <p>
</p>
<pre class="programlisting">/* This is a <acronym class="acronym">BIND</acronym> comment as in C */</pre>
<p>
# and perl</pre>
<p>
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.6.4.5.4"></a>Definition and Usage</h4></div></div></div>
-<p>
+
+ <p>
Comments may appear anywhere that whitespace may appear in
a <acronym class="acronym">BIND</acronym> configuration file.
</p>
-<p>
+ <p>
C-style comments start with the two characters /* (slash,
star) and end with */ (star, slash). Because they are completely
delimited with these characters, they can be used to comment only
a portion of a line or to span multiple lines.
</p>
-<p>
+ <p>
C-style comments cannot be nested. For example, the following
is not valid because the entire comment ends with the first */:
</p>
-<p>
+ <p>
</p>
<pre class="programlisting">/* This is the start of a comment.
<p>
</p>
-<p>
+
+ <p>
C++-style comments start with the two characters // (slash,
slash) and continue to the end of the physical line. They cannot
be continued across multiple physical lines; to have one logical
comment span multiple lines, each line must use the // pair.
For example:
</p>
-<p>
+ <p>
</p>
<pre class="programlisting">// This is the start of a comment. The next line
<p>
</p>
-<p>
+ <p>
Shell-style (or perl-style, if you prefer) comments start
with the character <code class="literal">#</code> (number sign)
and continue to the end of the
physical line, as in C++ comments.
For example:
</p>
-<p>
+
+ <p>
</p>
<pre class="programlisting"># This is the start of a comment. The next line
<p>
</p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Warning</h3>
-<p>
+ <p>
You cannot use the semicolon (`;') character
to start a comment such as you would in a zone file. The
semicolon indicates the end of a configuration
statement.
</p>
-</div>
-</div>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="Configuration_File_Grammar"></a>Configuration File Grammar</h2></div></div></div>
-<p>
+
+ <p>
A <acronym class="acronym">BIND</acronym> 9 configuration consists of
statements and comments.
Statements end with a semicolon. Statements and comments are the
statements contain a block of sub-statements, which are also
terminated with a semicolon.
</p>
-<p>
+
+ <p>
The following statements are supported:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.336in" class="1">
<col width="3.778in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+
+ <p>
The <span class="command"><strong>logging</strong></span> and
<span class="command"><strong>options</strong></span> statements may only occur once
per
configuration.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="acl_grammar"></a><span class="command"><strong>acl</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>acl</strong></span> <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>address_match_element</code></em>; ... };
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="acl"></a><span class="command"><strong>acl</strong></span> Statement Definition and
Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>acl</strong></span> statement assigns a symbolic
name to an address match list. It gets its name from a primary
use of address match lists: Access Control Lists (ACLs).
</p>
-<p>
+
+ <p>
The following ACLs are built-in:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.130in" class="1">
<col width="4.000in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-</div>
-<div class="section">
+</table>
+ </div>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="controls_grammar"></a><span class="command"><strong>controls</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>controls</strong></span> {
<span class="command"><strong>inet</strong></span> ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> |
* ) [ port ( <em class="replaceable"><code>integer</code></em> | * ) ] allow
<em class="replaceable"><code>boolean</code></em> ];
};
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="controls_statement_definition_and_usage"></a><span class="command"><strong>controls</strong></span> Statement Definition and
Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>controls</strong></span> statement declares control
channels to be used by system administrators to control the
operation of the name server. These control channels are
used by the <span class="command"><strong>rndc</strong></span> utility to send
commands to and retrieve non-DNS results from a name server.
</p>
-<p>
+
+ <p>
An <span class="command"><strong>inet</strong></span> control channel is a TCP socket
listening at the specified <span class="command"><strong>ip_port</strong></span> on the
specified <span class="command"><strong>ip_addr</strong></span>, which can be an IPv4 or IPv6
using the loopback address (<code class="literal">127.0.0.1</code>
or <code class="literal">::1</code>) is recommended for maximum security.
</p>
-<p>
+
+ <p>
If no port is specified, port 953 is used. The asterisk
"<code class="literal">*</code>" cannot be used for <span class="command"><strong>ip_port</strong></span>.
</p>
-<p>
+
+ <p>
The ability to issue commands over the control channel is
restricted by the <span class="command"><strong>allow</strong></span> and
<span class="command"><strong>keys</strong></span> clauses.
elements of the <span class="command"><strong>address_match_list</strong></span>
are ignored.
</p>
-<p>
+
+ <p>
A <span class="command"><strong>unix</strong></span> control channel is a UNIX domain
socket listening at the specified path in the file system.
Access to the socket is specified by the <span class="command"><strong>perm</strong></span>,
(<span class="command"><strong>perm</strong></span>) are applied to the parent directory
as the permissions on the socket itself are ignored.
</p>
-<p>
+
+ <p>
The primary authorization mechanism of the command
channel is the <span class="command"><strong>key_list</strong></span>, which
contains a list of <span class="command"><strong>key_id</strong></span>s.
See <a class="xref" href="Bv9ARM.ch03.html#rndc">Remote Name Daemon Control application</a> in <a class="xref" href="Bv9ARM.ch03.html#admin_tools" title="Administrative Tools">the section called “Administrative Tools”</a>)
for information about configuring keys in <span class="command"><strong>rndc</strong></span>.
</p>
-<p>
+
+ <p>
If the <span class="command"><strong>read-only</strong></span> clause is enabled, the
control channel is limited to the following set of read-only
commands: <span class="command"><strong>nta -dump</strong></span>,
<span class="command"><strong>read-only</strong></span> is not enabled and the control
channel allows read-write access.
</p>
-<p>
+
+ <p>
If no <span class="command"><strong>controls</strong></span> statement is present,
<span class="command"><strong>named</strong></span> will set up a default
control channel listening on the loopback address 127.0.0.1
To create a <code class="filename">rndc.key</code> file, run
<strong class="userinput"><code>rndc-confgen -a</code></strong>.
</p>
-<p>
+
+ <p>
The <code class="filename">rndc.key</code> feature was created to
ease the transition of systems from <acronym class="acronym">BIND</acronym> 8,
which did not have digital signatures on its command channel
command <strong class="userinput"><code>rndc-confgen -a</code></strong> after BIND 9 is
installed.
</p>
-<p>
+
+ <p>
Since the <code class="filename">rndc.key</code> feature
is only intended to allow the backward-compatible usage of
<acronym class="acronym">BIND</acronym> 8 configuration files, this
readable by a group
that contains the users who should have access.
</p>
-<p>
+
+ <p>
To disable the command channel, use an empty
<span class="command"><strong>controls</strong></span> statement:
<span class="command"><strong>controls { };</strong></span>.
</p>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="include_grammar"></a><span class="command"><strong>include</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting"><span class="command"><strong>include</strong></span> <em class="replaceable"><code>filename</code></em><span class="command"><strong>;</strong></span></pre>
-</div>
-<div class="section">
+
+ <pre class="programlisting"><span class="command"><strong>include</strong></span> <em class="replaceable"><code>filename</code></em><span class="command"><strong>;</strong></span></pre>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="include_statement"></a><span class="command"><strong>include</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>include</strong></span> statement inserts the
specified file (or files if a valid glob expression is detected)
at the point where the <span class="command"><strong>include</strong></span>
others. For example, the statement could include private keys
that are readable only by the name server.
</p>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="key_grammar"></a><span class="command"><strong>key</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>key</strong></span> <em class="replaceable"><code>string</code></em> {
<span class="command"><strong>algorithm</strong></span> <em class="replaceable"><code>string</code></em>;
<span class="command"><strong>secret</strong></span> <em class="replaceable"><code>string</code></em>;
};
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="key_statement"></a><span class="command"><strong>key</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>key</strong></span> statement defines a shared
secret key for use with TSIG (see <a class="xref" href="Bv9ARM.ch04.html#tsig" title="TSIG">the section called “TSIG”</a>)
or the command channel
(see <a class="xref" href="Bv9ARM.ch05.html#controls_statement_definition_and_usage" title="controls Statement Definition and Usage">the section called “<span class="command"><strong>controls</strong></span> Statement Definition and
Usage”</a>).
</p>
-<p>
+
+ <p>
The <span class="command"><strong>key</strong></span> statement can occur at the
top level
of the configuration file or inside a <span class="command"><strong>view</strong></span>
Usage”</a>)
must be defined at the top level.
</p>
-<p>
+
+ <p>
The <em class="replaceable"><code>key_id</code></em>, also known as the
key name, is a domain name uniquely identifying the key. It can
be used in a <span class="command"><strong>server</strong></span>
verify that incoming requests have been signed with a key
matching this name, algorithm, and secret.
</p>
-<p>
+
+ <p>
The <em class="replaceable"><code>algorithm_id</code></em> is a string
that specifies a security/authentication algorithm. The
<span class="command"><strong>named</strong></span> server supports <code class="literal">hmac-md5</code>,
to be used by the algorithm, and is treated as a Base64
encoded string.
</p>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="logging_grammar"></a><span class="command"><strong>logging</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>logging</strong></span> {
<span class="command"><strong>category</strong></span> <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>; ... };
<span class="command"><strong>channel</strong></span> <em class="replaceable"><code>string</code></em> {
};
};
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="logging_statement"></a><span class="command"><strong>logging</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>logging</strong></span> statement configures a
wide
variety of logging options for the name server. Its <span class="command"><strong>channel</strong></span> phrase
a name that can then be used with the <span class="command"><strong>category</strong></span> phrase
to select how various classes of messages are logged.
</p>
-<p>
+ <p>
Only one <span class="command"><strong>logging</strong></span> statement is used to
define
as many channels and categories as are wanted. If there is no <span class="command"><strong>logging</strong></span> statement,
the logging configuration will be:
</p>
+
<pre class="programlisting">logging {
category default { default_syslog; default_debug; };
category unmatched { null; };
};
</pre>
-<p>
+
+ <p>
If <span class="command"><strong>named</strong></span> is started with the
<code class="option">-L</code> option, it logs to the specified file
at startup, instead of using syslog. In this case the logging
configuration will be:
</p>
+
<pre class="programlisting">logging {
category default { default_logfile; default_debug; };
category unmatched { null; };
};
</pre>
-<p>
+
+ <p>
The logging configuration is only established when
the entire configuration file has been parsed.
When the server is starting up, all logging messages
channels, or to standard error if the <code class="option">-g</code> option
was specified.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="channel"></a>The <span class="command"><strong>channel</strong></span> Phrase</h4></div></div></div>
-<p>
+
+ <p>
All log output goes to one or more <span class="emphasis"><em>channels</em></span>;
you can make as many of them as you want.
</p>
-<p>
+
+ <p>
Every channel definition must include a destination clause that
says whether messages selected for the channel go to a file, to a
particular syslog facility, to the standard error stream, or are
category name
and/or severity level (the default is not to include any).
</p>
-<p>
+
+ <p>
The <span class="command"><strong>null</strong></span> destination clause
causes all messages sent to the channel to be discarded;
in that case, other options for the channel are meaningless.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>file</strong></span> destination clause directs
the channel to a disk file. It can include additional
arguments to specify how large the file is allowed to
(<span class="command"><strong>versions</strong></span>), and the format to use
for naming backup versions (<span class="command"><strong>suffix</strong></span>).
</p>
-<p>
+
+ <p>
The <span class="command"><strong>size</strong></span> option is used to limit
log file growth. If the file ever exceeds the specified
size, then <span class="command"><strong>named</strong></span> will stop writing to the
removes or truncates the log to less than the maximum size.
The default behavior is not to limit the size of the file.
</p>
-<p>
+ <p>
File rolling only occurs when the file exceeds the size
specified with the <span class="command"><strong>size</strong></span> option. No
backup versions are kept by default; any existing
how many backup versions of the file should be kept.
If set to <code class="literal">unlimited</code>, there is no limit.
</p>
-<p>
+ <p>
The <span class="command"><strong>suffix</strong></span> option can be set to
either <code class="literal">increment</code> or
<code class="literal">timestamp</code>. If set to
whereupon a new <code class="filename">filename.log</code> is
opened.
</p>
-<p>
+
+ <p>
Example usage of the <span class="command"><strong>size</strong></span>,
<span class="command"><strong>versions</strong></span>, and <span class="command"><strong>suffix</strong></span>
options:
</p>
+
<pre class="programlisting">channel an_example_channel {
file "example.log" versions 3 size 20m suffix increment;
print-time yes;
print-category yes;
};
</pre>
-<p>
+
+ <p>
The <span class="command"><strong>syslog</strong></span> destination clause
directs the
channel to the system log. Its argument is a
only uses two arguments to the <span class="command"><strong>openlog()</strong></span> function,
then this clause is silently ignored.
</p>
-<p>
+ <p>
On Windows machines syslog messages are directed to the EventViewer.
</p>
-<p>
+ <p>
The <span class="command"><strong>severity</strong></span> clause works like <span class="command"><strong>syslog</strong></span>'s
"priorities", except that they can also be used if you are writing
straight to a file rather than using <span class="command"><strong>syslog</strong></span>.
levels
will be accepted.
</p>
-<p>
+ <p>
If you are using <span class="command"><strong>syslog</strong></span>, then the <span class="command"><strong>syslog.conf</strong></span> priorities
will also determine what eventually passes through. For example,
defining a channel facility and severity as <span class="command"><strong>daemon</strong></span> and <span class="command"><strong>debug</strong></span> but
then <span class="command"><strong>syslogd</strong></span> would
print all messages it received from the channel.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>stderr</strong></span> destination clause
directs the
channel to the server's standard error stream. This is intended
example
when debugging a configuration.
</p>
-<p>
+
+ <p>
The server can supply extensive debugging information when
it is in debugging mode. If the server's global debug level is
greater
level, and higher debug levels give more detailed output. Channels
that specify a specific debug severity, for example:
</p>
+
<pre class="programlisting">channel specific_debug_level {
file "foo";
severity debug 3;
};
</pre>
-<p>
+
+ <p>
will get debugging output of level 3 or less any time the
server is in debugging mode, regardless of the global debugging
level. Channels with <span class="command"><strong>dynamic</strong></span>
severity use the
server's global debug level to determine what messages to print.
</p>
-<p>
+ <p>
<span class="command"><strong>print-time</strong></span> can be set to
<strong class="userinput"><code>yes</code></strong>, <strong class="userinput"><code>no</code></strong>,
or a time format specifier, which may be one of
are logged in ISO8601 format, with time zone set to
UTC. The default is <strong class="userinput"><code>no</code></strong>.
</p>
-<p>
+ <p>
<span class="command"><strong>print-time</strong></span> may
be specified for a <span class="command"><strong>syslog</strong></span> channel,
but it is usually
pointless since <span class="command"><strong>syslog</strong></span> also logs
the date and time.
</p>
-<p>
+ <p>
If <span class="command"><strong>print-category</strong></span> is
requested, then the
category of the message will be logged as well. Finally, if <span class="command"><strong>print-severity</strong></span> is
three <span class="command"><strong>print-</strong></span> options
are on:
</p>
-<p>
+
+ <p>
<code class="computeroutput">28-Feb-2000 15:05:32.863 general: notice: running</code>
</p>
-<p>
+
+ <p>
If <span class="command"><strong>buffered</strong></span> has been turned on the output
to files will not be flushed after each log entry. By default
all log messages are flushed.
</p>
-<p>
+
+ <p>
There are four predefined channels that are used for
<span class="command"><strong>named</strong></span>'s default logging as follows.
If <span class="command"><strong>named</strong></span> is started with the
How they are
used is described in <a class="xref" href="Bv9ARM.ch05.html#the_category_phrase" title="The category Phrase">the section called “The <span class="command"><strong>category</strong></span> Phrase”</a>.
</p>
+
<pre class="programlisting">channel default_syslog {
// send to syslog's daemon facility
syslog daemon;
severity dynamic;
};
</pre>
-<p>
+
+ <p>
The <span class="command"><strong>default_debug</strong></span> channel has the
special
property that it only produces output when the server's debug
nonzero. It normally writes to a file called <code class="filename">named.run</code>
in the server's working directory.
</p>
-<p>
+
+ <p>
For security reasons, when the <code class="option">-u</code>
command line option is used, the <code class="filename">named.run</code> file
is created only after <span class="command"><strong>named</strong></span> has
option to specify a default logfile, or the <code class="option">-g</code>
option to log to standard error which you can redirect to a file.
</p>
-<p>
+
+ <p>
Once a channel is defined, it cannot be redefined. Thus you
cannot alter the built-in channels directly, but you can modify
the default logging by pointing categories at channels you have
defined.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="the_category_phrase"></a>The <span class="command"><strong>category</strong></span> Phrase</h4></div></div></div>
-<p>
+
+ <p>
There are many categories, so you can send the logs you want
to see wherever you want, without seeing logs you don't want. If
you don't specify a list of channels for a category, then log
instead. If you don't specify a default category, the following
"default default" is used:
</p>
+
<pre class="programlisting">category default { default_syslog; default_debug; };
</pre>
-<p>
+
+ <p>
If you start <span class="command"><strong>named</strong></span> with the
<code class="option">-L</code> option then the default category is:
</p>
+
<pre class="programlisting">category default { default_logfile; default_debug; };
</pre>
-<p>
+
+ <p>
As an example, let's say you want to log security events to
a file, but you also want keep the default logging behavior. You'd
specify the following:
</p>
+
<pre class="programlisting">channel my_security_channel {
file "my_security_file";
severity info;
default_syslog;
default_debug;
};</pre>
-<p>
+
+ <p>
To discard all messages in a category, specify the <span class="command"><strong>null</strong></span> channel:
</p>
+
<pre class="programlisting">category xfer-out { null; };
category notify { null; };
</pre>
-<p>
+
+ <p>
Following are the available categories and brief descriptions
of the types of log information they contain. More
categories may be added in future <acronym class="acronym">BIND</acronym> releases.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.150in" class="1">
<col width="3.350in" class="2">
</td>
</tr>
</tbody>
-</table></div>
+</table>
</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="query_errors"></a>The <span class="command"><strong>query-errors</strong></span> Category</h4></div></div></div>
-<p>
+ <p>
The <span class="command"><strong>query-errors</strong></span> category is
used to indicate why and how specific queries resulted in
responses which indicate an error. Normally, these messages
logged at <span class="command"><strong>info</strong></span>. The logging levels are
described below:
</p>
-<p>
+
+ <p>
At <span class="command"><strong>debug</strong></span> level 1 or higher - or at
<span class="command"><strong>info</strong></span>, when query logging is active - each
response with response code SERVFAIL will be logged as follows:
</p>
-<p>
+ <p>
<code class="computeroutput">client 127.0.0.1#61502: query failed (SERVFAIL) for www.example.com/IN/AAAA at query.c:3880</code>
</p>
-<p>
+ <p>
This means an error resulting in SERVFAIL was detected at line
3880 of source file <code class="filename">query.c</code>. Log messages
of this level will particularly help identify the cause of
SERVFAIL for an authoritative server.
</p>
-<p>
+ <p>
At <span class="command"><strong>debug</strong></span> level 2 or higher, detailed
context information about recursive resolutions that resulted in
SERVFAIL will be logged. The log message will look like this:
</p>
-<p>
+ <p>
</p>
<pre class="programlisting">
</pre>
<p>
</p>
-<p>
+ <p>
The first part before the colon shows that a recursive
resolution for AAAA records of www.example.com completed
in 10.000183 seconds and the final result that led to the
SERVFAIL was determined at line 2970 of source file
<code class="filename">resolver.c</code>.
</p>
-<p>
+ <p>
The following part shows the detected final result and the
latest result of DNSSEC validation. The latter is always
"success" when no validation attempt was made. In this example,
servers are down or unreachable, leading to a timeout in 10
seconds. DNSSEC validation was probably not attempted.
</p>
-<p>
+ <p>
The last part, enclosed in square brackets, shows statistics
collected for this particular resolution attempt.
The <code class="varname">domain</code> field shows the deepest zone that
finally detected. The meaning of the other fields is
summarized in the following table.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.150in" class="1">
<col width="3.350in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
At <span class="command"><strong>debug</strong></span> level 3 or higher, the same
messages as those at <span class="command"><strong>debug</strong></span> level 1 will be
logged for other errors than SERVFAIL. Note that negative
responses such as NXDOMAIN are not errors, and are not logged
at this debug level.
</p>
-<p>
+ <p>
At <span class="command"><strong>debug</strong></span> level 4 or higher, the
detailed context information logged at <span class="command"><strong>debug</strong></span>
level 2 will be logged for other errors than SERVFAIL and
for negative resonses such as NXDOMAIN.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="masters_grammar"></a><span class="command"><strong>masters</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>masters</strong></span> <em class="replaceable"><code>string</code></em> [ port <em class="replaceable"><code>integer</code></em> ] [ dscp
<em class="replaceable"><code>integer</code></em> ] { ( <em class="replaceable"><code>masters</code></em> | <em class="replaceable"><code>ipv4_address</code></em> [
<span class="command"><strong>port</strong></span> <em class="replaceable"><code>integer</code></em> ] | <em class="replaceable"><code>ipv6_address</code></em> [ port
<em class="replaceable"><code>integer</code></em> ] ) [ key <em class="replaceable"><code>string</code></em> ]; ... };
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="masters_statement"></a><span class="command"><strong>masters</strong></span> Statement Definition and
Usage</h3></div></div></div>
-<p><span class="command"><strong>masters</strong></span>
+
+ <p><span class="command"><strong>masters</strong></span>
lists allow for a common set of masters to be easily used by
multiple stub and slave zones in their <span class="command"><strong>masters</strong></span>
or <span class="command"><strong>also-notify</strong></span> lists.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="options_grammar"></a><span class="command"><strong>options</strong></span> Statement Grammar</h3></div></div></div>
-<p>
+
+ <p>
This is the grammar of the <span class="command"><strong>options</strong></span>
statement in the <code class="filename">named.conf</code> file:
</p>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>options</strong></span> {
<span class="command"><strong>allow-new-zones</strong></span> <em class="replaceable"><code>boolean</code></em>;
<span class="command"><strong>allow-notify</strong></span> { <em class="replaceable"><code>address_match_element</code></em>; ... };
<span class="command"><strong>zone-statistics</strong></span> ( full | terse | none | <em class="replaceable"><code>boolean</code></em> );
};
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="options"></a><span class="command"><strong>options</strong></span> Statement Definition and
Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>options</strong></span> statement sets up global
options
to be used by <acronym class="acronym">BIND</acronym>. This statement
statement, an options block with each option set to its default will
be used.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>attach-cache</strong></span></span></dt>
<dd>
-<p>
+ <p>
Allows multiple views to share a single cache
database.
Each view has its own cache database by default, but
share a single cache to save memory and possibly
improve resolution efficiency by using this option.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>attach-cache</strong></span> option
may also be specified in <span class="command"><strong>view</strong></span>
statements, in which case it overrides the
global <span class="command"><strong>attach-cache</strong></span> option.
</p>
-<p>
+
+ <p>
The <em class="replaceable"><code>cache_name</code></em> specifies
the cache to be shared.
When the <span class="command"><strong>named</strong></span> server configures
The rest of the views will simply refer to the
already created cache.
</p>
-<p>
+
+ <p>
One common configuration to share a cache would be to
allow all views to share a single cache.
This can be done by specifying
the <span class="command"><strong>attach-cache</strong></span> as a global
option with an arbitrary name.
</p>
-<p>
+
+ <p>
Another possible operation is to allow a subset of
all views to share a cache while the others to
retain their own caches.
<span class="command"><strong>attach-cache</strong></span> option as a view A (or
B)'s option, referring to the other view name:
</p>
+
<pre class="programlisting">
view "A" {
// this view has its own cache
...
};
</pre>
-<p>
+
+ <p>
Views that share a cache must have the same policy
on configurable parameters that may affect caching.
The current implementation requires the following
<span class="command"><strong>min-ncache-ttl</strong></span>,
<span class="command"><strong>zero-no-soa-ttl</strong></span>.
</p>
-<p>
+
+ <p>
Note that there may be other parameters that may
cause confusion if they are inconsistent for
different views that share a single cache.
configuration differences in different views do
not cause disruption with a shared cache.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>directory</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The working directory of the server.
Any non-absolute pathnames in the configuration file will
be taken as relative to this directory. The default
should be an absolute path, and <span class="emphasis"><em>must</em></span>
be writable by the effective user ID of the
<span class="command"><strong>named</strong></span> process.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnstap</strong></span></span></dt>
<dd>
-<p>
+ <p>
<span class="command"><strong>dnstap</strong></span> is a fast, flexible method
for capturing and logging DNS traffic. Developed by
Robert Edmonds at Farsight Security, Inc., and supported
by Google, Inc.; see
<a class="link" href="https://developers.google.com/protocol-buffers/" target="_top">https://developers.google.com/protocol-buffers</a>).
</p>
-<p>
+ <p>
To enable <span class="command"><strong>dnstap</strong></span> at compile time,
the <span class="command"><strong>fstrm</strong></span> and <span class="command"><strong>protobuf-c</strong></span>
libraries must be available, and BIND must be configured with
<code class="option">--enable-dnstap</code>.
</p>
-<p>
+ <p>
The <span class="command"><strong>dnstap</strong></span> option is a bracketed list
of message types to be logged. These may be set differently
for each view. Supported types are <code class="literal">client</code>,
<span class="command"><strong>dnstap</strong></span> messages to be logged, regardless of
type.
</p>
-<p>
+ <p>
Each type may take an additional argument to indicate whether
to log <code class="literal">query</code> messages or
<code class="literal">response</code> messages; if not specified,
both queries and responses are logged.
</p>
-<p>
+ <p>
Example: To log all authoritative queries and responses,
recursive client responses, and upstream queries sent by
the resolver, use:
</pre>
<p>
</p>
-<p>
+ <p>
Logged <span class="command"><strong>dnstap</strong></span> messages can be parsed
using the <span class="command"><strong>dnstap-read</strong></span> utility (see
<a class="xref" href="man.dnstap-read.html" title="dnstap-read"><span class="refentrytitle"><span class="application">dnstap-read</span></span>(1)</a> for details).
</p>
-<p>
+ <p>
For more information on <span class="command"><strong>dnstap</strong></span>, see
<a class="link" href="http://dnstap.info" target="_top">http://dnstap.info</a>.
</p>
-<p>
+ <p>
The fstrm library has a number of tunables that are exposed
in <code class="filename">named.conf</code>, and can be modified
if necessary to improve performance or prevent loss of data.
These are:
</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
+
<span class="command"><strong>fstrm-set-buffer-hint</strong></span>: The
threshold number of bytes to accumulate in the output
buffer before forcing a buffer flush. The minimum is
1024, the maximum is 65536, and the default is 8192.
- </li>
+
+ </li>
<li class="listitem">
+
<span class="command"><strong>fstrm-set-flush-timeout</strong></span>: The number
of seconds to allow unflushed data to remain in the
output buffer. The minimum is 1 second, the maximum is
600 seconds (10 minutes), and the default is 1 second.
- </li>
+
+ </li>
<li class="listitem">
+
<span class="command"><strong>fstrm-set-output-notify-threshold</strong></span>:
The number of outstanding queue entries to allow on
an input queue before waking the I/O thread.
The minimum is 1 and the default is 32.
- </li>
+
+ </li>
<li class="listitem">
+
<span class="command"><strong>fstrm-set-output-queue-model</strong></span>:
Controls the queuing semantics to use for queue
objects. The default is <code class="literal">mpsc</code>
(multiple producer, single consumer); the other
option is <code class="literal">spsc</code> (single producer,
single consumer).
- </li>
+
+ </li>
<li class="listitem">
+
<span class="command"><strong>fstrm-set-input-queue-size</strong></span>: The
number of queue entries to allocate for each
input queue. This value must be a power of 2.
The minimum is 2, the maximum is 16384, and
the default is 512.
- </li>
+
+ </li>
<li class="listitem">
+
<span class="command"><strong>fstrm-set-output-queue-size</strong></span>:
The number of queue entries to allocate for each
output queue. The minimum is 2, the maximum is
system-dependent and based on <code class="option">IOV_MAX</code>,
and the default is 64.
- </li>
+
+ </li>
<li class="listitem">
+
<span class="command"><strong>fstrm-set-reopen-interval</strong></span>:
The number of seconds to wait between attempts to
reopen a closed output stream. The minimum is 1 second,
is 5 seconds. For convenience, TTL-style time unit
suffixes may be used to specify the value. It also
accepts ISO 8601 duration formats.
- </li>
+
+ </li>
</ul></div>
-<p>
+ <p>
Note that all of the above minimum, maximum, and default
values are set by the <span class="command"><strong>libfstrm</strong></span> library,
and may be subject to change in future versions of the
library. See the <span class="command"><strong>libfstrm</strong></span> documentation
for more information.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnstap-output</strong></span></span></dt>
<dd>
-<p>
+ <p>
Configures the path to which the <span class="command"><strong>dnstap</strong></span>
frame stream will be sent if <span class="command"><strong>dnstap</strong></span>
is enabled at compile time and active.
</p>
-<p>
+ <p>
The first argument is either <code class="literal">file</code> or
<code class="literal">unix</code>, indicating whether the destination
is a file or a UNIX domain socket. The second argument
(provided with <span class="command"><strong>libfstrm</strong></span>) is listening on
the socket.)
</p>
-<p>
+ <p>
If the first argument is <code class="literal">file</code>, then
up to three additional options can be added:
<span class="command"><strong>size</strong></span> indicates the size to which a
The default is to allow <span class="command"><strong>dnstap</strong></span> log
files to grow to any size without rolling.
</p>
-<p>
+ <p>
<span class="command"><strong>dnstap-output</strong></span> can only be set globally
in <span class="command"><strong>options</strong></span>. Currently, it can only be
set once while <span class="command"><strong>named</strong></span> is running;
<span class="command"><strong>rndc reload</strong></span> or
<span class="command"><strong>rndc reconfig</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnstap-identity</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies an <span class="command"><strong>identity</strong></span> string to send in
<span class="command"><strong>dnstap</strong></span> messages. If set to
<code class="literal">hostname</code>, which is the default, the
server's hostname will be sent. If set to
<code class="literal">none</code>, no identity string will be sent.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnstap-version</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies a <span class="command"><strong>version</strong></span> string to send in
<span class="command"><strong>dnstap</strong></span> messages. The default is the
version number of the BIND release. If set to
<code class="literal">none</code>, no version string will be sent.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>geoip-directory</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When <span class="command"><strong>named</strong></span> is compiled using the
MaxMind GeoIP2 geolocation API,
this specifies the directory containing GeoIP
directory. See <a class="xref" href="Bv9ARM.ch05.html#acl" title="acl Statement Definition and Usage">the section called “<span class="command"><strong>acl</strong></span> Statement Definition and
Usage”</a> for details about
<span class="command"><strong>geoip</strong></span> ACLs.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>key-directory</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When performing dynamic update of secure zones, the
directory where the public and private DNSSEC key files
should be found, if different than the current working
<code class="filename">bind.keys</code>,
<code class="filename">rndc.key</code> or
<code class="filename">session.key</code>.)
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>lmdb-mapsize</strong></span></span></dt>
<dd>
-<p>
+ <p>
When <span class="command"><strong>named</strong></span> is built with liblmdb,
this option sets a maximum size for the memory map of
the new-zone database (NZD) in LMDB database format.
Note that this is not the NZD database file size, but
the largest size that the database may grow to.
</p>
-<p>
+ <p>
Because the database file is memory mapped, its size is
limited by the address space of the named process. The
default of 32 megabytes was chosen to be usable with
ought to be able to hold configurations of about 100,000
zones.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>managed-keys-directory</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies the directory in which to store the files that
track managed DNSSEC keys (i.e., those configured using
the <span class="command"><strong>initial-key</strong></span> or
<span class="emphasis"><em>must</em></span> be writable by the effective
user ID of the <span class="command"><strong>named</strong></span> process.
</p>
-<p>
+ <p>
If <span class="command"><strong>named</strong></span> is not configured to use views,
then managed keys for the server will be tracked in a single
file called <code class="filename">managed-keys.bind</code>.
followed by the extension
<code class="filename">.mkeys</code>.
</p>
-<p>
+ <p>
(Note: in previous releases, file names for views
always used the SHA256 hash of the view name. To ensure
compatibility after upgrade, if a file using the old
name format is found to exist, it will be used instead
of the new format.)
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-ixfr-ratio</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets the size threshold (expressed as a percentage
of the size of the full zone) beyond which
<span class="command"><strong>named</strong></span> will choose to use an AXFR
response rather than IXFR when answering zone transfer
requests. See <a class="xref" href="Bv9ARM.ch04.html#incremental_zone_transfers" title="Incremental Zone Transfers (IXFR)">the section called “Incremental Zone Transfers (IXFR)”</a>.
</p>
-<p>
+ <p>
The minimum value is <code class="literal">1%</code>. The keyword
<code class="literal">unlimited</code> disables ratio checking and
allows IXFRs of any size. The default is
<code class="literal">100%</code>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>new-zones-directory</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies the directory in which to store the configuration
parameters for zones added via <span class="command"><strong>rndc addzone</strong></span>.
By default, this is the working directory. If set to a relative
path, it will be relative to the working directory. The
directory <span class="emphasis"><em>must</em></span> be writable by the
effective user ID of the <span class="command"><strong>named</strong></span> process.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>qname-minimization</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option controls QNAME minimization behaviour
in the BIND resolver. When set to <span class="command"><strong>strict</strong></span>,
BIND will follow the QNAME minimization algorithm to
QNAME minimization completely. The current default is
<span class="command"><strong>relaxed</strong></span>, but it might be changed to
<span class="command"><strong>strict</strong></span> in a future release.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tkey-gssapi-keytab</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The KRB5 keytab file to use for GSS-TSIG updates. If
this option is set and tkey-gssapi-credential is not
set, then updates will be allowed with any key
matching a principal in the specified keytab.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tkey-gssapi-credential</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The security credential with which the server should
authenticate keys requested by the GSS-TSIG protocol.
Currently only Kerberos 5 authentication is available
To use GSS-TSIG, <span class="command"><strong>tkey-domain</strong></span> must
also be set if a specific keytab is not set with
tkey-gssapi-keytab.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tkey-domain</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The domain appended to the names of all shared keys
generated with <span class="command"><strong>TKEY</strong></span>. When a
client requests a <span class="command"><strong>TKEY</strong></span> exchange,
"_tkey.<code class="varname">domainname</code>". If you are
using GSS-TSIG, this variable must be defined, unless
you specify a specific keytab using tkey-gssapi-keytab.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tkey-dhkey</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The Diffie-Hellman key used by the server
to generate shared keys with clients using the Diffie-Hellman
mode
public and private keys from files in the working directory.
In
most cases, the <code class="varname">key_name</code> should be the server's host name.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>cache-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This is for testing only. Do not use.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dump-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of the file the server dumps
the database to when instructed to do so with
<span class="command"><strong>rndc dumpdb</strong></span>.
If not specified, the default is <code class="filename">named_dump.db</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>memstatistics-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of the file the server writes memory
usage statistics to on exit. If not specified,
the default is <code class="filename">named.memstats</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>lock-file</strong></span></span></dt>
<dd>
-<p>
+ <p>
The pathname of a file on which <span class="command"><strong>named</strong></span> will
attempt to acquire a file lock when starting up for
the first time; if unsuccessful, the server will
server is already running. If not specified, the default is
<code class="filename">none</code>.
</p>
-<p>
+ <p>
Specifying <span class="command"><strong>lock-file none</strong></span> disables the
use of a lock file. <span class="command"><strong>lock-file</strong></span> is
ignored if <span class="command"><strong>named</strong></span> was run using the <code class="option">-X</code>
reconfigured; it is only effective when the server is
first started up.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>pid-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of the file the server writes its process ID
in. If not specified, the default is
<code class="filename">/var/run/named/named.pid</code>.
is a keyword, not a filename, and therefore is not enclosed
in
double quotes.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>recursing-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of the file the server dumps
the queries that are currently recursing when instructed
to do so with <span class="command"><strong>rndc recursing</strong></span>.
If not specified, the default is <code class="filename">named.recursing</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>statistics-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of the file the server appends statistics
to when instructed to do so using <span class="command"><strong>rndc stats</strong></span>.
If not specified, the default is <code class="filename">named.stats</code> in the
server's current directory. The format of the file is
described
in <a class="xref" href="Bv9ARM.ch05.html#statsfile" title="The Statistics File">the section called “The Statistics File”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>bindkeys-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of a file to override the built-in trusted
keys provided by <span class="command"><strong>named</strong></span>.
See the discussion of <span class="command"><strong>dnssec-validation</strong></span>
for details. If not specified, the default is
<code class="filename">/etc/bind.keys</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>secroots-file</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of the file the server dumps
security roots to when instructed to do so with
<span class="command"><strong>rndc secroots</strong></span>.
If not specified, the default is
<code class="filename">named.secroots</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>session-keyfile</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The pathname of the file into which to write a TSIG
session key generated by <span class="command"><strong>named</strong></span> for use by
<span class="command"><strong>nsupdate -l</strong></span>. If not specified, the
<span class="command"><strong>update-policy</strong></span> statement's
<strong class="userinput"><code>local</code></strong> option for more
information about this feature.)
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>session-keyname</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The key name to use for the TSIG session key.
If not specified, the default is "local-ddns".
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>session-keyalg</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The algorithm to use for the TSIG session key.
Valid values are hmac-sha1, hmac-sha224, hmac-sha256,
hmac-sha384, hmac-sha512 and hmac-md5. If not
specified, the default is hmac-sha256.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>port</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The UDP/TCP port number the server uses for
receiving and sending DNS protocol traffic.
The default is 53. This option is mainly intended for server
a server using a port other than 53 will not be able to
communicate with
the global DNS.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dscp</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The global Differentiated Services Code Point (DSCP)
value to classify outgoing DNS traffic on operating
systems that support DSCP. Valid values are 0 through 63.
It is not configured by default.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>random-device</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies a source of entropy to be used by the server.
This is a device or file from which to read entropy.
If it is a file, operations requiring entropy
will fail when the file has been exhausted.
</p>
-<p>
+ <p>
Entropy is needed for cryptographic operations such as
TKEY transactions, dynamic update of signed zones, and
generation of TSIG session keys. It is also used for
randomness such as generation of DNS message transaction
ID's.
</p>
-<p>
+ <p>
If <span class="command"><strong>random-device</strong></span> is not specified, or
if it is set to <code class="literal">none</code>, entropy will be
read from the random number generation function supplied
by the cryptographic library with which BIND was linked
(i.e. OpenSSL or a PKCS#11 provider).
</p>
-<p>
+ <p>
The <span class="command"><strong>random-device</strong></span> option takes
effect during the initial configuration load at server
startup time and is ignored on subsequent reloads.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>preferred-glue</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If specified, the listed type (A or AAAA) will be emitted
before other glue
in the additional section of a query response.
The default is to prefer A records when responding
to queries that arrived via IPv4 and AAAA when
responding to queries that arrived via IPv6.
- </p></dd>
+ </p>
+ </dd>
<dt>
<a name="root_delegation_only"></a><span class="term"><span class="command"><strong>root-delegation-only</strong></span></span>
</dt>
<dd>
-<p>
+ <p>
Turn on enforcement of delegation-only in TLDs
(top level domains) and root zones with an optional
exclude list.
</p>
-<p>
+ <p>
DS queries are expected to be made to and be answered by
delegation only zones. Such queries and responses are
treated as an exception to delegation-only processing
and are not converted to NXDOMAIN responses provided
a CNAME is not discovered at the query name.
</p>
-<p>
+ <p>
If a delegation only zone server also serves a child
zone it is not always possible to determine whether
an answer comes from the delegation only zone or the
all these checks there is still a possibility of
false negatives when a child zone is being served.
</p>
-<p>
+ <p>
Similarly false positives can arise from empty nodes
(no records at the name) in the delegation only zone
when the query type is not ANY.
</p>
-<p>
+ <p>
Note some TLDs are not delegation only (e.g. "DE", "LV",
"US" and "MUSEUM"). This list is not exhaustive.
</p>
+
<pre class="programlisting">
options {
root-delegation-only exclude { "de"; "lv"; "us"; "museum"; };
};
</pre>
-</dd>
+
+ </dd>
<dt><span class="term"><span class="command"><strong>disable-algorithms</strong></span></span></dt>
<dd>
-<p>
+ <p>
Disable the specified DNSSEC algorithms at and below the
specified name.
Multiple <span class="command"><strong>disable-algorithms</strong></span>
Only the best match <span class="command"><strong>disable-algorithms</strong></span>
clause will be used to determine which algorithms are used.
</p>
-<p>
+ <p>
If all supported algorithms are disabled, the zones covered
by the <span class="command"><strong>disable-algorithms</strong></span> will be treated
as insecure.
</p>
-<p>
+ <p>
Configured trust anchors in <span class="command"><strong>trust-anchors</strong></span>
(or <span class="command"><strong>managed-keys</strong></span> or
<span class="command"><strong>trusted-keys</strong></span>, both deprecated)
that match a disabled algorithm will be ignored and treated
as if they were not configured at all.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>disable-ds-digests</strong></span></span></dt>
<dd>
-<p>
+ <p>
Disable the specified DS digest types at and below the
specified name.
Multiple <span class="command"><strong>disable-ds-digests</strong></span>
Only the best match <span class="command"><strong>disable-ds-digests</strong></span>
clause will be used to determine which digest types are used.
</p>
-<p>
+ <p>
If all supported digest types are disabled, the zones covered
by the <span class="command"><strong>disable-ds-digests</strong></span> will be treated
as insecure.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-must-be-secure</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specify hierarchies which must be or may not be secure
(signed and validated). If <strong class="userinput"><code>yes</code></strong>,
then <span class="command"><strong>named</strong></span> will only accept answers if
trust anchor, for instance in a <span class="command"><strong>trust-anchors</strong></span>
statement, or <span class="command"><strong>dnssec-validation auto</strong></span> must
be active.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dns64</strong></span></span></dt>
<dd>
-<p>
+ <p>
This directive instructs <span class="command"><strong>named</strong></span> to
return mapped IPv4 addresses to AAAA queries when
there are no AAAA records. It is intended to be
<span class="command"><strong>dns64</strong></span> defines one DNS64 prefix.
Multiple DNS64 prefixes can be defined.
</p>
-<p>
+ <p>
Compatible IPv6 prefixes have lengths of 32, 40, 48, 56,
64 and 96 as per RFC 6052. Bits 64..71 inclusive must
be zero with the most significate bit of the prefix in
position 0.
</p>
-<p>
+ <p>
Additionally a reverse IP6.ARPA zone will be created for
the prefix to provide a mapping from the IP6.ARPA names
to the corresponding IN-ADDR.ARPA names using synthesized
are settable at the view / options level. These are
not settable on a per-prefix basis.
</p>
-<p>
+ <p>
Each <span class="command"><strong>dns64</strong></span> supports an optional
<span class="command"><strong>clients</strong></span> ACL that determines which
clients are affected by this directive. If not defined,
it defaults to <strong class="userinput"><code>any;</code></strong>.
</p>
-<p>
+ <p>
Each <span class="command"><strong>dns64</strong></span> supports an optional
<span class="command"><strong>mapped</strong></span> ACL that selects which
IPv4 addresses are to be mapped in the corresponding
A RRset. If not defined it defaults to
<strong class="userinput"><code>any;</code></strong>.
</p>
-<p>
+ <p>
Normally, DNS64 won't apply to a domain name that
owns one or more AAAA records; these records will
simply be returned. The optional
name owns. If not defined, <span class="command"><strong>exclude</strong></span>
defaults to ::ffff:0.0.0.0/96.
</p>
-<p>
+ <p>
A optional <span class="command"><strong>suffix</strong></span> can also
be defined to set the bits trailing the mapped
IPv4 address bits. By default these bits are
matching the prefix and mapped IPv4 address
must be zero.
</p>
-<p>
+ <p>
If <span class="command"><strong>recursive-only</strong></span> is set to
<span class="command"><strong>yes</strong></span> the DNS64 synthesis will
only happen for recursive queries. The default
is <span class="command"><strong>no</strong></span>.
</p>
-<p>
+ <p>
If <span class="command"><strong>break-dnssec</strong></span> is set to
<span class="command"><strong>yes</strong></span> the DNS64 synthesis will
happen even if the result, if validated, would
suffix ::;
};
</pre>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-loadkeys-interval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When a zone is configured with <span class="command"><strong>auto-dnssec
maintain;</strong></span> its key repository must be checked
periodically to see if any new keys have been added
the minimum is <code class="literal">1</code> (1 minute), and the
maximum is <code class="literal">1440</code> (24 hours); any higher
value is silently reduced.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-update-mode</strong></span></span></dt>
<dd>
-<p>
+ <p>
If this option is set to its default value of
<code class="literal">maintain</code> in a zone of type
<code class="literal">master</code> which is DNSSEC-signed
by regenerating RRSIG records whenever they approach
their expiration date.
</p>
-<p>
+ <p>
If the option is changed to <code class="literal">no-resign</code>,
then <span class="command"><strong>named</strong></span> will sign all new or
changed records, but scheduled maintenance of
signatures is disabled.
</p>
-<p>
+ <p>
With either of these settings, <span class="command"><strong>named</strong></span>
will reject updates to a DNSSEC-signed zone when the
signing keys are inactive or unavailable to
signing and allow DNSSEC data to be submitted into a zone
via dynamic update; this is not yet implemented.)
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>nta-lifetime</strong></span></span></dt>
<dd>
-<p>
+ <p>
Species the default lifetime, in seconds,
that will be used for negative trust anchors added
via <span class="command"><strong>rndc nta</strong></span>.
</p>
-<p>
+ <p>
A negative trust anchor selectively disables
DNSSEC validation for zones that are known to be
failing because of misconfiguration rather than
NTA's lifetime is elapsed. NTAs persist
across <span class="command"><strong>named</strong></span> restarts.
</p>
-<p>
+ <p>
For convenience, TTL-style time unit suffixes can be
used to specify the NTA lifetime in seconds, minutes
or hours. It also accepts ISO 8601 duration formats.
</p>
-<p>
+ <p>
<code class="option">nta-lifetime</code> defaults to one hour. It
cannot exceed one week.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>nta-recheck</strong></span></span></dt>
<dd>
-<p>
+ <p>
Species how often to check whether negative
trust anchors added via <span class="command"><strong>rndc nta</strong></span>
are still necessary.
</p>
-<p>
+ <p>
A negative trust anchor is normally used when a
domain has stopped validating due to operator error;
it temporarily disables DNSSEC validation for that
to find out whether it can now be validated. If so,
the negative trust anchor is allowed to expire early.
</p>
-<p>
+ <p>
Validity checks can be disabled for an individual
NTA by using <span class="command"><strong>rndc nta -f</strong></span>, or
for all NTAs by setting <code class="option">nta-recheck</code>
to zero.
</p>
-<p>
+ <p>
For convenience, TTL-style time unit suffixes can be
used to specify the NTA recheck interval in seconds,
minutes or hours. It also accepts ISO 8601 duration
formats.
</p>
-<p>
+ <p>
The default is five minutes. It cannot be longer than
<code class="option">nta-lifetime</code> (which cannot be longer
than a week).
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-zone-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies a maximum permissible TTL value in seconds.
For convenience, TTL-style time unit suffixes may be
used to specify the maximum value. It also
accepts ISO 8601 duration formats.
</p>
-<p>
+ <p>
When loading a zone file using a
<code class="option">masterfile-format</code> of
<code class="constant">text</code> or <code class="constant">raw</code>,
<code class="option">max-zone-ttl</code> will cause the zone to
be rejected.
</p>
-<p>
+ <p>
This is useful in DNSSEC-signed zones because when
rolling to a new DNSKEY, the old key needs to remain
available until RRSIG records have expired from
that the largest TTL in the zone will be no higher
than the set value.
</p>
-<p>
+ <p>
(NOTE: Because <code class="constant">map</code>-format files
load directly into memory, this option cannot be
used with them.)
</p>
-<p>
+ <p>
The default value is <code class="constant">unlimited</code>.
A <code class="option">max-zone-ttl</code> of zero is treated as
<code class="constant">unlimited</code>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>stale-answer-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies the TTL to be returned on stale answers.
The default is 1 second. The minimum allowed is
also 1 second; a value of 0 will be updated silently
to 1 second.
</p>
-<p>
+ <p>
For stale answers to be returned, they must be enabled,
either in the configuration file using
<span class="command"><strong>stale-answer-enable</strong></span> or via
<span class="command"><strong>rndc serve-stale on</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>serial-update-method</strong></span></span></dt>
<dd>
-<p>
+ <p>
Zones configured for dynamic DNS may use this
option to set the update method that will be used for
the zone serial number in the SOA record.
</p>
-<p>
+ <p>
With the default setting of
<span class="command"><strong>serial-update-method increment;</strong></span>, the
SOA serial number will be incremented by one each time
the zone is updated.
</p>
-<p>
+ <p>
When set to
<span class="command"><strong>serial-update-method unixtime;</strong></span>, the
SOA serial number will be set to the number of seconds
already greater than or equal to that value, in which
case it is simply incremented by one.
</p>
-<p>
+ <p>
When set to
<span class="command"><strong>serial-update-method date;</strong></span>, the
new SOA serial number will be the current date
than or equal to that value, in which case it is
incremented by one.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>zone-statistics</strong></span></span></dt>
<dd>
-<p>
+ <p>
If <strong class="userinput"><code>full</code></strong>, the server will collect
statistical data on all zones (unless specifically
turned off on a per-zone basis by specifying
current serial number, but not query type
counters).
</p>
-<p>
+ <p>
These statistics may be accessed via the
<span class="command"><strong>statistics-channel</strong></span> or
using <span class="command"><strong>rndc stats</strong></span>, which
in the <span class="command"><strong>statistics-file</strong></span>. See
also <a class="xref" href="Bv9ARM.ch05.html#statsfile" title="The Statistics File">the section called “The Statistics File”</a>.
</p>
-<p>
+ <p>
For backward compatibility with earlier versions
of BIND 9, the <span class="command"><strong>zone-statistics</strong></span>
option can also accept <strong class="userinput"><code>yes</code></strong>
as <strong class="userinput"><code>none</code></strong>; previously, it
was the same as <strong class="userinput"><code>terse</code></strong>.
</p>
-</dd>
+ </dd>
</dl></div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boolean_options"></a>Boolean Options</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>automatic-interface-scan</strong></span></span></dt>
<dd>
-<p>
+ <p>
If <strong class="userinput"><code>yes</code></strong> and supported by the operating
system, automatically rescan network interfaces when the
interface addresses are added or removed. The default is
confirms that automatic interface scanning is supported by the
operating system.
</p>
-<p>
+ <p>
The <span class="command"><strong>automatic-interface-scan</strong></span> implementation
uses routing sockets for the network interface discovery,
and therefore the operating system has to support the routing
sockets for this feature to work.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-new-zones</strong></span></span></dt>
<dd>
-<p>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, then zones can be
added at runtime via <span class="command"><strong>rndc addzone</strong></span>.
The default is <strong class="userinput"><code>no</code></strong>.
</p>
-<p>
+ <p>
Newly added zones' configuration parameters
are stored so that they can persist after the
server is restarted. The configuration information
incompatible with use as a file name, in which case a
cryptographic hash of the view name is used instead.
</p>
-<p>
+ <p>
Zones added at runtime will have their configuration
stored either in a new-zone file (NZF) or a new-zone
database (NZD) depending on whether
See <a class="xref" href="man.rndc.html" title="rndc"><span class="refentrytitle"><span class="application">rndc</span></span>(8)</a> for further details
about <span class="command"><strong>rndc addzone</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>auth-nxdomain</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, then the
<span class="command"><strong>AA</strong></span> bit is always set on NXDOMAIN
responses, even if the server is not actually
authoritative. The default is <strong class="userinput"><code>no</code></strong>.
If you are using very old DNS software, you
may need to set it to <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>deallocate-on-exit</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option was used in <acronym class="acronym">BIND</acronym>
8 to enable checking
for memory leaks on exit. <acronym class="acronym">BIND</acronym> 9 ignores the option and always performs
the checks.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>memstatistics</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Write memory statistics to the file specified by
<span class="command"><strong>memstatistics-file</strong></span> at exit.
The default is <strong class="userinput"><code>no</code></strong> unless
'-m record' is specified on the command line in
which case it is <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dialup</strong></span></span></dt>
<dd>
-<p>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, then the
server treats all zones as if they are doing zone transfers
across
the normal
zone maintenance traffic. The default is <strong class="userinput"><code>no</code></strong>.
</p>
-<p>
+ <p>
The <span class="command"><strong>dialup</strong></span> option
may also be specified in the <span class="command"><strong>view</strong></span> and
<span class="command"><strong>zone</strong></span> statements,
in which case it overrides the global <span class="command"><strong>dialup</strong></span>
option.
</p>
-<p>
+ <p>
If the zone is a master zone, then the server will send out a
NOTIFY
request to all the slaves (default). This should trigger the
by
<span class="command"><strong>notify</strong></span> and <span class="command"><strong>also-notify</strong></span>.
</p>
-<p>
+ <p>
If the
zone is a slave or stub zone, then the server will suppress
the regular
addition to sending
NOTIFY requests.
</p>
-<p>
+ <p>
Finer control can be achieved by using
<strong class="userinput"><code>notify</code></strong> which only sends NOTIFY
messages,
refresh
processing.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.150in" class="1">
<col width="1.150in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+
+ <p>
Note that normal NOTIFY processing is not affected by
<span class="command"><strong>dialup</strong></span>.
</p>
-</dd>
+
+ </dd>
<dt><span class="term"><span class="command"><strong>flush-zones-on-shutdown</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When the nameserver exits due receiving SIGTERM,
flush or do not flush any pending zone writes. The default
is
<span class="command"><strong>flush-zones-on-shutdown</strong></span> <strong class="userinput"><code>no</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>geoip-use-ecs</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option was part of an experimental implementation
of the EDNS CLIENT-SUBNET for authoritative servers,
but is now obsolete.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>root-key-sentinel</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Respond to root key sentinel probes as described in
draft-ietf-dnsop-kskroll-sentinel-08. The default is
<strong class="userinput"><code>yes</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>message-compression</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, DNS name compression is
used in responses to regular queries (not including
AXFR or IXFR, which always uses compression). Setting
to be processed using TCP; a server with compression
disabled is out of compliance with RFC 1123 Section
6.1.3.2. The default is <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>minimal-responses</strong></span></span></dt>
<dd>
-<p>
+ <p>
This option controls the addition of records to the
authority and additional sections of responses. Such
records may be included in responses to be helpful
<span class="command"><strong>minimal-responses</strong></span> takes one of
four values:
</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
-<strong class="userinput"><code>no</code></strong>: the server will be
+ <strong class="userinput"><code>no</code></strong>: the server will be
as complete as possible when generating responses.
</li>
<li class="listitem">
-<strong class="userinput"><code>yes</code></strong>: the server will only add
+ <strong class="userinput"><code>yes</code></strong>: the server will only add
records to the authority and additional sections when
such records are required by the DNS protocol (for
example, when returning delegations or negative
but may result in more client queries.
</li>
<li class="listitem">
-<strong class="userinput"><code>no-auth</code></strong>: the server
+ <strong class="userinput"><code>no-auth</code></strong>: the server
will omit records from the authority section except
when they are required, but it may still add records
to the additional section.
</li>
<li class="listitem">
-<strong class="userinput"><code>no-auth-recursive</code></strong>: the same
+ <strong class="userinput"><code>no-auth-recursive</code></strong>: the same
as <strong class="userinput"><code>no-auth</code></strong> when recursion is
requested in the query (RD=1), or the same as
<strong class="userinput"><code>no</code></strong> if recursion is not
requested.
</li>
</ul></div>
-<p>
+ <p>
<strong class="userinput"><code>no-auth</code></strong> and
<strong class="userinput"><code>no-auth-recursive</code></strong> are useful when
answering stub clients, which usually ignore the
is meant for use in mixed-mode servers that handle both
authoritative and recursive queries.
</p>
-<p>
+ <p>
The default is <strong class="userinput"><code>no-auth-recursive</code></strong>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>glue-cache</strong></span></span></dt>
<dd>
-<p>
+ <p>
When set to <strong class="userinput"><code>yes</code></strong>, a cache is
used to improve query performance when adding
address-type (A and AAAA) glue records to the
additional section of DNS response messages that
delegate to a child zone.
</p>
-<p>
+ <p>
The glue cache uses memory proportional to the number
of delegations in the zone. The default setting is
<strong class="userinput"><code>yes</code></strong>, which improves performance
at the cost of increased memory usage for the zone. If
you don't want this, set it to <strong class="userinput"><code>no</code></strong>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>minimal-any</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If set to <strong class="userinput"><code>yes</code></strong>, then when
generating a positive response to a query of type
ANY over UDP, the server will reply with only one
turned on for these queries, so no unnecessary records
will be added to the authority or additional sections.
The default is <strong class="userinput"><code>no</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify</strong></span></span></dt>
<dd>
-<p>
+ <p>
If <strong class="userinput"><code>yes</code></strong> (the default),
DNS NOTIFY messages are sent when a zone the server is
authoritative for
in the SOA MNAME field), and to any servers listed in the
<span class="command"><strong>also-notify</strong></span> option.
</p>
-<p>
+ <p>
If <strong class="userinput"><code>master-only</code></strong>, notifies are only
sent
for master zones.
servers explicitly listed using <span class="command"><strong>also-notify</strong></span>.
If <strong class="userinput"><code>no</code></strong>, no notifies are sent.
</p>
-<p>
+ <p>
The <span class="command"><strong>notify</strong></span> option may also be
specified in the <span class="command"><strong>zone</strong></span>
statement,
caused slaves
to crash.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-to-soa</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <strong class="userinput"><code>yes</code></strong> do not check the nameservers
in the NS RRset against the SOA MNAME. Normally a NOTIFY
message is not sent to the SOA MNAME (SOA ORIGIN) as it is
hidden master configurations and in that case you would
want the ultimate master to still send NOTIFY messages to
all the nameservers listed in the NS RRset.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>recursion</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, and a
DNS query requests recursion, then the server will attempt
to do
queries.
Caching may still occur as an effect the server's internal
operation, such as NOTIFY address lookups.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>request-nsid</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, then an empty EDNS(0)
NSID (Name Server Identifier) option is sent with all
queries to authoritative name servers during iterative
the <span class="command"><strong>nsid</strong></span> category at level
<span class="command"><strong>info</strong></span>.
The default is <strong class="userinput"><code>no</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>request-sit</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This experimental option is obsolete.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>require-server-cookie</strong></span></span></dt>
<dd>
-<p>
+ <p>
Require a valid server cookie before sending a full
response to a UDP request from a cookie aware client.
BADCOOKIE is sent if there is a bad or no existent
server cookie.
The default is <strong class="userinput"><code>no</code></strong>.
</p>
-<p>
+ <p>
Set this to <strong class="userinput"><code>yes</code></strong> to test that DNS
COOKIE clients correctly handle BADCOOKIE or if you are
getting a lot of forged DNS requests with DNS COOKIES
a full response, while also requiring a legitimate client
to follow up with a second query with the new, valid, cookie.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>answer-cookie</strong></span></span></dt>
<dd>
-<p>
+ <p>
When set to the default value of <strong class="userinput"><code>yes</code></strong>,
COOKIE EDNS options will be sent when applicable in
replies to client queries. If set to
be sent in replies. This can only be set at the global
options level, not per-view.
</p>
-<p>
+ <p>
<span class="command"><strong>answer-cookie no</strong></span> is intended as a
temporary measure, for use when <span class="command"><strong>named</strong></span>
shares an IP address with other servers that do not yet
caution. DNS COOKIE is an important security mechanism,
and should not be disabled unless absolutely necessary.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>send-cookie</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, then a COOKIE EDNS
option is sent along with the query. If the
resolver has previously talked to the server, the
to receiving smaller responses via the
<span class="command"><strong>nocookie-udp-size</strong></span> option.
The default is <strong class="userinput"><code>yes</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>stale-answer-enable</strong></span></span></dt>
<dd>
-<p>
+ <p>
Enable the returning of "stale" cached answers when
the nameservers for a zone are not answering. The
default is not to return stale answers.
</p>
-<p>
+ <p>
Stale answers can also be enabled or disabled at
runtime via <span class="command"><strong>rndc serve-stale on</strong></span> or
<span class="command"><strong>rndc serve-stale off</strong></span>; these
<span class="command"><strong>rndc serve-stale on</strong></span>,
or the server must be restarted.
</p>
-<p>
+ <p>
Information about stale answers is logged under
the <span class="command"><strong>serve-stale</strong></span> log category.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>nocookie-udp-size</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Sets the maximum size of UDP responses that will be
sent to queries without a valid server COOKIE. A value
below 128 will be silently raised to 128. The default
value is 4096, but the <span class="command"><strong>max-udp-size</strong></span>
option may further limit the response size.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sit-secret</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This experimental option is obsolete.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>cookie-algorithm</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Set the algorithm to be used when generating the
server cookie. One of "aes", "sha1" or "sha256".
The default is "aes" if supported by the cryptographic
library or otherwise "sha256".
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>cookie-secret</strong></span></span></dt>
<dd>
-<p>
+ <p>
If set, this is a shared secret used for generating
and verifying EDNS COOKIE options
within an anycast cluster. If not set, the system
to be 128 bits for AES128, 160 bits for SHA1 and
256 bits for SHA256.
</p>
-<p>
+ <p>
If there are multiple secrets specified, the first
one listed in <code class="filename">named.conf</code> is
used to generate new server cookies. The others
will only be used to verify returned cookies.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>response-padding</strong></span></span></dt>
<dd>
-<p>
+ <p>
The EDNS Padding option is intended to improve
confidentiality when DNS queries are sent over an
encrypted channel by reducing the variability in
If these conditions are not met, the response is not
padded.
</p>
-<p>
+ <p>
If <code class="varname">block-size</code> is 0 or the ACL is
<span class="command"><strong>none;</strong></span>, then this feature is
disabled and no padding will occur; this is the
to 512. Block sizes are ordinarily expected to be powers
of two (for instance, 128), but this is not mandatory.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>trust-anchor-telemetry</strong></span></span></dt>
<dd>
-<p>
+ <p>
Causes <span class="command"><strong>named</strong></span> to send specially-formed
queries once per day to domains for which trust anchors
have been configured via, e.g.,
<span class="command"><strong>trust-anchors</strong></span> or
<span class="command"><strong>dnssec-validation auto</strong></span>.
</p>
-<p>
+ <p>
The query name used for these queries has the
form "_ta-xxxx(-xxxx)(...)".<domain>, where
each "xxxx" is a group of four hexadecimal digits
The key IDs for each domain are sorted smallest
to largest prior to encoding. The query type is NULL.
</p>
-<p>
+ <p>
By monitoring these queries, zone operators will
be able to see which resolvers have been updated to
trust a new key; this may help them decide when it
is safe to remove an old one.
</p>
-<p>
+ <p>
The default is <strong class="userinput"><code>yes</code></strong>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>use-ixfr</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
<span class="emphasis"><em>This option is obsolete</em></span>.
If you need to disable IXFR to a particular server or
servers, see
Usage”</a>.
See also
<a class="xref" href="Bv9ARM.ch04.html#incremental_zone_transfers" title="Incremental Zone Transfers (IXFR)">the section called “Incremental Zone Transfers (IXFR)”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>provide-ixfr</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>provide-ixfr</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#server_statement_definition_and_usage" title="server Statement Definition and Usage">the section called “<span class="command"><strong>server</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>request-ixfr</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>request-ixfr</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#server_statement_definition_and_usage" title="server Statement Definition and Usage">the section called “<span class="command"><strong>server</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>request-expire</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>request-expire</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#server_statement_definition_and_usage" title="server Statement Definition and Usage">the section called “<span class="command"><strong>server</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>match-mapped-addresses</strong></span></span></dt>
<dd>
-<p>
+ <p>
If <strong class="userinput"><code>yes</code></strong>, then an
IPv4-mapped IPv6 address will match any address match
list entries that match the corresponding IPv4 address.
</p>
-<p>
+ <p>
This option was introduced to work around a kernel quirk
in some operating systems that causes IPv4 TCP
connections, such as zone transfers, to be accepted on an
<span class="command"><strong>named</strong></span> now solves this problem
internally. The use of this option is discouraged.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>ixfr-from-differences</strong></span></span></dt>
<dd>
-<p>
+ <p>
When <strong class="userinput"><code>yes</code></strong> and the server loads a new
version of a master zone from its zone file or receives a
new version of a slave file via zone transfer, it will
transmitted to downstream slaves as an incremental zone
transfer.
</p>
-<p>
+ <p>
By allowing incremental zone transfers to be used for
non-dynamic zones, this option saves bandwidth at the
expense of increased CPU and memory consumption at the
temporarily allocate memory to hold this complete
difference set.
</p>
-<p><span class="command"><strong>ixfr-from-differences</strong></span>
+ <p><span class="command"><strong>ixfr-from-differences</strong></span>
also accepts <span class="command"><strong>master</strong></span> (or
<span class="command"><strong>primary</strong></span>) and
<span class="command"><strong>slave</strong></span> (or <span class="command"><strong>secondary</strong></span>)
all primary or secondary zones, respectively.
It is off for all zones by default.
</p>
-<p>
+ <p>
Note: if inline signing is enabled for a zone, the
user-provided <span class="command"><strong>ixfr-from-differences</strong></span>
setting is ignored for that zone.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>multi-master</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This should be set when you have multiple masters for a zone
and the
addresses refer to different machines. If <strong class="userinput"><code>yes</code></strong>, <span class="command"><strong>named</strong></span> will
when the serial number on the master is less than what <span class="command"><strong>named</strong></span>
currently
has. The default is <strong class="userinput"><code>no</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>auto-dnssec</strong></span></span></dt>
<dd>
-<p>
+ <p>
Zones configured for dynamic DNS may use this
option to allow varying levels of automatic DNSSEC key
management. There are three possible settings:
</p>
-<p>
+ <p>
<span class="command"><strong>auto-dnssec allow;</strong></span> permits
keys to be updated and the zone fully re-signed
whenever the user issues the command <span class="command"><strong>rndc sign
<em class="replaceable"><code>zonename</code></em></strong></span>.
</p>
-<p>
+ <p>
<span class="command"><strong>auto-dnssec maintain;</strong></span> includes the
above, but also automatically adjusts the zone's DNSSEC
keys on schedule, according to the keys' timing metadata
interval is defined by
<span class="command"><strong>dnssec-loadkeys-interval</strong></span>.)
</p>
-<p>
+ <p>
The default setting is <span class="command"><strong>auto-dnssec off</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-enable</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is obsolete and has no effect.
- </p></dd>
+ </p>
+ </dd>
<dt>
<a name="dnssec_validation"></a><span class="term"><a name="dnssec_validation_term"></a><span class="command"><strong>dnssec-validation</strong></span></span>
</dt>
<dd>
-<p>
+ <p>
This option enables DNSSEC validation in
<span class="command"><strong>named</strong></span>.
</p>
-<p>
+ <p>
If set to <strong class="userinput"><code>auto</code></strong>,
DNSSEC validation is enabled, and a default trust anchor
for the DNS root zone is used.
</p>
-<p>
+ <p>
If set to <strong class="userinput"><code>yes</code></strong>, DNSSEC validation is
enabled, but a trust anchor must be manually configured
using a <span class="command"><strong>trust-anchors</strong></span> statement (or
If there is no configured trust anchor, validation will
not take place.
</p>
-<p>
+ <p>
If set to <strong class="userinput"><code>no</code></strong>, DNSSEC validation
is disabled.
</p>
-<p>
+ <p>
The default is <strong class="userinput"><code>auto</code></strong>, unless
BIND is built with
<span class="command"><strong>configure --disable-auto-validation</strong></span>,
in which case the default is <strong class="userinput"><code>yes</code></strong>.
</p>
-<p>
+ <p>
The default root trust anchor is stored in the file
<code class="filename">bind.keys</code>.
<span class="command"><strong>named</strong></span> will load that key at
<code class="filename">bind.keys</code> can be downloaded
from <a class="link" href="https://www.isc.org/bind-keys" target="_top">https://www.isc.org/bind-keys</a>.
</p>
-<p>
+ <p>
(To prevent problems if <code class="filename">bind.keys</code> is
not found, the current trust anchor is also compiled in
to <span class="command"><strong>named</strong></span>. Relying on this is not
recommended, however, as it requires <span class="command"><strong>named</strong></span>
to be recompiled with a new key when the root key expires.)
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
<span class="command"><strong>named</strong></span> loads <span class="emphasis"><em>only</em></span>
the root key from <code class="filename">bind.keys</code>.
The file cannot be used to store keys for other zones.
if <span class="command"><strong>dnssec-validation auto</strong></span> is not in
use.
</p>
-<p>
+ <p>
Whenever the resolver sends out queries to an
EDNS-compliant server, it always sets the DO bit
indicating it can support DNSSEC responses even if
<span class="command"><strong>dnssec-validation</strong></span> is off.
</p>
-</div>
-</dd>
+ </div>
+ </dd>
<dt><span class="term"><span class="command"><strong>validate-except</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies a list of domain names at and beneath which DNSSEC
validation should <span class="emphasis"><em>not</em></span> be performed,
regardless of the presence of a trust anchor at or above
to setting a negative trust anchor, except that it is a
permanent configuration, whereas negative trust anchors
expire and are removed after a set period of time.)
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-accept-expired</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Accept expired signatures when verifying DNSSEC signatures.
The default is <strong class="userinput"><code>no</code></strong>.
Setting this option to <strong class="userinput"><code>yes</code></strong>
leaves <span class="command"><strong>named</strong></span> vulnerable to
replay attacks.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>querylog</strong></span></span></dt>
<dd>
-<p>
+ <p>
Query logging provides a complete log of all incoming
queries and all query errors. This provides more insight
into the server's activity, but with a cost to
performance which may be significant on heavily-loaded
servers.
</p>
-<p>
+ <p>
The <span class="command"><strong>querylog</strong></span> option specifies
whether query logging should be active when
<span class="command"><strong>named</strong></span> first starts.
command <span class="command"><strong>rndc querylog on</strong></span>, or
deactivated with <span class="command"><strong>rndc querylog off</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-names</strong></span></span></dt>
<dd>
-<p>
+ <p>
This option is used to restrict the character set and syntax
of
certain domain names in master files and/or DNS responses
For answers received from the network (<span class="command"><strong>response</strong></span>)
the default is <span class="command"><strong>ignore</strong></span>.
</p>
-<p>
+ <p>
The rules for legal hostnames and mail domains are derived
from RFC 952 and RFC 821 as modified by RFC 1123.
</p>
-<p><span class="command"><strong>check-names</strong></span>
+ <p><span class="command"><strong>check-names</strong></span>
applies to the owner names of A, AAAA and MX records.
It also applies to the domain names in the RDATA of NS, SOA,
MX, and SRV records.
name indicated that it is a reverse lookup of a hostname
(the owner name ends in IN-ADDR.ARPA, IP6.ARPA, or IP6.INT).
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-dup-records</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Check master zones for records that are treated as different
by DNSSEC but are semantically equal in plain DNS. The
default is to <span class="command"><strong>warn</strong></span>. Other possible
values are <span class="command"><strong>fail</strong></span> and
<span class="command"><strong>ignore</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-mx</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Check whether the MX record appears to refer to a IP address.
The default is to <span class="command"><strong>warn</strong></span>. Other possible
values are <span class="command"><strong>fail</strong></span> and
<span class="command"><strong>ignore</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-wildcard</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is used to check for non-terminal wildcards.
The use of non-terminal wildcards is almost always as a
result of a failure
This option
affects master zones. The default (<span class="command"><strong>yes</strong></span>) is to check
for non-terminal wildcards and issue a warning.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-integrity</strong></span></span></dt>
<dd>
-<p>
+ <p>
Perform post load zone integrity checks on master
zones. This checks that MX and SRV records refer
to address (A or AAAA) records and that glue
checks use <span class="command"><strong>named-checkzone</strong></span>).
The default is <span class="command"><strong>yes</strong></span>.
</p>
-<p>
+ <p>
The use of the SPF record for publishing Sender
Policy Framework is deprecated as the migration
from using TXT records to SPF records was abandoned.
TXT record does not exist and can be suppressed with
<span class="command"><strong>check-spf</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-mx-cname</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <span class="command"><strong>check-integrity</strong></span> is set then
fail, warn or ignore MX records that refer
to CNAMES. The default is to <span class="command"><strong>warn</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-srv-cname</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <span class="command"><strong>check-integrity</strong></span> is set then
fail, warn or ignore SRV records that refer
to CNAMES. The default is to <span class="command"><strong>warn</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-sibling</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When performing integrity checks, also check that
sibling glue exists. The default is <span class="command"><strong>yes</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-spf</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <span class="command"><strong>check-integrity</strong></span> is set then
check that there is a TXT Sender Policy Framework
record present (starts with "v=spf1") if there is an
SPF record present. The default is
<span class="command"><strong>warn</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>zero-no-soa-ttl</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When returning authoritative negative responses to
SOA queries set the TTL of the SOA record returned in
the authority section to zero.
The default is <span class="command"><strong>yes</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>zero-no-soa-ttl-cache</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When caching a negative response to a SOA query
set the TTL to zero.
The default is <span class="command"><strong>no</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>update-check-ksk</strong></span></span></dt>
<dd>
-<p>
+ <p>
When set to the default value of <code class="literal">yes</code>,
check the KSK bit in each key to determine how the key
should be used when generating RRSIGs for a secure zone.
</p>
-<p>
+ <p>
Ordinarily, zone-signing keys (that is, keys without the
KSK bit set) are used to sign the entire zone, while
key-signing keys (keys with the KSK bit set) are only
similar to the <span class="command"><strong>dnssec-signzone -z</strong></span>
command line option.
</p>
-<p>
+ <p>
When this option is set to <code class="literal">yes</code>, there
must be at least two active keys for every algorithm
represented in the DNSKEY RRset: at least one KSK and one
this requirement is not met, this option will be ignored
for that algorithm.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-dnskey-kskonly</strong></span></span></dt>
<dd>
-<p>
+ <p>
When this option and <span class="command"><strong>update-check-ksk</strong></span>
are both set to <code class="literal">yes</code>, only key-signing
keys (that is, keys with the KSK bit set) will be used
This is similar to the
<span class="command"><strong>dnssec-signzone -x</strong></span> command line option.
</p>
-<p>
+ <p>
The default is <span class="command"><strong>no</strong></span>. If
<span class="command"><strong>update-check-ksk</strong></span> is set to
<code class="literal">no</code>, this option is ignored.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>try-tcp-refresh</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Try to refresh the zone using TCP if UDP queries fail.
The default is <span class="command"><strong>yes</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-secure-to-insecure</strong></span></span></dt>
<dd>
-<p>
+ <p>
Allow a dynamic zone to transition from secure to
insecure (i.e., signed to unsigned) by deleting all
of the DNSKEY records. The default is <span class="command"><strong>no</strong></span>.
at the zone apex is deleted, all RRSIG and NSEC records
will be removed from the zone as well.
</p>
-<p>
+ <p>
If the zone uses NSEC3, then it is also necessary to
delete the NSEC3PARAM RRset from the zone apex; this will
cause the removal of all corresponding NSEC3 records.
(It is expected that this requirement will be eliminated
in a future release.)
</p>
-<p>
+ <p>
Note that if a zone has been configured with
<span class="command"><strong>auto-dnssec maintain</strong></span> and the
private keys remain accessible in the key repository,
then the zone will be automatically signed again the
next time <span class="command"><strong>named</strong></span> is started.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>synth-from-dnssec</strong></span></span></dt>
<dd>
-<p>
+ <p>
Synthesize answers from cached NSEC, NSEC3 and
other RRsets that have been proved to be correct
using DNSSEC. The default is <span class="command"><strong>no</strong></span>,
but it will become <span class="command"><strong>yes</strong></span> again
in the future releases.
</p>
-<p>
+ <p>
Note:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
-<p>
+ <p>
DNSSEC validation must be enabled for this
option to be effective.
</p>
-<p>
+ <p>
This initial implementation only covers synthesis
of answers from NSEC records. Synthesis from NSEC3
is planned for the future. This will also be
controlled by <span class="command"><strong>synth-from-dnssec</strong></span>.
</p>
-</li></ul></div>
+ </li></ul></div>
<p>
</p>
-</dd>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="forwarding"></a>Forwarding</h4></div></div></div>
-<p>
+
+ <p>
The forwarding facility can be used to create a large site-wide
cache on a few servers, reducing traffic over links to external
name servers. It can also be used to allow queries by servers that
the server is not authoritative and does not have the answer in
its cache.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>forward</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is only meaningful if the
forwarders list is not empty. A value of <code class="varname">first</code>,
the default, causes the server to query the forwarders
the answer itself. If <code class="varname">only</code> is
specified, the
server will only query the forwarders.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>forwarders</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies a list of IP addresses to which queries shall be
forwarded. The default is the empty list (no forwarding).
Each address in the list can be associated with an optional
port number and/or DSCP value, and a default port number and
DSCP value can be set for the entire list.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-<p>
+
+ <p>
Forwarding can also be configured on a per-domain basis, allowing
for the global forwarding options to be overridden in a variety
of ways. You can set particular domains to use different
or not forward at all, see <a class="xref" href="Bv9ARM.ch05.html#zone_statement_grammar" title="zone Statement Grammar">the section called “<span class="command"><strong>zone</strong></span>
Statement Grammar”</a>.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="dual_stack"></a>Dual-stack Servers</h4></div></div></div>
-<p>
+
+ <p>
Dual-stack servers are used as servers of last resort to work
around
problems in reachability due the lack of support for either IPv4
or IPv6
on the host machine.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>dual-stack-servers</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies host names or addresses of machines with access to
both IPv4 and IPv6 transports. If a hostname is used, the
server must be able
stacked, then the <span class="command"><strong>dual-stack-servers</strong></span> have no effect unless
access to a transport has been disabled on the command line
(e.g. <span class="command"><strong>named -4</strong></span>).
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="access_control"></a>Access Control</h4></div></div></div>
-<p>
+
+
+ <p>
Access to the server can be restricted based on the IP address
of the requesting system. See <a class="xref" href="Bv9ARM.ch05.html#address_match_lists" title="Address Match Lists">the section called “Address Match Lists”</a> for
details on how to specify IP address lists.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>allow-notify</strong></span></span></dt>
<dd>
-<p>
+ <p>
This ACL specifies which hosts may send NOTIFY messages
to inform this server of changes to zones for which it
is acting as a secondary server. This is only
applicable for secondary zones (i.e., type
<code class="literal">secondary</code> or <code class="literal">slave</code>).
</p>
-<p>
+ <p>
If this option is set in <span class="command"><strong>view</strong></span> or
<span class="command"><strong>options</strong></span>, it is globally applied to
all secondary zones. If set in the <span class="command"><strong>zone</strong></span>
statement, the global value is overridden.
</p>
-<p>
+ <p>
If not specified, the default is to process NOTIFY
messages only from the configured
<span class="command"><strong>masters</strong></span> for the zone.
<span class="command"><strong>allow-notify</strong></span> can be used to expand the
list of permitted hosts, not to reduce it.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-query</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies which hosts are allowed to ask ordinary
DNS questions. <span class="command"><strong>allow-query</strong></span> may
also be specified in the <span class="command"><strong>zone</strong></span>
If not specified, the default is to allow queries
from all hosts.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
<span class="command"><strong>allow-query-cache</strong></span> is now
used to specify access to the cache.
</p>
-</div>
-</dd>
+ </div>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-query-on</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies which local addresses can accept ordinary
DNS questions. This makes it possible, for instance,
to allow queries on internal-facing interfaces but
disallow them on external-facing ones, without
necessarily knowing the internal network's addresses.
</p>
-<p>
+ <p>
Note that <span class="command"><strong>allow-query-on</strong></span> is only
checked for queries that are permitted by
<span class="command"><strong>allow-query</strong></span>. A query must be
allowed by both ACLs, or it will be refused.
</p>
-<p>
+ <p>
<span class="command"><strong>allow-query-on</strong></span> may
also be specified in the <span class="command"><strong>zone</strong></span>
statement, in which case it overrides the
<span class="command"><strong>options allow-query-on</strong></span> statement.
</p>
-<p>
+ <p>
If not specified, the default is to allow queries
on all addresses.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
<span class="command"><strong>allow-query-cache</strong></span> is
used to specify access to the cache.
</p>
-</div>
-</dd>
+ </div>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-query-cache</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies which hosts are allowed to get answers
from the cache. If <span class="command"><strong>allow-query-cache</strong></span>
is not set then <span class="command"><strong>allow-recursion</strong></span>
set in which case <span class="command"><strong>none;</strong></span> is used,
otherwise the default (<span class="command"><strong>localnets;</strong></span>
<span class="command"><strong>localhost;</strong></span>) is used.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-query-cache-on</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies which local addresses can send answers
from the cache. If <span class="command"><strong>allow-query-cache-on</strong></span>
is not set, then <span class="command"><strong>allow-recursion-on</strong></span> is
satisfied before a cache response can be sent;
a client that is blocked by one cannot be allowed
by the other.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-recursion</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies which hosts are allowed to make recursive
queries through this server. If
<span class="command"><strong>allow-recursion</strong></span> is not set
is used if set, otherwise the default
(<span class="command"><strong>localnets;</strong></span>
<span class="command"><strong>localhost;</strong></span>) is used.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-recursion-on</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies which local addresses can accept recursive
queries. If <span class="command"><strong>allow-recursion-on</strong></span>
is not set, then <span class="command"><strong>allow-query-cache-on</strong></span>
satisfied before recursion is allowed;
a client that is blocked by one cannot be allowed
by the other.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-update</strong></span></span></dt>
<dd>
-<p>
+ <p>
When set in the <span class="command"><strong>zone</strong></span> statement for
a master zone, specifies which hosts are allowed to
submit Dynamic DNS updates to that zone. The default
is to deny updates from all hosts.
</p>
-<p>
+ <p>
Note that allowing updates based on the
requestor's IP address is insecure; see
<a class="xref" href="Bv9ARM.ch06.html#dynamic_update_security" title="Dynamic Update Security">the section called “Dynamic Update Security”</a> for details.
</p>
-<p>
+ <p>
In general this option should only be set at the
<span class="command"><strong>zone</strong></span> level. While a default
value can be set at the <span class="command"><strong>options</strong></span> or
this could lead to some zones unintentionally allowing
updates.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-update-forwarding</strong></span></span></dt>
<dd>
-<p>
+ <p>
When set in the <span class="command"><strong>zone</strong></span> statement for
a slave zone, specifies which hosts are allowed to
submit Dynamic DNS updates and have them be forwarded
<strong class="userinput"><code>{ none; }</code></strong>, which means that no
update forwarding will be performed.
</p>
-<p>
+ <p>
To enable update forwarding, specify
<strong class="userinput"><code>allow-update-forwarding { any; };</code></strong>.
in the <span class="command"><strong>zone</strong></span> statement.
access control should rest with the master server, not
the slave.
</p>
-<p>
+ <p>
Note that enabling the update forwarding feature on a slave
server may expose master servers to attacks if they rely
on insecure IP-address-based access control; see
<a class="xref" href="Bv9ARM.ch06.html#dynamic_update_security" title="Dynamic Update Security">the section called “Dynamic Update Security”</a> for more details.
</p>
-<p>
+ <p>
In general this option should only be set at the
<span class="command"><strong>zone</strong></span> level. While a default
value can be set at the <span class="command"><strong>options</strong></span> or
this can lead to some zones unintentionally forwarding
updates.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-v6-synthesis</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option was introduced for the smooth transition from
AAAA
to A6 and from "nibble labels" to binary labels.
deprecated,
this option was also deprecated.
It is now ignored with some warning messages.
- </p></dd>
+ </p>
+ </dd>
<dt>
<a name="allow_transfer"></a><span class="term"><a name="allow_transfer_term"></a><span class="command"><strong>allow-transfer</strong></span></span>
</dt>
-<dd><p>
+<dd>
+ <p>
Specifies which hosts are allowed to receive zone
transfers from the server. <span class="command"><strong>allow-transfer</strong></span>
may also be specified in the <span class="command"><strong>zone</strong></span>
<span class="command"><strong>options</strong></span> or <span class="command"><strong>view</strong></span>.
If not specified, the default is to allow transfers to
all hosts.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>blackhole</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies a list of addresses that the
server will not accept queries from or use to resolve a
query. Queries
from these addresses will not be responded to. The default
is <strong class="userinput"><code>none</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>keep-response-order</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies a list of addresses to which the server
will send responses to TCP queries in the same order
in which they were received. This disables the
processing of TCP queries in parallel. The default
is <strong class="userinput"><code>none</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>no-case-compress</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies a list of addresses which require responses
to use case-insensitive compression. This ACL can be
used when <span class="command"><strong>named</strong></span> needs to work with
1034 to use case-insensitive name comparisons when
checking for matching domain names.
</p>
-<p>
+ <p>
If left undefined, the ACL defaults to
<span class="command"><strong>none</strong></span>: case-insensitive compression
will be used for all clients. If the ACL is defined and
compressing domain names in DNS responses sent to that
client.
</p>
-<p>
+ <p>
This can result in slightly smaller responses: if
a response contains the names "example.com" and
"example.COM", case-insensitive compression would treat
match the query, which is required by some clients
due to incorrect use of case-sensitive comparisons.
</p>
-<p>
+ <p>
Case-insensitive compression is <span class="emphasis"><em>always</em></span>
used in AXFR and IXFR responses, regardless of whether
the client matches this ACL.
</p>
-<p>
+ <p>
There are circumstances in which <span class="command"><strong>named</strong></span>
will not preserve the case of owner names of records:
if a zone file defines records of different types with
have their case preserved unless the client matches this
ACL.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>resolver-query-timeout</strong></span></span></dt>
<dd>
-<p>
+ <p>
The amount of time in milliseconds that the resolver
will spend attempting to resolve a recursive
query before failing. The default and minimum
<code class="literal">0</code> will result in the default
being used.
</p>
-<p>
+ <p>
This value was originally specified in seconds.
Values less than or equal to 300 will be be treated
as seconds and converted to milliseconds before
applying the above limits.
</p>
-</dd>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="interfaces"></a>Interfaces</h4></div></div></div>
-<p>
+
+ <p>
The interfaces and ports that the server will answer queries
from may be specified using the <span class="command"><strong>listen-on</strong></span> option. <span class="command"><strong>listen-on</strong></span> takes
an optional port and an <code class="varname">address_match_list</code>
The server will listen on all interfaces allowed by the address
match list. If a port is not specified, port 53 will be used.
</p>
-<p>
+ <p>
Multiple <span class="command"><strong>listen-on</strong></span> statements are
allowed.
For example,
</p>
+
<pre class="programlisting">listen-on { 5.6.7.8; };
listen-on port 1234 { !1.2.3.4; 1.2/16; };
</pre>
-<p>
+
+ <p>
will enable the name server on port 53 for the IP address
5.6.7.8, and on port 1234 of an address on the machine in net
1.2 that is not 1.2.3.4.
</p>
-<p>
+
+ <p>
If no <span class="command"><strong>listen-on</strong></span> is specified, the
server will listen on port 53 on all IPv4 interfaces.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>listen-on-v6</strong></span> option is used to
specify the interfaces and the ports on which the server will
listen for incoming queries sent using IPv6. If not specified,
the server will listen on port 53 on all IPv6 interfaces.
</p>
-<p>
+
+ <p>
When </p>
<pre class="programlisting">{ any; }</pre>
<p> is
If the system only has incomplete API support for IPv6, however,
the behavior is the same as that for IPv4.
</p>
-<p>
+
+ <p>
A list of particular IPv6 addresses can also be specified, in
which case
the server listens on a separate socket for each specified
IPv4 addresses specified in <span class="command"><strong>listen-on-v6</strong></span>
will be ignored, with a logged warning.
</p>
-<p>
+
+ <p>
Multiple <span class="command"><strong>listen-on-v6</strong></span> options can
be used.
For example,
</p>
+
<pre class="programlisting">listen-on-v6 { any; };
listen-on-v6 port 1234 { !2001:db8::/32; any; };
</pre>
-<p>
+
+ <p>
will enable the name server on port 53 for any IPv6 addresses
(with a single wildcard socket),
and on port 1234 of IPv6 addresses that is not in the prefix
2001:db8::/32 (with separate sockets for each matched address.)
</p>
-<p>
+
+ <p>
To make the server not listen on any IPv6 address, use
</p>
+
<pre class="programlisting">listen-on-v6 { none; };
</pre>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="query_address"></a>Query Address</h4></div></div></div>
-<p>
+
+ <p>
If the server doesn't know the answer to a question, it will
query other name servers. <span class="command"><strong>query-source</strong></span> specifies
the address and port used for such queries. For queries sent over
a wildcard IP address (<span class="command"><strong>INADDR_ANY</strong></span>)
will be used.
</p>
-<p>
+
+ <p>
If <span class="command"><strong>port</strong></span> is <span class="command"><strong>*</strong></span> or is omitted,
a random port number from a pre-configured
range is picked up and will be used for each query.
the <span class="command"><strong>avoid-v4-udp-ports</strong></span>
and <span class="command"><strong>avoid-v6-udp-ports</strong></span> options, respectively.
</p>
-<p>
+
+ <p>
The defaults of the <span class="command"><strong>query-source</strong></span> and
<span class="command"><strong>query-source-v6</strong></span> options
are:
</p>
+
<pre class="programlisting">query-source address * port *;
query-source-v6 address * port *;
</pre>
-<p>
+
+ <p>
If <span class="command"><strong>use-v4-udp-ports</strong></span> or
<span class="command"><strong>use-v6-udp-ports</strong></span> is unspecified,
<span class="command"><strong>named</strong></span> will check if the operating
<span class="command"><strong>named</strong></span> will use the corresponding system
default range; otherwise, it will use its own defaults:
</p>
+
<pre class="programlisting">use-v4-udp-ports { range 1024 65535; };
use-v6-udp-ports { range 1024 65535; };
</pre>
-<p>
+
+ <p>
Note: make sure the ranges be sufficiently large for
security. A desirable size depends on various parameters,
but we generally recommend it contain at least 16384 ports
ranges are sufficiently large and are reasonably
independent from the ranges used by other applications.
</p>
-<p>
+
+ <p>
Note: the operational configuration
where <span class="command"><strong>named</strong></span> runs may prohibit the use
of some ports. For example, UNIX systems will not allow
It is therefore important to configure the set of ports
that can be safely used in the expected operational environment.
</p>
-<p>
+
+ <p>
The defaults of the <span class="command"><strong>avoid-v4-udp-ports</strong></span> and
<span class="command"><strong>avoid-v6-udp-ports</strong></span> options
are:
</p>
+
<pre class="programlisting">avoid-v4-udp-ports {};
avoid-v6-udp-ports {};
</pre>
-<p>
+
+ <p>
Note: BIND 9.5.0 introduced
the <span class="command"><strong>use-queryport-pool</strong></span>
option to support a pool of such random ports, but this
<span class="command"><strong>query-source-v6</strong></span> options;
it implicitly disables the use of randomized port numbers.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>use-queryport-pool</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is obsolete.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>queryport-pool-ports</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is obsolete.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>queryport-pool-updateinterval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is obsolete.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
The address specified in the <span class="command"><strong>query-source</strong></span> option
is used for both UDP and TCP queries, but the port applies only
to UDP queries. TCP queries always use a random
unprivileged port.
</p>
-</div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
Solaris 2.5.1 and earlier does not support setting the source
address for TCP sockets.
</p>
-</div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
See also <span class="command"><strong>transfer-source</strong></span> and
<span class="command"><strong>notify-source</strong></span>.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="zone_transfers"></a>Zone Transfers</h4></div></div></div>
-<p>
+
+ <p>
<acronym class="acronym">BIND</acronym> has mechanisms in place to
facilitate zone transfers
and set limits on the amount of load that transfers place on the
system. The following options apply to zone transfers.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>also-notify</strong></span></span></dt>
<dd>
-<p>
+ <p>
Defines a global list of IP addresses of name servers
that are also sent NOTIFY messages whenever a fresh copy of
the
In place of explicit addresses, one or more named
<span class="command"><strong>masters</strong></span> lists can be used.
</p>
-<p>
+ <p>
If an <span class="command"><strong>also-notify</strong></span> list
is given in a <span class="command"><strong>zone</strong></span> statement,
it will override
the empty
list (no global notification list).
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-time-in</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Inbound zone transfers running longer than
this many minutes will be terminated. The default is 120
minutes
(2 hours). The maximum value is 28 days (40320 minutes).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-idle-in</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Inbound zone transfers making no progress
in this many minutes will be terminated. The default is 60
minutes
(1 hour). The maximum value is 28 days (40320 minutes).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-time-out</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Outbound zone transfers running longer than
this many minutes will be terminated. The default is 120
minutes
(2 hours). The maximum value is 28 days (40320 minutes).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-idle-out</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Outbound zone transfers making no progress
in this many minutes will be terminated. The default is 60
minutes (1
hour). The maximum value is 28 days (40320 minutes).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-rate</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The rate at which NOTIFY requests will be sent
during normal zone maintenance operations. (NOTIFY
requests due to initial zone loading are subject
20 per second.
The lowest possible rate is one per second; when set
to zero, it will be silently raised to one.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>startup-notify-rate</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The rate at which NOTIFY requests will be sent
when the name server is first starting up, or when
zones have been newly added to the nameserver.
The default is 20 per second.
The lowest possible rate is one per second; when set
to zero, it will be silently raised to one.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>serial-query-rate</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Slave servers will periodically query master
servers to find out if zone serial numbers have
changed. Each such query uses a minute amount of
per second. The default is 20 per second.
The lowest possible rate is one per second; when set
to zero, it will be silently raised to one.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfer-format</strong></span></span></dt>
-<dd><p>
+<dd>
+
+ <p>
Zone transfers can be sent using two different formats,
<span class="command"><strong>one-answer</strong></span> and
<span class="command"><strong>many-answers</strong></span>.
<span class="command"><strong>transfer-format</strong></span> may be overridden on a
per-server basis by using the <span class="command"><strong>server</strong></span>
statement.
- </p></dd>
+ </p>
+
+ </dd>
<dt><span class="term"><span class="command"><strong>transfer-message-size</strong></span></span></dt>
<dd>
-<p>
+ <p>
This is an upper bound on the uncompressed size of DNS
messages used in zone transfers over TCP. If a message
grows larger than this size, additional messages will be
fit within the size limit, a larger message will be
permitted so the record can be transferred.)
</p>
-<p>
+ <p>
Valid values are between 512 and 65535 octets, and any
values outside that range will be adjusted to the nearest
value within it. The default is <code class="literal">20480</code>,
as effectively, because 16536 is the largest permissible
compression offset pointer in a DNS message.
</p>
-<p>
+ <p>
This option is mainly intended for server testing;
there is rarely any benefit in setting a value other
than the default.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfers-in</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum number of inbound zone transfers
that can be running concurrently. The default value is <code class="literal">10</code>.
Increasing <span class="command"><strong>transfers-in</strong></span> may
speed up the convergence
of slave zones, but it also may increase the load on the
local system.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfers-out</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum number of outbound zone transfers
that can be running concurrently. Zone transfer requests in
excess
of the limit will be refused. The default value is <code class="literal">10</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfers-per-ns</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum number of inbound zone transfers
that can be concurrently transferring from a given remote
name server.
the load on the remote name server. <span class="command"><strong>transfers-per-ns</strong></span> may
be overridden on a per-server basis by using the <span class="command"><strong>transfers</strong></span> phrase
of the <span class="command"><strong>server</strong></span> statement.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfer-source</strong></span></span></dt>
<dd>
-<p><span class="command"><strong>transfer-source</strong></span>
+ <p><span class="command"><strong>transfer-source</strong></span>
determines which local address will be bound to IPv4
TCP connections used to fetch zones transferred
inbound by the server. It also determines the
<span class="command"><strong>zone</strong></span> block in the configuration
file.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
Solaris 2.5.1 and earlier does not support setting the
source address for TCP sockets.
</p>
-</div>
-</dd>
+ </div>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfer-source-v6</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The same as <span class="command"><strong>transfer-source</strong></span>,
except zone transfers are performed using IPv6.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>alt-transfer-source</strong></span></span></dt>
<dd>
-<p>
+ <p>
An alternate transfer source if the one listed in
<span class="command"><strong>transfer-source</strong></span> fails and
<span class="command"><strong>use-alt-transfer-source</strong></span> is
set.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
If you do not wish the alternate transfer source
query.
</p>
</div>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>alt-transfer-source-v6</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
An alternate transfer source if the one listed in
<span class="command"><strong>transfer-source-v6</strong></span> fails and
<span class="command"><strong>use-alt-transfer-source</strong></span> is
set.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>use-alt-transfer-source</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Use the alternate transfer sources or not. If views are
specified this defaults to <span class="command"><strong>no</strong></span>,
otherwise it defaults to
<span class="command"><strong>yes</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-source</strong></span></span></dt>
<dd>
-<p><span class="command"><strong>notify-source</strong></span>
+ <p><span class="command"><strong>notify-source</strong></span>
determines which local source address, and
optionally UDP port, will be used to send NOTIFY
messages. This address must appear in the slave
<span class="command"><strong>view</strong></span> block in the configuration
file.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
Solaris 2.5.1 and earlier does not support setting the
source address for TCP sockets.
</p>
-</div>
-</dd>
+ </div>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-source-v6</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Like <span class="command"><strong>notify-source</strong></span>,
but applies to notify messages sent to IPv6 addresses.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="port_lists"></a>UDP Port Lists</h4></div></div></div>
-<p>
+
+ <p>
<span class="command"><strong>use-v4-udp-ports</strong></span>,
<span class="command"><strong>avoid-v4-udp-ports</strong></span>,
<span class="command"><strong>use-v6-udp-ports</strong></span>, and
available ports are determined.
For example, with the following configuration
</p>
+
<pre class="programlisting">
use-v6-udp-ports { range 32768 65535; };
avoid-v6-udp-ports { 40000; range 50000 60000; };
</pre>
-<p>
+
+ <p>
UDP ports of IPv6 messages sent
from <span class="command"><strong>named</strong></span> will be in one
of the following ranges: 32768 to 39999, 40001 to 49999,
and 60001 to 65535.
</p>
-<p>
+
+ <p>
<span class="command"><strong>avoid-v4-udp-ports</strong></span> and
<span class="command"><strong>avoid-v6-udp-ports</strong></span> can be used
to prevent <span class="command"><strong>named</strong></span> from choosing as its random source port a
sense; they are provided for backward compatibility and
to possibly simplify the port specification.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="resource_limits"></a>Operating System Resource Limits</h4></div></div></div>
-<p>
+
+ <p>
The server's usage of many system resources can be limited.
Scaled values are allowed when specifying resource limits. For
example, <span class="command"><strong>1G</strong></span> can be used instead of
that was in force when the server was started. See the description
of <span class="command"><strong>size_spec</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#configuration_file_elements" title="Configuration File Elements">the section called “Configuration File Elements”</a>.
</p>
-<p>
+
+ <p>
The following options set operating system resource limits for
the name server process. Some operating systems don't support
some or
the
unsupported limit is used.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>coresize</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum size of a core dump. The default
is <code class="literal">default</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>datasize</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum amount of data memory the server
may use. The default is <code class="literal">default</code>.
This is a hard limit on server memory usage.
<span class="command"><strong>max-cache-size</strong></span> and
<span class="command"><strong>recursive-clients</strong></span>
options instead.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>files</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum number of files the server
may have open concurrently. The default is <code class="literal">unlimited</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>stacksize</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum amount of stack memory the server
may use. The default is <code class="literal">default</code>.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="server_resource_limits"></a>Server Resource Limits</h4></div></div></div>
-<p>
+
+ <p>
The following options set limits on the server's
resource consumption that are enforced internally by the
server rather than the operating system.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>max-journal-size</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets a maximum size for each journal file (see
<a class="xref" href="Bv9ARM.ch04.html#journal" title="The journal file">the section called “The journal file”</a>), expressed in bytes
or, if followed by an optional unit suffix ('k',
the zone. (There is little benefit in storing
larger journals.)
</p>
-<p>
+ <p>
This option may also be set on a per-zone basis.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-records</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum number of records permitted in a zone.
The default is zero which means unlimited.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>recursive-clients</strong></span></span></dt>
<dd>
-<p>
+ <p>
The maximum number ("hard quota") of simultaneous
recursive lookups the server will perform on behalf
of clients. The default is
<span class="command"><strong>recursive-clients</strong></span> option may
have to be decreased on hosts with limited memory.
</p>
-<p>
+ <p>
<code class="option">recursive-clients</code> defines a "hard
quota" limit for pending recursive clients: when more
clients than this are pending, new incoming requests
will not be accepted, and for each incoming request
a previous pending request will also be dropped.
</p>
-<p>
+ <p>
A "soft quota" is also set. When this lower
quota is exceeded, incoming requests are accepted, but
for each one, a pending request will be dropped.
otherwise it is set to 90% of
<code class="option">recursive-clients</code>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>tcp-clients</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum number of simultaneous client TCP
connections that the server will accept.
The default is <code class="literal">150</code>.
- </p></dd>
+ </p>
+ </dd>
<dt>
<a name="clients-per-query"></a><span class="term"><a name="cpq_term"></a><span class="command"><strong>clients-per-query</strong></span>, </span><span class="term"><span class="command"><strong>max-clients-per-query</strong></span></span>
</dt>
<dd>
-<p>These set the
+ <p>These set the
initial value (minimum) and maximum number of recursive
simultaneous clients for any given query
(<qname,qtype,qclass>) that the server will accept
self tune this value and changes will be logged. The
default values are 10 and 100.
</p>
-<p>
+ <p>
This value should reflect how many queries come in for
a given name in the time it takes to resolve that name.
If the number of queries exceed this value, <span class="command"><strong>named</strong></span> will
estimate will then be lowered in 20 minutes if it has
remained unchanged.
</p>
-<p>
+ <p>
If <span class="command"><strong>clients-per-query</strong></span> is set to zero,
then there is no limit on the number of clients per query
and no queries will be dropped.
</p>
-<p>
+ <p>
If <span class="command"><strong>max-clients-per-query</strong></span> is set to zero,
then there is no upper bound other than imposed by
<span class="command"><strong>recursive-clients</strong></span>.
</p>
-</dd>
+ </dd>
<dt>
<a name="fetches-per-zone"></a><span class="term"><span class="command"><strong>fetches-per-zone</strong></span></span>
</dt>
<dd>
-<p>
+ <p>
The maximum number of simultaneous iterative
queries to any one domain that the server will
permit before blocking new queries for data
would take to resolve them. It should be smaller
than <code class="option">recursive-clients</code>.
</p>
-<p>
+ <p>
When many clients simultaneously query for the
same name and type, the clients will all be attached
to the same fetch, up to the
<code class="option">max-clients-per-query</code> is not
effective as a limit.
</p>
-<p>
+ <p>
Optionally, this value may be followed by the keyword
<code class="literal">drop</code> or <code class="literal">fail</code>,
indicating whether queries which exceed the fetch
or answered with SERVFAIL. The default is
<code class="literal">drop</code>.
</p>
-<p>
+ <p>
If <span class="command"><strong>fetches-per-zone</strong></span> is set to zero,
then there is no limit on the number of fetches per query
and no queries will be dropped. The default is zero.
</p>
-<p>
+ <p>
The current list of active fetches can be dumped by
running <span class="command"><strong>rndc recursing</strong></span>. The list
includes the number of active fetches for each
next time a fetch is sent to that domain, it is
recreated with the counters set to zero.)
</p>
-</dd>
+ </dd>
<dt>
<a name="fetches-per-server"></a><span class="term"><span class="command"><strong>fetches-per-server</strong></span></span>
</dt>
<dd>
-<p>
+ <p>
The maximum number of simultaneous iterative
queries that the server will allow to be sent to
a single upstream name server before blocking
would take to resolve them. It should be smaller
than <code class="option">recursive-clients</code>.
</p>
-<p>
+ <p>
Optionally, this value may be followed by the keyword
<code class="literal">drop</code> or <code class="literal">fail</code>,
indicating whether queries will be dropped with no
exceeded the per-server quota. The default is
<code class="literal">fail</code>.
</p>
-<p>
+ <p>
If <span class="command"><strong>fetches-per-server</strong></span> is set to zero,
then there is no limit on the number of fetches per query
and no queries will be dropped. The default is zero.
</p>
-<p>
+ <p>
The <span class="command"><strong>fetches-per-server</strong></span> quota is
dynamically adjusted in response to detected
congestion. As queries are sent to a server
can be used to adjust the parameters for this
calculation.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>fetch-quota-params</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets the parameters to use for dynamic resizing of
the <code class="option">fetches-per-server</code> quota in
response to detected congestion.
</p>
-<p>
+ <p>
The first argument is an integer value indicating
how frequently to recalculate the moving average
of the ratio of timeouts to responses for each
the average ratio after every 100 queries have either
been answered or timed out.
</p>
-<p>
+ <p>
The remaining three arguments represent the "low"
threshold (defaulting to a timeout ratio of 0.1),
the "high" threshold (defaulting to a timeout
precision of 1/100: at most two places after
the decimal point are significant.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>reserved-sockets</strong></span></span></dt>
<dd>
-<p>
+ <p>
The number of file descriptors reserved for TCP, stdio,
etc. This needs to be big enough to cover the number of
interfaces <span class="command"><strong>named</strong></span> listens on plus
maximum value is <code class="literal">128</code> less than
maxsockets (-S). This option may be removed in the future.
</p>
-<p>
+ <p>
This option has little effect on Windows.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-cache-size</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum amount of memory to use for the
server's cache, in bytes or % of total physical memory.
When the amount of data in the cache
once at startup, so <span class="command"><strong>named</strong></span> will not
adjust the cache size if the amount of physical memory
is changed during runtime.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tcp-listen-queue</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The listen queue depth. The default and minimum is 10.
If the kernel supports the accept filter "dataready" this
also controls how
less than 10 will be silently raised. A value of 0 may also
be used; on most platforms this sets the listen queue
length to a system-defined default value.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tcp-initial-timeout</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The amount of time (in units of 100 milliseconds) the
server waits on a new TCP connection for the first message
from the client. The default is 300 (30 seconds),
have enough time to submit a message.)
This value can be updated at runtime by using
<span class="command"><strong>rndc tcp-timeouts</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tcp-idle-timeout</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The amount of time (in units of 100 milliseconds) the
server waits on an idle TCP connection before closing
it when the client is not using the EDNS TCP keepalive
for clients using the EDNS TCP keepalive option.
This value can be updated at runtime by using
<span class="command"><strong>rndc tcp-timeouts</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tcp-keepalive-timeout</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The amount of time (in units of 100 milliseconds) the
server waits on an idle TCP connection before closing
it when the client is using the EDNS TCP keepalive
to use TCP connections for more than one message.
This value can be updated at runtime by using
<span class="command"><strong>rndc tcp-timeouts</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>tcp-advertised-timeout</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The timeout value (in units of 100 milliseconds) the
server will send in respones containing the EDNS TCP
keepalive option. This informs a client of the
same value as <span class="command"><strong>tcp-keepalive-timeout</strong></span>.
This value can be updated at runtime by using
<span class="command"><strong>rndc tcp-timeouts</strong></span>.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="intervals"></a>Periodic Task Intervals</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>cleaning-interval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is obsolete.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>heartbeat-interval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The server will perform zone maintenance tasks
for all zones marked as <span class="command"><strong>dialup</strong></span> whenever this
interval expires. The default is 60 minutes. Reasonable
to 1 day (1440 minutes). The maximum value is 28 days
(40320 minutes).
If set to 0, no zone maintenance for these zones will occur.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>interface-interval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The server will scan the network interface list
every <span class="command"><strong>interface-interval</strong></span>
minutes. The default
For convenience, TTL-style time unit suffixes may be
used to specify the value. It also accepts ISO 8601
duration formats.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="the_sortlist_statement"></a>The <span class="command"><strong>sortlist</strong></span> Statement</h4></div></div></div>
-<p>
+
+ <p>
The response to a DNS query may consist of multiple resource
records (RRs) forming a resource record set (RRset). The name
server will normally return the RRs within the RRset in an
client's address. This only requires configuring the name
servers, not all the clients.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>sortlist</strong></span> statement (see below) takes an
<span class="command"><strong>address_match_list</strong></span> and interprets it in a
special way. Each top level statement in the
the query until a match is found. When the addresses in the
first element overlap, the first rule to match gets selected.
</p>
-<p>
+ <p>
Once the source address of the query has been matched, if the
top level statement contains only one element, the actual
primitive element that matched the source address is used to
address in the response with the minimum distance is moved to
the beginning of the response.
</p>
-<p>
+ <p>
In the following example, any queries received from any of the
addresses of the host itself will get responses preferring
addresses on any of the locally connected networks. Next most
the 192.168.5/24 network will only prefer other addresses on
their directly connected networks.
</p>
+
<pre class="programlisting">sortlist {
// IF the local host
// THEN first fit on the following nets
{ { 192.168.4/24; 192.168.5/24; };
};
};</pre>
-<p>
+
+ <p>
The following example will give reasonable behavior for the
local host and hosts on directly connected networks. It is
similar to the behavior of the address sort in
directly connected network will prefer addresses on that same
network. Responses to other queries will not be sorted.
</p>
+
<pre class="programlisting">sortlist {
{ localhost; localnets; };
{ localnets; };
};
</pre>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="rrset_ordering"></a>RRset Ordering</h4></div></div></div>
-<p>
+
+ <p>
When multiple records are returned in an answer it may be
useful to configure the order of the records placed into the
response. The <span class="command"><strong>rrset-order</strong></span> statement permits
See also the <span class="command"><strong>sortlist</strong></span> statement,
<a class="xref" href="Bv9ARM.ch05.html#the_sortlist_statement" title="The sortlist Statement">the section called “The <span class="command"><strong>sortlist</strong></span> Statement”</a>.
</p>
-<p>
+ <p>
An <span class="command"><strong>order_spec</strong></span> is defined as follows:
</p>
-<p>
+ <p>
[<span class="optional">class <em class="replaceable"><code>class_name</code></em></span>]
[<span class="optional">type <em class="replaceable"><code>type_name</code></em></span>]
[<span class="optional">name <em class="replaceable"><code>"domain_name"</code></em></span>]
order <em class="replaceable"><code>ordering</code></em>
</p>
-<p>
+ <p>
If no class is specified, the default is <span class="command"><strong>ANY</strong></span>.
If no type is specified, the default is <span class="command"><strong>ANY</strong></span>.
If no name is specified, the default is "<span class="command"><strong>*</strong></span>" (asterisk).
</p>
-<p>
+ <p>
The legal values for <span class="command"><strong>ordering</strong></span> are:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="0.750in" class="1">
<col width="3.750in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
</p>
-<p>
+ <p>
For example:
</p>
<pre class="programlisting">rrset-order {
order cyclic;
};
</pre>
-<p>
+ <p>
will cause any responses for type A records in class IN that
have "<code class="literal">host.example.com</code>" as a
suffix, to always be returned
in random order. All other records are returned in cyclic order.
</p>
-<p>
+ <p>
If multiple <span class="command"><strong>rrset-order</strong></span> statements
appear, they are not combined — the last one applies.
</p>
-<p>
+ <p>
By default, records are returned in <span class="command"><strong>random</strong></span> order.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
In this release of <acronym class="acronym">BIND</acronym> 9, the
<span class="command"><strong>rrset-order</strong></span> statement does not support
"fixed" ordering by default. Fixed ordering can be enabled
at compile time by specifying "--enable-fixed-rrset" on
the "configure" command line.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="tuning"></a>Tuning</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>lame-ttl</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Sets the number of seconds to cache a
lame server indication. 0 disables caching. (This is
<span class="bold"><strong>NOT</strong></span> recommended.)
The default is <code class="literal">600</code> (10 minutes) and the
maximum value is
<code class="literal">1800</code> (30 minutes).
- </p></dd>
+ </p>
+
+ </dd>
<dt><span class="term"><span class="command"><strong>servfail-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets the number of seconds to cache a
SERVFAIL response due to DNSSEC validation failure or
other general server failure. If set to
query that failed due to DNSSEC validation to be retried
without waiting for the SERVFAIL TTL to expire.
</p>
-<p>
+ <p>
The maximum value is <code class="literal">30</code>
seconds; any higher value will be silently
reduced. The default is <code class="literal">1</code>
second.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>min-ncache-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
To reduce network traffic and increase performance, the server
stores negative answers. <span class="command"><strong>min-ncache-ttl</strong></span> is
used to set a minimum retention time for these answers in the
suffixes may be used to specify the value. It also
accepts ISO 8601 duration formats.
</p>
-<p>
+ <p>
The default <span class="command"><strong>min-ncache-ttl</strong></span> is
<code class="literal">0</code> seconds.
<span class="command"><strong>min-ncache-ttl</strong></span> cannot exceed 90
seconds and will be truncated to 90 seconds if set to a
greater value.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>min-cache-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets the minimum time for which the server will cache ordinary
(positive) answers in seconds. For convenience, TTL-style
time unit suffixes may be used to specify the value. It also
accepts ISO 8601 duration formats.
</p>
-<p>
+ <p>
The default <span class="command"><strong>min-cache-ttl</strong></span> is
<code class="literal">0</code> seconds.
<span class="command"><strong>min-cache-ttl</strong></span> cannot exceed 90
seconds and will be truncated to 90 seconds if set to a
greater value.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-ncache-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
To reduce network traffic and increase performance,
the server stores negative answers.
<span class="command"><strong>max-ncache-ttl</strong></span> is
suffixes may be used to specify the value. It also accepts
ISO 8601 duration formats.
</p>
-<p>
+ <p>
The default <span class="command"><strong>max-ncache-ttl</strong></span> is
<code class="literal">10800</code> seconds (3 hours).
<span class="command"><strong>max-ncache-ttl</strong></span> cannot exceed 7 days and
will be silently truncated to 7 days if set to a greater
value.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-cache-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets the maximum time for which the server will
cache ordinary (positive) answers in seconds.
For convenience, TTL-style time unit suffixes may be
used to specify the value. It also accepts ISO 8601
duration formats.
</p>
-<p>
+ <p>
The default is 604800 (one week).
A value of zero may cause all queries to return
SERVFAIL, because of lost caches of intermediate
RRsets (such as NS and glue AAAA/A records) in the
resolution process.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-stale-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
If stale answers are enabled,
<span class="command"><strong>max-stale-ttl</strong></span>
sets the maximum time for which the server will
1 second; a value of 0 will be updated silently
to 1 second.
</p>
-<p>
+ <p>
For stale answers to be returned, they must be enabled,
either in the configuration file using
<span class="command"><strong>stale-answer-enable</strong></span> or via
<span class="command"><strong>rndc serve-stale on</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>resolver-nonbackoff-tries</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies how many retries occur before exponential
backoff kicks in. The default is <strong class="userinput"><code>3</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>resolver-retry-interval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The base retry interval in milliseconds.
The default is <strong class="userinput"><code>800</code></strong>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-validity-interval</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies the number of days into the future when
DNSSEC signatures automatically generated as a
result of dynamic updates (<a class="xref" href="Bv9ARM.ch04.html#dynamic_update" title="Dynamic Update">the section called “Dynamic Update”</a>) will expire. There
giving a re-signing interval of 7 1/2 days. The maximum
values are 10 years (3660 days).
</p>
-<p>
+ <p>
The signature inception time is unconditionally
set to one hour before the current time to allow
for a limited amount of clock skew.
</p>
-<p>
+ <p>
The <span class="command"><strong>sig-validity-interval</strong></span> can be
overridden for DNSKEY records by setting
<span class="command"><strong>dnskey-sig-validity</strong></span>.
</p>
-<p>
+ <p>
The <span class="command"><strong>sig-validity-interval</strong></span>
should be, at least, several multiples of the SOA
expire interval to allow for reasonable interaction
between the various timer and expiry dates.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnskey-sig-validity</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies the number of days into the future when
DNSSEC signatures that are automatically generated
for DNSKEY RRsets as a result of dynamic updates
<span class="command"><strong>sig-validity-interval</strong></span> is used.
The maximum value is 3660 days (10 years), and
higher values will be rejected.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-signing-nodes</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specify the maximum number of nodes to be
examined in each quantum when signing a zone with
a new DNSKEY. The default is
<code class="literal">100</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-signing-signatures</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specify a threshold number of signatures that
will terminate processing a quantum when signing
a zone with a new DNSKEY. The default is
<code class="literal">10</code>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-signing-type</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specify a private RDATA type to be used when generating
signing state records. The default is
<code class="literal">65534</code>.
</p>
-<p>
+ <p>
It is expected that this parameter may be removed
in a future version once there is a standard type.
</p>
-<p>
+ <p>
Signing state records are used to internally by
<span class="command"><strong>named</strong></span> to track the current state of
a zone-signing process, i.e., whether it is still active
records for a zone, use
<span class="command"><strong>rndc signing -clear all <em class="replaceable"><code>zone</code></em></strong></span>.
</p>
-</dd>
+ </dd>
<dt>
<span class="term"><span class="command"><strong>min-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>max-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>min-retry-time</strong></span>, </span><span class="term"><span class="command"><strong>max-retry-time</strong></span></span>
</dt>
<dd>
-<p>
+ <p>
These options control the server's behavior on refreshing a
zone (querying for SOA changes) or retrying failed
transfers. Usually the SOA values for the zone are used,
these values are set by the master, giving slave server
administrators little control over their contents.
</p>
-<p>
+ <p>
These options allow the administrator to set a minimum and
maximum refresh and retry time in seconds per-zone,
per-view, or globally. These options are valid for
slave and stub zones, and clamp the SOA refresh and
retry times to the specified values.
</p>
-<p>
+ <p>
The following defaults apply.
<span class="command"><strong>min-refresh-time</strong></span> 300 seconds,
<span class="command"><strong>max-refresh-time</strong></span> 2419200 seconds
and <span class="command"><strong>max-retry-time</strong></span> 1209600 seconds
(2 weeks).
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>edns-udp-size</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets the maximum advertised EDNS UDP buffer size in
bytes, to control the size of packets received from
authoritative servers in response to recursive queries.
will be silently adjusted to the nearest value within
it). The default value is 4096.
</p>
-<p>
+ <p>
The usual reason for setting
<span class="command"><strong>edns-udp-size</strong></span> to a non-default value
is to get UDP answers to pass through broken firewalls
that block fragmented packets and/or block UDP DNS
packets that are greater than 512 bytes.
</p>
-<p>
+ <p>
When <span class="command"><strong>named</strong></span> first queries a remote
server, it will advertise a UDP buffer size of 512, as
this has the greatest chance of success on the first try.
</p>
-<p>
+ <p>
If the initial query is successful with
EDNS advertising a buffer size of 512, then
<span class="command"><strong>named</strong></span> will advertise progressively
responses begin timing out or
<span class="command"><strong>edns-udp-size</strong></span> is reached.
</p>
-<p>
+ <p>
The default buffer sizes used by <span class="command"><strong>named</strong></span>
are 512, 1232, 1432, and 4096, but never exceeding
<span class="command"><strong>edns-udp-size</strong></span>. (The values 1232 and
UDP message to be sent without fragmentation at the
minimum MTU sizes for Ethernet and IPv6 networks.)
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-udp-size</strong></span></span></dt>
<dd>
-<p>
+ <p>
Sets the maximum EDNS UDP message size
<span class="command"><strong>named</strong></span> will send in bytes.
Valid values are 512 to 4096 (values outside this
range will be silently adjusted to the nearest
value within it). The default value is 4096.
</p>
-<p>
+ <p>
This value applies to responses sent by a server; to
set the advertised buffer size in queries, see
<span class="command"><strong>edns-udp-size</strong></span>.
</p>
-<p>
+ <p>
The usual reason for setting
<span class="command"><strong>max-udp-size</strong></span> to a non-default
value is to get UDP answers to pass through broken
This is independent of the advertised receive
buffer (<span class="command"><strong>edns-udp-size</strong></span>).
</p>
-<p>
+ <p>
Setting this to a low value will encourage additional
TCP traffic to the nameserver.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>masterfile-format</strong></span></span></dt>
<dd>
-<p>Specifies
+ <p>Specifies
the file format of zone files (see
<a class="xref" href="Bv9ARM.ch05.html#zonefile_format" title="Additional File Formats">the section called “Additional File Formats”</a>).
The default value is <code class="constant">text</code>, which is the
<span class="command"><strong>named-compilezone</strong></span> tool, or dumped by
<span class="command"><strong>named</strong></span>.
</p>
-<p>
+ <p>
Note that when a zone file in a different format than
<code class="constant">text</code> is loaded, <span class="command"><strong>named</strong></span>
may omit some of the checks which would be performed for a
loaded directly into memory via memory mapping, with only
minimal checking.
</p>
-<p>
+ <p>
This statement sets the
<span class="command"><strong>masterfile-format</strong></span> for all zones,
but can be overridden on a per-zone or per-view basis
<span class="command"><strong>view</strong></span> block in the configuration
file.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>masterfile-style</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specifies the formatting of zone files during dump
when the <code class="option">masterfile-format</code> is
<code class="constant">text</code>. (This option is ignored
with any other <code class="option">masterfile-format</code>.)
</p>
-<p>
+ <p>
When set to <code class="constant">relative</code>,
records are printed in a multi-line format with owner
names expressed relative to a shared origin. When set
zone is to be edited by hand. The default is
<code class="constant">relative</code>.
</p>
-</dd>
+ </dd>
<dt>
<a name="max-recursion-depth"></a><span class="term"><span class="command"><strong>max-recursion-depth</strong></span></span>
</dt>
-<dd><p>
+<dd>
+ <p>
Sets the maximum number of levels of recursion
that are permitted at any one time while servicing
a recursive query. Resolving a name may require
of indirections exceeds this value, the recursive
query is terminated and returns SERVFAIL. The
default is 7.
- </p></dd>
+ </p>
+ </dd>
<dt>
<a name="max-recursion-queries"></a><span class="term"><span class="command"><strong>max-recursion-queries</strong></span></span>
</dt>
-<dd><p>
+<dd>
+ <p>
Sets the maximum number of iterative queries that
may be sent while servicing a recursive query.
If more queries are sent, the recursive query
look up top level domains such as "com" and "net"
and the DNS root zone are exempt from this limitation.
The default is 75.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-delay</strong></span></span></dt>
<dd>
-<p>
+ <p>
The delay, in seconds, between sending sets of notify
messages for a zone. The default is five (5) seconds.
</p>
-<p>
+ <p>
The overall rate that NOTIFY messages are sent for all
zones is controlled by <span class="command"><strong>serial-query-rate</strong></span>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-rsa-exponent-size</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The maximum RSA exponent size, in bits, that will
be accepted when validating. Valid values are 35
to 4096 bits. The default zero (0) is also accepted
and is equivalent to 4096.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>prefetch</strong></span></span></dt>
<dd>
-<p>
+ <p>
When a query is received for cached data which
is to expire shortly, <span class="command"><strong>named</strong></span> can
refresh the data from the authoritative server
immediately, ensuring that the cache always has an
answer available.
</p>
-<p>
+ <p>
The <code class="option">prefetch</code> specifies the
"trigger" TTL value at which prefetch of the current
query will take place: when a cache record with a
prefetch to be disabled.
The default trigger TTL is <code class="literal">2</code>.
</p>
-<p>
+ <p>
An optional second argument specifies the "eligibility"
TTL: the smallest <span class="emphasis"><em>original</em></span>
TTL value that will be accepted for a record to be
adjust it upward.
The default eligibility TTL is <code class="literal">9</code>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>v6-bias</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
When determining the next nameserver to try
preference IPv6 nameservers by this many milliseconds.
The default is <code class="literal">50</code> milliseconds.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="builtin"></a>Built-in server information zones</h4></div></div></div>
-<p>
+
+ <p>
The server provides some helpful diagnostic information
through a number of built-in zones under the
pseudo-top-level-domain <code class="literal">bind</code> in the
<span class="command"><strong>rate-limit</strong></span> is set to allow
three responses per second.
</p>
-<p>
+ <p>
If you need to disable these zones, use the options
below, or hide the built-in <span class="command"><strong>CHAOS</strong></span>
view by
defining an explicit view of class <span class="command"><strong>CHAOS</strong></span>
that matches all clients.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>version</strong></span></span></dt>
<dd>
-<p>
+ <p>
The version the server should report
via a query of the name <code class="literal">version.bind</code>
with type <span class="command"><strong>TXT</strong></span>, class <span class="command"><strong>CHAOS</strong></span>.
Specifying <span class="command"><strong>version none</strong></span>
disables processing of the queries.
</p>
-<p>
+ <p>
Setting <span class="command"><strong>version</strong></span> to any value
(including <code class="literal">none</code>) will also
disable queries for <code class="literal">authors.bind TXT CH</code>.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>hostname</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The hostname the server should report via a query of
the name <code class="filename">hostname.bind</code>
with type <span class="command"><strong>TXT</strong></span>, class <span class="command"><strong>CHAOS</strong></span>.
identify which of a group of anycast servers is actually
answering your queries. Specifying <span class="command"><strong>hostname none;</strong></span>
disables processing of the queries.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>server-id</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The ID the server should report when receiving a Name
Server Identifier (NSID) query, or a query of the name
<code class="filename">ID.SERVER</code> with type
Specifying <span class="command"><strong>server-id hostname;</strong></span> will cause <span class="command"><strong>named</strong></span> to
use the hostname as found by the gethostname() function.
The default <span class="command"><strong>server-id</strong></span> is <span class="command"><strong>none</strong></span>.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="empty"></a>Built-in Empty Zones</h4></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>named</strong></span> server has some built-in
empty zones (SOA and NS records only).
These are for zones that should normally be answered locally
IPv6 link local addresses, the IPv6 loopback address and the
IPv6 unknown address.
</p>
-<p>
+ <p>
The server will attempt to determine if a built-in zone
already exists or is active (covered by a forward-only
forwarding declaration) and will not create an empty
zone in that case.
</p>
-<p>
+ <p>
The current list of empty zones is:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
</ul></div>
<p>
</p>
-<p>
+ <p>
Empty zones are settable at the view level and only apply to
views of class IN. Disabled empty zones are only inherited
from options if there are no disabled empty zones specified
</pre>
<p>
</p>
-<p>
+ <p>
If you are using the address ranges covered here, you should
already have reverse zones covering the addresses you use.
In practice this appears to not be the case with many queries
to be deployed to channel the query load away from the
infrastructure servers.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
The real parent servers for these zones should disable all
enable them to return referrals to deeper in the tree.
</p>
</div>
-<div class="variablelist"><dl class="variablelist">
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>empty-server</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specify what server name will appear in the returned
SOA record for empty zones. If none is specified, then
the zone's name will be used.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>empty-contact</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specify what contact name will appear in the returned
SOA record for empty zones. If none is specified, then
"." will be used.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>empty-zones-enable</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Enable or disable all empty zones. By default, they
are enabled.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>disable-empty-zone</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Disable individual empty zones. By default, none are
disabled. This option can be specified multiple times.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="content_filtering"></a>Content Filtering</h4></div></div></div>
-<p>
+
+ <p>
<acronym class="acronym">BIND</acronym> 9 provides the ability to filter
out DNS responses from external DNS servers containing
certain types of data in the answer section.
<span class="command"><strong>deny-answer-aliases</strong></span>,
</p>
<pre class="programlisting">www.example.com. CNAME xxx.example.com.</pre>
-<p>
+
+ <p>
returned by an "example.com" server will be accepted.
</p>
-<p>
+
+ <p>
In the <code class="varname">address_match_list</code> of the
<span class="command"><strong>deny-answer-addresses</strong></span> option, only
<code class="varname">ip_addr</code>
are meaningful;
any <code class="varname">key_id</code> will be silently ignored.
</p>
-<p>
+
+ <p>
If a response message is rejected due to the filtering,
the entire message is discarded without being cached, and
a SERVFAIL error will be returned to the client.
</p>
-<p>
+
+ <p>
This filtering is intended to prevent "DNS rebinding attacks," in
which an attacker, in response to a query for a domain name the
attacker controls, returns an IP address within your own network or
</a>
for more details about the attacks.
</p>
-<p>
+
+ <p>
For example, if you own a domain named "example.net" and
your internal network uses an IPv4 prefix 192.0.2.0/24,
you might specify the following rules:
</p>
+
<pre class="programlisting">deny-answer-addresses { 192.0.2.0/24; } except-from { "example.net"; };
deny-answer-aliases { "example.net"; };
</pre>
-<p>
+
+ <p>
If an external attacker lets a web browser in your local
network look up an IPv4 address of "attacker.example.com",
the attacker's DNS server would return a response like this:
</p>
+
<pre class="programlisting">attacker.example.com. A 192.0.2.1</pre>
-<p>
+
+ <p>
in the answer section.
Since the rdata of this record (the IPv4 address) matches
the specified prefix 192.0.2.0/24, this response will be
ignored.
</p>
-<p>
+
+ <p>
On the other hand, if the browser looks up a legitimate
internal web server "www.example.net" and the
following response is returned to
the <acronym class="acronym">BIND</acronym> 9 server
</p>
+
<pre class="programlisting">www.example.net. A 192.0.2.2</pre>
-<p>
+
+ <p>
it will be accepted since the owner name "www.example.net"
matches the <span class="command"><strong>except-from</strong></span> element,
"example.net".
</p>
-<p>
+
+ <p>
Note that this is not really an attack on the DNS per se.
In fact, there is nothing wrong for an "external" name to
be mapped to your "internal" IP address or domain name
very sure you have no other choice and the attack is a
real threat for your applications.
</p>
-<p>
+
+ <p>
Care should be particularly taken if you want to use this
option for addresses within 127.0.0.0/8.
These addresses are obviously "internal", but many
Filtering out DNS records containing this address
spuriously can break such applications.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="rpz"></a>Response Policy Zone (RPZ) Rewriting</h4></div></div></div>
-<p>
+
+ <p>
<acronym class="acronym">BIND</acronym> 9 includes a limited
mechanism to modify DNS responses for requests
analogous to email anti-spam DNS blacklists.
deny the existence of IP addresses for domains (NODATA),
or contain other IP addresses or data.
</p>
-<p>
+
+ <p>
Response policy zones are named in the
<span class="command"><strong>response-policy</strong></span> option for the view or among the
global options if there is no response-policy option for the view.
Note that zones using <span class="command"><strong>masterfile-format map</strong></span>
cannot be used as policy zones.
</p>
-<p>
+
+ <p>
A <span class="command"><strong>response-policy</strong></span> option can support
multiple policy zones. To maximize performance, a radix
tree is used to quickly identify response policy zones
in a single <span class="command"><strong>response-policy</strong></span> option; more
than that is a configuration error.
</p>
-<p>
+
+ <p>
Rules encoded in response policy zones are processed after
<a class="link" href="Bv9ARM.ch05.html#access_control" title="Access Control">Access Control Lists
(ACLs)</a>. All queries from clients which are not
permitted access to the resolver will be answered with a
status code of REFUSED, regardless of configured RPZ rules.
</p>
-<p>
+
+ <p>
Five policy triggers can be encoded in RPZ records.
</p>
<div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>RPZ-CLIENT-IP</strong></span></span></dt>
<dd>
-<p>
+ <p>
IP records are triggered by the IP address of the
DNS client.
Client IP address triggers are encoded in records that have
B4 is the decimal value of the least significant byte of the
IPv4 address as in IN-ADDR.ARPA.
</p>
-<p>
+
+ <p>
IPv6 addresses are encoded in a format similar
to the standard IPv6 text representation,
<strong class="userinput"><code>prefixlength.W8.W7.W6.W5.W4.W3.W2.W1.rpz-client-ip</code></strong>.
encodings.
The IPv6 prefix length must be between 1 and 128.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>QNAME</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
QNAME policy records are triggered by query names of
requests and targets of CNAME records resolved to generate
the response.
The owner name of a QNAME policy record is
the query name relativized to the policy zone.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>RPZ-IP</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
IP triggers are IP addresses in an
A or AAAA record in the ANSWER section of a response.
They are encoded like client-IP triggers except as
subdomains of <span class="command"><strong>rpz-ip</strong></span>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>RPZ-NSDNAME</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
NSDNAME triggers match names of authoritative servers
for the query name, a parent of the query name, a CNAME for
query name, or a parent of a CNAME.
The <span class="command"><strong>nsdname-enable</strong></span> phrase turns NSDNAME
triggers off or on for a single policy zone or all
zones.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>RPZ-NSIP</strong></span></span></dt>
<dd>
-<p>
+ <p>
NSIP triggers match the IP addresses of authoritative
servers. They are enncoded like IP triggers, except as
subdomains of <span class="command"><strong>rpz-nsip</strong></span>.
triggers off or on for a single policy zone or all
zones.
</p>
-<p>
+ <p>
If a name server's IP address is not yet known,
<span class="command"><strong>named</strong></span> will recursively look up
the IP address before applying an RPZ-NSIP rule.
rules should always be applied even if an
address needs to be looked up first.
</p>
-</dd>
+ </dd>
</dl></div>
<p>
</p>
-<p>
+
+ <p>
The query response is checked against all response policy zones,
so two or more policy records can be triggered by a response.
Because DNS responses are rewritten according to at most one
</ol></div>
<p>
</p>
-<p>
+
+ <p>
When the processing of a response is restarted to resolve
DNAME or CNAME records and a policy record set has
not been triggered,
all response policy zones are again consulted for the
DNAME or CNAME names and addresses.
</p>
-<p>
+
+ <p>
RPZ record sets are any types of DNS record except
DNAME or DNSSEC that encode actions or responses to
individual queries.
</p>
<div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>PASSTHRU</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The whitelist policy is specified
by a CNAME whose target is <span class="command"><strong>rpz-passthru</strong></span>.
It causes the response to not be rewritten
and is most often used to "poke holes" in policies for
CIDR blocks.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>DROP</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The blacklist policy is specified
by a CNAME whose target is <span class="command"><strong>rpz-drop</strong></span>.
It causes the response to be discarded.
Nothing is sent to the DNS client.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>TCP-Only</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The "slip" policy is specified
by a CNAME whose target is <span class="command"><strong>rpz-tcp-only</strong></span>.
It changes UDP responses to short, truncated DNS responses
that require the DNS client to try again with TCP.
It is used to mitigate distributed DNS reflection attacks.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>NXDOMAIN</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The domain undefined response is encoded
by a CNAME whose target is the root domain (.)
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>NODATA</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The empty set of resource records is specified by
CNAME whose target is the wildcard top-level
domain (*.).
It rewrites the response to NODATA or ANCOUNT=0.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>Local Data</strong></span></span></dt>
<dd>
-<p>
+ <p>
A set of ordinary DNS records can be used to answer queries.
Queries for record types not the set are answered with
NODATA.
</p>
-<p>
+
+ <p>
A special form of local data is a CNAME whose target is a
wildcard such as *.example.com.
It is used as if were an ordinary CNAME after the asterisk (*)
The purpose for this special form is query logging in the
walled garden's authority DNS server.
</p>
-</dd>
+ </dd>
</dl></div>
<p>
</p>
-<p>
+
+ <p>
All of the actions specified in all of the individual records
in a policy zone
can be overridden with a <span class="command"><strong>policy</strong></span> clause in the
</p>
<div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>GIVEN</strong></span></span></dt>
-<dd><p>The placeholder policy says "do not override but
+<dd>
+ <p>The placeholder policy says "do not override but
perform the action specified in the zone."
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>DISABLED</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The testing override policy causes policy zone records to do
nothing but log what they would have done if the
policy zone were not disabled.
Disabled policy zones should appear first,
because they will often not be logged
if a higher precedence trigger is found first.
- </p></dd>
+ </p>
+ </dd>
<dt>
<span class="term"><span class="command"><strong>PASSTHRU</strong></span>, </span><span class="term"><span class="command"><strong>DROP</strong></span>, </span><span class="term"><span class="command"><strong>TCP-Only</strong></span>, </span><span class="term"><span class="command"><strong>NXDOMAIN</strong></span>, </span><span class="term"><span class="command"><strong>NODATA</strong></span></span>
</dt>
-<dd><p>
+<dd>
+ <p>
override with the corresponding per-record policy.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>CNAME domain</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
causes all RPZ policy records to act as if they were
"cname domain" records.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
<p>
</p>
-<p>
+
+ <p>
By default, the actions encoded in a response policy zone
are applied only to queries that ask for recursion (RD=1).
That default can be changed for a single policy zone or
delete answers that would otherwise contain RFC 1918 values
on the externally visible name server or view.
</p>
-<p>
+
+ <p>
Also by default, RPZ actions are applied only to DNS requests
that either do not request DNSSEC metadata (DO=0) or when no
DNSSEC records are available for request name in the original
clause option reflects the fact that results rewritten by RPZ
actions cannot verify.
</p>
-<p>
+
+ <p>
No DNS records are needed for a QNAME or Client-IP trigger.
The name or IP address itself is sufficient,
so in principle the query name need not be recursively resolved.
appear to be rewritten, since no recursion is being done to
discover problems at the authoritative server.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>dnsrps-enable yes</strong></span> option turns on
the DNS Rsponse Policy Service (DNSRPS) interface, if it has been
compiled in to <span class="command"><strong>named</strong></span> using
<span class="command"><strong>configure --enable-dnsrps</strong></span>.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>dnsrps-options</strong></span> block provides additional
RPZ configuration settings, which are passed through to the
DNSRPS provider library.
concatenated with settings derived from the
<span class="command"><strong>response-policy</strong></span> statement.
</p>
-<p>
+
+ <p>
Note: The <span class="command"><strong>dnsrps-options</strong></span> text should only include
configuration settings that are specific to the DNSRPS
provider. For example, the DNSRPS provider from
<span class="command"><strong>dnsrps-enable</strong></span> to "no", those options would
be ignored.
</p>
-<p>
+
+ <p>
The TTL of a record modified by RPZ policies is set from the
TTL of the relevant record in policy zone. It is then limited
to a maximum value.
formats.
</p>
-<p>
+
+ <p>
For example, you might use this option statement
</p>
<pre class="programlisting"> response-policy { zone "badlist"; };</pre>
-<p>
+ <p>
and this zone statement
</p>
<pre class="programlisting"> zone "badlist" {type master; file "master/badlist"; allow-query {none;}; };</pre>
-<p>
+ <p>
with this zone file
</p>
<pre class="programlisting">$TTL 1H
*.example.com CNAME rpz-tcp-only.
</pre>
-<p>
+ <p>
RPZ can affect server performance.
Each configured response policy zone requires the server to
perform one to four additional database lookups before a
A server with four response policy zones with QNAME and IP
triggers might have a maximum QPS rate about 50% lower.
</p>
-<p>
+
+ <p>
Responses rewritten by RPZ are counted in the
<span class="command"><strong>RPZRewrites</strong></span> statistics.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>log</strong></span> clause can be used to optionally
turn off rewrite logging for a particular response policy
zone. By default, all rewrites are logged.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>add-soa</strong></span> option controls whether the RPZ's
SOA record is added to the additional section for traceback
of changes from this zone or not. This can be set at the
individual policy zone level or at the response-policy level.
The default is <code class="literal">yes</code>.
</p>
-<p>
+
+ <p>
Updates to RPZ zones are processed asynchronously; if there
is more than one update pending they are bundled together.
If an update to a RPZ zone (for example, via IXFR) happens less
used to specify the value. It also accepts ISO 8601 duration
formats.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="rrl"></a>Response Rate Limiting</h4></div></div></div>
-<p>
+
+ <p>
Excessive almost identical UDP <span class="emphasis"><em>responses</em></span>
can be controlled by configuring a
<span class="command"><strong>rate-limit</strong></span> clause in an
Legitimate clients react to dropped or truncated response
by retrying with UDP or with TCP respectively.
</p>
-<p>
+
+ <p>
This mechanism is intended for authoritative DNS servers.
It can be used on recursive servers but can slow
applications such as SMTP servers (mail receivers) and
same domains.
When possible, closing "open" recursive servers is better.
</p>
-<p>
+
+ <p>
Response rate limiting uses a "credit" or "token bucket" scheme.
Each combination of identical response and client
has a conceptual account that earns a specified number
When the specified number of credits for a class of
responses is set to 0, those responses are not rate limited.
</p>
-<p>
+
+ <p>
The notions of "identical response" and "DNS client"
for rate limiting are not simplistic.
All responses to an address block are counted as if to a
specified with <span class="command"><strong>ipv4-prefix-length</strong></span> (default 24)
and <span class="command"><strong>ipv6-prefix-length</strong></span> (default 56).
</p>
-<p>
+
+ <p>
All non-empty responses for a valid domain name (qname)
and record type (qtype) are identical and have a limit specified
with <span class="command"><strong>responses-per-second</strong></span>
<span class="command"><strong>referrals-per-second</strong></span>
(default <span class="command"><strong>responses-per-second</strong></span>).
</p>
-<p>
+
+ <p>
Responses generated from local wildcards are counted and limited
as if they were for the parent domain name.
This controls flooding using random.wild.example.com.
</p>
-<p>
+
+ <p>
All requests that result in DNS errors other
than NXDOMAIN, such as SERVFAIL and FORMERR, are identical
regardless of requested name (qname) or record type (qtype).
but it can be set separately with
<span class="command"><strong>errors-per-second</strong></span>.
</p>
-<p>
+
+ <p>
Many attacks using DNS involve UDP requests with forged source
addresses.
Rate limiting prevents the use of BIND 9 to flood a network
cannot be replaced with truncated responses and are instead
leaked at the <span class="command"><strong>slip</strong></span> rate.
</p>
-<p>
+
+ <p>
(NOTE: Dropped responses from an authoritative server may
reduce the difficulty of a third party successfully forging
a response to a recursive resolver. The best security
responses to be truncated rather than dropped. This reduces
the effectiveness of rate-limiting against reflection attacks.)
</p>
-<p>
+
+ <p>
When the approximate query per second rate exceeds
the <span class="command"><strong>qps-scale</strong></span> value,
then the <span class="command"><strong>responses-per-second</strong></span>,
Responses sent via TCP are not limited
but are counted to compute the query per second rate.
</p>
-<p>
+
+ <p>
Communities of DNS clients can be given their own parameters or no
rate limiting by putting
<span class="command"><strong>rate-limit</strong></span> statements in <span class="command"><strong>view</strong></span>
DNS clients within a view can be exempted from rate limits
with the <span class="command"><strong>exempt-clients</strong></span> clause.
</p>
-<p>
+
+ <p>
UDP responses of all kinds can be limited with the
<span class="command"><strong>all-per-second</strong></span> phrase. This rate
limiting is unlike the rate limiting provided by
or parsing DNS requests, but that rate limiting must
be done before the DNS server sees the requests.
</p>
-<p>
+
+ <p>
The maximum size of the table used to track requests and
rate limit responses is set with <span class="command"><strong>max-table-size</strong></span>.
Each entry in the table is between 40 and 80 bytes.
expansions of the table and inform
choices for the initial and maximum table size.
</p>
-<p>
+
+ <p>
Use <span class="command"><strong>log-only yes</strong></span> to test rate limiting parameters
without actually dropping any requests.
</p>
-<p>
+
+ <p>
Responses dropped by rate limits are included in the
<span class="command"><strong>RateDropped</strong></span> and <span class="command"><strong>QryDropped</strong></span>
statistics.
Responses that truncated by rate limits are included in
<span class="command"><strong>RateSlipped</strong></span> and <span class="command"><strong>RespTruncated</strong></span>.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"></div>
-<p>
+ <p>
Named supports NXDOMAIN redirection via two methods:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
</ul></div>
<p>
</p>
-<p>
+ <p>
With both methods when named gets a NXDOMAIN response
it examines a separate namespace to see if the NXDOMAIN
response should be replaced with an alternative response.
</p>
-<p>
+ <p>
With a redirect zone (<span class="command"><strong>zone "." { type redirect; };</strong></span>), the
data used to replace the NXDOMAIN is held in a single
zone which is not part of the normal namespace. All the
redirect information is contained in the zone; there are
no delegations.
</p>
-<p>
+ <p>
With a redirect namespace (<span class="command"><strong>option { nxdomain-redirect
<suffix> };</strong></span>) the data used to replace the
NXDOMAIN is part of the normal namespace and is looked up by
the replacement data or a NXDOMAIN indicating that there
is no replacement.
</p>
-<p>
+ <p>
If both a redirect zone and a redirect namespace are configured,
the redirect zone is tried first.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="server_statement_grammar"></a><span class="command"><strong>server</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>server</strong></span> <em class="replaceable"><code>netprefix</code></em> {
<span class="command"><strong>bogus</strong></span> <em class="replaceable"><code>boolean</code></em>;
<span class="command"><strong>edns</strong></span> <em class="replaceable"><code>boolean</code></em>;
<span class="command"><strong>transfers</strong></span> <em class="replaceable"><code>integer</code></em>;
};
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="server_statement_definition_and_usage"></a><span class="command"><strong>server</strong></span> Statement Definition and
Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>server</strong></span> statement defines
characteristics
to be associated with a remote name server. If a prefix length is
server clause applies regardless of the order in
<code class="filename">named.conf</code>.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>server</strong></span> statement can occur at
the top level of the
configuration file or inside a <span class="command"><strong>view</strong></span>
used as
defaults.
</p>
-<p>
+
+ <p>
If you discover that a remote server is giving out bad data,
marking it as bogus will prevent further queries to it. The
default
value of <span class="command"><strong>bogus</strong></span> is <span class="command"><strong>no</strong></span>.
</p>
-<p>
+ <p>
The <span class="command"><strong>provide-ixfr</strong></span> clause determines
whether
the local server, acting as master, will respond with an
view or
global options block is used as a default.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>request-ixfr</strong></span> clause determines
whether
the local server, acting as a slave, will request incremental zone
also be set in the zone block and, if set there, it will
override the global or view setting for that zone.
</p>
-<p>
+
+ <p>
IXFR requests to servers that do not support IXFR will
automatically
fall back to AXFR. Therefore, there is no need to manually list
and slave claim to support it, for example if one of the servers
is buggy and crashes or corrupts data when IXFR is used.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>request-expire</strong></span> clause determines
whether the local server, when acting as a slave, will
request the EDNS EXPIRE value. The EDNS EXPIRE value
record instead.
The default is <span class="command"><strong>yes</strong></span>.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>edns</strong></span> clause determines whether
the local server will attempt to use EDNS when communicating
with the remote server. The default is <span class="command"><strong>yes</strong></span>.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>edns-udp-size</strong></span> option sets the
EDNS UDP size that is advertised by <span class="command"><strong>named</strong></span>
when querying the remote server. Valid values are 512
behavior may be brought into conformance with the
<span class="command"><strong>options/view</strong></span> behavior in future releases.)
</p>
-<p>
+
+ <p>
The <span class="command"><strong>edns-version</strong></span> option sets the
maximum EDNS VERSION that will be sent to the server(s)
by the resolver. The actual EDNS version sent is still
adjusted. This option will not be needed until higher
EDNS versions than 0 are in use.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>max-udp-size</strong></span> option sets the
maximum EDNS UDP message size <span class="command"><strong>named</strong></span>
will send. Valid values are 512 to 4096 bytes (values
option is useful when you know that there is a firewall
that is blocking large replies from <span class="command"><strong>named</strong></span>.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>padding</strong></span> option adds EDNS Padding
options to outgoing messages, increasing the packet size to
a multiple of the specified block size. Valid block sizes
would have to be added to the packet after it had already
been signed.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>tcp-only</strong></span> option sets the transport
protocol to TCP. The default is to use the UDP transport
and to fallback on TCP only when a truncated response
is received.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>tcp-keepalive</strong></span> option adds EDNS
TCP keepalive to messages sent over TCP. Note currently
idle timeouts in responses are ignored.
</p>
-<p>
+
+ <p>
The server supports two zone transfer methods. The first, <span class="command"><strong>one-answer</strong></span>,
uses one DNS message per resource record transferred. <span class="command"><strong>many-answers</strong></span> packs
as many resource records as possible into a message. <span class="command"><strong>many-answers</strong></span> is
by the <span class="command"><strong>options</strong></span> statement will be
used.
</p>
-<p><span class="command"><strong>transfers</strong></span>
+
+ <p><span class="command"><strong>transfers</strong></span>
is used to limit the number of concurrent inbound zone
transfers from the specified server. If no
<span class="command"><strong>transfers</strong></span> clause is specified, the
limit is set according to the
<span class="command"><strong>transfers-per-ns</strong></span> option.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>keys</strong></span> clause identifies a
<span class="command"><strong>key_id</strong></span> defined by the <span class="command"><strong>key</strong></span> statement,
to be used for transaction security (TSIG, <a class="xref" href="Bv9ARM.ch04.html#tsig" title="TSIG">the section called “TSIG”</a>)
required
to be signed by this key.
</p>
-<p>
+
+ <p>
Only a single key per server is currently supported.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>transfer-source</strong></span> and
<span class="command"><strong>transfer-source-v6</strong></span> clauses specify
the IPv4 and IPv6 source
<span class="command"><strong>transfer-source-v6</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>notify-source</strong></span> and
<span class="command"><strong>notify-source-v6</strong></span> clauses specify the
IPv4 and IPv6 source address to be used for notify
can be specified. Similarly, for an IPv6 remote server,
only <span class="command"><strong>notify-source-v6</strong></span> can be specified.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>query-source</strong></span> and
<span class="command"><strong>query-source-v6</strong></span> clauses specify the
IPv4 and IPv6 source address to be used for queries
be specified. Similarly, for an IPv6 remote server,
only <span class="command"><strong>query-source-v6</strong></span> can be specified.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>request-nsid</strong></span> clause determines
whether the local server will add a NSID EDNS option
to requests sent to the server. This overrides
<span class="command"><strong>request-nsid</strong></span> set at the view or
option level.
</p>
-<p>
+
+ <p>
The <span class="command"><strong>send-cookie</strong></span> clause determines
whether the local server will add a COOKIE EDNS option
to requests sent to the server. This overrides
determine that COOKIE is not supported by the remote server
and not add a COOKIE EDNS option to requests.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="statschannels"></a><span class="command"><strong>statistics-channels</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>statistics-channels</strong></span> {
<span class="command"><strong>inet</strong></span> ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> |
* ) [ port ( <em class="replaceable"><code>integer</code></em> | * ) ] [
} ];
};
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="statistics_channels"></a><span class="command"><strong>statistics-channels</strong></span> Statement Definition and
Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>statistics-channels</strong></span> statement
declares communication channels to be used by system
administrators to get access to statistics information of
the name server.
</p>
-<p>
+
+ <p>
This statement intends to be flexible to support multiple
communication protocols in the future, but currently only
HTTP access is supported.
still accepted even if it is built without the library,
but any HTTP access will fail with an error.
</p>
-<p>
+
+ <p>
An <span class="command"><strong>inet</strong></span> control channel is a TCP socket
listening at the specified <span class="command"><strong>ip_port</strong></span> on the
specified <span class="command"><strong>ip_addr</strong></span>, which can be an IPv4 or IPv6
To listen on the IPv6 wildcard address,
use an <span class="command"><strong>ip_addr</strong></span> of <code class="literal">::</code>.
</p>
-<p>
+
+ <p>
If no port is specified, port 80 is used for HTTP channels.
The asterisk "<code class="literal">*</code>" cannot be used for
<span class="command"><strong>ip_port</strong></span>.
</p>
-<p>
+
+ <p>
The attempt of opening a statistics channel is
restricted by the optional <span class="command"><strong>allow</strong></span> clause.
Connections to the statistics channel are permitted based on the
recommended to restrict the source of connection requests
appropriately.
</p>
-<p>
+
+ <p>
If no <span class="command"><strong>statistics-channels</strong></span> statement is present,
<span class="command"><strong>named</strong></span> will not open any communication channels.
</p>
-<p>
+
+ <p>
The statistics are available in various formats and views
depending on the URI used to access them. For example, if
the statistics channel is configured to listen on 127.0.0.1
charts and graphs using the Google Charts API when using a
javascript-capable browser.
</p>
-<p>
+
+ <p>
Broken-out subsets of the statistics can be viewed at
<a class="link" href="http://127.0.0.1:8888/xml/v3/status" target="_top">http://127.0.0.1:8888/xml/v3/status</a>
(server uptime and last reconfiguration time),
<a class="link" href="http://127.0.0.1:8888/xml/v3/traffic" target="_top">http://127.0.0.1:8888/xml/v3/traffic</a>
(traffic sizes).
</p>
-<p>
+
+ <p>
The full set of statistics can also be read in JSON format at
<a class="link" href="http://127.0.0.1:8888/json" target="_top">http://127.0.0.1:8888/json</a>,
with the broken-out subsets at
<a class="link" href="http://127.0.0.1:8888/json/v1/traffic" target="_top">http://127.0.0.1:8888/json/v1/traffic</a>
(traffic sizes).
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="trust_anchors"></a><span class="command"><strong>trust-anchors</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>trust-anchors</strong></span> { <em class="replaceable"><code>string</code></em> ( static-key |
<span class="command"><strong>initial-key</strong></span> | static-ds | initial-ds )
<em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em>
<em class="replaceable"><code>quoted_string</code></em>; ... };
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="trust-anchors"></a><span class="command"><strong>trust-anchors</strong></span> Statement Definition
and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>trust-anchors</strong></span> statement defines DNSSEC
trust anchors. DNSSEC is described in <a class="xref" href="Bv9ARM.ch04.html#DNSSEC" title="DNSSEC">the section called “DNSSEC”</a>.
</p>
-<p>
+ <p>
A trust anchor is defined when the public key or public key
digest for a non-authoritative zone is known, but cannot be
securely obtained through DNS, either because it is the DNS
or digest has been configured as a trust anchor, it is treated
as if it had been validated and proven secure.
</p>
-<p>
+ <p>
The resolver attempts DNSSEC validation on all DNS data
in subdomains of configured trust anchors. (Validation below
specified names can be temporarily disabled by using
<span class="command"><strong>rndc nta</strong></span>, or permanently disabled with
the <span class="command"><strong>validate-except</strong></span> option).
</p>
-<p>
+ <p>
All keys listed in <span class="command"><strong>trust-anchors</strong></span>, and
their corresponding zones, are deemed to exist regardless
of what parent zones say. Only keys configured as trust anchors
are used to validate the DNSKEY RRset for the corresponding
name. The parent's DS RRset will not be used.
</p>
-<p>
+ <p>
<span class="command"><strong>trust-anchors</strong></span> may be set at the top level
of <code class="filename">named.conf</code> or within a view. If it is
set in both places, the configurations are additive: keys
defined at the top level are inherited by all views, but keys
defined in a view are only used within that view.
</p>
-<p>
+ <p>
The <span class="command"><strong>trust-anchors</strong></span> statement can contain
multiple trust anchor entries, each consisting of a
domain name, followed by an "anchor type" keyword indicating
the trust anchor's format, followed by the key or digest data.
</p>
-<p>
+ <p>
If the anchor type is <span class="command"><strong>static-key</strong></span> or
<span class="command"><strong>initial-key</strong></span>, then it is followed with the
key's flags, protocol, algorithm, and the Base64 representation
carriage returns are ignored in the key data, so the
configuration may be split up into multiple lines.
</p>
-<p>
+ <p>
If the anchor type is <span class="command"><strong>static-ds</strong></span> or
<span class="command"><strong>initial-ds</strong></span>, then it is followed with the
key tag, algorithm, digest type, and the hexadecimal
text representation of a DS record. Spaces, tabs, newlines
and carriage returns are ignored.
</p>
-<p>
+ <p>
Trust anchors configured with the
<span class="command"><strong>static-key</strong></span> or <span class="command"><strong>static-ds</strong></span>
anchor types are immutable, while keys configured with
keys are identical to keys configured using the deprecated
<span class="command"><strong>trusted-keys</strong></span> statement.)
</p>
-<p>
+ <p>
Suppose, for example, that a zone's key-signing
key was compromised, and the zone owner had to revoke and
replace the key. A resolver which had the original key
updated the <span class="command"><strong>trust-anchors</strong></span> statement with
the new key.
</p>
-<p>
+ <p>
If, however, the trust anchor had been configured with
<span class="command"><strong>initial-key</strong></span> or <span class="command"><strong>initial-ds</strong></span>
instead, then the zone owner could add a "stand-by" key to
This is the process used to keep the ICANN root DNSSEC key
up to date.
</p>
-<p>
+ <p>
Whereas <span class="command"><strong>static-key</strong></span> and
<span class="command"><strong>static-ds</strong></span> trust anchors continue
to be trusted until they are removed from
takes to load the managed key database and start the RFC 5011
key maintenance process.
</p>
-<p>
+ <p>
It is not possible to mix static with initial trust anchors
for the same domain name.
</p>
-<p>
+ <p>
The first time <span class="command"><strong>named</strong></span> runs with an
<span class="command"><strong>initial-key</strong></span> or <span class="command"><strong>initial-ds</strong></span>
configured in <code class="filename">named.conf</code>, it fetches the
the trust anchor, then it is used as the basis for a new
managed keys database.
</p>
-<p>
+ <p>
From that point on, whenever <span class="command"><strong>named</strong></span> runs, it
sees the <span class="command"><strong>initial-key</strong></span> or
<span class="command"><strong>initial-ds</strong></span> listed in
superseded by the key or keys stored in the managed keys
database.
</p>
-<p>
+ <p>
The next time <span class="command"><strong>named</strong></span> runs after an
<span class="command"><strong>initial-key</strong></span> or <span class="command"><strong>initial-ds</strong></span>
trust anchor has been <span class="emphasis"><em>removed</em></span> from the
database, and RFC 5011 key maintenance will no longer be used
for that domain.
</p>
-<p>
+ <p>
In the current implementation, the managed keys database
is stored as a master-format zone file.
</p>
-<p>
+ <p>
On servers which do not use views, this file is named
<code class="filename">managed-keys.bind</code>. When views are in
use, there will be a separate managed keys database for each
a hash of the view name), followed by
the suffix <code class="filename">.mkeys</code>.
</p>
-<p>
+ <p>
When the key database is changed, the zone is updated.
As with any other dynamic zone, changes will be written
into a journal file, e.g.,
(For this reason among others, the working directory
should be always be writable by <span class="command"><strong>named</strong></span>.)
</p>
-<p>
+ <p>
If the <span class="command"><strong>dnssec-validation</strong></span> option is
set to <strong class="userinput"><code>auto</code></strong>, <span class="command"><strong>named</strong></span>
will automatically initialize an <span class="command"><strong>initial-key</strong></span>
found, the initializing key is also compiled directly
into <span class="command"><strong>named</strong></span>.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="dnssec_policy_grammar"></a><span class="command"><strong>dnssec-policy</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>dnssec-policy</strong></span> <em class="replaceable"><code>string</code></em> {
<span class="command"><strong>dnskey-ttl</strong></span> <em class="replaceable"><code>duration</code></em>;
<span class="command"><strong>keys</strong></span> { ( csk | ksk | zsk ) key-directory lifetime ( <em class="replaceable"><code>duration</code></em> | unlimited ) algorithm <em class="replaceable"><code>integer</code></em> [ <em class="replaceable"><code>integer</code></em> ] ; ... };
<span class="command"><strong>zone-propagation-delay</strong></span> <em class="replaceable"><code>duration</code></em>;
};
</pre>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="dnssec_policy"></a><span class="command"><strong>dnssec-policy</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>dnssec-policy</strong></span> statement defines a key and
signing policy (KASP) for zones.
</p>
-<p>
+ <p>
A KASP determines how one or more zones will be signed
with DNSSEC. For example, it specifies how often keys should
roll, which cryptographic algorithms to use, and how often RRSIG
records need to be refreshed.
</p>
-<p>
+ <p>
Keys are not shared among zones, which means that one set of keys
per zone will be generated even if they have the same policy.
If multiple views are configured with different versions of the
same zone, each separate version will use the same set of signing
keys.
</p>
-<p>
+ <p>
Multiple key and signing policies can be configured. To
attach a policy to a zone, add a <span class="command"><strong>dnssec-policy</strong></span>
option to the <span class="command"><strong>zone</strong></span> statement, specifying he
name of the policy that should be used.
</p>
-<p>
+ <p>
Key rollover timing is computed for each key according to
the key lifetime defined in the KASP. The lifetime may be
modified by zone TTLs and propagation delays, in order to
new one, and finally retire the old key according to a computed
schedule.
</p>
-<p>
+ <p>
Zone-signing key (ZSK) rollovers require no operator input.
Key-signing key (KSK) and combined signing key (CSK) rollovers
require action to be taken to submit a DS record to the parent.
Rollover timing for KSKs and CSKs is adjusted to take into account
delays in processing and propagating DS updates.
</p>
-<p>
+ <p>
There are two predefined <span class="command"><strong>dnssec-policy</strong></span> names:
<span class="command"><strong>none</strong></span> and <span class="command"><strong>default</strong></span>.
Setting a zone's policy to
</div>
<p>
</p>
-<p>
+ <p>
If a <span class="command"><strong>dnssec-policy</strong></span> statement is modified
and the server restarted or reconfigured, <span class="command"><strong>named</strong></span>
will attempt to change the policy smoothly from the old one to
</div>
<p>
</p>
-<p>
+ <p>
The following options can be specified in a
<span class="command"><strong>dnssec-policy</strong></span> statement:
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>dnskey-ttl</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The TTL to use when generating DNSKEY resource records.
The default is 1 hour (3600 seconds).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>keys</strong></span></span></dt>
<dd>
-<p>
+ <p>
A list specifying the algorithms and roles to use when
generating keys and signing the zone.
Entries in this list do not represent specific
that the DNSKEY RRset will always include a key-signing key
for that algorithm.
</p>
-<p>
+ <p>
Here is an example (for illustration purposes only) of
some possible entries in a <span class="command"><strong>keys</strong></span>
list:
</p>
+
<pre class="programlisting">keys {
ksk key-directory lifetime unlimited algorithm rsasha1 2048;
zsk lifetime P30D algorithm 8;
csk lifetime P6MT12H3M15S algorithm ecdsa256;
};
</pre>
-<p>
+
+ <p>
This example specifies that three keys should be used
in the zone. The first token determines which role the
key will play in signing RRsets. If set to
<strong class="userinput"><code>csk</code></strong> the key will have the KSK
flag set and will be used to sign all RRsets.
</p>
-<p>
+ <p>
An optional second token determines where the key will
be stored. Currently, keys can only be stored in the
configured <span class="command"><strong>key-directory</strong></span>. This token
may be used in the future to store keys in hardware
service modules or separate directories.
</p>
-<p>
+ <p>
The <span class="command"><strong>lifetime</strong></span> parameter specifies how
long a key may be used before rolling over. In the
example above, the first key will have an unlimited
12 hours, 3 minutes and 15 seconds. A lifetime of 0
seconds is the same as <span class="command"><strong>unlimited</strong></span>.
</p>
-<p>
+ <p>
Note that the lifetime of a key may be extended if
retiring it too soon would cause validation failures.
For example, if the key were configured to roll more
frequently than its own TTL, its lifetime would
automatically be extended to account for this.
</p>
-<p>
+ <p>
The <span class="command"><strong>algorithm</strong></span> parameter specifies
the key's algorithm, expressed either as a string
("rsasha256", "ecdsa384", etc) or as a decimal number.
example for the second and third keys, an appropriate
default size for the algorithm will be used.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>publish-safety</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
A margin that is added to the pre-publication
interval in rollover timing calculations to give some
extra time to cover unforeseen events. This increases
the time that keys are published before becoming active.
The default is <code class="constant">PT1H</code> (1 hour).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>retire-safety</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
A margin that is added to the post-publication interval
in rollover timing calculations to give some extra time
to cover unforeseen events. This increases the time a key
remains published after it is no longer active. The
default is <code class="constant">PT1H</code> (1 hour).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>signatures-refresh</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This determines how frequently an RRSIG record needs to be
refreshed. The signature is renewed when the time until
the expiration time is closer than the specified interval.
The default is <code class="constant">P5D</code> (5 days), meaning
signatures that will expire in 5 days or sooner will be
refreshed.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>signatures-validity</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The validity period of an RRSIG record (subject to
inception offset and jitter). The default is
<code class="constant">P2W</code> (2 weeks).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>signatures-validity-dnskey</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Similar to <span class="command"><strong>signatures-validity</strong></span> but for
DNSKEY records. The default is <code class="constant">P2W</code>
(2 weeks).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-zone-ttl</strong></span></span></dt>
<dd>
-<p>
+ <p>
Like the <span class="command"><strong>max-zone-ttl</strong></span> zone option,
this specifies the maximum permissible TTL value in
seconds for the zone. When loading a zone file using
<code class="option">max-zone-ttl</code> will be capped at the
maximum permissible TTL value.
</p>
-<p>
+ <p>
This is needed in DNSSEC-maintained zones because when
rolling to a new DNSKEY, the old key needs to remain
available until RRSIG records have expired from caches.
the largest TTL in the zone will be no higher than the
set value.
</p>
-<p>
+ <p>
(NOTE: Because <code class="constant">map</code>-format files
load directly into memory, this option cannot be
used with them.)
</p>
-<p>
+ <p>
The default value is <code class="constant">PT24H</code> (24 hours).
A <code class="option">max-zone-ttl</code> of zero is treated as if
the default value were in use.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>zone-propagation-delay</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The expected propagation delay from the time when a zone
is first updated to the time when the new version of the
zone will be served by all secondary servers. The default
is <code class="constant">PT5M</code> (5 minutes).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>parent-ds-ttl</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The TTL of the DS RRset that the parent zone uses. The
default is <code class="constant">P1D</code> (1 day).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>parent-propagation-delay</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The expected propagation delay from the time when the
parent zone is updated to the time when the new version
is served by all of the parent zone's name servers.
The default is <code class="constant">PT1H</code> (1 hour).
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>parent-registration-delay</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
The expected registration delay from the time when a DS
RRset change is requested to the time when the DS RRset
will be updated in the parent zone. The default is
<code class="constant">P1D</code> (1 day).
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="managed-keys"></a><span class="command"><strong>managed-keys</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>managed-keys</strong></span> { <em class="replaceable"><code>string</code></em> ( static-key
| initial-key | static-ds |
<span class="command"><strong>initial-ds</strong></span> ) <em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em>
<em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>quoted_string</code></em>; ... }; deprecated
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="managed_keys"></a><span class="command"><strong>managed-keys</strong></span> Statement Definition
and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>managed-keys</strong></span> statement has been
deprecated in favor of <a class="xref" href="Bv9ARM.ch05.html#trust_anchors" title="trust-anchors Statement Grammar">the section called “<span class="command"><strong>trust-anchors</strong></span> Statement Grammar”</a>
with the <span class="command"><strong>initial-key</strong></span> keyword.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="trusted-keys"></a><span class="command"><strong>trusted-keys</strong></span> Statement Grammar</h3></div></div></div>
-<pre class="programlisting">
+ <pre class="programlisting">
<span class="command"><strong>trusted-keys</strong></span> { <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>integer</code></em>
<em class="replaceable"><code>integer</code></em> <em class="replaceable"><code>integer</code></em>
<em class="replaceable"><code>quoted_string</code></em>; ... }; deprecated
</pre>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="trusted_keys"></a><span class="command"><strong>trusted-keys</strong></span> Statement Definition
and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>trusted-keys</strong></span> statement has been
deprecated in favor of <a class="xref" href="Bv9ARM.ch05.html#trust_anchors" title="trust-anchors Statement Grammar">the section called “<span class="command"><strong>trust-anchors</strong></span> Statement Grammar”</a>
with the <span class="command"><strong>static-key</strong></span> keyword.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="view_statement_grammar"></a><span class="command"><strong>view</strong></span> Statement Grammar</h3></div></div></div>
+
<pre class="programlisting"><span class="command"><strong>view</strong></span> <em class="replaceable"><code>view_name</code></em> [ <em class="replaceable"><code>class</code></em> ] <span class="command"><strong>{</strong></span>
<span class="command"><strong>match-clients {</strong></span> <em class="replaceable"><code>address_match_list</code></em> <span class="command"><strong>}</strong></span> ;
<span class="command"><strong>match-destinations {</strong></span> <em class="replaceable"><code>address_match_list</code></em> <span class="command"><strong>}</strong></span> ;
[ <em class="replaceable"><code>zone_statement</code></em> ; ... ]
<span class="command"><strong>} </strong></span>;
</pre>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="view_statement"></a><span class="command"><strong>view</strong></span> Statement Definition and Usage</h3></div></div></div>
-<p>
+
+ <p>
The <span class="command"><strong>view</strong></span> statement is a powerful
feature
of <acronym class="acronym">BIND</acronym> 9 that lets a name server
implementing
split DNS setups without having to run multiple servers.
</p>
-<p>
+
+ <p>
Each <span class="command"><strong>view</strong></span> statement defines a view
of the
DNS namespace that will be seen by a subset of clients. A client
a client request will be resolved in the context of the first
<span class="command"><strong>view</strong></span> that it matches.
</p>
-<p>
+
+ <p>
Zones defined within a <span class="command"><strong>view</strong></span>
statement will
only be accessible to clients that match the <span class="command"><strong>view</strong></span>.
"internal"
and "external" clients in a split DNS setup.
</p>
-<p>
+
+ <p>
Many of the options given in the <span class="command"><strong>options</strong></span> statement
can also be used within a <span class="command"><strong>view</strong></span>
statement, and then
view-specific defaults
take precedence over those in the <span class="command"><strong>options</strong></span> statement.
</p>
-<p>
+
+ <p>
Views are class specific. If no class is given, class IN
is assumed. Note that all non-IN views must contain a hint zone,
since only the IN class has compiled-in default hints.
</p>
-<p>
+
+ <p>
If there are no <span class="command"><strong>view</strong></span> statements in
the config
file, a default view that matches any client is automatically
statements must
occur inside <span class="command"><strong>view</strong></span> statements.
</p>
-<p>
+
+ <p>
Here is an example of a typical split DNS setup implemented
using <span class="command"><strong>view</strong></span> statements:
</p>
+
<pre class="programlisting">view "internal" {
// This should match our internal networks.
match-clients { 10.0.0.0/8; };
};
};
</pre>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="zone_statement_grammar"></a><span class="command"><strong>zone</strong></span>
Statement Grammar</h3></div></div></div>
+
<pre class="programlisting">
<span class="command"><strong>zone</strong></span> <em class="replaceable"><code>string</code></em> [ <em class="replaceable"><code>class</code></em> ] {
<span class="command"><strong>type</strong></span> ( master | primary );
<span class="command"><strong>in-view</strong></span> <em class="replaceable"><code>string</code></em>;
};
</pre>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="zone_statement"></a><span class="command"><strong>zone</strong></span> Statement Definition and Usage</h3></div></div></div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="zone_types"></a>Zone Types</h4></div></div></div>
-<p>
+ <p>
The <span class="command"><strong>type</strong></span> keyword is required
for the <span class="command"><strong>zone</strong></span> configuration unless
it is an <span class="command"><strong>in-view</strong></span> configuration. Its
<code class="varname">static-stub</code>,
and <code class="varname">stub</code>.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col class="1">
-<col class="2">
+<col width="4.017in" class="2">
</colgroup>
-<tbody valign="top">
+<tbody>
<tr>
-<td valign="top">
+<td>
<p>
- <code class="varname">primary</code>
+ <code class="varname">master</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
The server has a master copy of the data
for the zone and will be able to provide authoritative
- answers for it. Type <code class="varname">master</code> is
- a synonym for <code class="varname">primary</code>.
+ answers for it. Type <code class="varname">primary</code> is
+ a synonym for <code class="varname">master</code>.
</p>
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
- <code class="varname">secondary</code>
+ <code class="varname">slave</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
- A secondary zone is a replica of a master
- zone. Type <code class="varname">slave</code> is a
- synonym for <code class="varname">secondary</code>.
+ A slave zone is a replica of a master
+ zone. Type <code class="varname">secondary</code> is a
+ synonym for <code class="varname">slave</code>.
The <span class="command"><strong>masters</strong></span> list
specifies one or more IP addresses
of master servers that the slave contacts to update
- its copy of the zone. Masters list elements can
- also be names of other masters lists. By default,
- transfers are made from port 53 on the servers;
- this can be changed for all servers by specifying
- a port number before the list of IP addresses,
- or on a per-server basis after the IP address.
+ its copy of the zone.
+ Masters list elements can also be names of other
+ masters lists.
+ By default, transfers are made from port 53 on the
+ servers; this can
+ be changed for all servers by specifying a port number
+ before the
+ list of IP addresses, or on a per-server basis after
+ the IP address.
Authentication to the master can also be done with
- per-server TSIG keys. If a file is specified, then the
+ per-server TSIG keys.
+ If a file is specified, then the
replica will be written to this file whenever the zone
- is changed, and reloaded from this file on a server
- restart. Use of a file is recommended, since it
- often speeds server startup and eliminates a
- needless waste of bandwidth. Note that for large
- numbers (in the tens or hundreds of thousands) of
- zones per server, it is best to use a two-level
- naming scheme for zone filenames. For example,
- a slave server for the zone
- <code class="literal">example.com</code> might place
+ is changed,
+ and reloaded from this file on a server restart. Use
+ of a file is
+ recommended, since it often speeds server startup and
+ eliminates
+ a needless waste of bandwidth. Note that for large
+ numbers (in the
+ tens or hundreds of thousands) of zones per server, it
+ is best to
+ use a two-level naming scheme for zone filenames. For
+ example,
+ a slave server for the zone <code class="literal">example.com</code> might place
the zone contents into a file called
- <code class="filename">ex/example.com</code> where
- <code class="filename">ex/</code> is just the first two
- letters of the zone name. (Most operating systems
+ <code class="filename">ex/example.com</code> where <code class="filename">ex/</code> is
+ just the first two letters of the zone name. (Most
+ operating systems
behave very slowly if you put 100000 files into
a single directory.)
</p>
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
<code class="varname">stub</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
A stub zone is similar to a slave zone,
except that it replicates only the NS records of a
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
<code class="varname">mirror</code>
</p>
</td>
-<td valign="top">
+<td>
+ <p>
+ <span class="bold"><strong>Note:</strong></span> using
+ this zone type with any zone other than the root
+ zone should be considered
+ <span class="emphasis"><em>experimental</em></span> and may cause
+ performance issues, especially for zones which
+ are large and/or frequently updated.
+ </p>
<p>
- A mirror zone is similar to a zone of type
- <strong class="userinput"><code>secondary</code></strong>, except its data
- is subject to DNSSEC validation before being used
- in answers. Validation is applied to the entire
- zone during the zone transfer process, and again
- when the zone file is loaded from disk when
- <span class="command"><strong>named</strong></span> is restarted. If
+ A mirror zone acts like a zone of type
+ <strong class="userinput"><code>secondary</code></strong> whose data is
+ subject to DNSSEC validation before being used
+ in answers. Validation is performed during the
+ zone transfer process (for both AXFR and IXFR),
+ and again when the zone file is loaded from disk
+ when <span class="command"><strong>named</strong></span> is restarted. If
validation of a new version of a mirror zone
fails, a retransfer is scheduled and the most
recent correctly validated version of that zone
- is used until it either expires or a newer version
- validates correctly. If no usable zone data is
- available for a mirror zone at all, either due to
- transfer failure or expiration, traditional DNS
- recursion is used to look up the answers instead.
- Mirror zones cannot be used in a view that does
- not have recursion enabled.
- </p>
- <p>
- Answers coming from a mirror zone look almost
- exactly like answers from a zone of type
- <strong class="userinput"><code>secondary</code></strong>, with the
- notable exceptions that the AA bit
- ("authoritative answer") is not set, and the AD
- bit ("authenticated data") is.
- </p>
- <p>
- Mirror zones are intended to be used to set up a
- fast local copy of the root zone, similar to the
- one described in RFC 7706. A default list of primary
- servers for the IANA root zone is built into
- <span class="command"><strong>named</strong></span> and thus its mirroring
- can be enabled using the following configuration:
+ is used until it expires; if a newer version of
+ that zone is later correctly validated, it
+ replaces the previously used version. If no
+ usable zone data is available for a mirror zone
+ (either because it was never loaded from disk
+ and has not yet been transferred from a primary
+ server or because its most recent correctly
+ validated version expired), traditional DNS
+ recursion will be used to look up the answers
+ instead.
+ </p>
+ <p>
+ While any zone may be configured with this type,
+ it is intended to be used to set up a fast local
+ copy of the root zone, similar to the one
+ described in RFC 7706. Note, however, that
+ mirror zones are not supposed to augment the
+ example configuration provided by RFC 7706 but
+ rather to replace it altogether.
+ </p>
+ <p>
+ A default list of primary servers for the IANA
+ root zone is built into <span class="command"><strong>named</strong></span>
+ and thus its mirroring can be enabled using the
+ following configuration:
</p>
<pre class="programlisting">zone "." {
type mirror;
};</pre>
<p>
- Other zones can be configured as mirror zones,
- but this should be considered
- <span class="emphasis"><em>experimental</em></span> and may cause
- performance issues, especially with zones that
- are large and/or frequently updated.
- Mirroring a zone other than root requires an
- explicit list of primary servers to be provided
- using the <span class="command"><strong>masters</strong></span> option
- (see <a class="xref" href="Bv9ARM.ch05.html#masters_grammar" title="masters Statement Grammar">the section called “<span class="command"><strong>masters</strong></span> Statement Grammar”</a>
- for details), and a key-signing key (KSK)
- for the specified zone to be explicitly
- configured as a trust anchor.
+ In order to set up mirroring of any other zone,
+ an explicit list of primary servers needs to be
+ provided using the <span class="command"><strong>masters</strong></span>
+ option (see <a class="xref" href="Bv9ARM.ch05.html#masters_grammar" title="masters Statement Grammar">the section called “<span class="command"><strong>masters</strong></span> Statement Grammar”</a>
+ for details).
</p>
<p>
To make mirror zone contents persist between
<a class="xref" href="Bv9ARM.ch05.html#file_option"><span class="command"><strong>file</strong></span></a>
option.
</p>
+ <p>
+ Mirror zone validation always happens for the
+ entire zone contents, i.e. no "incremental
+ validation" takes place, even for IXFRs. This
+ is required to ensure that each version of the
+ zone used by the resolver is fully
+ self-consistent with respect to DNSSEC. Other,
+ more efficient zone verification methods may be
+ added in the future.
+ </p>
+ <p>
+ For validation to succeed, a key-signing key
+ (KSK) for the zone must be configured as a trust
+ anchor in <code class="filename">named.conf</code>: that
+ is, a key for the zone must be specified in
+ <span class="command"><strong>trust-anchors</strong></span>. In the case
+ of the root zone, you may also rely on the
+ built-in root trust anchor, which is enabled
+ when <a class="xref" href="Bv9ARM.ch05.html#dnssec_validation"><span class="command"><strong>dnssec-validation</strong></span></a> is set to the
+ default value <strong class="userinput"><code>auto</code></strong>.
+ </p>
+ <p>
+ Answers coming from a mirror zone look almost
+ exactly like answers from a zone of type
+ <strong class="userinput"><code>secondary</code></strong>, with the
+ notable exceptions that the AA bit
+ ("authoritative answer") is not set, and the AD
+ bit ("authenticated data") is.
+ </p>
+ <p>
+ Since mirror zones are intended to be used by
+ recursive resolvers, adding one to a view with
+ recursion disabled is considered to be a
+ configuration error.
+ </p>
<p>
When configuring NOTIFY for a mirror zone, only
<strong class="userinput"><code>notify no;</code></strong> and
<strong class="userinput"><code>notify explicit;</code></strong> can be
- used at the zone level. Using any other
+ used. Using any other <span class="command"><strong>notify</strong></span>
+ setting at the zone level is a configuration
+ error. Using any other
<span class="command"><strong>notify</strong></span> setting at the
<span class="command"><strong>options</strong></span> or
<span class="command"><strong>view</strong></span> level will cause
that setting to be overridden with
<strong class="userinput"><code>notify explicit;</code></strong> for the
- mirror zone. The global default for the
- <span class="command"><strong>notify</strong></span> option is
- <strong class="userinput"><code>yes</code></strong>, so mirror
- zones are by default configured with
+ mirror zone in question. Since the global
+ default for the <span class="command"><strong>notify</strong></span> option
+ is <strong class="userinput"><code>yes</code></strong>, mirror zones are
+ by default configured with
<strong class="userinput"><code>notify explicit;</code></strong>.
</p>
<p>
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
<code class="varname">static-stub</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
A static-stub zone is similar to a stub zone
with the following exceptions:
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
<code class="varname">forward</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
A "forward zone" is a way to configure
forwarding on a per-domain basis. A <span class="command"><strong>zone</strong></span> statement
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
<code class="varname">hint</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
The initial set of root name servers is
specified using a "hint zone". When the server starts
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
<code class="varname">redirect</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
Redirect zones are used to provide answers to
queries when normal resolution would result in
</td>
</tr>
<tr>
-<td valign="top">
+<td>
<p>
<code class="varname">delegation-only</code>
</p>
</td>
-<td valign="top">
+<td>
<p>
This is used to enforce the delegation-only
status of infrastructure zones (e.g. COM,
</td>
</tr>
</tbody>
-</table></div>
-</div>
-<div class="section">
+</table>
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="class"></a>Class</h4></div></div></div>
-<p>
+
+ <p>
The zone's name may optionally be followed by a class. If
a class is not specified, class <code class="literal">IN</code> (for <code class="varname">Internet</code>),
is assumed. This is correct for the vast majority of cases.
</p>
-<p>
+ <p>
The <code class="literal">hesiod</code> class is
named for an information service from MIT's Project Athena. It
is
<code class="literal">HS</code> is
a synonym for hesiod.
</p>
-<p>
+ <p>
Another MIT development is Chaosnet, a LAN protocol created
in the mid-1970s. Zone data for it can be specified with the <code class="literal">CHAOS</code> class.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="zone_options"></a>Zone Options</h4></div></div></div>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>allow-notify</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>allow-notify</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#access_control" title="Access Control">the section called “Access Control”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-query</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>allow-query</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#access_control" title="Access Control">the section called “Access Control”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-query-on</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>allow-query-on</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#access_control" title="Access Control">the section called “Access Control”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-transfer</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of <span class="command"><strong>allow-transfer</strong></span>
in <a class="xref" href="Bv9ARM.ch05.html#access_control" title="Access Control">the section called “Access Control”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-update</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of <span class="command"><strong>allow-update</strong></span>
in <a class="xref" href="Bv9ARM.ch05.html#access_control" title="Access Control">the section called “Access Control”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>update-policy</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies a "Simple Secure Update" policy. See
<a class="xref" href="Bv9ARM.ch05.html#dynamic_update_policies" title="Dynamic Update Policies">the section called “Dynamic Update Policies”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>allow-update-forwarding</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of <span class="command"><strong>allow-update-forwarding</strong></span>
in <a class="xref" href="Bv9ARM.ch05.html#access_control" title="Access Control">the section called “Access Control”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>also-notify</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Only meaningful if <span class="command"><strong>notify</strong></span>
is
active for this zone. The set of machines that will
<span class="command"><strong>also-notify</strong></span> is not
meaningful for stub zones.
The default is the empty list.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-names</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This option is used to restrict the character set and
syntax of
certain domain names in master files and/or DNS responses
network. The default varies according to zone type. For <span class="command"><strong>master</strong></span> zones the default is <span class="command"><strong>fail</strong></span>. For <span class="command"><strong>slave</strong></span>
zones the default is <span class="command"><strong>warn</strong></span>.
It is not implemented for <span class="command"><strong>hint</strong></span> zones.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-mx</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>check-mx</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-spf</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>check-spf</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-wildcard</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>check-wildcard</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-integrity</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>check-integrity</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>check-sibling</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>check-sibling</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>zero-no-soa-ttl</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>zero-no-soa-ttl</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>update-check-ksk</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>update-check-ksk</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-loadkeys-interval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>dnssec-loadkeys-interval</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-policy</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Specifies which key and signing policy (KASP) should
be used for this zone. This is a string referring to
a <span class="command"><strong>dnssec-policy</strong></span> statement.
The default is <strong class="userinput"><code>none</code></strong>.
See <a class="xref" href="Bv9ARM.ch05.html#dnssec_policy_grammar" title="dnssec-policy Statement Grammar">the section called “<span class="command"><strong>dnssec-policy</strong></span> Statement Grammar”</a> for
more details.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-update-mode</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>dnssec-update-mode</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-dnskey-kskonly</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>dnssec-dnskey-kskonly</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>try-tcp-refresh</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>try-tcp-refresh</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>database</strong></span></span></dt>
<dd>
-<p>
+ <p>
Specify the type of database to be used for storing the
zone data. The string following the <span class="command"><strong>database</strong></span> keyword
is interpreted as a list of whitespace-delimited words.
specific
to the database type.
</p>
-<p>
+ <p>
The default is <strong class="userinput"><code>"rbt"</code></strong>, BIND 9's
native in-memory
red-black-tree database. This database does not take
arguments.
</p>
-<p>
+ <p>
Other values are possible if additional database drivers
have been linked into the server. Some sample drivers are
included
with the distribution but none are linked in by default.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>dialup</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>dialup</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>delegation-only</strong></span></span></dt>
<dd>
-<p>
+ <p>
The flag only applies to forward, hint and stub
zones. If set to <strong class="userinput"><code>yes</code></strong>,
then the zone will also be treated as if it is
also a delegation-only type zone.
</p>
-<p>
+ <p>
See caveats in <a class="xref" href="Bv9ARM.ch05.html#root_delegation_only"><span class="command"><strong>root-delegation-only</strong></span></a>.
</p>
-</dd>
+ </dd>
<dt>
<a name="file_option"></a><span class="term"><a name="file_option_term"></a><span class="command"><strong>file</strong></span></span>
</dt>
-<dd><p>
+<dd>
+ <p>
Set the zone's filename. In <span class="command"><strong>master</strong></span>,
<span class="command"><strong>hint</strong></span>, and <span class="command"><strong>redirect</strong></span>
zones which do not have <span class="command"><strong>masters</strong></span>
defined, zone data is retrieved from another server
and saved in this file. This option is not
applicable to other zone types.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>forward</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Only meaningful if the zone has a forwarders
list. The <span class="command"><strong>only</strong></span> value causes
the lookup to fail
after trying the forwarders and getting no answer, while <span class="command"><strong>first</strong></span> would
allow a normal lookup to be tried.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>forwarders</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Used to override the list of global forwarders.
If it is not specified in a zone of type <span class="command"><strong>forward</strong></span>,
no forwarding is done for the zone and the global options are
not used.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>journal</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
Allow the default journal's filename to be overridden.
The default is the zone's filename with "<code class="filename">.jnl</code>" appended.
This is applicable to <span class="command"><strong>master</strong></span> and <span class="command"><strong>slave</strong></span> zones.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-ixfr-ratio</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>max-ixfr-ratio</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-journal-size</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>max-journal-size</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#server_resource_limits" title="Server Resource Limits">the section called “Server Resource Limits”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-records</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>max-records</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#server_resource_limits" title="Server Resource Limits">the section called “Server Resource Limits”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-time-in</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>max-transfer-time-in</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-idle-in</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>max-transfer-idle-in</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-time-out</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>max-transfer-time-out</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-transfer-idle-out</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>max-transfer-idle-out</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>notify</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-delay</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>notify-delay</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#tuning" title="Tuning">the section called “Tuning”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-to-soa</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>notify-to-soa</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>zone-statistics</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>zone-statistics</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>server-addresses</strong></span></span></dt>
<dd>
-<p>
+ <p>
Only meaningful for static-stub zones.
This is a list of IP addresses to which queries
should be sent in recursive resolution for the
configure the apex NS RR with associated glue A or
AAAA RRs.
</p>
-<p>
+ <p>
For example, if "example.com" is configured as a
static-stub zone with 192.0.2.1 and 2001:db8::1234
in a <span class="command"><strong>server-addresses</strong></span> option,
<pre class="programlisting">example.com. NS example.com.
example.com. A 192.0.2.1
example.com. AAAA 2001:db8::1234</pre>
-<p>
+ <p>
These records are internally used to resolve
names under the static-stub zone.
For instance, if the server receives a query for
will initiate recursive resolution and send
queries to 192.0.2.1 and/or 2001:db8::1234.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>server-names</strong></span></span></dt>
<dd>
-<p>
+ <p>
Only meaningful for static-stub zones.
This is a list of domain names of nameservers that
act as authoritative servers of the static-stub
"ns.example.net" cannot, and will be rejected by
the configuration parser.
</p>
-<p>
+ <p>
A non empty list for this option will internally
configure the apex NS RR with the specified names.
For example, if "example.com" is configured as a
<pre class="programlisting">example.com. NS ns1.example.net.
example.com. NS ns2.example.net.
</pre>
-<p>
+ <p>
These records are internally used to resolve
names under the static-stub zone.
For instance, if the server receives a query for
"ns2.example.net" to IP addresses, and then send
queries to (one or more of) these addresses.
</p>
-</dd>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-validity-interval</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>sig-validity-interval</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#tuning" title="Tuning">the section called “Tuning”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-signing-nodes</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>sig-signing-nodes</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#tuning" title="Tuning">the section called “Tuning”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-signing-signatures</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>sig-signing-signatures</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#tuning" title="Tuning">the section called “Tuning”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>sig-signing-type</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>sig-signing-type</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#tuning" title="Tuning">the section called “Tuning”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfer-source</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>transfer-source</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>transfer-source-v6</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>transfer-source-v6</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>alt-transfer-source</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>alt-transfer-source</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>alt-transfer-source-v6</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>alt-transfer-source-v6</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>use-alt-transfer-source</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>use-alt-transfer-source</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-source</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>notify-source</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>notify-source-v6</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>notify-source-v6</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt>
<span class="term"><span class="command"><strong>min-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>max-refresh-time</strong></span>, </span><span class="term"><span class="command"><strong>min-retry-time</strong></span>, </span><span class="term"><span class="command"><strong>max-retry-time</strong></span></span>
</dt>
-<dd><p>
+<dd>
+ <p>
See the description in <a class="xref" href="Bv9ARM.ch05.html#tuning" title="Tuning">the section called “Tuning”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>ixfr-from-differences</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>ixfr-from-differences</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
(Note that the <span class="command"><strong>ixfr-from-differences</strong></span>
<strong class="userinput"><code>master</code></strong> and
<strong class="userinput"><code>slave</code></strong> choices are not
available at the zone level.)
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>key-directory</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>key-directory</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>auto-dnssec</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>auto-dnssec</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>serial-update-method</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>serial-update-method</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>inline-signing</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
If <code class="literal">yes</code>, this enables
"bump in the wire" signing of a zone, where a
unsigned zone is transferred in or loaded from
disk and a signed version of the zone is served,
with possibly, a different serial number. This
behavior is disabled by default.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>multi-master</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of <span class="command"><strong>multi-master</strong></span> in
<a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>masterfile-format</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of <span class="command"><strong>masterfile-format</strong></span>
in <a class="xref" href="Bv9ARM.ch05.html#tuning" title="Tuning">the section called “Tuning”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>max-zone-ttl</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of <span class="command"><strong>max-zone-ttl</strong></span>
in <a class="xref" href="Bv9ARM.ch05.html#options" title="options Statement Definition and Usage">the section called “<span class="command"><strong>options</strong></span> Statement Definition and
Usage”</a>.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>dnssec-secure-to-insecure</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
See the description of
<span class="command"><strong>dnssec-secure-to-insecure</strong></span> in <a class="xref" href="Bv9ARM.ch05.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a>.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="dynamic_update_policies"></a>Dynamic Update Policies</h4></div></div></div>
-<p><acronym class="acronym">BIND</acronym> 9 supports two alternative
+
+ <p><acronym class="acronym">BIND</acronym> 9 supports two alternative
methods of granting clients the right to perform
dynamic updates to a zone, configured by the
<span class="command"><strong>allow-update</strong></span> and
<span class="command"><strong>update-policy</strong></span> option, respectively.
</p>
-<p>
+ <p>
The <span class="command"><strong>allow-update</strong></span> clause is a simple
access control list. Any client that matches
the ACL is granted permission to update any record
in the zone.
</p>
-<p>
+ <p>
The <span class="command"><strong>update-policy</strong></span> clause
allows more fine-grained control over what updates are
allowed. It specifies a set of rules, in which each rule
to specify update permissions based on client source
address.
</p>
-<p>
+ <p>
<span class="command"><strong>update-policy</strong></span> rules are only meaningful
for zones of type <span class="command"><strong>master</strong></span>, and are
not allowed in any other zone type.
<span class="command"><strong>allow-update</strong></span> and
<span class="command"><strong>update-policy</strong></span> at the same time.
</p>
-<p>
+ <p>
A pre-defined <span class="command"><strong>update-policy</strong></span> rule can be
switched on with the command
<span class="command"><strong>update-policy local;</strong></span>.
within the zone. Assuming the key name is "local-ddns",
this policy is equivalent to:
</p>
-<pre class="programlisting">update-policy { grant local-ddns zonesub any; };
+
+ <pre class="programlisting">update-policy { grant local-ddns zonesub any; };
</pre>
-<p>
+
+ <p>
...with the additional restriction that only clients
connecting from the local system will be permitted to send
updates.
</p>
-<p>
+ <p>
Note that only one session key is generated by
<span class="command"><strong>named</strong></span>; all zones configured to use
<span class="command"><strong>update-policy local</strong></span> will accept the same key.
</p>
-<p>
+ <p>
The command <span class="command"><strong>nsupdate -l</strong></span> implements this
feature, sending requests to localhost and signing them using
the key retrieved from the session key file.
</p>
-<p>
+
+ <p>
Other rule definitions look like this:
</p>
+
<pre class="programlisting">
( <span class="command"><strong>grant</strong></span> | <span class="command"><strong>deny</strong></span> ) <em class="replaceable"><code>identity</code></em> <em class="replaceable"><code>ruletype</code></em> [<span class="optional"> <em class="replaceable"><code>name</code></em> </span>] [<span class="optional"> <em class="replaceable"><code>types</code></em> </span>]
</pre>
-<p>
+
+ <p>
Each rule grants or denies privileges. Rules are checked
in the order in which they are specified in the
<span class="command"><strong>update-policy</strong></span> statement. Once a message
<span class="command"><strong>ruletype</strong></span> field, and the interpretation
of other fields varies depending on the rule type.
</p>
-<p>
+ <p>
In general, a rule is matched when the
key that signed an update request matches the
<span class="command"><strong>identity</strong></span> field, the name of the record
<span class="command"><strong>types</strong></span> field. Details for each rule type
are described below.
</p>
-<p>
+ <p>
The <span class="command"><strong>identity</strong></span> field must be set to
a fully-qualified domain name. In most cases, this
represensts the name of the TSIG or SIG(0) key that must be
(e.g, <strong class="userinput"><code>"host/machine@REALM"</code></strong>) or
Windows realm (<strong class="userinput"><code>machine$@REALM</code></strong>).
</p>
-<p>
+ <p>
The <em class="replaceable"><code>name</code></em> field also specifies
a fully-qualified domain name. This often
represents the name of the record to be updated.
Interpretation of this field is dependent on rule type.
</p>
-<p>
+ <p>
If no <span class="command"><strong>types</strong></span> are explicitly specified,
then a rule matches all types except RRSIG, NS, SOA, NSEC
and NSEC3. Types may be specified by name, including
is made to delete all records associated with a name,
the rules are checked for each existing record type.
</p>
-<p>
+ <p>
The <em class="replaceable"><code>ruletype</code></em> field has 16
values:
<code class="varname">name</code>, <code class="varname">subdomain</code>,
<code class="varname">tcp-self</code>, <code class="varname">6to4-self</code>,
<code class="varname">zonesub</code>, and <code class="varname">external</code>.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="0.819in" class="1">
<col width="3.681in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-</div>
-<div class="section">
+</table>
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="multiple_views"></a>Multiple views</h4></div></div></div>
-<p>
+
+ <p>
When multiple views are in use, a zone may be
referenced by more than one of them. Often, the views
will contain different zones with the same name, allowing
way to do this: it allows a view to reference a zone that
was defined in a previously configured view. Example:
</p>
-<pre class="programlisting">
+ <pre class="programlisting">
view internal {
match-clients { 10/8; };
};
};
</pre>
-<p>
+ <p>
An <span class="command"><strong>in-view</strong></span> option cannot refer to a view
that is configured later in the configuration file.
</p>
-<p>
+ <p>
A <span class="command"><strong>zone</strong></span> statement which uses the
<span class="command"><strong>in-view</strong></span> option may not use any other
options with the exception of <span class="command"><strong>forward</strong></span>
the behavior of the containing view, rather than changing
the zone object itself.)
</p>
-<p>
+ <p>
Zone level acls (e.g. allow-query, allow-transfer) and
other configuration details of the zone are all set
in the view the referenced zone is defined in. Care
need to be taken to ensure that acls are wide enough
for all views referencing the zone.
</p>
-<p>
+ <p>
An <span class="command"><strong>in-view</strong></span> zone cannot be used as a
response policy zone.
</p>
-<p>
+ <p>
An <span class="command"><strong>in-view</strong></span> zone is not intended to reference
a <span class="command"><strong>forward</strong></span> zone.
</p>
-</div>
-</div>
-</div>
-<div class="section">
+ </div>
+
+ </div>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="zone_file"></a>Zone File</h2></div></div></div>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="types_of_resource_records_and_when_to_use_them"></a>Types of Resource Records and When to Use Them</h3></div></div></div>
-<p>
+
+ <p>
This section, largely borrowed from RFC 1034, describes the
concept of a Resource Record (RR) and explains when each is used.
Since the publication of RFC 1034, several new RRs have been
identified
and implemented in the DNS. These are also included.
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="id-1.6.6.2.3"></a>Resource Records</h4></div></div></div>
-<p>
+
+ <p>
A domain name identifies a node. Each node has a set of
resource information, which may be empty. The set of resource
information associated with a particular name is composed of
permitted for optimization purposes, for example, to specify
that a particular nearby server be tried first. See <a class="xref" href="Bv9ARM.ch05.html#the_sortlist_statement" title="The sortlist Statement">the section called “The <span class="command"><strong>sortlist</strong></span> Statement”</a> and <a class="xref" href="Bv9ARM.ch05.html#rrset_ordering" title="RRset Ordering">the section called “RRset Ordering”</a>.
</p>
-<p>
+
+ <p>
The components of a Resource Record are:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.000in" class="1">
<col width="3.500in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
The following are <span class="emphasis"><em>types</em></span> of valid RRs:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="0.875in" class="1">
<col width="3.625in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
The following <span class="emphasis"><em>classes</em></span> of resource records
are currently valid in the DNS:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+<table border="1">
<colgroup>
<col width="0.875in" class="1">
<col width="3.625in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+
+ <p>
The owner name is often implicit, rather than forming an
integral
part of the RR. For example, many name servers internally form
that
fits the needs of the resource being described.
</p>
-<p>
+ <p>
The meaning of the TTL field is a time limit on how long an
RR can be kept in a cache. This limit does not apply to
authoritative
following
the change.
</p>
-<p>
+ <p>
The data in the RDATA section of RRs is carried as a combination
of binary strings and domain names. The domain names are
frequently
used as "pointers" to other data in the DNS.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="rr_text"></a>Textual expression of RRs</h4></div></div></div>
-<p>
+
+ <p>
RRs are represented in binary form in the packets of the DNS
protocol, and are usually represented in highly encoded form
when
possible
using parentheses.
</p>
-<p>
+ <p>
The start of the line gives the owner of the RR. If a line
begins with a blank, then the owner is assumed to be the same as
that of the previous RR. Blank lines are often included for
readability.
</p>
-<p>
+ <p>
Following the owner, we list the TTL, type, and class of the
RR. Class and type use the mnemonics defined above, and TTL is
an integer before the type field. In order to avoid ambiguity
values
are often omitted from examples in the interests of clarity.
</p>
-<p>
+ <p>
The resource data or RDATA section of the RR are given using
knowledge of the typical representation for the data.
</p>
-<p>
+ <p>
For example, we might show the RRs carried in a message as:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+<table border="1">
<colgroup>
<col width="1.381in" class="1">
<col width="1.020in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
The MX RRs have an RDATA section which consists of a 16-bit
number followed by a domain name. The address RRs use a
standard
IP address format to contain a 32-bit internet address.
</p>
-<p>
+ <p>
The above example shows six RRs, with two RRs at each of three
domain names.
</p>
-<p>
+ <p>
Similarly we might see:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+<table border="1">
<colgroup>
<col width="1.491in" class="1">
<col width="1.067in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
This example shows two addresses for
<code class="literal">XX.LCS.MIT.EDU</code>, each of a different class.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="mx_records"></a>Discussion of MX Records</h3></div></div></div>
-<p>
+
+ <p>
As described above, domain servers store information as a
series of resource records, each of which contains a particular
piece of information about a given domain name (which is usually,
and stored with some additional type information to help systems
determine when the RR is relevant.
</p>
-<p>
+
+ <p>
MX records are used to control delivery of email. The data
specified in the record is a priority and a domain name. The
priority
It <span class="emphasis"><em>must</em></span> have an associated address record
(A or AAAA) — CNAME is not sufficient.
</p>
-<p>
+ <p>
For a given domain, if there is both a CNAME record and an
MX record, the MX record is in error, and will be ignored.
Instead,
pointed to by the CNAME.
For example:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.708in" class="1">
<col width="0.444in" class="2">
</td>
</tr>
</tbody>
-</table></div>
+</table>
+ </div>
<p>
Mail delivery will be attempted to <code class="literal">mail.example.com</code> and
<code class="literal">mail2.example.com</code> (in
any order), and if neither of those succeed, delivery to <code class="literal">mail.backup.org</code> will
be attempted.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="Setting_TTLs"></a>Setting TTLs</h3></div></div></div>
-<p>
+
+ <p>
The time-to-live of the RR field is a 32-bit integer represented
in units of seconds, and is primarily used by resolvers when they
cache RRs. The TTL describes how long a RR can be cached before it
currently
used in a zone file.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="0.750in" class="1">
<col width="4.375in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
All of these TTLs default to units of seconds, though units
can be explicitly specified, for example, <code class="literal">1h30m</code>.
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="ipv4_reverse"></a>Inverse Mapping in IPv4</h3></div></div></div>
-<p>
+
+ <p>
Reverse name resolution (that is, translation from IP address
to name) is achieved by means of the <span class="emphasis"><em>in-addr.arpa</em></span> domain
and PTR records. Entries in the in-addr.arpa domain are made in
PTR records if the machine has more than one name. For example,
in the [<span class="optional">example.com</span>] domain:
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.125in" class="1">
<col width="4.000in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+</table>
+ </div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
The <span class="command"><strong>$ORIGIN</strong></span> lines in the examples
are for providing context to the examples only — they do not
necessarily
appear in the actual usage. They are only used here to indicate
that the example is relative to the listed origin.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="zone_directives"></a>Other Zone File Directives</h3></div></div></div>
-<p>
+
+ <p>
The Master File Format was initially defined in RFC 1035 and
has subsequently been extended. While the Master File Format
itself
same
class.
</p>
-<p>
+ <p>
Master File Directives include <span class="command"><strong>$ORIGIN</strong></span>, <span class="command"><strong>$INCLUDE</strong></span>,
and <span class="command"><strong>$TTL.</strong></span>
</p>
-<div class="section">
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="atsign"></a>The <span class="command"><strong>@</strong></span> (at-sign)</h4></div></div></div>
-<p>
+
+ <p>
When used in the label (or name) field, the asperand or
at-sign (@) symbol represents the current origin.
At the start of the zone file, it is the
<<code class="varname">zone_name</code>> (followed by
trailing dot).
</p>
-</div>
-<div class="section">
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="origin_directive"></a>The <span class="command"><strong>$ORIGIN</strong></span> Directive</h4></div></div></div>
-<p>
+
+ <p>
Syntax: <span class="command"><strong>$ORIGIN</strong></span>
<em class="replaceable"><code>domain-name</code></em>
[<span class="optional"><em class="replaceable"><code>comment</code></em></span>]
</p>
-<p><span class="command"><strong>$ORIGIN</strong></span>
+ <p><span class="command"><strong>$ORIGIN</strong></span>
sets the domain name that will be appended to any
unqualified records. When a zone is first read in there
is an implicit <span class="command"><strong>$ORIGIN</strong></span>
the domain specified in the <span class="command"><strong>$ORIGIN</strong></span>
argument if it is not absolute.
</p>
+
<pre class="programlisting">
$ORIGIN example.com.
WWW CNAME MAIN-SERVER
</pre>
-<p>
+
+ <p>
is equivalent to
</p>
+
<pre class="programlisting">
WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</pre>
-</div>
-<div class="section">
+
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="include_directive"></a>The <span class="command"><strong>$INCLUDE</strong></span> Directive</h4></div></div></div>
-<p>
+
+ <p>
Syntax: <span class="command"><strong>$INCLUDE</strong></span>
<em class="replaceable"><code>filename</code></em>
[<span class="optional">
<em class="replaceable"><code>origin</code></em> </span>]
[<span class="optional"> <em class="replaceable"><code>comment</code></em> </span>]
</p>
-<p>
+ <p>
Read and process the file <code class="filename">filename</code> as
if it were included into the file at this point. If <span class="command"><strong>origin</strong></span> is
specified the file is processed with <span class="command"><strong>$ORIGIN</strong></span> set
to that value, otherwise the current <span class="command"><strong>$ORIGIN</strong></span> is
used.
</p>
-<p>
+ <p>
The origin and the current domain name
revert to the values they had prior to the <span class="command"><strong>$INCLUDE</strong></span> once
the file has been read.
</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
-<p>
+ <p>
RFC 1035 specifies that the current origin should be restored
after
an <span class="command"><strong>$INCLUDE</strong></span>, but it is silent
This could be construed as a deviation from RFC 1035, a
feature, or both.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="ttl_directive"></a>The <span class="command"><strong>$TTL</strong></span> Directive</h4></div></div></div>
-<p>
+
+ <p>
Syntax: <span class="command"><strong>$TTL</strong></span>
<em class="replaceable"><code>default-ttl</code></em>
[<span class="optional">
<em class="replaceable"><code>comment</code></em> </span>]
</p>
-<p>
+ <p>
Set the default Time To Live (TTL) for subsequent records
with undefined TTLs. Valid TTLs are of the range 0-2147483647
seconds.
</p>
-<p><span class="command"><strong>$TTL</strong></span>
+ <p><span class="command"><strong>$TTL</strong></span>
is defined in RFC 2308.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="generate_directive"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span class="command"><strong>$GENERATE</strong></span> Directive</h3></div></div></div>
-<p>
+
+ <p>
Syntax: <span class="command"><strong>$GENERATE</strong></span>
<em class="replaceable"><code>range</code></em>
<em class="replaceable"><code>lhs</code></em>
<em class="replaceable"><code>rhs</code></em>
[<span class="optional"><em class="replaceable"><code>comment</code></em></span>]
</p>
-<p><span class="command"><strong>$GENERATE</strong></span>
+ <p><span class="command"><strong>$GENERATE</strong></span>
is used to create a series of resource records that only
differ from each other by an
iterator. <span class="command"><strong>$GENERATE</strong></span> can be used to
sub /24 reverse delegations described in RFC 2317:
Classless IN-ADDR.ARPA delegation.
</p>
+
<pre class="programlisting">$ORIGIN 0.0.192.IN-ADDR.ARPA.
$GENERATE 1-2 @ NS SERVER$.EXAMPLE.
$GENERATE 1-127 $ CNAME $.0</pre>
-<p>
+
+ <p>
is equivalent to
</p>
+
<pre class="programlisting">0.0.0.192.IN-ADDR.ARPA. NS SERVER1.EXAMPLE.
0.0.0.192.IN-ADDR.ARPA. NS SERVER2.EXAMPLE.
1.0.0.192.IN-ADDR.ARPA. CNAME 1.0.0.0.192.IN-ADDR.ARPA.
...
127.0.0.192.IN-ADDR.ARPA. CNAME 127.0.0.0.192.IN-ADDR.ARPA.
</pre>
-<p>
+
+ <p>
Generate a set of A and MX records. Note the MX's right hand
side is a quoted string. The quotes will be stripped when the
right hand side is processed.
</p>
+
<pre class="programlisting">
$ORIGIN EXAMPLE.
$GENERATE 1-127 HOST-$ A 1.2.3.$
$GENERATE 1-127 HOST-$ MX "0 ."</pre>
-<p>
+
+ <p>
is equivalent to
</p>
+
<pre class="programlisting">HOST-1.EXAMPLE. A 1.2.3.1
HOST-1.EXAMPLE. MX 0 .
HOST-2.EXAMPLE. A 1.2.3.2
HOST-127.EXAMPLE. A 1.2.3.127
HOST-127.EXAMPLE. MX 0 .
</pre>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="0.875in" class="1">
<col width="4.250in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+ <p>
The <span class="command"><strong>$GENERATE</strong></span> directive is a <acronym class="acronym">BIND</acronym> extension
and not part of the standard zone file format.
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="zonefile_format"></a>Additional File Formats</h3></div></div></div>
-<p>
+
+ <p>
In addition to the standard textual format, BIND 9
supports the ability to read or dump to zone files in
other formats.
</p>
-<p>
+ <p>
The <code class="constant">raw</code> format is
a binary representation of zone data in a manner similar
to that used in zone transfers. Since it does not require
parsing text, load time is significantly reduced.
</p>
-<p>
+ <p>
An even faster alternative is the <code class="constant">map</code>
format, which is an image of a <acronym class="acronym">BIND</acronym> 9
in-memory zone database; it is capable of being loaded
function; the zone can begin serving queries almost
immediately.
</p>
-<p>
+ <p>
For a primary server, a zone file in
<code class="constant">raw</code> or <code class="constant">map</code>
format is expected to be generated from a textual zone
<span class="command"><strong>named</strong></span> dumps the zone contents after
zone transfer or when applying prior updates.
</p>
-<p>
+ <p>
If a zone file in a binary format needs manual modification,
it first must be converted to a textual form by the
<span class="command"><strong>named-compilezone</strong></span> command. All
should then be converted to the binary form by the
<span class="command"><strong>named-compilezone</strong></span> command again.
</p>
-<p>
+ <p>
Note that <span class="command"><strong>map</strong></span> format is extremely
architecture-specific. A <code class="constant">map</code>
file <span class="emphasis"><em>cannot</em></span> be used on a system
portable backup of such a file, conversion to
<code class="constant">text</code> format is recommended.
</p>
-</div>
-</div>
-<div class="section">
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="statistics"></a>BIND9 Statistics</h2></div></div></div>
-<p>
+
+ <p>
<acronym class="acronym">BIND</acronym> 9 maintains lots of statistics
information and provides several interfaces for users to
get access to the statistics.
are meaningful in <acronym class="acronym">BIND</acronym> 9,
and other information that is considered useful.
</p>
-<p>
+
+ <p>
The statistics information is categorized into the following
sections.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="3.300in" class="1">
<col width="2.625in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-<p>
+</table>
+ </div>
+
+ <p>
A subset of Name Server Statistics is collected and shown
per zone for which the server has the authority when
<span class="command"><strong>zone-statistics</strong></span> is set to
Usage”</a>
for further details.
</p>
-<p>
+
+ <p>
These statistics counters are shown with their zone and
view names. The view name is omitted when the server is
not configured with explicit views.</p>
-<p>
+
+ <p>
There are currently two user interfaces to get access to the
statistics.
One is in the plain text format dumped to the file specified
is specified in the configuration file
(see <a class="xref" href="Bv9ARM.ch05.html#statschannels" title="statistics-channels Statement Grammar">the section called “<span class="command"><strong>statistics-channels</strong></span> Statement Grammar”</a>.)
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="statsfile"></a>The Statistics File</h3></div></div></div>
-<p>
+
+ <p>
The text format statistics dump begins with a line, like:
</p>
-<p>
+ <p>
<span class="command"><strong>+++ Statistics Dump +++ (973798949)</strong></span>
</p>
-<p>
+ <p>
The number in parentheses is a standard
Unix-style timestamp, measured as seconds since January 1, 1970.
as described above.
Each section begins with a line, like:
</p>
-<p>
+
+ <p>
<span class="command"><strong>++ Name Server Statistics ++</strong></span>
</p>
-<p>
+
+ <p>
Each section consists of lines, each containing the statistics
counter value followed by its textual description.
See below for available counters.
For brevity, counters that have a value of 0 are not shown
in the statistics file.
</p>
-<p>
+
+ <p>
The statistics dump ends with the line where the
number is identical to the number in the beginning line; for example:
</p>
-<p>
+ <p>
<span class="command"><strong>--- Statistics Dump --- (973798949)</strong></span>
</p>
-</div>
-<div class="section">
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="statistics_counters"></a>Statistics Counters</h3></div></div></div>
-<p>
+
+ <p>
The following tables summarize statistics counters that
<acronym class="acronym">BIND</acronym> 9 provides.
For each row of the tables, the leftmost column is the
it gives the corresponding counter name of the
<acronym class="acronym">BIND</acronym> 8 statistics, if applicable.
</p>
-<p>
+
+ <p>
Note: BIND statistics counters are signed 64-bit values on
all platforms except one: 32-bit Windows, where they are
signed 32-bit values. Given that 32-bit values have a
counters in 32-bit Windows builds overflow significantly
more quickly than on all other platforms.
</p>
-<div class="section">
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="stats_counters"></a>Name Server Statistics Counters</h4></div></div></div>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.150in" class="1">
<col width="1.150in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-</div>
-<div class="section">
+</table>
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="zone_stats"></a>Zone Maintenance Statistics Counters</h4></div></div></div>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.150in" class="1">
<col width="3.350in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-</div>
-<div class="section">
+</table>
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="resolver_stats"></a>Resolver Statistics Counters</h4></div></div></div>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.150in" class="1">
<col width="1.150in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-</div>
-<div class="section">
+</table>
+ </div>
+
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="socket_stats"></a>Socket I/O Statistics Counters</h4></div></div></div>
-<p>
+
+ <p>
Socket I/O statistics counters are defined per socket
types, which are
<span class="command"><strong>UDP4</strong></span> (UDP/IPv4),
Not all counters are available for all socket types;
exceptions are noted in the description field.
</p>
-<div class="informaltable"><table class="informaltable" border="1">
+
+ <div class="informaltable">
+ <table border="1">
<colgroup>
<col width="1.150in" class="1">
<col width="3.350in" class="2">
</td>
</tr>
</tbody>
-</table></div>
-</div>
-<div class="section">
+</table>
+ </div>
+ </div>
+
+ <div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="bind8_compatibility"></a>Compatibility with <span class="emphasis"><em>BIND</em></span> 8 Counters</h4></div></div></div>
-<p>
+
+ <p>
Most statistics counters that were available
in <span class="command"><strong>BIND</strong></span> 8 are also supported in
<span class="command"><strong>BIND</strong></span> 9 as shown in the above tables.
Here are notes about other counters that do not appear
in these tables.
</p>
-<div class="variablelist"><dl class="variablelist">
+
+ <div class="variablelist"><dl class="variablelist">
<dt><span class="term"><span class="command"><strong>RFwdR,SFwdR</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
These counters are not supported
because <span class="command"><strong>BIND</strong></span> 9 does not adopt
the notion of <span class="emphasis"><em>forwarding</em></span>
as <span class="command"><strong>BIND</strong></span> 8 did.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>RAXFR</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This counter is accessible in the Incoming Queries section.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>RIQ</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This counter is accessible in the Incoming Requests section.
- </p></dd>
+ </p>
+ </dd>
<dt><span class="term"><span class="command"><strong>ROpts</strong></span></span></dt>
-<dd><p>
+<dd>
+ <p>
This counter is not supported
because <span class="command"><strong>BIND</strong></span> 9 does not care
about IP options in the first place.
- </p></dd>
+ </p>
+ </dd>
</dl></div>
-</div>
-</div>
-</div>
-</div>
+ </div>
+ </div>
+ </div>
+
+ </div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">