Bv9ARM.ch04.html revision dec590a3deb8e87380a8bd3a77d535dba3729bf6
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox User - Copyright (C) 2004-2015 Internet Systems Consortium, Inc. ("ISC")
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews - Copyright (C) 2000-2003 Internet Software Consortium.
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater - Permission to use, copy, modify, and/or distribute this software for any
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - purpose with or without fee is hereby granted, provided that the above
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - PERFORMANCE OF THIS SOFTWARE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<link rel="home" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<link rel="up" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<link rel="prev" href="Bv9ARM.ch03.html" title="Chapter�3.�Name Server Configuration">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<link rel="next" href="Bv9ARM.ch05.html" title="Chapter�5.�The BIND 9 Lightweight Resolver">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<tr><th colspan="3" align="center">Chapter�4.�Advanced DNS Features</th></tr>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<a accesskey="p" href="Bv9ARM.ch03.html">Prev</a>�</td>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<td width="20%" align="right">�<a accesskey="n" href="Bv9ARM.ch05.html">Next</a>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="titlepage"><div><div><h1 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="Bv9ARM.ch04"></a>Chapter�4.�Advanced DNS Features</h1></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#notify">Notify</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#dynamic_update">Dynamic Update</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dd><dl><dt><span class="section"><a href="Bv9ARM.ch04.html#journal">The journal file</a></span></dt></dl></dd>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#incremental_zone_transfers">Incremental Zone Transfers (IXFR)</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#split_dns">Split DNS</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dd><dl><dt><span class="section"><a href="Bv9ARM.ch04.html#split_dns_sample">Example split DNS setup</a></span></dt></dl></dd>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#tsig">TSIG</a></span></dt>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.5">Generating a Shared Key</a></span></dt>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.6">Loading A New Key</a></span></dt>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.7">Instructing the Server to Use a Key</a></span></dt>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.8">TSIG-Based Access Control</a></span></dt>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.6.9">Errors</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#tkey">TKEY</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#sig0">SIG(0)</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#DNSSEC">DNSSEC</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_keys">Generating Keys</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_signing">Signing the Zone</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec_config">Configuring Servers</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#dnssec.dynamic.zones">DNSSEC, Dynamic Zones, and Automatic Signing</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.3">Converting from insecure to secure</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.8">Dynamic DNS update method</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.16">Fully automatic zone signing</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.25">Private-type records</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.32">DNSKEY rollovers</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.34">Dynamic DNS update method</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.39">Automatic key rollovers</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.41">NSEC3PARAM rollovers via UPDATE</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.43">Converting from NSEC to NSEC3</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.45">Converting from NSEC3 to NSEC</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.47">Converting from secure to insecure</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.51">Periodic re-signing</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.10.53">NSEC3 and OPTOUT</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#rfc5011.support">Dynamic Trust Anchor Management</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.11.3">Validating Resolver</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.11.4">Authoritative Server</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#pkcs11">PKCS#11 (Cryptoki) support</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.6">Prerequisites</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.7">Native PKCS#11</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.8">OpenSSL-based PKCS#11</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.9">PKCS#11 Tools</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.10">Using the HSM</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.11">Specifying the engine on the command line</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.12.12">Running named with automatic zone re-signing</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#dlz-info">DLZ (Dynamically Loadable Zones)</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.13.6">Configuring DLZ</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.13.7">Sample DLZ Driver</a></span></dt>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<dt><span class="section"><a href="Bv9ARM.ch04.html#dyndb-info">DynDB (Dynamic Database)</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.14.5">Configuring DynDB</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.14.6">Sample DynDB Module</a></span></dt>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#ipv6">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.6">Address Lookups Using AAAA Records</a></span></dt>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<dt><span class="section"><a href="Bv9ARM.ch04.html#id-1.5.15.7">Address to Name Lookups Using Nibble Format</a></span></dt>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<a name="notify"></a>Notify</h2></div></div></div>
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews <acronym class="acronym">DNS</acronym> NOTIFY is a mechanism that allows master
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein servers to notify their slave servers of changes to a zone's data. In
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt response to a <span class="command"><strong>NOTIFY</strong></span> from a master server, the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein slave will check to see that its version of the zone is the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein current version and, if not, initiate a zone transfer.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews For more information about <acronym class="acronym">DNS</acronym>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>NOTIFY</strong></span>, see the description of the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>notify</strong></span> option in <a class="xref" href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called “Boolean Options”</a> and
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt the description of the zone option <span class="command"><strong>also-notify</strong></span> in
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <a class="xref" href="Bv9ARM.ch06.html#zone_transfers" title="Zone Transfers">the section called “Zone Transfers”</a>. The <span class="command"><strong>NOTIFY</strong></span>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein protocol is specified in RFC 1996.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt As a slave zone can also be a master to other slaves, <span class="command"><strong>named</strong></span>,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt by default, sends <span class="command"><strong>NOTIFY</strong></span> messages for every zone
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt it loads. Specifying <span class="command"><strong>notify master-only;</strong></span> will
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt cause <span class="command"><strong>named</strong></span> to only send <span class="command"><strong>NOTIFY</strong></span> for master
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews zones that it loads.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<a name="dynamic_update"></a>Dynamic Update</h2></div></div></div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Dynamic Update is a method for adding, replacing or deleting
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein records in a master server by sending it a special form of DNS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein messages. The format and meaning of these messages is specified
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein in RFC 2136.
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews Dynamic update is enabled by including an
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>allow-update</strong></span> or an <span class="command"><strong>update-policy</strong></span>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt clause in the <span class="command"><strong>zone</strong></span> statement.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt If the zone's <span class="command"><strong>update-policy</strong></span> is set to
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater <strong class="userinput"><code>local</code></strong>, updates to the zone
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater will be permitted for the key <code class="varname">local-ddns</code>,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt which will be generated by <span class="command"><strong>named</strong></span> at startup.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt See <a class="xref" href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called “Dynamic Update Policies”</a> for more details.
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater Dynamic updates using Kerberos signed requests can be made
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater using the TKEY/GSS protocol by setting either the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>tkey-gssapi-keytab</strong></span> option, or alternatively
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt by setting both the <span class="command"><strong>tkey-gssapi-credential</strong></span>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt and <span class="command"><strong>tkey-domain</strong></span> options. Once enabled,
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater Kerberos signed requests will be matched against the update
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater policies for the zone, using the Kerberos principal as the
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater signer for the request.
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater Updating of secure zones (zones using DNSSEC) follows RFC
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater 3007: RRSIG, NSEC and NSEC3 records affected by updates are
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater automatically regenerated by the server using an online
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater zone key. Update authorization is based on transaction
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater signatures and an explicit server policy.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<a name="journal"></a>The journal file</h3></div></div></div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein All changes made to a zone using dynamic update are stored
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein in the zone's journal file. This file is automatically created
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein by the server when the first dynamic update takes place.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The name of the journal file is formed by appending the extension
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <code class="filename">.jnl</code> to the name of the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein corresponding zone
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein file unless specifically overridden. The journal file is in a
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein binary format and should not be edited manually.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The server will also occasionally write ("dump")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the complete contents of the updated zone to its zone file.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein This is not done immediately after
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein each dynamic update, because that would be too slow when a large
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein zone is updated frequently. Instead, the dump is delayed by
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein up to 15 minutes, allowing additional updates to take place.
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater During the dump process, transient files will be created
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater with the extensions <code class="filename">.jnw</code> and
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater <code class="filename">.jbk</code>; under ordinary circumstances, these
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater will be removed when the dump is complete, and can be safely
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein When a server is restarted after a shutdown or crash, it will replay
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the journal file to incorporate into the zone any updates that
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein place after the last zone dump.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Changes that result from incoming incremental zone transfers are
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein journalled in a similar way.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The zone files of dynamic zones cannot normally be edited by
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein hand because they are not guaranteed to contain the most recent
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews dynamic changes — those are only in the journal file.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The only way to ensure that the zone file of a dynamic zone
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt is up to date is to run <span class="command"><strong>rndc stop</strong></span>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein If you have to make changes to a dynamic zone
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User manually, the following procedure will work:
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User Disable dynamic updates to the zone using
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>rndc freeze <em class="replaceable"><code>zone</code></em></strong></span>.
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User This will update the zone's master file with the changes
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User stored in its <code class="filename">.jnl</code> file.
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User Edit the zone file. Run
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>rndc thaw <em class="replaceable"><code>zone</code></em></strong></span>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein to reload the changed zone and re-enable dynamic updates.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>rndc sync <em class="replaceable"><code>zone</code></em></strong></span>
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User will update the zone file with changes from the journal file
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User without stopping dynamic updates; this may be useful for viewing
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User the current zone state. To remove the <code class="filename">.jnl</code>
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User file after updating the zone file, use
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>rndc sync -clean</strong></span>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<a name="incremental_zone_transfers"></a>Incremental Zone Transfers (IXFR)</h2></div></div></div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The incremental zone transfer (IXFR) protocol is a way for
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein slave servers to transfer only changed data, instead of having to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein transfer the entire zone. The IXFR protocol is specified in RFC
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt 1995. See <a class="xref" href="Bv9ARM.ch11.html#proposed_standards" title="Proposed Standards">Proposed Standards</a>.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews When acting as a master, <acronym class="acronym">BIND</acronym> 9
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein supports IXFR for those zones
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein where the necessary change history information is available. These
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein include master zones maintained by dynamic update and slave zones
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein whose data was obtained by IXFR. For manually maintained master
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein zones, and for slave zones obtained by performing a full zone
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein transfer (AXFR), IXFR is supported only if the option
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>ixfr-from-differences</strong></span> is set
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein to <strong class="userinput"><code>yes</code></strong>.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews When acting as a slave, <acronym class="acronym">BIND</acronym> 9 will
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attempt to use IXFR unless
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein it is explicitly disabled. For more information about disabling
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt IXFR, see the description of the <span class="command"><strong>request-ixfr</strong></span> clause
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt of the <span class="command"><strong>server</strong></span> statement.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="split_dns"></a>Split DNS</h2></div></div></div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Setting up different views, or visibility, of the DNS space to
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews internal and external resolvers is usually referred to as a
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews <span class="emphasis"><em>Split DNS</em></span> setup. There are several
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews reasons an organization would want to set up its DNS this way.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein One common reason for setting up a DNS system this way is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein to hide "internal" DNS information from "external" clients on the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Internet. There is some debate as to whether or not this is actually
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Internal DNS information leaks out in many ways (via email headers,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for example) and most savvy "attackers" can find the information
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein they need using other means.
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews However, since listing addresses of internal servers that
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews external clients cannot possibly reach can result in
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews connection delays and other annoyances, an organization may
a1b05dea35aa30b152a47115e18bbe679d3fcf19Mark Andrews choose to use a Split DNS to present a consistent view of itself
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews to the outside world.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Another common reason for setting up a Split DNS system is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein to allow internal networks that are behind filters or in RFC 1918
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein space (reserved IP space, as documented in RFC 1918) to resolve DNS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein on the Internet. Split DNS can also be used to allow mail from outside
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein back in to the internal network.
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews<div class="titlepage"><div><div><h3 class="title">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="split_dns_sample"></a>Example split DNS setup</h3></div></div></div>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Let's say a company named <span class="emphasis"><em>Example, Inc.</em></span>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User has several corporate sites that have an internal network with
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Internet Protocol (IP) space and an external demilitarized zone (DMZ),
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User or "outside" section of a network, that is available to the public.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User <span class="emphasis"><em>Example, Inc.</em></span> wants its internal clients
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User to be able to resolve external hostnames and to exchange mail with
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User people on the outside. The company also wants its internal resolvers
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User to have access to certain internal-only zones that are not available
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User at all outside of the internal network.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User In order to accomplish this, the company will set up two sets
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User of name servers. One set will be on the inside network (in the
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User IP space) and the other set will be on bastion hosts, which are
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User hosts that can talk to both sides of its network, in the DMZ.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User The internal servers will be configured to forward all queries,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User except queries for <code class="filename">site1.internal</code>, <code class="filename">site2.internal</code>, <code class="filename">site1.example.com</code>,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User and <code class="filename">site2.example.com</code>, to the servers
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User DMZ. These internal servers will have complete sets of information
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User for <code class="filename">site1.example.com</code>, <code class="filename">site2.example.com</code>, <code class="filename">site1.internal</code>,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User and <code class="filename">site2.internal</code>.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User To protect the <code class="filename">site1.internal</code> and <code class="filename">site2.internal</code> domains,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User the internal name servers must be configured to disallow all queries
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User to these domains from any external hosts, including the bastion
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User The external servers, which are on the bastion hosts, will
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User be configured to serve the "public" version of the <code class="filename">site1</code> and <code class="filename">site2.example.com</code> zones.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User This could include things such as the host records for public servers
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User (<code class="filename">www.example.com</code> and <code class="filename">ftp.example.com</code>),
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User and mail exchange (MX) records (<code class="filename">a.mx.example.com</code> and <code class="filename">b.mx.example.com</code>).
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User In addition, the public <code class="filename">site1</code> and <code class="filename">site2.example.com</code> zones
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User should have special MX records that contain wildcard (`*') records
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User pointing to the bastion hosts. This is needed because external mail
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User servers do not have any other way of looking up how to deliver mail
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User to those internal hosts. With the wildcard records, the mail will
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User be delivered to the bastion host, which can then forward it on to
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User internal hosts.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Here's an example of a wildcard MX record:
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<pre class="programlisting">* IN MX 10 external1.example.com.</pre>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Now that they accept mail on behalf of anything in the internal
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User network, the bastion hosts will need to know how to deliver mail
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User to internal hosts. In order for this to work properly, the resolvers
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User the bastion hosts will need to be configured to point to the internal
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User name servers for DNS resolution.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Queries for internal hostnames will be answered by the internal
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User servers, and queries for external hostnames will be forwarded back
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User out to the DNS servers on the bastion hosts.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User In order for all this to work properly, internal clients will
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User need to be configured to query <span class="emphasis"><em>only</em></span> the internal
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User name servers for DNS queries. This could also be enforced via
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User filtering on the network.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User If everything has been set properly, <span class="emphasis"><em>Example, Inc.</em></span>'s
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User internal clients will now be able to:
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Look up any hostnames in the <code class="literal">site1</code>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User <code class="literal">site2.example.com</code> zones.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Look up any hostnames in the <code class="literal">site1.internal</code> and
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User <code class="literal">site2.internal</code> domains.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<li class="listitem">Look up any hostnames on the Internet.</li>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<li class="listitem">Exchange mail with both internal and external people.</li>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Hosts on the Internet will be able to:
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Look up any hostnames in the <code class="literal">site1</code>
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User <code class="literal">site2.example.com</code> zones.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Exchange mail with anyone in the <code class="literal">site1</code> and
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User <code class="literal">site2.example.com</code> zones.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Here is an example configuration for the setup we just
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User described above. Note that this is only configuration information;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User 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>.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User Internal DNS server config:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinacl externals { <code class="varname">bastion-ips-go-here</code>; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce forward only;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // forward to external servers
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews <code class="varname">bastion-ips-go-here</code>;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // sample allow-transfer (no one)
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater allow-transfer { none; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // restrict query access
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater allow-query { internals; externals; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // restrict recursion
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater allow-recursion { internals; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater// sample master zone
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce type master;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // do normal iterative resolution (do not forward)
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater forwarders { };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-query { internals; externals; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-transfer { internals; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater// sample slave zone
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce masters { 172.16.72.3; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce forwarders { };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-query { internals; externals; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-transfer { internals; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce type master;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce forwarders { };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-query { internals; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-transfer { internals; }
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce masters { 172.16.72.3; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce forwarders { };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-query { internals };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-transfer { internals; }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User External (bastion host) DNS server config:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinacl internals { 172.16.72.0/24; 192.168.1.0/24; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luceacl externals { bastion-ips-go-here; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // sample allow-transfer (no one)
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater allow-transfer { none; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // default query access
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater allow-query { any; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // restrict cache access
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater allow-query-cache { internals; externals; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater // restrict recursion
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater allow-recursion { internals; externals; };
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater// sample slave zone
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce type master;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-transfer { internals; externals; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce masters { another_bastion_host_maybe; };
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce allow-transfer { internals; externals; }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User In the <code class="filename">resolv.conf</code> (or equivalent) on
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User the bastion host(s):
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Lucenameserver 172.16.72.2
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Lucenameserver 172.16.72.3
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Lucenameserver 172.16.72.4
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User TSIG (Transaction SIGnatures) is a mechanism for authenticating DNS
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User messages, originally specified in RFC 2845. It allows DNS messages
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User to be cryptographically signed using a shared secret. TSIG can
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User be used in any DNS transaction, as a way to restrict access to
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User certain server functions (e.g., recursive queries) to authorized
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User clients when IP-based access control is insufficient or needs to
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User be overridden, or as a way to ensure message authenticity when it
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User is critical to the integrity of the server, such as with dynamic
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User UPDATE messages or zone transfers from a master to a slave server.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User This is a guide to setting up TSIG in <acronym class="acronym">BIND</acronym>.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User It describes the configuration syntax and the process of creating
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>named</strong></span> supports TSIG for server-to-server
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User communication, and some of the tools included with
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <acronym class="acronym">BIND</acronym> support it for sending messages to
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>named</strong></span>:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<a class="xref" href="man.nsupdate.html" title="nsupdate"><span class="refentrytitle"><span class="application">nsupdate</span></span>(1)</a> supports TSIG via the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <code class="option">-k</code>, <code class="option">-l</code> and
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <code class="option">-y</code> command line options, or via
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the <span class="command"><strong>key</strong></span> command when running
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User interactively.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<a class="xref" href="man.dig.html" title="dig"><span class="refentrytitle">dig</span>(1)</a> supports TSIG via the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <code class="option">-k</code> and <code class="option">-y</code> command
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User line options.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<a name="id-1.5.6.5"></a>Generating a Shared Key</h3></div></div></div>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User TSIG keys can be generated using the <span class="command"><strong>tsig-keygen</strong></span>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User command; the output of the command is a <span class="command"><strong>key</strong></span> directive
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User suitable for inclusion in <code class="filename">named.conf</code>. The
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User key name, algorithm and size can be specified by command line parameters;
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the defaults are "tsig-key", HMAC-SHA256, and 256 bits, respectively.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Any string which is a valid DNS name can be used as a key name.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User For example, a key to be shared between servers called
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span> could
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User be called "host1-host2.", and this key could be generated using:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User $ tsig-keygen host1-host2. > host1-host2.key
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User This key may then be copied to both hosts. The key name and secret
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User must be identical on both hosts.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User (Note: copying a shared secret from one server to another is beyond
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the scope of the DNS. A secure transport mechanism should be used:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User secure FTP, SSL, ssh, telephone, encrypted email, etc.)
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>tsig-keygen</strong></span> can also be run as
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>ddns-confgen</strong></span>, in which case its output includes
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User additional configuration text for setting up dynamic DNS in
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <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>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<a name="id-1.5.6.6"></a>Loading A New Key</h3></div></div></div>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User For a key shared between servers called
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span>,
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the following could be added to each server's
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <code class="filename">named.conf</code> file:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userkey "host1-host2." {
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User algorithm hmac-sha256;
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User secret "DAopyf1mhCbFVZw7pgmNPBoLUq8wEUT7UuPoLENP2HY=";
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User (This is the same key generated above using
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>tsig-keygen</strong></span>.)
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Since this text contains a secret, it
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User is recommended that either <code class="filename">named.conf</code> not be
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User world-readable, or that the <span class="command"><strong>key</strong></span> directive
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User be stored in a file which is not world-readable, and which is
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User included in <code class="filename">named.conf</code> via the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>include</strong></span> directive.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Once a key has been added to <code class="filename">named.conf</code> and the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User server has been restarted or reconfigured, the server can recognize
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the key. If the server receives a message signed by the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User key, it will be able to verify the signature. If the signature
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User is valid, the response will be signed using the same key.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User TSIG keys that are known to a server can be listed using the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User command <span class="command"><strong>rndc tsig-list</strong></span>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<a name="id-1.5.6.7"></a>Instructing the Server to Use a Key</h3></div></div></div>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User A server sending a request to another server must be told whether
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User to use a key, and if so, which key to use.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User For example, a key may be specified for each server in the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>masters</strong></span> statement in the definition of a
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User slave zone; in this case, all SOA QUERY messages, NOTIFY
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User messages, and zone transfer requests (AXFR or IXFR) will be
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User signed using the specified key. Keys may also be specified
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User in the <span class="command"><strong>also-notify</strong></span> statement of a master
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User or slave zone, causing NOTIFY messages to be signed using
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User the specified key.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Keys can also be specified in a <span class="command"><strong>server</strong></span>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User directive. Adding the following on <span class="emphasis"><em>host1</em></span>,
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User if the IP address of <span class="emphasis"><em>host2</em></span> is 10.1.2.3, would
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User cause <span class="emphasis"><em>all</em></span> requests from <span class="emphasis"><em>host1</em></span>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User to <span class="emphasis"><em>host2</em></span>, including normal DNS queries, to be
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User signed using the <span class="command"><strong>host1-host2.</strong></span> key:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinserver 10.1.2.3 {
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User keys { host1-host2. ;};
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Multiple keys may be present in the <span class="command"><strong>keys</strong></span>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User statement, but only the first one is used. As this directive does
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User not contain secrets, it can be used in a world-readable file.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Requests sent by <span class="emphasis"><em>host2</em></span> to <span class="emphasis"><em>host1</em></span>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User would <span class="emphasis"><em>not</em></span> be signed, unless a similar
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>server</strong></span> directive were in <span class="emphasis"><em>host2</em></span>'s
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User configuration file.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Whenever any server sends a TSIG-signed DNS request, it will expect
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the response to be signed with the same key. If a response is not
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User signed, or if the signature is not valid, the response will be
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<a name="id-1.5.6.8"></a>TSIG-Based Access Control</h3></div></div></div>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User TSIG keys may be specified in ACL definitions and ACL directives
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User such as <span class="command"><strong>allow-query</strong></span>, <span class="command"><strong>allow-transfer</strong></span>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User and <span class="command"><strong>allow-update</strong></span>.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User The above key would be denoted in an ACL element as
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>key host1-host2.</strong></span>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User An example of an <span class="command"><strong>allow-update</strong></span> directive using
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userallow-update { !{ !localnets; any; }; key host1-host2. ;};
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User This allows dynamic updates to succeed only if the UPDATE
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User request comes from an address in <span class="command"><strong>localnets</strong></span>,
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="emphasis"><em>and</em></span> if it is signed using the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>host1-host2.</strong></span> key.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt See <a class="xref" href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called “Dynamic Update Policies”</a> for a discussion of
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt the more flexible <span class="command"><strong>update-policy</strong></span> statement.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<a name="id-1.5.6.9"></a>Errors</h3></div></div></div>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User Processing of TSIG-signed messages can result in several errors:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User If a TSIG-aware server receives a message signed by an
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User unknown key, the response will be unsigned, with the TSIG
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User extended error code set to BADKEY.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User If a TSIG-aware server receives a message from a known key
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User but with an invalid signature, the response will be unsigned,
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User with the TSIG extended error code set to BADSIG.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User If a TSIG-aware server receives a message with a time
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User outside of the allowed range, the response will be signed, with
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the TSIG extended error code set to BADTIME, and the time values
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User will be adjusted so that the response can be successfully
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User In all of the above cases, the server will return a response code
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User of NOTAUTH (not authenticated).
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="tkey"></a>TKEY</h2></div></div></div>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User TKEY (Transaction KEY) is a mechanism for automatically negotiating
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User a shared secret between two hosts, originally specified in RFC 2930.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User There are several TKEY "modes" that specify how a key is to be
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User generated or assigned. <acronym class="acronym">BIND</acronym> 9 implements only
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User one of these modes: Diffie-Hellman key exchange. Both hosts are
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User required to have a KEY record with algorithm DH (though this
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User record is not required to be present in a zone).
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User The TKEY process is initiated by a client or server by sending
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User a query of type TKEY to a TKEY-aware server. The query must include
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User an appropriate KEY record in the additional section, and
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User must be signed using either TSIG or SIG(0) with a previously
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User established key. The server's response, if successful, will
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User contain a TKEY record in its answer section. After this transaction,
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User both participants will have enough information to calculate a
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User shared secret using Diffie-Hellman key exchange. The shared secret
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User can then be used by to sign subsequent transactions between the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User TSIG keys known by the server, including TKEY-negotiated keys, can
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User be listed using <span class="command"><strong>rndc tsig-list</strong></span>.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User TKEY-negotiated keys can be deleted from a server using
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <span class="command"><strong>rndc tsig-delete</strong></span>. This can also be done via
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User the TKEY protocol itself, by sending an authenticated TKEY query
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User specifying the "key deletion" mode.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="sig0"></a>SIG(0)</h2></div></div></div>
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User <acronym class="acronym">BIND</acronym> partially supports DNSSEC SIG(0)
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User transaction signatures as specified in RFC 2535 and RFC 2931.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User SIG(0) uses public/private keys to authenticate messages. Access control
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein is performed in the same manner as TSIG keys; privileges can be
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User granted or denied in ACL directives based on the key name.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein When a SIG(0) signed message is received, it will only be
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User verified if the key is known and trusted by the server. The
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User server will not attempt to recursively fetch or validate the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User SIG(0) signing of multiple-message TCP streams is not supported.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews The only tool shipped with <acronym class="acronym">BIND</acronym> 9 that
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt generates SIG(0) signed messages is <span class="command"><strong>nsupdate</strong></span>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h2 class="title" style="clear: both">
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<a name="DNSSEC"></a>DNSSEC</h2></div></div></div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Cryptographic authentication of DNS information is possible
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein through the DNS Security (<span class="emphasis"><em>DNSSEC-bis</em></span>) extensions,
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews defined in RFC 4033, RFC 4034, and RFC 4035.
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews This section describes the creation and use of DNSSEC signed zones.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein In order to set up a DNSSEC secure zone, there are a series
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews of steps which must be followed. <acronym class="acronym">BIND</acronym>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein with several tools
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein that are used in this process, which are explained in more detail
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein below. In all cases, the <code class="option">-h</code> option prints a
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein full list of parameters. Note that the DNSSEC tools require the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein keyset files to be in the working directory or the
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews directory specified by the <code class="option">-d</code> option, and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein that the tools shipped with BIND 9.2.x and earlier are not compatible
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein with the current ones.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein There must also be communication with the administrators of
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the parent and/or child zone to transmit keys. A zone's security
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein status must be indicated by the parent zone for a DNSSEC capable
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews resolver to trust its data. This is done through the presence
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or absence of a <code class="literal">DS</code> record at the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein For other servers to trust data in this zone, they must
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein either be statically configured with this zone's zone key or the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein zone key of another zone above this one in the DNS tree.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="dnssec_keys"></a>Generating Keys</h3></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt The <span class="command"><strong>dnssec-keygen</strong></span> program is used to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein generate keys.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein A secure zone must contain one or more zone keys. The
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein zone keys will sign all other records in the zone, as well as
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the zone keys of any secure delegated zones. Zone keys must
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein have the same name as the zone, a name type of
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>ZONE</strong></span>, and must be usable for
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein authentication.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein It is recommended that zone keys use a cryptographic algorithm
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein designated as "mandatory to implement" by the IETF; currently
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the only one is RSASHA1.
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews The following command will generate a 768-bit RSASHA1 key for
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the <code class="filename">child.example</code> zone:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <strong class="userinput"><code>dnssec-keygen -a RSASHA1 -b 768 -n ZONE child.example.</code></strong>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Two output files will be produced:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <code class="filename">Kchild.example.+005+12345.key</code> and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <code class="filename">Kchild.example.+005+12345.private</code>
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews 12345 is an example of a key tag). The key filenames contain
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the key name (<code class="filename">child.example.</code>),
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein algorithm (3
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein is DSA, 1 is RSAMD5, 5 is RSASHA1, etc.), and the key tag (12345 in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The private key (in the <code class="filename">.private</code>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein used to generate signatures, and the public key (in the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <code class="filename">.key</code> file) is used for signature
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein verification.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein To generate another key with the same properties (but with
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein a different key tag), repeat the above command.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt The <span class="command"><strong>dnssec-keyfromlabel</strong></span> program is used
28b3569d6248168e6c00caab951521cc8141a49dAutomatic Updater to get a key pair from a crypto hardware and build the key
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt files. Its usage is similar to <span class="command"><strong>dnssec-keygen</strong></span>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The public keys should be inserted into the zone file by
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein including the <code class="filename">.key</code> files using
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>$INCLUDE</strong></span> statements.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="dnssec_signing"></a>Signing the Zone</h3></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt The <span class="command"><strong>dnssec-signzone</strong></span> program is used
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater to sign a zone.
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater Any <code class="filename">keyset</code> files corresponding to
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater secure subzones should be present. The zone signer will
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater generate <code class="literal">NSEC</code>, <code class="literal">NSEC3</code>
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater and <code class="literal">RRSIG</code> records for the zone, as
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater well as <code class="literal">DS</code> for the child zones if
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater <code class="literal">'-g'</code> is specified. If <code class="literal">'-g'</code>
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater is not specified, then DS RRsets for the secure child
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater zones need to be added manually.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The following command signs the zone, assuming it is in a
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein file called <code class="filename">zone.child.example</code>. By
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein default, all zone keys which have an available private key are
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein used to generate signatures.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <strong class="userinput"><code>dnssec-signzone -o child.example zone.child.example</code></strong>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein One output file is produced:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <code class="filename">zone.child.example.signed</code>. This
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein should be referenced by <code class="filename">named.conf</code>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein input file for the zone.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p><span class="command"><strong>dnssec-signzone</strong></span>
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews will also produce a keyset and dsset files and optionally a
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dlvset file. These are used to provide the parent zone
a1b05dea35aa30b152a47115e18bbe679d3fcf19Mark Andrews administrators with the <code class="literal">DNSKEYs</code> (or their
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein corresponding <code class="literal">DS</code> records) that are the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein secure entry point to the zone.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="dnssec_config"></a>Configuring Servers</h3></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt To enable <span class="command"><strong>named</strong></span> to respond appropriately
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews to DNS requests from DNSSEC aware clients,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-enable</strong></span> must be set to yes.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater (This is the default setting.)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt To enable <span class="command"><strong>named</strong></span> to validate answers from
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt other servers, the <span class="command"><strong>dnssec-enable</strong></span> option
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater must be set to <strong class="userinput"><code>yes</code></strong>, and the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-validation</strong></span> options must be set to
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater <strong class="userinput"><code>yes</code></strong> or <strong class="userinput"><code>auto</code></strong>.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt If <span class="command"><strong>dnssec-validation</strong></span> is set to
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater <strong class="userinput"><code>auto</code></strong>, then a default
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater trust anchor for the DNS root zone will be used.
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater If it is set to <strong class="userinput"><code>yes</code></strong>, however,
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater then at least one trust anchor must be configured
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt with a <span class="command"><strong>trusted-keys</strong></span> or
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>managed-keys</strong></span> statement in
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater <code class="filename">named.conf</code>, or DNSSEC validation
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater will not occur. The default setting is
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater <strong class="userinput"><code>yes</code></strong>.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>trusted-keys</strong></span> are copies of DNSKEY RRs
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews for zones that are used to form the first link in the
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews cryptographic chain of trust. All keys listed in
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>trusted-keys</strong></span> (and corresponding zones)
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews are deemed to exist and only the listed keys will be used
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews to validated the DNSKEY RRset that they are from.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>managed-keys</strong></span> are trusted keys which are
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater automatically kept up to date via RFC 5011 trust anchor
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>trusted-keys</strong></span> and
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>managed-keys</strong></span> are described in more detail
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews later in this document.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews Unlike <acronym class="acronym">BIND</acronym> 8, <acronym class="acronym">BIND</acronym>
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews 9 does not verify signatures on load, so zone keys for
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews authoritative zones do not need to be specified in the
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews configuration file.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews After DNSSEC gets established, a typical DNSSEC configuration
d3907d27cc138f45772d3d63082ae02c7659148aAutomatic Updater will look something like the following. It has one or
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews more public keys for the root. This allows answers from
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews outside the organization to be validated. It will also
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews have several keys for parts of the namespace the organization
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt controls. These are here to ensure that <span class="command"><strong>named</strong></span>
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater is immune to compromises in the DNSSEC components of the security
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews of parent zones.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews /* Root Key */
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater "." initial-key 257 3 3 "BNY4wrWM1nCfJ+CXd0rVXyYmobt7sEEfK3clRbGaTwS
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater JxrGkxJWoZu6I7PzJu/E9gx4UC1zGAHlXKdE4zYIpRh
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater aBKnvcC2U9mZhkdUpd1Vso/HAdjNe8LmMlnzY3zy2Xy
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 4klWOADTPzSv9eamj8V18PHGjBLaVtYvk/ln5ZApjYg
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater hf+6fElrmLkdaz MQ2OCnACR817DF4BBa7UR/beDHyp
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 5iWTXWSi6XmoJLbG9Scqc7l70KDqlvXR3M/lUUVRbke
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater g1IPJSidmK3ZyCllh4XSKbje/45SKucHgnwU5jefMtq
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 66gKodQj+MiA21AfUVe7u99WzTLzY3qlxDhxYQQ20FQ
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 97S+LKUTpQcq27R7AT3/V5hRQxScINqwcz4jYqZD2fQ
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater dgxbcDTClU0CRBdiieyLMNzXG3";
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater /* Key for our organization's forward zone */
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater example.com. 257 3 5 "AwEAAaxPMcR2x0HbQV4WeZB6oEDX+r0QM6
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 5KbhTjrW1ZaARmPhEZZe3Y9ifgEuq7vZ/z
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater GZUdEGNWy+JZzus0lUptwgjGwhUS1558Hb
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 4JKUbbOTcM8pwXlj0EiX3oDFVmjHO444gL
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater g4ywzO9WglMk7jbfW33gUKvirTHr25GL7S
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater TQUzBb5Usxt8lgnyTUHs1t3JwCY5hKZ6Cq
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater F4qJCyduieHukuY3H4XMAcR+xia2nIUPvm
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater /* Key for our reverse zone. */
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 2.0.192.IN-ADDRPA.NET. 257 3 5 "AQOnS4xn/IgOUpBPJ3bogzwc
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater xOdNax071L18QqZnQQQAVVr+i
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater LhGTnNGp3HoWQLUIzKrJVZ3zg
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater gy3WwNT6kZo6c0tszYqbtvchm
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater siaOdS0yOI6BgPsw+YZdzlYMa
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater IJGf4M4dyoKIhzdZyQ2bYQrjy
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater Q4LB0lC7aOnsMyYKHHYeRvPxj
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater IQXmdqgOJGq+vsevG06zW+1xg
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater 59VvjSPsZJHeDCUyWYrvPZesZ
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater DIRvhDD52SKvbheeTJUm6Ehkz
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews dnssec-enable yes;
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews dnssec-validation yes;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews None of the keys listed in this example are valid. In particular,
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews the root key is not valid.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater When DNSSEC validation is enabled and properly configured,
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater the resolver will reject any answers from signed, secure zones
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater which fail to validate, and will return SERVFAIL to the client.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater Responses may fail to validate for any of several reasons,
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater including missing, expired, or invalid signatures, a key which
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater does not match the DS RRset in the parent zone, or an insecure
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater response from a zone which, according to its parent, should have
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater When the validator receives a response from an unsigned zone
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater that has a signed parent, it must confirm with the parent
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater that the zone was intentionally left unsigned. It does
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater this by verifying, via signed and validated NSEC/NSEC3 records,
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater that the parent zone contains no DS records for the child.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater If the validator <span class="emphasis"><em>can</em></span> prove that the zone
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater is insecure, then the response is accepted. However, if it
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater cannot, then it must assume an insecure response to be a
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater forgery; it rejects the response and logs an error.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater The logged error reads "insecurity proof failed" and
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater "got insecure response; parent indicates it should be secure".
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater (Prior to BIND 9.7, the logged error was "not insecure".
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater This referred to the zone, not the response.)
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater<a name="dnssec.dynamic.zones"></a>DNSSEC, Dynamic Zones, and Automatic Signing</h2></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>As of BIND 9.7.0 it is possible to change a dynamic zone
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater from insecure to signed and back again. A secure zone can use
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater either NSEC or NSEC3 chains.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.3"></a>Converting from insecure to secure</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Changing a zone from insecure to secure can be done in two
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User ways: using a dynamic DNS update, or the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>auto-dnssec</strong></span> zone option.</p>
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User<p>For either method, you need to configure
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>named</strong></span> so that it can see the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater <code class="filename">K*</code> files which contain the public and private
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater parts of the keys that will be used to sign the zone. These files
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User will have been generated by
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-keygen</strong></span>. You can do this by placing them
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User in the key-directory, as specified in
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater <code class="filename">named.conf</code>:</p>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt type master;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt update-policy local;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>If one KSK and one ZSK DNSKEY key have been generated, this
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater configuration will cause all records in the zone to be signed
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater with the ZSK, and the DNSKEY RRset to be signed with the KSK as
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater well. An NSEC chain will be generated as part of the initial
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater signing process.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.8"></a>Dynamic DNS update method</h3></div></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt > ttl 3600
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt > update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt > update add example.net DNSKEY 257 3 7 AwEAAd/7odU/64o2LGsifbLtQmtO8dFDtTAZXSX2+X3e/UNlq9IHq3Y0 XtC0Iuawl/qkaKVxXe2lo8Ct+dM6UehyCqk=
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>While the update request will complete almost immediately,
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User the zone will not be completely signed until
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> has had time to walk the zone and
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater generate the NSEC and RRSIG records. The NSEC record at the apex
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater will be added last, to signal that there is a complete NSEC
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>If you wish to sign using NSEC3 instead of NSEC, you should
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater add an NSEC3PARAM record to the initial update request. If you
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater wish the NSEC3 chain to have the OPTOUT bit set, set it in the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater flags field of the NSEC3PARAM record.</p>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt > ttl 3600
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt > update add example.net DNSKEY 256 3 7 AwEAAZn17pUF0KpbPA2c7Gz76Vb18v0teKT3EyAGfBfL8eQ8al35zz3Y I1m/SAQBxIqMfLtIwqWPdgthsu36azGQAX8=
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt > update add example.net DNSKEY 257 3 7 AwEAAd/7odU/64o2LGsifbLtQmtO8dFDtTAZXSX2+X3e/UNlq9IHq3Y0 XtC0Iuawl/qkaKVxXe2lo8Ct+dM6UehyCqk=
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt > update add example.net NSEC3PARAM 1 1 100 1234567890
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Again, this update request will complete almost
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User immediately; however, the record won't show up until
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> has had a chance to build/remove the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater relevant chain. A private type record will be created to record
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater the state of the operation (see below for more details), and will
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater be removed once the operation completes.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>While the initial signing and NSEC/NSEC3 chain generation
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater is happening, other updates are possible as well.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.16"></a>Fully automatic zone signing</h3></div></div></div></div>
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User<p>To enable automatic signing, add the
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>auto-dnssec</strong></span> option to the zone statement in
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>auto-dnssec</strong></span> has two possible arguments:
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater <code class="constant">maintain</code>.</p>
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>auto-dnssec allow</strong></span>,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> can search the key directory for keys
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater matching the zone, insert them into the zone, and use them to
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User sign the zone. It will do so only when it receives an
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>rndc sign <zonename></strong></span>.</p>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>auto-dnssec maintain</strong></span> includes the above
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater functionality, but will also automatically adjust the zone's
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater DNSKEY records on schedule according to the keys' timing metadata.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt (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
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <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.)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> will periodically search the key directory
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater for keys matching the zone, and if the keys' metadata indicates
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater that any change should be made the zone, such as adding, removing,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater or revoking a key, then that action will be carried out. By default,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater the key directory is checked for changes every 60 minutes; this period
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater can be adjusted with the <code class="option">dnssec-loadkeys-interval</code>, up
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt to a maximum of 24 hours. The <span class="command"><strong>rndc loadkeys</strong></span> forces
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> to check for key updates immediately.
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater If keys are present in the key directory the first time the zone
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User is loaded, the zone will be signed immediately, without waiting for an
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>rndc sign</strong></span> or <span class="command"><strong>rndc loadkeys</strong></span>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater command. (Those commands can still be used when there are unscheduled
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater key changes, however.)
ef8014e56f35bb36daa5fd2c313f5e7963e97aa1Tinderbox User When new keys are added to a zone, the TTL is set to match that
ef8014e56f35bb36daa5fd2c313f5e7963e97aa1Tinderbox User of any existing DNSKEY RRset. If there is no existing DNSKEY RRset,
ef8014e56f35bb36daa5fd2c313f5e7963e97aa1Tinderbox User then the TTL will be set to the TTL specified when the key was
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt created (using the <span class="command"><strong>dnssec-keygen -L</strong></span> option), if
ef8014e56f35bb36daa5fd2c313f5e7963e97aa1Tinderbox User any, or to the SOA TTL.
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater If you wish the zone to be signed using NSEC3 instead of NSEC,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater submit an NSEC3PARAM record via dynamic update prior to the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater scheduled publication and activation of the keys. If you wish the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater NSEC3 chain to have the OPTOUT bit set, set it in the flags field
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater of the NSEC3PARAM record. The NSEC3PARAM record will not appear in
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater the zone immediately, but it will be stored for later reference. When
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater the zone is signed and the NSEC3 chain is completed, the NSEC3PARAM
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater record will appear in the zone.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>auto-dnssec</strong></span> option requires the zone to be
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User configured to allow dynamic updates, by adding an
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>allow-update</strong></span> or
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>update-policy</strong></span> statement to the zone
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater configuration. If this has not been done, the configuration will
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.25"></a>Private-type records</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>The state of the signing process is signaled by
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater private-type records (with a default type value of 65534). When
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater signing is complete, these records will have a nonzero value for
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater the final octet (for those records which have a nonzero initial
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>The private type record format: If the first octet is
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater non-zero then the record indicates that the zone needs to be
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater signed with the key matching the record, or that all signatures
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater that match the record should be removed.</p>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��algorithm�(octet�1)<br>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��key�id�in�network�order�(octet�2�and�3)<br>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��removal�flag�(octet�4)<br>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��complete�flag�(octet�5)<br>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Only records flagged as "complete" can be removed via
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater dynamic update. Attempts to remove other private type records
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater will be silently ignored.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>If the first octet is zero (this is a reserved algorithm
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater number that should never appear in a DNSKEY record) then the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater record indicates changes to the NSEC3 chains are in progress. The
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater rest of the record contains an NSEC3PARAM record. The flag field
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater tells what operation to perform based on the flag bits.</p>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��0x01�OPTOUT<br>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��0x80�CREATE<br>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��0x40�REMOVE<br>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater��0x20�NONSEC<br>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.32"></a>DNSKEY rollovers</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>As with insecure-to-secure conversions, rolling DNSSEC
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User keys can be done in two ways: using a dynamic DNS update, or the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>auto-dnssec</strong></span> zone option.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.34"></a>Dynamic DNS update method</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p> To perform key rollovers via dynamic update, you need to add
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User the <code class="filename">K*</code> files for the new keys so that
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> can find them. You can then add the new
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User DNSKEY RRs via dynamic update.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> will then cause the zone to be signed
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater with the new keys. When the signing is complete the private type
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater records will be updated so that the last octet is non
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>If this is for a KSK you need to inform the parent and any
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater trust anchor repositories of the new KSK.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>You should then wait for the maximum TTL in the zone before
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater removing the old DNSKEY. If it is a KSK that is being updated,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater you also need to wait for the DS RRset in the parent to be
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater updated and its TTL to expire. This ensures that all clients will
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater be able to verify at least one signature when you remove the old
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>The old DNSKEY can be removed via UPDATE. Take care to
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User specify the correct key.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> will clean out any signatures generated
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater by the old key after the update completes.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.39"></a>Automatic key rollovers</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>When a new key reaches its activation date (as set by
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-keygen</strong></span> or <span class="command"><strong>dnssec-settime</strong></span>),
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User if the <span class="command"><strong>auto-dnssec</strong></span> zone option is set to
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <code class="constant">maintain</code>, <span class="command"><strong>named</strong></span> will
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater automatically carry out the key rollover. If the key's algorithm
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater has not previously been used to sign the zone, then the zone will
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater be fully signed as quickly as possible. However, if the new key
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater is replacing an existing key of the same algorithm, then the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater zone will be re-signed incrementally, with signatures from the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater old key being replaced with signatures from the new key as their
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater signature validity periods expire. By default, this rollover
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater completes in 30 days, after which it will be safe to remove the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater old key from the DNSKEY RRset.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.41"></a>NSEC3PARAM rollovers via UPDATE</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Add the new NSEC3PARAM record via dynamic update. When the
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater new NSEC3 chain has been generated, the NSEC3PARAM flag field
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater will be zero. At this point you can remove the old NSEC3PARAM
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater record. The old chain will be removed after the update request
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater completes.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.43"></a>Converting from NSEC to NSEC3</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>To do this, you just need to add an NSEC3PARAM record. When
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater the conversion is complete, the NSEC chain will have been removed
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater and the NSEC3PARAM record will have a zero flag field. The NSEC3
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater chain will be generated before the NSEC chain is
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater destroyed.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.45"></a>Converting from NSEC3 to NSEC</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>To do this, use <span class="command"><strong>nsupdate</strong></span> to
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater remove all NSEC3PARAM records with a zero flag
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater field. The NSEC chain will be generated before the NSEC3 chain is
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.47"></a>Converting from secure to insecure</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>To convert a signed zone to unsigned using dynamic DNS,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater delete all the DNSKEY records from the zone apex using
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>nsupdate</strong></span>. All signatures, NSEC or NSEC3 chains,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater and associated NSEC3PARAM records will be removed automatically.
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater This will take place after the update request completes.</p>
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User<p> This requires the
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>dnssec-secure-to-insecure</strong></span> option to be set to
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <strong class="userinput"><code>yes</code></strong> in
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater <code class="filename">named.conf</code>.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>In addition, if the <span class="command"><strong>auto-dnssec maintain</strong></span>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater zone statement is used, it should be removed or changed to
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>allow</strong></span> instead (or it will re-sign).
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.51"></a>Periodic re-signing</h3></div></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>In any secure zone which supports dynamic updates, <span class="command"><strong>named</strong></span>
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater will periodically re-sign RRsets which have not been re-signed as
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater a result of some update action. The signature lifetimes will be
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater adjusted so as to spread the re-sign load over time rather than
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater all at once.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="section"><div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.10.53"></a>NSEC3 and OPTOUT</h3></div></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> only supports creating new NSEC3 chains
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater where all the NSEC3 records in the zone have the same OPTOUT
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> supports UPDATES to zones where the NSEC3
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User records in the chain have mixed OPTOUT state.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> does not support changing the OPTOUT
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater state of an individual NSEC3 record, the entire chain needs to be
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater changed if the OPTOUT state of an individual NSEC3 needs to be
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater<div class="titlepage"><div><div><h2 class="title" style="clear: both">
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater<a name="rfc5011.support"></a>Dynamic Trust Anchor Management</h2></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>BIND 9.7.0 introduces support for RFC 5011, dynamic trust
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User anchor management. Using this feature allows
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span> to keep track of changes to critical
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater DNSSEC keys without any need for the operator to make changes to
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater configuration files.</p>
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.11.3"></a>Validating Resolver</h3></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>To configure a validating resolver to use RFC 5011 to
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User maintain a trust anchor, configure the trust anchor using a
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>managed-keys</strong></span> statement. Information about
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User this can be found in
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <a class="xref" href="Bv9ARM.ch06.html#managed-keys" title="managed-keys Statement Definition and Usage">the section called “<span class="command"><strong>managed-keys</strong></span> Statement Definition
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.11.4"></a>Authoritative Server</h3></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>To set up an authoritative zone for RFC 5011 trust anchor
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater maintenance, generate two (or more) key signing keys (KSKs) for
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater the zone. Sign the zone with one of them; this is the "active"
6478b87fd23bcd3ab74c25b261021fe19a239c4fTinderbox User KSK. All KSKs which do not sign the zone are "stand-by"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Any validating resolver which is configured to use the
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater active KSK as an RFC 5011-managed trust anchor will take note
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater of the stand-by KSKs in the zone's DNSKEY RRset, and store them
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater for future reference. The resolver will recheck the zone
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater periodically, and after 30 days, if the new key is still there,
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater then the key will be accepted by the resolver as a valid trust
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater anchor for the zone. Any time after this 30-day acceptance
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater timer has completed, the active KSK can be revoked, and the
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater zone can be "rolled over" to the newly accepted key.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>The easiest way to place a stand-by key in a zone is to
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User use the "smart signing" features of
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>dnssec-keygen</strong></span> and
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-signzone</strong></span>. If a key with a publication
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater date in the past, but an activation date which is unset or in
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User the future, "
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-signzone -S</strong></span>" will include the DNSKEY
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater record in the zone, but will not sign with it:</p>
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater$ <strong class="userinput"><code>dnssec-keygen -K keys -f KSK -P now -A now+2y example.net</code></strong>
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater$ <strong class="userinput"><code>dnssec-signzone -S -K keys example.net</code></strong>
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User<p>To revoke a key, the new command
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-revoke</strong></span> has been added. This adds the
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User REVOKED bit to the key flags and re-generates the
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater <code class="filename">K*.private</code> files.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>After revoking the active key, the zone must be signed
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater with both the revoked KSK and the new active KSK. (Smart
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater signing takes care of this automatically.)</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Once a key has been revoked and used to sign the DNSKEY
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater RRset in which it appears, that key will never again be
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater accepted as a valid trust anchor by the resolver. However,
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater validation can proceed using the new active key (which had been
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater accepted by the resolver when it was a stand-by key).</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>See RFC 5011 for more details on key rollover
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater scenarios.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>When a key has been revoked, its key ID changes,
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater increasing by 128, and wrapping around at 65535. So, for
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater example, the key "<code class="filename">Kexample.com.+005+10000</code>" becomes
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater "<code class="filename">Kexample.com.+005+10128</code>".</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>If two keys have IDs exactly 128 apart, and one is
6478b87fd23bcd3ab74c25b261021fe19a239c4fTinderbox User revoked, then the two key IDs will collide, causing several
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User problems. To prevent this,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-keygen</strong></span> will not generate a new key if
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater another key is present which may collide. This checking will
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater only occur if the new keys are written to the same directory
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater which holds all other keys in use for that zone.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Older versions of BIND 9 did not have this precaution.
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater Exercise caution if using key revocation on keys that were
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater generated by previous releases, or if using keys stored in
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater multiple directories or on multiple machines.</p>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>It is expected that a future release of BIND 9 will
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater address this problem in a different way, by storing revoked
6478b87fd23bcd3ab74c25b261021fe19a239c4fTinderbox User keys with their original unrevoked key IDs.</p>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h2 class="title" style="clear: both">
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<a name="pkcs11"></a>PKCS#11 (Cryptoki) support</h2></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User PKCS#11 (Public Key Cryptography Standard #11) defines a
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User platform-independent API for the control of hardware security
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User modules (HSMs) and other cryptographic support devices.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User BIND 9 is known to work with three HSMs: The AEP Keyper, which has
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User been tested with Debian Linux, Solaris x86 and Windows Server 2003;
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User the Thales nShield, tested with Debian Linux; and the Sun SCA 6000
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User cryptographic acceleration board, tested with Solaris x86. In
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User addition, BIND can be used with all current versions of SoftHSM,
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User a software-based HSM simulator library produced by the OpenDNSSEC
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User PKCS#11 makes use of a "provider library": a dynamically loadable
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User library which provides a low-level PKCS#11 interface to drive the HSM
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User hardware. The PKCS#11 provider library comes from the HSM vendor, and
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User it is specific to the HSM to be controlled.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User There are two available mechanisms for PKCS#11 support in BIND 9:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User OpenSSL-based PKCS#11 and native PKCS#11. When using the first
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User mechanism, BIND uses a modified version of OpenSSL, which loads
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User the provider library and operates the HSM indirectly; any
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User cryptographic operations not supported by the HSM can be carried
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User out by OpenSSL instead. The second mechanism enables BIND to bypass
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User OpenSSL completely; BIND loads the provider library itself, and uses
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User the PKCS#11 API to drive the HSM directly.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.6"></a>Prerequisites</h3></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User See the documentation provided by your HSM vendor for
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User information about installing, initializing, testing and
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User troubleshooting the HSM.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.7"></a>Native PKCS#11</h3></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Native PKCS#11 mode will only work with an HSM capable of carrying
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User out <span class="emphasis"><em>every</em></span> cryptographic operation BIND 9 may
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User need. The HSM's provider library must have a complete implementation
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User of the PKCS#11 API, so that all these functions are accessible. As of
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User this writing, only the Thales nShield HSM and SoftHSMv2 can be used
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User in this fashion. For other HSMs, including the AEP Keyper, Sun SCA
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User 6000 and older versions of SoftHSM, use OpenSSL-based PKCS#11.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User (Note: Eventually, when more HSMs become capable of supporting
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User native PKCS#11, it is expected that OpenSSL-based PKCS#11 will
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User be deprecated.)
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User To build BIND with native PKCS#11, configure as follows:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>cd bind9</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>/configure --enable-native-pkcs11 \
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User --with-pkcs11=<em class="replaceable"><code>provider-library-path</code></em></code></strong>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt This will cause all BIND tools, including <span class="command"><strong>named</strong></span>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt and the <span class="command"><strong>dnssec-*</strong></span> and <span class="command"><strong>pkcs11-*</strong></span>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User tools, to use the PKCS#11 provider library specified in
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User <em class="replaceable"><code>provider-library-path</code></em> for cryptography.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User (The provider library path can be overridden using the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <code class="option">-E</code> in <span class="command"><strong>named</strong></span> and the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-*</strong></span> tools, or the <code class="option">-m</code> in
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt the <span class="command"><strong>pkcs11-*</strong></span> tools.)
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.7.6"></a>Building SoftHSMv2</h4></div></div></div>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User SoftHSMv2, the latest development version of SoftHSM, is available
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User <a class="link" href="https://github.com/opendnssec/SoftHSMv2" target="_top">
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User It is a software library developed by the OpenDNSSEC project
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User (<a class="link" href="http://www.opendnssec.org" target="_top">
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User which provides a PKCS#11 interface to a virtual HSM, implemented in
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User the form of a SQLite3 database on the local filesystem. It provides
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User less security than a true HSM, but it allows you to experiment with
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User native PKCS#11 when an HSM is not available. SoftHSMv2 can be
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User configured to use either OpenSSL or the Botan library to perform
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User cryptographic functions, but when using it for native PKCS#11 in
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User BIND, OpenSSL is required.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User By default, the SoftHSMv2 configuration file is
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User <em class="replaceable"><code>prefix</code></em>/etc/softhsm2.conf (where
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User <em class="replaceable"><code>prefix</code></em> is configured at compile time).
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User This location can be overridden by the SOFTHSM2_CONF environment
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User variable. The SoftHSMv2 cryptographic store must be installed and
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User initialized before using it with BIND.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code> cd SoftHSMv2 </code></strong>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code> configure --with-crypto-backend=openssl --prefix=/opt/pkcs11/usr --enable-gost </code></strong>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code> make </code></strong>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code> make install </code></strong>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code> /opt/pkcs11/usr/bin/softhsm-util --init-token 0 --slot 0 --label softhsmv2 </code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8"></a>OpenSSL-based PKCS#11</h3></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User OpenSSL-based PKCS#11 mode uses a modified version of the
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User OpenSSL library; stock OpenSSL does not fully support PKCS#11.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User ISC provides a patch to OpenSSL to correct this. This patch is
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User based on work originally done by the OpenSolaris project; it has been
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User modified by ISC to provide new features such as PIN management and
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User key-by-reference.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User There are two "flavors" of PKCS#11 support provided by
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User the patched OpenSSL, one of which must be chosen at
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User configuration time. The correct choice depends on the HSM
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User Use 'crypto-accelerator' with HSMs that have hardware
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User cryptographic acceleration features, such as the SCA 6000
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User board. This causes OpenSSL to run all supported
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User cryptographic operations in the HSM.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User Use 'sign-only' with HSMs that are designed to
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User function primarily as secure key storage devices, but lack
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User hardware acceleration. These devices are highly secure, but
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User are not necessarily any faster at cryptography than the
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User system CPU — often, they are slower. It is therefore
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User most efficient to use them only for those cryptographic
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User functions that require access to the secured private key,
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User such as zone signing, and to use the system CPU for all
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User other computationally-intensive operations. The AEP Keyper
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User is an example of such a device.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User The modified OpenSSL code is included in the BIND 9 release,
a24330c4805a224191ab687d0291963062fe3355Tinderbox User in the form of a context diff against the latest versions of
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User OpenSSL. OpenSSL 0.9.8, 1.0.0, and 1.0.1 are supported; there are
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User separate diffs for each version. In the examples to follow,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User we use OpenSSL 0.9.8, but the same methods work with OpenSSL
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User 1.0.0 and 1.0.1.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User The latest OpenSSL versions as of this writing (January 2015)
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User are 0.9.8zc, 1.0.0o, and 1.0.1j.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User ISC will provide updated patches as new versions of OpenSSL
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User are released. The version number in the following examples
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User is expected to change.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Before building BIND 9 with PKCS#11 support, it will be
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User necessary to build OpenSSL with the patch in place, and configure
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User it with the path to your HSM's PKCS#11 provider library.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8.8"></a>Patching OpenSSL</h4></div></div></div>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User$ <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>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code>tar zxf openssl-0.9.8zc.tar.gz</code></strong>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>Apply the patch from the BIND 9 release:</p>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code>patch -p1 -d openssl-0.9.8zc \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User < bind9/bin/pkcs11/openssl-0.9.8zc-patch</code></strong>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User The patch file may not be compatible with the
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User "patch" utility on all operating systems. You may need to
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User install GNU patch.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User When building OpenSSL, place it in a non-standard
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User location so that it does not interfere with OpenSSL libraries
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User elsewhere on the system. In the following examples, we choose
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User to install into "/opt/pkcs11/usr". We will use this location
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User when we configure BIND 9.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User Later, when building BIND 9, the location of the custom-built
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User OpenSSL library will need to be specified via configure.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8.9"></a>Building OpenSSL for the AEP Keyper on Linux</h4></div></div></div>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User The AEP Keyper is a highly secure key storage device,
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User but does not provide hardware cryptographic acceleration. It
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User can carry out cryptographic operations, but it is probably
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User slower than your system's CPU. Therefore, we choose the
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User 'sign-only' flavor when building OpenSSL.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User The Keyper-specific PKCS#11 provider library is
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User delivered with the Keyper software. In this example, we place
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>cp pkcs11.GCC4.0.2.so.4.05 /opt/pkcs11/usr/lib/libpkcs11.so</code></strong>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User This library is only available for Linux as a 32-bit
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User binary. If we are compiling on a 64-bit Linux system, it is
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User necessary to force a 32-bit build, by specifying -m32 in the
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User build options.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User Finally, the Keyper library requires threads, so we
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User must specify -pthread.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>/Configure linux-generic32 -m32 -pthread \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --pk11-libname=/opt/pkcs11/usr/lib/libpkcs11.so \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --pk11-flavor=sign-only \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt After configuring, run "<span class="command"><strong>make</strong></span>"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt and "<span class="command"><strong>make test</strong></span>". If "<span class="command"><strong>make
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User test</strong></span>" fails with "pthread_atfork() not found", you forgot to
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User add the -pthread above.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8.10"></a>Building OpenSSL for the SCA 6000 on Solaris</h4></div></div></div>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User The SCA-6000 PKCS#11 provider is installed as a system
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User library, libpkcs11. It is a true crypto accelerator, up to 4
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User times faster than any CPU, so the flavor shall be
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User 'crypto-accelerator'.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User In this example, we are building on Solaris x86 on an
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User AMD64 system.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>/Configure solaris64-x86_64-cc \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --pk11-flavor=crypto-accelerator \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User (For a 32-bit build, use "solaris-x86-cc" and /usr/lib/libpkcs11.so.)
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User After configuring, run
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>make</strong></span> and
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>make test</strong></span>.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8.11"></a>Building OpenSSL for SoftHSM</h4></div></div></div>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User SoftHSM (version 1) is a software library developed by the
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User OpenDNSSEC project
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User (<a class="link" href="http://www.opendnssec.org" target="_top">
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User which provides a
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User PKCS#11 interface to a virtual HSM, implemented in the form of
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User a SQLite3 database on the local filesystem. SoftHSM uses
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User the Botan library to perform cryptographic functions. Though
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User less secure than a true HSM, it can allow you to experiment
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User with PKCS#11 when an HSM is not available.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User The SoftHSM cryptographic store must be installed and
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User initialized before using it with OpenSSL, and the SOFTHSM_CONF
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User environment variable must always point to the SoftHSM configuration
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code> cd softhsm-1.3.7 </code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code> configure --prefix=/opt/pkcs11/usr </code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code> make </code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code> make install </code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code> export SOFTHSM_CONF=/opt/pkcs11/softhsm.conf </code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code> echo "0:/opt/pkcs11/softhsm.db" > $SOFTHSM_CONF </code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code> /opt/pkcs11/usr/bin/softhsm --init-token 0 --slot 0 --label softhsm </code></strong>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User SoftHSM can perform all cryptographic operations, but
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User since it only uses your system CPU, there is no advantage to using
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User it for anything but signing. Therefore, we choose the 'sign-only'
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User flavor when building OpenSSL.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User$ <strong class="userinput"><code>cd openssl-0.9.8zc</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>/Configure linux-x86_64 -pthread \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --pk11-libname=/opt/pkcs11/usr/lib/libsofthsm.so \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --pk11-flavor=sign-only \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt After configuring, run "<span class="command"><strong>make</strong></span>"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt and "<span class="command"><strong>make test</strong></span>".
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Once you have built OpenSSL, run
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "<span class="command"><strong>apps/openssl engine pkcs11</strong></span>" to confirm
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User that PKCS#11 support was compiled in correctly. The output
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User should be one of the following lines, depending on the flavor
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User (pkcs11) PKCS #11 engine support (sign only)
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User (pkcs11) PKCS #11 engine support (crypto accelerator)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "<span class="command"><strong>apps/openssl engine pkcs11 -t</strong></span>". This will
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User attempt to initialize the PKCS#11 engine. If it is able to
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User do so successfully, it will report
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="quote">“<span class="quote"><code class="literal">[ available ]</code></span>”</span>.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User If the output is correct, run
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "<span class="command"><strong>make install</strong></span>" which will install the
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User modified OpenSSL suite to <code class="filename">/opt/pkcs11/usr</code>.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8.18"></a>Configuring BIND 9 for Linux with the AEP Keyper</h4></div></div></div>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User To link with the PKCS#11 provider, threads must be
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User enabled in the BIND 9 build.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User The PKCS#11 library for the AEP Keyper is currently
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User only available as a 32-bit binary. If we are building on a
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User 64-bit host, we must force a 32-bit build by adding "-m32" to
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User the CC options on the "configure" command line.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>cd /bind9</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>/configure CC="gcc -m32" --enable-threads \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --with-pkcs11=/opt/pkcs11/usr/lib/libpkcs11.so</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8.19"></a>Configuring BIND 9 for Solaris with the SCA 6000</h4></div></div></div>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User To link with the PKCS#11 provider, threads must be
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User enabled in the BIND 9 build.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>cd /bind9</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>/configure CC="cc -xarch=amd64" --enable-threads \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --with-pkcs11=/usr/lib/64/libpkcs11.so</code></strong>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<p>(For a 32-bit build, omit CC="cc -xarch=amd64".)</p>
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User If configure complains about OpenSSL not working, you
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User may have a 32/64-bit architecture mismatch. Or, you may have
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User incorrectly specified the path to OpenSSL (it should be the
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User same as the --prefix argument to the OpenSSL
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h4 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.8.20"></a>Configuring BIND 9 for SoftHSM</h4></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>cd /bind9</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>/configure --enable-threads \
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User --with-pkcs11=/opt/pkcs11/usr/lib/libsofthsm.so</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User After configuring, run
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "<span class="command"><strong>make</strong></span>",
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "<span class="command"><strong>make test</strong></span>" and
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "<span class="command"><strong>make install</strong></span>".
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User (Note: If "make test" fails in the "pkcs11" system test, you may
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User have forgotten to set the SOFTHSM_CONF environment variable.)
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.9"></a>PKCS#11 Tools</h3></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User BIND 9 includes a minimal set of tools to operate the
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User HSM, including
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>pkcs11-keygen</strong></span> to generate a new key pair
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User within the HSM,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>pkcs11-list</strong></span> to list objects currently
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>pkcs11-destroy</strong></span> to remove objects, and
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>pkcs11-tokens</strong></span> to list available tokens.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User In UNIX/Linux builds, these tools are built only if BIND
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User 9 is configured with the --with-pkcs11 option. (Note: If
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User --with-pkcs11 is set to "yes", rather than to the path of the
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User PKCS#11 provider, then the tools will be built but the
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User provider will be left undefined. Use the -m option or the
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User PKCS11_PROVIDER environment variable to specify the path to the
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.10"></a>Using the HSM</h3></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User For OpenSSL-based PKCS#11, we must first set up the runtime
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User environment so the OpenSSL and PKCS#11 libraries can be loaded:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>export LD_LIBRARY_PATH=/opt/pkcs11/usr/lib:${LD_LIBRARY_PATH}</code></strong>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt This causes <span class="command"><strong>named</strong></span> and other binaries to load
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User the OpenSSL library from <code class="filename">/opt/pkcs11/usr/lib</code>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User rather than from the default location. This step is not necessary
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User when using native PKCS#11.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Some HSMs require other environment variables to be set.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User For example, when operating an AEP Keyper, it is necessary to
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User specify the location of the "machine" file, which stores
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User information about the Keyper for use by the provider
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User library. If the machine file is in
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User <code class="filename">/opt/Keyper/PKCS11Provider/machine</code>,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>export KEYPER_LIBRARY_PATH=/opt/Keyper/PKCS11Provider</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Such environment variables must be set whenever running
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User any tool that uses the HSM, including
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>pkcs11-keygen</strong></span>,
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>pkcs11-list</strong></span>,
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>pkcs11-destroy</strong></span>,
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>dnssec-keyfromlabel</strong></span>,
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User <span class="command"><strong>dnssec-signzone</strong></span>,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-keygen</strong></span>, and
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span>.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User We can now create and use keys in the HSM. In this case,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User we will create a 2048 bit key and give it the label
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User "sample-ksk":
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>pkcs11-keygen -b 2048 -l sample-ksk</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>pkcs11-list</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox Userobject[0]: handle 2147483658 class 3 label[8] 'sample-ksk' id[0]
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox Userobject[1]: handle 2147483657 class 2 label[8] 'sample-ksk' id[0]
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Before using this key to sign a zone, we must create a
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User pair of BIND 9 key files. The "dnssec-keyfromlabel" utility
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User does this. In this case, we will be using the HSM key
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User "sample-ksk" as the key-signing key for "example.net":
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>dnssec-keyfromlabel -l sample-ksk -f KSK example.net</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User The resulting K*.key and K*.private files can now be used
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User to sign the zone. Unlike normal K* files, which contain both
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User public and private key data, these files will contain only the
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User public key data, plus an identifier for the private key which
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User remains stored within the HSM. Signing with the private key takes
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User place inside the HSM.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User If you wish to generate a second key in the HSM for use
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User as a zone-signing key, follow the same procedure above, using a
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User different keylabel, a smaller key size, and omitting "-f KSK"
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User from the dnssec-keyfromlabel arguments:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User (Note: When using OpenSSL-based PKCS#11 the label is an arbitrary
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User string which identifies the key. With native PKCS#11, the label is
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User a PKCS#11 URI string which may include other details about the key
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User and the HSM, including its PIN. See
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <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.)
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>pkcs11-keygen -b 1024 -l sample-zsk</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>dnssec-keyfromlabel -l sample-zsk example.net</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Alternatively, you may prefer to generate a conventional
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User on-disk key, using dnssec-keygen:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>dnssec-keygen example.net</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User This provides less security than an HSM key, but since
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User HSMs can be slow or cumbersome to use for security reasons, it
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User may be more efficient to reserve HSM keys for use in the less
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User frequent key-signing operation. The zone-signing key can be
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User rolled more frequently, if you wish, to compensate for a
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User reduction in key security. (Note: When using native PKCS#11,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User there is no speed advantage to using on-disk keys, as cryptographic
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User operations will be done by the HSM regardless.)
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Now you can sign the zone. (Note: If not using the -S
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt option to <span class="command"><strong>dnssec-signzone</strong></span>, it will be
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User necessary to add the contents of both <code class="filename">K*.key</code>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User files to the zone master file before signing it.)
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>dnssec-signzone -S example.net</code></strong>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox UserVerifying the zone using the following algorithms:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox UserZone signing complete:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox UserAlgorithm: NSEC3RSASHA1: ZSKs: 1, KSKs: 1 active, 0 revoked, 0 stand-by
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.11"></a>Specifying the engine on the command line</h3></div></div></div>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User When using OpenSSL-based PKCS#11, the "engine" to be used by
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt OpenSSL can be specified in <span class="command"><strong>named</strong></span> and all of
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt the BIND <span class="command"><strong>dnssec-*</strong></span> tools by using the "-E
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User <engine>" command line option. If BIND 9 is built with
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User the --with-pkcs11 option, this option defaults to "pkcs11".
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User Specifying the engine will generally not be necessary unless
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User for some reason you wish to use a different OpenSSL
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User If you wish to disable use of the "pkcs11" engine —
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User for troubleshooting purposes, or because the HSM is unavailable
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User — set the engine to the empty string. For example:
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User$ <strong class="userinput"><code>dnssec-signzone -E '' -S example.net</code></strong>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dnssec-signzone</strong></span> to run as if it were compiled
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User without the --with-pkcs11 option.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User When built with native PKCS#11 mode, the "engine" option has a
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User different meaning: it specifies the path to the PKCS#11 provider
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User library. This may be useful when testing a new provider library.
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.12.12"></a>Running named with automatic zone re-signing</h3></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt If you want <span class="command"><strong>named</strong></span> to dynamically re-sign zones
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User using HSM keys, and/or to to sign new records inserted via nsupdate,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt then <span class="command"><strong>named</strong></span> must have access to the HSM PIN. In OpenSSL-based PKCS#11,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User this is accomplished by placing the PIN into the openssl.cnf file
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User (in the above examples,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User <code class="filename">/opt/pkcs11/usr/ssl/openssl.cnf</code>).
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User The location of the openssl.cnf file can be overridden by
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User setting the OPENSSL_CONF environment variable before running
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>named</strong></span>.
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User openssl_conf = openssl_def
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User [ openssl_def ]
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User engines = engine_section
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User [ engine_section ]
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User pkcs11 = pkcs11_section
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User [ pkcs11_section ]
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User PIN = <em class="replaceable"><code><PLACE PIN HERE></code></em>
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User This will also allow the dnssec-* tools to access the HSM
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User without PIN entry. (The pkcs11-* tools access the HSM directly,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User not via OpenSSL, so a PIN will still be required to use
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User In native PKCS#11 mode, the PIN can be provided in a file specified
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User as an attribute of the key's label. For example, if a key had the label
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User <strong class="userinput"><code>pkcs11:object=local-zsk;pin-source=/etc/hsmpin</code></strong>,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User then the PIN would be read from the file
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User Placing the HSM's PIN in a text file in this manner may reduce the
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User security advantage of using an HSM. Be sure this is what you want to
2f161339d28f61a05dd92bbe01ce754e32e35addTinderbox User do before configuring the system in this way.
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater<div class="titlepage"><div><div><h2 class="title" style="clear: both">
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User<a name="dlz-info"></a>DLZ (Dynamically Loadable Zones)</h2></div></div></div>
a24330c4805a224191ab687d0291963062fe3355Tinderbox User DLZ (Dynamically Loadable Zones) is an extension to BIND 9 that allows
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User zone data to be retrieved directly from an external database. There is
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User no required format or schema. DLZ drivers exist for several different
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User database backends including PostgreSQL, MySQL, and LDAP and can be
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User written for any other.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt Historically, DLZ drivers had to be statically linked with the <span class="command"><strong>named</strong></span>
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User binary and were turned on via a configure option at compile time (for
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User example, <strong class="userinput"><code>"configure --with-dlz-ldap"</code></strong>).
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User Currently, the drivers provided in the BIND 9 tarball in
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User <code class="filename">contrib/dlz/drivers</code> are still linked this
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User In BIND 9.8 and higher, it is possible to link some DLZ modules
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User dynamically at runtime, via the DLZ "dlopen" driver, which acts as a
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User generic wrapper around a shared object implementing the DLZ API. The
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "dlopen" driver is linked into <span class="command"><strong>named</strong></span> by default, so configure options
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User are no longer necessary when using these dynamically linkable drivers,
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User but are still needed for the older drivers in
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User <code class="filename">contrib/dlz/drivers</code>.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt When the DLZ module provides data to <span class="command"><strong>named</strong></span>, it does so in text format.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt The response is converted to DNS wire format by <span class="command"><strong>named</strong></span>. This
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User conversion, and the lack of any internal caching, places significant
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User limits on the query performance of DLZ modules. Consequently, DLZ is
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User not recommended for use on high-volume servers. However, it can be
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User used in a hidden master configuration, with slaves retrieving zone
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User updates via AXFR. (Note, however, that DLZ has no built-in support for
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User DNS notify; slaves are not automatically informed of changes to the
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User zones in the database.)
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.13.6"></a>Configuring DLZ</h3></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt A DLZ database is configured with a <span class="command"><strong>dlz</strong></span>
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User statement in <code class="filename">named.conf</code>:
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User dlz example {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt database "dlopen driver.so <code class="option">args</code>";
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User This specifies a DLZ module to search when answering queries; the
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User module is implemented in <code class="filename">driver.so</code> and is
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User loaded at runtime by the dlopen DLZ driver. Multiple
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dlz</strong></span> statements can be specified; when
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User answering a query, all DLZ modules with <code class="option">search</code>
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User set to <code class="literal">yes</code> will be queried to find out if
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User they contain an answer for the query name; the best available
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User answer will be returned to the client.
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User The <code class="option">search</code> option in the above example can be
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User omitted, because <code class="literal">yes</code> is the default value.
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User If <code class="option">search</code> is set to <code class="literal">no</code>, then
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User this DLZ module is <span class="emphasis"><em>not</em></span> searched for the best
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User match when a query is received. Instead, zones in this DLZ must be
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User separately specified in a zone statement. This allows you to
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User configure a zone normally using standard zone option semantics,
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User but specify a different database back-end for storage of the
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User zone's data. For example, to implement NXDOMAIN redirection using
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User a DLZ module for back-end storage of redirection rules:
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt database "dlopen driver.so <code class="option">args</code>";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt type redirect;
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.13.7"></a>Sample DLZ Driver</h3></div></div></div>
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User For guidance in implementation of DLZ modules, the directory
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User <code class="filename">contrib/dlz/example</code> contains a basic
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User dynamically-linkable DLZ module--i.e., one which can be
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User loaded at runtime by the "dlopen" DLZ driver.
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User The example sets up a single zone, whose name is passed
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt to the module as an argument in the <span class="command"><strong>dlz</strong></span>
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User In the above example, the module is configured to create a zone
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User "example.nil", which can answer queries and AXFR requests, and
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User accept DDNS updates. At runtime, prior to any updates, the zone
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User contains an SOA, NS, and a single A record at the apex:
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User example.nil. 3600 IN SOA example.nil. hostmaster.example.nil. (
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt 123 900 600 86400 3600
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User example.nil. 1800 IN A 10.53.0.1
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User The sample driver is capable of retrieving information about the
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User querying client, and altering its response on the basis of this
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User information. To demonstrate this feature, the example driver
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User responds to queries for "source-addr.<code class="option">zonename</code>>/TXT"
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User with the source address of the query. Note, however, that this
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User record will *not* be included in AXFR or ANY responses. Normally,
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User this feature would be used to alter responses in some other fashion,
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User e.g., by providing different address records for a particular name
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User depending on the network from which the query arrived.
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User Documentation of the DLZ module API can be found in
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User <code class="filename">contrib/dlz/example/README</code>. This directory also
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User contains the header file <code class="filename">dlz_minimal.h</code>, which
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User defines the API and should be included by any dynamically-linkable
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User<div class="titlepage"><div><div><h2 class="title" style="clear: both">
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User<a name="dyndb-info"></a>DynDB (Dynamic Database)</h2></div></div></div>
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User DynDB is an extension to BIND 9 which, like DLZ
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt (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
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User retrieved from an external database. Unlike DLZ, a DynDB module
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User provides a full-featured BIND zone database interface. Where
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User DLZ translates DNS queries into real-time database lookups,
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User resulting in relatively poor query performance, and is unable
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User to handle DNSSEC-signed data due to its limited API, a DynDB
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User module can pre-load an in-memory database from the external
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User data source, providing the same performance and functionality
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User as zones served natively by BIND.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User A DynDB module supporting LDAP has been created by Red Hat
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User and is available from
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User <a class="link" href="https://fedorahosted.org/bind-dyndb-ldap/" target="_top">https://fedorahosted.org/bind-dyndb-ldap/</a>.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User A sample DynDB module for testing and developer guidance
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User is included with the BIND source code, in the directory
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User <code class="filename">bin/tests/system/dyndb/driver</code>.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.14.5"></a>Configuring DynDB</h3></div></div></div>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt A DynDB database is configured with a <span class="command"><strong>dyndb</strong></span>
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User statement in <code class="filename">named.conf</code>:
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User dyndb example "driver.so" {
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User <em class="replaceable"><code>parameters</code></em>
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User The file <code class="filename">driver.so</code> is a DynDB module which
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User implements the full DNS database API. Multiple
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt <span class="command"><strong>dyndb</strong></span> statements can be specified, to load
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User different drivers or multiple instances of the same driver.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User Zones provided by a DynDB module are added to the view's zone
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User table, and are treated as normal authoritative zones when BIND
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User is responding to queries. Zone configuration is handled internally
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User by the DynDB module.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User The <em class="replaceable"><code>parameters</code></em> are passed as an opaque
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User string to the DynDB module's initialization routine. Configuration
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User syntax will differ depending on the driver.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.14.6"></a>Sample DynDB Module</h3></div></div></div>
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User For guidance in implementation of DynDB modules, the directory
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User <code class="filename">bin/tests/system/dyndb/driver</code>.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User contains a basic DynDB module.
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User The example sets up two zones, whose names are passed
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt to the module as arguments in the <span class="command"><strong>dyndb</strong></span>
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User dyndb sample "sample.so" { example.nil. arpa. };
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User In the above example, the module is configured to create a zone
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User "example.nil", which can answer queries and AXFR requests, and
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User accept DDNS updates. At runtime, prior to any updates, the zone
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User contains an SOA, NS, and a single A record at the apex:
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User example.nil. 86400 IN SOA example.nil. example.nil. (
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User 0 28800 7200 604800 86400
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User example.nil. 86400 IN A 127.0.0.1
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User When the zone is updated dynamically, the DynDB module will determine
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User whether the updated RR is an address (i.e., type A or AAAA) and if
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User so, it will automatically update the corresponding PTR record in a
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User reverse zone. (Updates are not stored permanently; all updates are
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User lost when the server is restarted.)
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User<div class="titlepage"><div><div><h2 class="title" style="clear: both">
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User<a name="ipv6"></a>IPv6 Support in <acronym class="acronym">BIND</acronym> 9</h2></div></div></div>
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews <acronym class="acronym">BIND</acronym> 9 fully supports all currently
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater defined forms of IPv6 name to address and address to name
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater lookups. It will also use IPv6 addresses to make queries when
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater running on an IPv6 capable system.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews For forward lookups, <acronym class="acronym">BIND</acronym> 9 supports
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews only AAAA records. RFC 3363 deprecated the use of A6 records,
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews and client-side support for A6 records was accordingly removed
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews from <acronym class="acronym">BIND</acronym> 9.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews However, authoritative <acronym class="acronym">BIND</acronym> 9 name servers still
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein load zone files containing A6 records correctly, answer queries
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for A6 records, and accept zone transfer for a zone containing A6
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews For IPv6 reverse lookups, <acronym class="acronym">BIND</acronym> 9 supports
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the traditional "nibble" format used in the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <span class="emphasis"><em>ip6.arpa</em></span> domain, as well as the older, deprecated
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews <span class="emphasis"><em>ip6.int</em></span> domain.
5d564da348e890e42f63eebf2dced9a05b41f4fbTinderbox User Older versions of <acronym class="acronym">BIND</acronym> 9
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews supported the "binary label" (also known as "bitstring") format,
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews but support of binary labels has been completely removed per
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews Many applications in <acronym class="acronym">BIND</acronym> 9 do not understand
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews the binary label format at all any more, and will return an
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews error if given.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews In particular, an authoritative <acronym class="acronym">BIND</acronym> 9
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews name server will not load a zone file containing binary labels.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein For an overview of the format and structure of IPv6 addresses,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt see <a class="xref" href="Bv9ARM.ch11.html#ipv6addresses" title="IPv6 addresses (AAAA)">the section called “IPv6 addresses (AAAA)”</a>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.15.6"></a>Address Lookups Using AAAA Records</h3></div></div></div>
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews The IPv6 AAAA record is a parallel to the IPv4 A record,
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews and, unlike the deprecated A6 record, specifies the entire
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews IPv6 address in a single record. For example,
3eb9ec750c9088869170dda63e8899b2ba462823Mark Andrewshost 3600 IN AAAA 2001:db8::1
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews Use of IPv4-in-IPv6 mapped addresses is not recommended.
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews If a host has an IPv4 address, use an A record, not
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein a AAAA, with <code class="literal">::ffff:192.168.42.1</code> as
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews the address.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<div class="titlepage"><div><div><h3 class="title">
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User<a name="id-1.5.15.7"></a>Address to Name Lookups Using Nibble Format</h3></div></div></div>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein When looking up an address in nibble format, the address
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein components are simply reversed, just as in IPv4, and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <code class="literal">ip6.arpa.</code> is appended to the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein resulting name.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein For example, the following would provide reverse name lookup for
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein a host with address
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein$ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 14400 IN PTR (
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<a accesskey="p" href="Bv9ARM.ch03.html">Prev</a>�</td>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<td width="40%" align="right">�<a accesskey="n" href="Bv9ARM.ch05.html">Next</a>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<td width="40%" align="left" valign="top">Chapter�3.�Name Server Configuration�</td>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews<td width="40%" align="right" valign="top">�Chapter�5.�The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver</td>
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt<p xmlns:db="http://docbook.org/ns/docbook" style="text-align: center;">BIND 9.11.0pre-alpha</p>