mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 03:40:00 -04:00
Merge all of the chapters in to one XML document.
Add the README-SGML so people know what is what a little better. Add our start at a nominum specific HTML style sheet.
This commit is contained in:
parent
2053a53eea
commit
55c73d0734
13 changed files with 5695 additions and 5359 deletions
|
|
@ -1,297 +0,0 @@
|
|||
<chapter>
|
||||
<title>Introduction </title>
|
||||
<para>The Internet Domain Name System (<acronym>DNS</acronym>) consists of the syntax
|
||||
to specify the names of entities in the Internet in a hierarchical
|
||||
manner, the rules used for delegating authority over names, and the
|
||||
system implementation that actually maps names to Internet
|
||||
addresses. <acronym>DNS</acronym> data is maintained in a group of distributed
|
||||
hierarchical databases.</para>
|
||||
|
||||
<sect1>
|
||||
<title>Scope of Document</title>
|
||||
|
||||
<para>The Berkeley Internet Name Domain (<acronym>BIND</acronym>) implements an
|
||||
Internet nameserver for a number of operating systems. This
|
||||
document provides basic information about the installation and
|
||||
care of the Internet Software Consortium (<acronym>ISC</acronym>) <acronym>BIND</acronym> version 9
|
||||
software package for system administrators.</para>
|
||||
</sect1>
|
||||
<sect1><title>Organization of This Document</title>
|
||||
<para>In this document, <emphasis>Section 1</emphasis> introduces
|
||||
the basic <acronym>DNS</acronym> and <acronym>BIND</acronym> concepts. <emphasis>Section 2</emphasis>
|
||||
describes resource requirements for running <acronym>BIND</acronym> in various
|
||||
environments. Information in <emphasis>Section 3</emphasis> is
|
||||
<emphasis>task-oriented</emphasis> in its presentation and is
|
||||
organized functionally, to aid in the process of installing the
|
||||
<acronym>BIND</acronym> 9 software. The task-oriented section is followed by
|
||||
<emphasis>Section 4</emphasis>, which contains more advanced
|
||||
concepts that the system administrator may need for implementing
|
||||
certain options. Section 5 describes the <acronym>BIND</acronym> 9 lightweight
|
||||
resolver. The contents of <emphasis>Section 6</emphasis> are
|
||||
organized as in a reference manual to aid in the ongoing
|
||||
maintenance of the software. <emphasis>Section 7
|
||||
</emphasis>addresses security considerations, and
|
||||
<emphasis>Section 8</emphasis> contains troubleshooting help. The
|
||||
main body of the document is followed by several
|
||||
<emphasis>Appendices</emphasis> which contain useful reference
|
||||
information, such as a <emphasis>Bibliography</emphasis> and
|
||||
historic information related to <acronym>BIND</acronym> and the Domain Name
|
||||
System.</para>
|
||||
</sect1>
|
||||
<sect1><title>Conventions Used in This Document</title>
|
||||
|
||||
<para>In this document, we use the following general typographic
|
||||
conventions:</para>
|
||||
|
||||
<informaltable colsep = "0" frame = "all" rowsep = "0">
|
||||
<tgroup cols = "2" colsep = "0" rowsep = "0"
|
||||
tgroupstyle = "2Level-table">
|
||||
<colspec colname = "1" colnum = "1" colsep = "0"
|
||||
colwidth = "3.000in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0"
|
||||
colwidth = "2.625in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1">
|
||||
<para><emphasis>To
|
||||
describe:</emphasis></para></entry>
|
||||
<entry colname = "2" rowsep = "1">
|
||||
<para><emphasis>We use the style:</emphasis></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1">
|
||||
<para>a pathname, filename, URL, hostname,
|
||||
mailing list name, or new term or concept</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><filename>Italic</filename></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>literal user
|
||||
input</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><userinput>Fixed Width Bold</userinput></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>variable user
|
||||
input</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><optional>Fixed Width Italic</optional></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1"><para>program output</para></entry>
|
||||
<entry colname = "2"><para><computeroutput>Fixed Width Bold</computeroutput></para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<para>The following conventions are used in descriptions of the
|
||||
<acronym>BIND</acronym> configuration file:<informaltable colsep = "0" frame = "all" rowsep = "0">
|
||||
<tgroup cols = "2" colsep = "0" rowsep = "0"
|
||||
tgroupstyle = "2Level-table">
|
||||
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "3.000in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "2.625in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para><emphasis>To
|
||||
describe:</emphasis></para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><emphasis>We use the style:</emphasis></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>keywords</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><literal>Sans Serif Bold</literal></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>variables</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><varname>Sans Serif Italic</varname></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>"meta-syntactic"
|
||||
information (within brackets when optional)</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><optional>Fixed Width Italic</optional></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>Command line
|
||||
input</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><userinput>Fixed Width Bold</userinput></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>Program output</para></entry>
|
||||
<entry colname = "2" rowsep = "1"><para><computeroutput>Fixed Width</computeroutput></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1"><para>Optional input</para></entry>
|
||||
<entry colname = "2"><para><optional>Text is enclosed in square brackets</optional></para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup></informaltable></para></sect1>
|
||||
<sect1><title>Discussion of Domain Name System (<acronym>DNS</acronym>) Basics and
|
||||
<acronym>BIND</acronym></title>
|
||||
<para>The purpose of this document is to explain the installation
|
||||
and basic upkeep of the <acronym>BIND</acronym> software package, and we begin by reviewing
|
||||
the fundamentals of the domain naming system as they relate to <acronym>BIND</acronym>.
|
||||
<acronym>BIND</acronym> consists of a <emphasis>nameserver</emphasis> (or "daemon")
|
||||
called <command>named</command> and a <command>resolver</command> library.
|
||||
The <acronym>BIND</acronym> server runs in the background, servicing queries on a well
|
||||
known network port. The standard port for the User Datagram Protocol
|
||||
(UDP) and Transmission Control Protocol (TCP), usually port 53,
|
||||
is specified in<command> </command><filename>/etc/services</filename>.
|
||||
The <emphasis>resolver</emphasis> is a set of routines residing
|
||||
in a system library that provides the interface that programs can
|
||||
use to access the domain name services.</para>
|
||||
<sect2><title>Nameservers</title>
|
||||
<para>A nameserver (NS) is a program that stores information about
|
||||
named resources and responds to queries from programs called <emphasis>resolvers</emphasis> which
|
||||
act as client processes. The basic function of an NS is to provide
|
||||
information about network objects by answering queries.</para>
|
||||
<para>With the nameserver, the network can be broken into a hierarchy
|
||||
of domains. The name space is organized as a tree according to organizational
|
||||
or administrative boundaries. Each node of the tree, called a domain,
|
||||
is given a label. The name of the domain is the concatenation of
|
||||
all the labels of the domains from the root to the current domain.
|
||||
This is represented in written form as a string of labels listed
|
||||
from right to left and separated by dots. A label need only be unique
|
||||
within its domain. The whole name space is partitioned into areas
|
||||
called <emphasis>zones</emphasis>, each starting at a domain and
|
||||
extending down to the leaf domains or to domains where other zones
|
||||
start. Zones usually represent administrative boundaries. For example,
|
||||
a domain name for a host at the company <emphasis>Example, Inc.</emphasis> would
|
||||
be:</para>
|
||||
<para><systemitem class="systemname">ourhost.example.com</systemitem></para>
|
||||
<para>where <systemitem class="systemname">com</systemitem> is the top level domain to which <systemitem class="systemname">ourhost.example.com</systemitem> belongs, <systemitem class="systemname">example</systemitem> is
|
||||
a subdomain of <systemitem class="systemname">com</systemitem>, and <systemitem class="systemname">ourhost</systemitem> is the
|
||||
name of the host.</para>
|
||||
<para>The specifications for the domain nameserver are defined in
|
||||
the RFC 1034, RFC 1035 and RFC 974. These documents can be found
|
||||
in
|
||||
<filename>/usr/src/etc/named/doc</filename> in 4.4BSD or are available
|
||||
via File Transfer Protocol (FTP) from
|
||||
<ulink
|
||||
url="ftp://www.isi.edu/in-notes/">ftp://www.isi.edu/in-notes/</ulink> or via the Web at <ulink url="http://www.ietf.org/rfc/">http://www.ietf.org/rfc/</ulink>.
|
||||
(See Appendix C for complete information on finding and retrieving
|
||||
RFCs.) It is also recommended that you read the related man pages: <command>named</command> and <command>resolver</command>.</para></sect2>
|
||||
<sect2><title>Types of Zones</title>
|
||||
<para>As we stated previously, a zone is a point of delegation in
|
||||
the <acronym>DNS</acronym> tree. A zone consists of those contiguous parts of the domain
|
||||
tree for which a domain server has complete information and over which
|
||||
it has authority. It contains all domain names from a certain point
|
||||
downward in the domain tree except those which are delegated to
|
||||
other zones. A delegation point has one or more NS records in the
|
||||
parent zone, which should be matched by equivalent NS records at
|
||||
the root of the delegated zone.</para>
|
||||
<para>To properly operate a nameserver, it is important to understand
|
||||
the difference between a <emphasis>zone</emphasis> and a <emphasis>domain</emphasis>.</para>
|
||||
<para>For instance, consider the <systemitem class="systemname">example.com</systemitem> domain
|
||||
which includes names such as <systemitem class="systemname">host.aaa.example.com </systemitem>and <systemitem class="systemname">host.bbb.example.com</systemitem> even
|
||||
though the <systemitem class="systemname">example.com</systemitem> zone includes only delegations
|
||||
for the <systemitem class="systemname">aaa.example.com</systemitem> and <systemitem class="systemname">bbb.example.com</systemitem> zones.
|
||||
A zone can map exactly to a single domain, but could also include
|
||||
only part of a domain, the rest of which could be delegated to other
|
||||
nameservers. Every name in the <acronym>DNS</acronym> tree is a <emphasis>domain</emphasis>,
|
||||
even if it is <emphasis>terminal</emphasis>, that is, has no <emphasis>subdomains</emphasis>.
|
||||
Every subdomain is a domain and every domain except the root is
|
||||
also a subdomain. The terminology is not intuitive and we suggest
|
||||
that you read RFCs 1033, 1034 and 1035 to gain a complete understanding
|
||||
of this difficult and subtle topic.</para>
|
||||
<para>Though <acronym>BIND</acronym> is a Domain Nameserver, it deals primarily in
|
||||
terms of zones. The master and slave declarations in the <filename>named.conf</filename> file
|
||||
specify zones, not domains. When you ask some other site if it is willing
|
||||
to be a slave server for your <emphasis>domain</emphasis>, you are
|
||||
actually asking for slave service for some collection of zones.</para>
|
||||
<para>Each zone will have one <emphasis>primary master</emphasis> (also
|
||||
called <emphasis>primary</emphasis>) server which loads the zone
|
||||
contents from some local file edited by humans or perhaps generated
|
||||
mechanically from some other local file which is edited by humans.
|
||||
There there will be some number of <emphasis>slave</emphasis> (also
|
||||
called <emphasis>secondary) </emphasis>servers, which load the zone
|
||||
contents using the <acronym>DNS</acronym> protocol (that is, the secondary servers
|
||||
will contact the primary and fetch the zone data using TCP). This
|
||||
set of servers — the primary and all of its secondaries — should be
|
||||
listed in the NS records in the parent zone and will constitute a <emphasis>delegation</emphasis>.
|
||||
This set of servers must also be listed in the zone file itself,
|
||||
usually under the <command>@</command> name which indicates the <emphasis>top
|
||||
level</emphasis> or <emphasis>root</emphasis> of the current zone.
|
||||
You can list servers in the zone's top-level <command>@</command> NS
|
||||
records that are not in the parent's NS delegation, but you cannot
|
||||
list servers in the parent's delegation that are not present in
|
||||
the zone's <command>@</command>.</para>
|
||||
<para>Any servers listed in the NS records must be configured as <emphasis>authoritative</emphasis> for
|
||||
the zone. A server is authoritative for a zone when it has been
|
||||
configured to answer questions for that zone with authority, which
|
||||
it does by setting the "authoritative answer" (AA) bit in reply
|
||||
packets. A server may be authoritative for more than one zone. The
|
||||
authoritative data for a zone is composed of all of the Resource
|
||||
Records (RRs) — the data associated with names in a tree-structured
|
||||
name space — attached to all of the nodes from the top node of the
|
||||
zone down to leaf nodes or nodes above cuts around the bottom edge
|
||||
of the zone.</para>
|
||||
<para>Adding a zone as a type master or type slave will tell the
|
||||
server to answer questions for the zone authoritatively. If the
|
||||
server is able to load the zone into memory without any errors it
|
||||
will set the AA bit when it replies to queries for the zone. See
|
||||
RFCs 1034 and 1035 for more information about the AA bit.</para></sect2>
|
||||
<sect2><title>Servers</title>
|
||||
<para>A <acronym>DNS</acronym> server can be master for some zones and slave for others
|
||||
or can be only a master, or only a slave, or can serve no zones
|
||||
and just answer queries via its <emphasis>cache</emphasis>. Master
|
||||
servers are often also called <emphasis>primaries</emphasis> and
|
||||
slave servers are often also called <emphasis>secondaries</emphasis>.
|
||||
Both master/primary and slave/secondary servers are authoritative
|
||||
for a zone.</para>
|
||||
<para>All servers keep data in their cache until the data expires,
|
||||
based on a Time To Live (TTL) field which is maintained for all
|
||||
resource records.</para>
|
||||
<sect3><title>Master Server</title>
|
||||
<para>The <emphasis>primary master server</emphasis> is the ultimate
|
||||
source of information about a domain. The primary master is an authoritative
|
||||
server configured to be the source of zone transfer for one or more
|
||||
secondary servers. The primary master server obtains data for the
|
||||
zone from a file on disk.</para></sect3>
|
||||
<sect3><title>Slave Server </title>
|
||||
<para>A <emphasis>slave server</emphasis>, also called a <emphasis>secondary
|
||||
server</emphasis>, is an authoritative server that uses zone transfers from
|
||||
the primary master server to retrieve the zone data. Optionally,
|
||||
the slave server obtains zone data from a cache on disk. Slave servers
|
||||
provide necessary redundancy. All secondary/slave servers are named
|
||||
in the NS RRs for the zone.</para></sect3>
|
||||
<sect3><title>Caching Only Server</title>
|
||||
<para>Some servers are <emphasis>caching only servers</emphasis>.
|
||||
This means that the server caches the information that it receives
|
||||
and uses it until the data expires. A caching only server is a server
|
||||
that is not authoritative for any zone. This server services queries
|
||||
and asks other servers, who have the authority, for the information
|
||||
it needs.</para></sect3>
|
||||
<sect3><title>Forwarding Server</title>
|
||||
<para>Instead of interacting with the nameservers for the root and
|
||||
other domains, a <emphasis>forwarding server</emphasis> always forwards
|
||||
queries it cannot satisfy from its authoritative data or cache to
|
||||
a fixed list of other servers. The forwarded queries are also known
|
||||
as <emphasis>recursive queries</emphasis>, the same type as a client would
|
||||
send to a server. There may be one or more servers forwarded to,
|
||||
and they are queried in turn until the list is exhausted or an answer
|
||||
is found. A forwarding server is typically used when you do not
|
||||
wish all the servers at a given site to interact with the rest of
|
||||
the Internet servers. A typical scenario would involve a number
|
||||
of internal <acronym>DNS</acronym> servers and an Internet firewall. Servers unable
|
||||
to pass packets through the firewall would forward to the server
|
||||
that can do it, and that server would query the Internet <acronym>DNS</acronym> servers
|
||||
on the internal server's behalf. An added benefit of using the forwarding
|
||||
feature is that the central machine develops a much more complete
|
||||
cache of information that all the workstations can take advantage
|
||||
of.</para>
|
||||
<para>There is no prohibition against declaring a server to be a
|
||||
forwarder even though it has master and/or slave zones as well;
|
||||
the effect will still be that anything in the local server's cache
|
||||
or zones will be answered, and anything else will be forwarded using
|
||||
the forwarders list.</para></sect3>
|
||||
<sect3><title>Stealth Server</title>
|
||||
<para>A <emphasis>stealth server</emphasis> is a server that answers
|
||||
authoritatively for a zone, but is not listed in that zone's NS
|
||||
records. Stealth servers can be used as a way to centralize distribution
|
||||
of a zone, without having to edit the zone on a remote nameserver.
|
||||
Where the master file for a zone resides on a stealth server in
|
||||
this way, it is often referred to as a "hidden primary" configuration.
|
||||
Stealth servers can also be a way to keep a local copy of a zone
|
||||
for rapid access to the zone's records, even if all "official" nameservers
|
||||
for the zone are inaccessible.</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
<chapter><title><acronym>BIND</acronym> Resource Requirements</title>
|
||||
<sect1><title>Hardware requirements</title>
|
||||
<para><acronym>DNS</acronym> hardware requirements have traditionally been quite modest.
|
||||
For many installations, servers that have been pensioned off from
|
||||
active duty have performed admirably as <acronym>DNS</acronym> servers.</para>
|
||||
<para>The DNSSEC and IPv6 features of <acronym>BIND</acronym> 9 may prove to be quite
|
||||
CPU intensive however, so organizations that make heavy use of these
|
||||
features may wish to consider larger systems for these applications.
|
||||
<acronym>BIND</acronym> 9 is now fully multithreaded, allowing full utilization of
|
||||
multiprocessor systems for installations that need it.</para></sect1>
|
||||
<sect1><title>CPU Requirements</title>
|
||||
<para>CPU requirements for <acronym>BIND</acronym> 9 range from i486-class machines
|
||||
for serving of static zones without caching, to enterprise-class
|
||||
machines if you intend to process many dynamic updates and DNSSEC
|
||||
signed zones, serving many thousands of queries per second.</para></sect1>
|
||||
<sect1><title>Memory Requirements </title>
|
||||
<para>The memory of the server has to be large enough to fit the
|
||||
cache and zones loaded off disk. Future releases of <acronym>BIND</acronym> 9 will
|
||||
provide methods to limit the amount of memory used by the cache,
|
||||
at the expense of reducing cache hit rates and causing more <acronym>DNS</acronym>
|
||||
traffic. It is still good practice to have enough memory to load
|
||||
all zone and cache data into memory — unfortunately, the best way
|
||||
to determine this for a given installation is to watch the nameserver
|
||||
in operation. After a few weeks the server process should reach
|
||||
a relatively stable size where entries are expiring from the cache as
|
||||
fast as they are being inserted. Ideally, the resource limits should
|
||||
be set higher than this stable size.</para></sect1>
|
||||
<sect1><title>Nameserver Intensive Environment Issues</title>
|
||||
<para>For nameserver intensive environments, there are two alternative
|
||||
configurations that may be used. The first is where clients and
|
||||
any second-level internal nameservers query a main nameserver, which
|
||||
has enough memory to build a large cache. This approach minimizes
|
||||
the bandwidth used by external name lookups. The second alternative
|
||||
is to set up second-level internal nameservers to make queries independently.
|
||||
In this configuration, none of the individual machines needs to
|
||||
have as much memory or CPU power as in the first alternative, but
|
||||
this has the disadvantage of making many more external queries,
|
||||
as none of the nameservers share their cached data.</para></sect1>
|
||||
<sect1><title>Supported Operating Systems</title>
|
||||
<para>ISC <acronym>BIND</acronym> 9 compiles and runs on the following operating
|
||||
systems:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<simpara>IBM AIX 4.3</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Compaq Digital/Tru64 UNIX 4.0D</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>HP HP-UX 11</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>IRIX64 6.5</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Red Hat Linux 6.0, 6.1</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Sun Solaris 2.6, 7, 8 (beta)</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>FreeBSD 3.4-STABLE</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>NetBSD-current with "unproven" pthreads</simpara>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
@ -1,428 +0,0 @@
|
|||
<chapter>
|
||||
<title>Nameserver Configuration</title>
|
||||
<para>In this section we provide some suggested configurations along
|
||||
with guidelines for their use. We also address the topic of reasonable
|
||||
option setting.</para>
|
||||
<sect1>
|
||||
<title id="sample_configuration">Sample Configurations</title>
|
||||
<sect2>
|
||||
<title>A Caching-only Nameserver</title>
|
||||
<para>The following sample configuration is appropriate for a caching-only
|
||||
name server for use by clients internal to a corporation. All queries
|
||||
from outside clients are refused.</para>
|
||||
<programlisting>
|
||||
// Two corporate subnets we wish to allow queries from.
|
||||
acl "corpnets" { 192.168.4.0/24; 192.168.7.0/24; };
|
||||
options {
|
||||
directory "/etc/namedb"; // Working directory
|
||||
pid-file "named.pid"; // Put pid file in working dir
|
||||
allow-query { "corpnets"; };
|
||||
};
|
||||
// Root server hints
|
||||
zone "." { type hint; file "root.hint"; };
|
||||
// Provide a reverse mapping for the loopback address 127.0.0.1
|
||||
zone "0.0.127.in-addr.arpa" {
|
||||
type master;
|
||||
file "localhost.rev";
|
||||
notify no;
|
||||
};
|
||||
</programlisting>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>An Authoritative-only Nameserver</title>
|
||||
<para>This sample configuration is for an authoritative-only server
|
||||
that is the master server for "<filename>example.com</filename>"
|
||||
and a slave for the subdomain "<filename>eng.example.com</filename>".</para>
|
||||
<programlisting>
|
||||
options {
|
||||
directory "/etc/namedb"; // Working directory
|
||||
pid-file "named.pid"; // Put pid file in working dir
|
||||
allow-query { any; }; // This is the default
|
||||
recursion no; // Do not provide recursive service
|
||||
};
|
||||
// Root server hints
|
||||
zone "." { type hint; file "root.hint"; };
|
||||
|
||||
// Provide a reverse mapping for the loopback address 127.0.0.1
|
||||
zone "0.0.127.in-addr.arpa" {
|
||||
type master;
|
||||
file "localhost.rev";
|
||||
notify no;
|
||||
};
|
||||
// We are the master server for example.com
|
||||
zone "example.com" {
|
||||
type master;
|
||||
file "example.com.db";
|
||||
// IP addresses of slave servers allowed to transfer example.com
|
||||
allow-transfer {
|
||||
192.168.4.14;
|
||||
192.168.5.53;
|
||||
};
|
||||
};
|
||||
// We are a slave server for eng.example.com
|
||||
zone "eng.example.com" {
|
||||
type slave;
|
||||
file "eng.example.com.bk";
|
||||
// IP address of eng.example.com master server
|
||||
masters { 192.168.4.12; };
|
||||
};
|
||||
</programlisting>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>Load Balancing</title>
|
||||
<para>Primitive load balancing can be achieved in <acronym>DNS</acronym> using multiple
|
||||
A records for one name.</para>
|
||||
<para>For example, if you have three WWW servers with network addresses
|
||||
of 10.0.0.1, 10.0.0.2 and 10.0.0.3, a set of records such as the
|
||||
following means that clients will connect to each machine one third
|
||||
of the time:</para>
|
||||
<informaltable colsep = "0" rowsep = "0">
|
||||
<tgroup cols = "5" colsep = "0" rowsep = "0"
|
||||
tgroupstyle = "2Level-table">
|
||||
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.875in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "0.500in"/>
|
||||
<colspec colname = "3" colnum = "3" colsep = "0" colwidth = "0.750in"/>
|
||||
<colspec colname = "4" colnum = "4" colsep = "0" colwidth = "0.750in"/>
|
||||
<colspec colname = "5" colnum = "5" colsep = "0" colwidth = "2.028in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para>Name</para></entry>
|
||||
<entry colname = "2"><para>TTL</para></entry>
|
||||
<entry colname = "3"><para>CLASS</para></entry>
|
||||
<entry colname = "4"><para>TYPE</para></entry>
|
||||
<entry colname = "5"><para>Resource Record (RR) Data</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para><literal>www</literal></para></entry>
|
||||
<entry colname = "2"><para><literal>600</literal></para></entry>
|
||||
<entry colname = "3"><para><literal>IN</literal></para></entry>
|
||||
<entry colname = "4"><para><literal>A</literal></para></entry>
|
||||
<entry colname = "5"><para><literal>10.0.0.1</literal></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para></para></entry>
|
||||
<entry colname = "2"><para><literal>600</literal></para></entry>
|
||||
<entry colname = "3"><para><literal>IN</literal></para></entry>
|
||||
<entry colname = "4"><para><literal>A</literal></para></entry>
|
||||
<entry colname = "5"><para><literal>10.0.0.2</literal></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para></para></entry>
|
||||
<entry colname = "2"><para><literal>600</literal></para></entry>
|
||||
<entry colname = "3"><para><literal>IN</literal></para></entry>
|
||||
<entry colname = "4"><para><literal>A</literal></para></entry>
|
||||
<entry colname = "5"><para><literal>10.0.0.3</literal></para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
<para>When a resolver queries for these records, <acronym>BIND</acronym> will rotate
|
||||
them and respond to the query with the records in a different
|
||||
order. In the example above, clients will randomly receive
|
||||
records in the order 1, 2, 3; 2, 3, 1; and 3, 1, 2. Most clients
|
||||
will use the first record returned and discard the rest.</para>
|
||||
<para>For more detail on ordering responses, check the
|
||||
<command>rrset-order</command> substatement in the
|
||||
<command>options</command> statement, <xref
|
||||
linkend="rrset_ordering"/>. This substatement is not supported in
|
||||
<acronym>BIND</acronym> 9, and only the ordering scheme described above is
|
||||
available.</para>
|
||||
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title id="notify">Notify</title>
|
||||
|
||||
<para><acronym>DNS</acronym> Notify is a mechanism that allows master nameservers to
|
||||
notify their slave servers of changes to a zone's data. In
|
||||
response to a <command>NOTIFY</command> from a master server, the
|
||||
slave will check to see that its version of the zone is the
|
||||
current version and, if not, initiate a transfer.</para> <para><acronym>DNS</acronym>
|
||||
Notify is fully documented in RFC 1996. See also the description
|
||||
of the zone option <command>also-notify</command>, <xref
|
||||
linkend="zone_transfers"/>. For more information about
|
||||
<command>notify</command>, <xref
|
||||
linkend="boolean_options"/>.</para>
|
||||
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>Nameserver Operations</title>
|
||||
<sect2>
|
||||
<title>Tools for Use With the Nameserver Daemon</title>
|
||||
<para>There are several indispensable diagnostic, administrative
|
||||
and monitoring tools available to the system administrator for controlling
|
||||
and debugging the nameserver daemon. We describe several in this
|
||||
section </para>
|
||||
<sect3>
|
||||
<title>Diagnostic Tools</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><command>dig</command></term>
|
||||
<listitem>
|
||||
<para>The domain information groper (<command>dig</command>) is
|
||||
a command line tool that can be used to gather information from
|
||||
the Domain Name System servers. Dig has two modes: simple interactive
|
||||
mode for a single query, and batch mode which executes a query for
|
||||
each in a list of several query lines. All query options are accessible
|
||||
from the command line.</para>
|
||||
<cmdsynopsis label="Usage">
|
||||
<command>dig</command>
|
||||
<arg>@<replaceable>server</replaceable></arg>
|
||||
<arg choice="plain"><replaceable>domain</replaceable></arg>
|
||||
<arg><replaceable>query-type</replaceable></arg>
|
||||
<arg><replaceable>query-class</replaceable></arg>
|
||||
<arg>+<replaceable>query-option</replaceable></arg>
|
||||
<arg>-<replaceable>dig-option</replaceable></arg>
|
||||
<arg>%<replaceable>comment</replaceable></arg>
|
||||
<!-- one of (SBR GROUP ARG COMMAND) -->
|
||||
</cmdsynopsis>
|
||||
<para>The usual simple use of dig will take the form</para>
|
||||
<simpara><command>dig @server domain query-type query-class</command></simpara>
|
||||
<para>For more information and a list of available commands and
|
||||
options, see the <command>dig</command> man page.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><command>host</command></term>
|
||||
<listitem>
|
||||
<para>The <command>host</command> utility
|
||||
provides a simple <acronym>DNS</acronym> lookup using a command-line interface for
|
||||
looking up Internet hostnames. By default, the utility converts
|
||||
between host names and Internet addresses, but its functionality
|
||||
can be extended with the use of options.</para>
|
||||
<cmdsynopsis label="Usage">
|
||||
<!-- one of (SBR GROUP ARG COMMAND) -->
|
||||
<command>host</command>
|
||||
<arg>-aCdlrTwv</arg>
|
||||
<arg>-c <replaceable>class</replaceable></arg>
|
||||
<arg>-N <replaceable>ndots</replaceable></arg>
|
||||
<arg>-t <replaceable>type</replaceable></arg>
|
||||
<arg>-W <replaceable>timeout</replaceable></arg>
|
||||
<arg>-R <replaceable>retries</replaceable></arg>
|
||||
<arg choice="plain"><replaceable>hostname</replaceable></arg>
|
||||
<arg><replaceable>server</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
<para>For more information and a list of available commands and
|
||||
options, see the <command>host</command> man page.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><command>nslookup</command></term>
|
||||
<listitem>
|
||||
<para><command>nslookup</command> is a program used to query Internet
|
||||
domain nameservers. <command>nslookup</command> has two modes: interactive
|
||||
and non-interactive. Interactive mode allows the user to query nameservers
|
||||
for information about various hosts and domains or to print a list
|
||||
of hosts in a domain. Non-interactive mode is used to print just
|
||||
the name and requested information for a host or domain.</para>
|
||||
<cmdsynopsis label="Usage">
|
||||
<command>nslookup</command>
|
||||
<arg rep="repeat">-option</arg>
|
||||
<group>
|
||||
<arg><replaceable>host-to-find</replaceable></arg>
|
||||
<arg>- <arg>server</arg></arg>
|
||||
</group>
|
||||
</cmdsynopsis>
|
||||
<para>Interactive mode is entered when no arguments are given (the
|
||||
default nameserver will be used) or when the first argument is a
|
||||
hyphen (`-') and the second argument is the host name or Internet address
|
||||
of a nameserver.</para>
|
||||
<para>Non-interactive mode is used when the name or Internet address
|
||||
of the host to be looked up is given as the first argument. The
|
||||
optional second argument specifies the host name or address of a nameserver.</para>
|
||||
<para>Due to its arcane user interface and frequently inconsistent
|
||||
behavior, we do not recommend the use of <command>nslookup</command>.
|
||||
Use <command>dig</command> instead.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>Administrative Tools</title>
|
||||
<para>Administrative tools play an integral part in the management
|
||||
of a server.</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><command id="rndc">rndc</command></term>
|
||||
<listitem>
|
||||
<para>The remote name daemon control
|
||||
(<command>rndc</command>) program allows the system
|
||||
administrator to control the operation of a nameserver.
|
||||
If you run <command>rndc</command> without any options
|
||||
it will display a usage message as follows:</para>
|
||||
<cmdsynopsis label="Usage">
|
||||
<command>rndc</command>
|
||||
<arg>-c <replaceable>config</replaceable></arg>
|
||||
<arg>-s <replaceable>server</replaceable></arg>
|
||||
<arg>-p <replaceable>port</replaceable></arg>
|
||||
<arg>-y <replaceable>key</replaceable></arg>
|
||||
<arg choice="plain"><replaceable>command</replaceable></arg>
|
||||
<arg rep="repeat"><replaceable>command</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
<para><command>command</command> is one of the following
|
||||
for <command>named</command>:</para>
|
||||
<informaltable colsep = "0" rowsep = "0">
|
||||
<tgroup cols = "2"
|
||||
colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
||||
<colspec colname = "1" colnum = "1"
|
||||
colsep = "0" colwidth = "1.500in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0"
|
||||
colwidth = "3.000in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1">
|
||||
<para><userinput>status</userinput><footnote id="nyi1">
|
||||
<para>not yet implemented</para>
|
||||
</footnote></para></entry>
|
||||
<entry colname = "2"><para>Display ps(1) status of named.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para><userinput>dumpdb</userinput><footnoteref linkend="nyi1"/></para></entry>
|
||||
<entry colname = "2"><para>Dump database and cache to /var/tmp/named_dump.db.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para><userinput>reload</userinput></para></entry>
|
||||
<entry colname = "2"><para>Reload configuration file and zones.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para><userinput>stats</userinput><footnoteref linkend="nyi1"/></para></entry>
|
||||
<entry colname = "2"><para>Dump statistics to /var/tmp/named.stats.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para><userinput>trace</userinput><footnoteref linkend="nyi1"/></para></entry>
|
||||
<entry colname = "2"><para>Increment debugging level by one.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1">
|
||||
<para><userinput>notrace</userinput><footnoteref linkend="nyi1"/>
|
||||
</para></entry>
|
||||
<entry colname = "2"><para>Set debugging level to 0.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname =
|
||||
"1"><para><userinput>querylog</userinput><footnoteref linkend="nyi1"/></para></entry>
|
||||
<entry colname = "2"><para>Toggle query logging.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname =
|
||||
"1"><para><userinput>stop</userinput><footnoteref linkend="nyi1"/></para></entry>
|
||||
<entry colname = "2"><para>Stop the server.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname =
|
||||
"1"><para><userinput>restart</userinput><footnoteref linkend="nyi1"/></para></entry>
|
||||
<entry colname = "2"><para>Restart the server.</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
<para>As noted above, <command>reload</command> is the
|
||||
only command available for <acronym>BIND</acronym> 9.0.0. The other
|
||||
commands, and more, are planned to be implemented for
|
||||
future releases.</para>
|
||||
|
||||
<para>A configuration file is required, since all
|
||||
communication with the server is authenticated with
|
||||
digital signatures that rely on a shared secret, and
|
||||
there is no way to provide that secret other than with a
|
||||
configuration file. The default location for the
|
||||
<command>rndc</command> configuration file is
|
||||
<filename>/etc/rndc.conf</filename>, but an alternate
|
||||
location can be specified with the <option>-c</option>
|
||||
option.</para>
|
||||
|
||||
<para>The format of the configuration file is similar to
|
||||
that of <filename>named.conf</filename>, but limited to
|
||||
only three statements, the <command>options{}</command>,
|
||||
<command>key{}</command> and <command>server{}</command>
|
||||
statements. These statements are what associate the
|
||||
secret keys to the servers with which they are meant to
|
||||
be shared. The order of statements is not
|
||||
significant.</para>
|
||||
|
||||
<para>The <command>options{}</command> statement has two clauses: <command>default-server</command> and <command>default-key</command>. <command>default-server</command> takes a
|
||||
host name or address argument and represents the server that will
|
||||
be contacted if no <option>-s</option>
|
||||
option is provided on the command line. <command>default-key</command> takes
|
||||
the name of key as its argument, as defined by a <command>key{}</command> statement.
|
||||
In the future a <command>default-port</command> clause will be
|
||||
added to specify the port to which <command>rndc</command> should
|
||||
connect.</para>
|
||||
<para>The <command>key{}</command> statement names a key with its
|
||||
string argument. The string is required by the server to be a valid
|
||||
domain name, though it need not actually be hierarchical; thus,
|
||||
a string like "<userinput>rndc_key</userinput>" is a valid name.
|
||||
The <command>key{}</command> statement has two clauses: <command>algorithm</command> and <command>secret</command>.
|
||||
While the configuration parser will accept any string as the argument
|
||||
to algorithm, currently only the string "<userinput>hmac-md5</userinput>"
|
||||
has any meaning. The secret is a base-64 encoded string, typically
|
||||
generated with either <command>dnssec-keygen</command> or <command>mmencode</command>.</para>
|
||||
<para>The <command>server{}</command> statement uses the key clause
|
||||
to associate a <command>key{}</command>-defined key with a server.
|
||||
The argument to the <command>server{}</command> statement is a
|
||||
host name or address (addresses must be double quoted). The argument
|
||||
to the key clause is the name of the key as defined by the <command>key{}</command> statement.
|
||||
A <command>port</command> clause will be added to a future release
|
||||
to specify the port to which <command>rndc</command> should connect
|
||||
on the given server.</para>
|
||||
<para>A sample minimal configuration file is as follows:</para>
|
||||
<programlisting>
|
||||
key rndc_key {
|
||||
algorithm "hmac-md5";
|
||||
secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
|
||||
};
|
||||
options {
|
||||
default-server localhost;
|
||||
default-key rndc_key;
|
||||
};
|
||||
</programlisting>
|
||||
<para>This file, if installed as <filename>/etc/rndc.conf</filename>,
|
||||
would allow the command:</para>
|
||||
<para><prompt>$ </prompt><userinput>rndc reload</userinput></para>
|
||||
<para>to connect to 127.0.0.1 port 953 and cause the nameserver
|
||||
to reload, if a nameserver on the local machine were running with
|
||||
following controls statements:</para>
|
||||
<programlisting>
|
||||
controls {
|
||||
inet 127.0.0.1 allow { localhost; } keys { rndc_key; };
|
||||
};
|
||||
</programlisting>
|
||||
<para>and it had an identical key statement for
|
||||
<literal>rndc_key</literal>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Signals</title>
|
||||
<para>Certain UNIX signals cause the name server to take specific
|
||||
actions, as described in the following table. These signals can
|
||||
be sent using the <command>kill</command> command.</para>
|
||||
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
||||
colsep = "0" rowsep = "0" tgroupstyle = "3Level-table">
|
||||
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.125in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "4.000in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para><command>SIGHUP</command></para></entry>
|
||||
<entry colname = "2"><para>Causes the server to read <filename>named.conf</filename> and
|
||||
reload the database. </para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para><command>SIGTERM</command></para></entry>
|
||||
<entry colname = "2"><para>Causes the server to clean up and exit.</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1">
|
||||
<para><command>SIGINT</command></para>
|
||||
</entry>
|
||||
<entry colname = "2"><para>Causes the server to clean up and exit.</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
778
doc/arm/4adv.xml
778
doc/arm/4adv.xml
|
|
@ -1,778 +0,0 @@
|
|||
<chapter>
|
||||
<title>Advanced Concepts</title>
|
||||
<sect1>
|
||||
<title id="dynamic_update">Dynamic Update</title>
|
||||
|
||||
<para>Dynamic update is the term used for the ability under
|
||||
certain specified conditions to add, modify or delete records or
|
||||
RRsets in the master zone files. Dynamic update is fully described
|
||||
in RFC 2136.</para>
|
||||
|
||||
<para>Dynamic update is enabled on a zone-by-zone basis, by
|
||||
including an <command>allow-update</command> or
|
||||
<command>update-policy</command> clause in the
|
||||
<command>zone</command> statement.</para>
|
||||
|
||||
<para>Updating of secure zones (zones using DNSSEC) is modelled
|
||||
after the <emphasis>simple-secure-update</emphasis> proposal, a
|
||||
work in progress in the DNS Extensions working group of the IETF.
|
||||
(See <ulink
|
||||
url="http://www.ietf.org/html.charters/dnsext-charter.html">http://www.ietf.org/html.charters/dnsext-charter.html</ulink>
|
||||
for information about the DNS Extensions working group.) SIG and
|
||||
NXT records affected by updates are automatically regenerated by
|
||||
the server using an online zone key. Update authorization is based
|
||||
on transaction signatures and an explicit server policy.</para>
|
||||
|
||||
<para>The zone files of dynamic zones must not be edited by hand.
|
||||
The zone file on disk at any given time may not contain the latest
|
||||
changes performed by dynamic update. The zone file is written to
|
||||
disk only periodically, and changes that have occurred since the
|
||||
zone file was last written to disk are stored only in the zone's
|
||||
journal (<filename>.jnl</filename>) file. <acronym>BIND</acronym> 9 currently does
|
||||
not update the zone file when it exits as <acronym>BIND</acronym> 8 does, so editing
|
||||
the zone file manually is unsafe even when the server has been
|
||||
shut down. </para>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title id="incremental_zone_transfers">Incremental Zone Transfers (IXFR)</title>
|
||||
|
||||
<para>The incremental zone transfer (IXFR) protocol is a way for
|
||||
slave servers to transfer only changed data, instead of having to
|
||||
transfer the entire zone. The IXFR protocol is documented in RFC
|
||||
1995. <xref linkend="proposed_standards"/></para>
|
||||
|
||||
<para>When acting as a master, <acronym>BIND</acronym> 9 supports IXFR for those zones
|
||||
where the necessary change history information is available. These
|
||||
include master zones maintained by dynamic update and slave zones
|
||||
whose data was obtained by IXFR, but not manually maintained master
|
||||
zones nor slave zones obtained by performing a full zone transfer
|
||||
(AXFR).</para>
|
||||
<para>When acting as a slave, <acronym>BIND</acronym> 9 will attempt to use IXFR unless
|
||||
it is explicitly disabled. For more information about disabling
|
||||
IXFR, see the description of the <command>request-ixfr</command> clause
|
||||
of the <command>server</command> statement.</para></sect1>
|
||||
<sect1><title>Split DNS</title>
|
||||
<para>Setting up different views, or visibility, of DNS space to
|
||||
internal and external resolvers is usually referred to as a <emphasis>Split
|
||||
DNS</emphasis> setup. There are several reasons an organization
|
||||
would want to set up its DNS this way.</para>
|
||||
<para>One common reason for setting up a DNS system this way is
|
||||
to hide "internal" DNS information from "external" clients on the
|
||||
Internet. There is some debate as to whether or not this is actually useful.
|
||||
Internal DNS information leaks out in many ways (via email headers,
|
||||
for example) and most savvy "attackers" can find the information
|
||||
they need using other means.</para>
|
||||
<para>Another common reason for setting up a Split DNS system is
|
||||
to allow internal networks that are behind filters or in RFC 1918
|
||||
space (reserved IP space, as documented in RFC 1918) to resolve DNS
|
||||
on the Internet. Split DNS can also be used to allow mail from outside
|
||||
back in to the internal network.</para>
|
||||
<para>Here is an example of a split DNS setup:</para>
|
||||
<para>Let's say a company named <emphasis>Example, Inc.</emphasis> (example.com)
|
||||
has several corporate sites that have an internal network with reserved
|
||||
Internet Protocol (IP) space and an external demilitarized zone (DMZ),
|
||||
or "outside" section of a network, that is available to the public.</para>
|
||||
<para><emphasis>Example, Inc.</emphasis> wants its internal clients
|
||||
to be able to resolve external hostnames and to exchange mail with
|
||||
people on the outside. The company also wants its internal resolvers
|
||||
to have access to certain internal-only zones that are not available
|
||||
at all outside of the internal network.</para>
|
||||
<para>In order to accomplish this, the company will set up two sets
|
||||
of nameservers. One set will be on the inside network (in the reserved
|
||||
IP space) and the other set will be on bastion hosts, which are "proxy"
|
||||
hosts that can talk to both sides of its network, in the DMZ.</para>
|
||||
<para>The internal servers will be configured to forward all queries,
|
||||
except queries for <filename>site1.internal</filename>, <filename>site2.internal</filename>, <filename>site1.example.com</filename>,
|
||||
and <filename>site2.example.com</filename>, to the servers in the
|
||||
DMZ. These internal servers will have complete sets of information
|
||||
for <filename>site1.example.com</filename>, <filename>site2.example.com</filename>,<emphasis> </emphasis><filename>site1.internal</filename>,
|
||||
and <filename>site2.internal</filename>.</para>
|
||||
<para>To protect the<filename> site1.interna</filename><emphasis>l</emphasis> and<emphasis> </emphasis><filename>site2.internal</filename> domains,
|
||||
the internal nameservers must be configured to disallow all queries
|
||||
to these domains from any external hosts, including the bastion
|
||||
hosts.</para>
|
||||
<para>The external servers, which are on the bastion hosts, will
|
||||
be configured to serve the "public" version of the <filename>site1</filename> and <filename>site2.example.com</filename> zones.
|
||||
This could include things such as the host records for public servers
|
||||
(<filename>www.example.com</filename> and <filename>ftp.example.com</filename>),
|
||||
and mail exchange (MX) records (<filename>a.mx.example.com</filename> and <filename>b.mx.example.com</filename>).</para>
|
||||
<para>In addition, the public <filename>site1</filename> and <filename>site2.example.com</filename> zones
|
||||
should have special MX records that contain wildcard (`*') records
|
||||
pointing to the bastion hosts. This is needed because external mail
|
||||
servers do not have any other way of looking up how to deliver mail
|
||||
to those internal hosts. With the wildcard records, the mail will
|
||||
be delivered to the bastion host, which can then forward it on to
|
||||
internal hosts.</para>
|
||||
<para>Here's an example of a wildcard MX record:</para>
|
||||
<programlisting><literal>* IN MX 10 external1.example.com.</literal></programlisting>
|
||||
<para>Now that they accept mail on behalf of anything in the internal
|
||||
network, the bastion hosts will need to know how to deliver mail
|
||||
to internal hosts. In order for this to work properly, the resolvers on
|
||||
the bastion hosts will need to be configured to point to the internal
|
||||
nameservers for DNS resolution.</para>
|
||||
<para>Queries for internal hostnames will be answered by the internal
|
||||
servers, and queries for external hostnames will be forwarded back
|
||||
out to the DNS servers on the bastion hosts.</para>
|
||||
<para>In order for all this to work properly, internal clients will
|
||||
need to be configured to query <emphasis>only</emphasis> the internal
|
||||
nameservers for DNS queries. This could also be enforced via selective
|
||||
filtering on the network.</para>
|
||||
<para>If everything has been set properly, <emphasis>Example, Inc.</emphasis>'s
|
||||
internal clients will now be able to:</para>
|
||||
<itemizedlist><listitem>
|
||||
<simpara>Look up any hostnames in the <systemitem class="systemname">site1</systemitem> and
|
||||
<systemitem class="systemname">site2.example.com</systemitem> zones.</simpara></listitem>
|
||||
<listitem>
|
||||
<simpara>Look up any hostnames in the <systemitem class="systemname">site1.internal</systemitem> and
|
||||
<systemitem class="systemname">site2.internal</systemitem> domains.</simpara></listitem>
|
||||
<listitem>
|
||||
<simpara>Look up any hostnames on the Internet.</simpara></listitem>
|
||||
<listitem>
|
||||
<simpara>Exchange mail with internal AND external people.</simpara></listitem></itemizedlist>
|
||||
<para>Hosts on the Internet will be able to:</para>
|
||||
<itemizedlist><listitem>
|
||||
<simpara>Look up any hostnames in the <systemitem class="systemname">site1</systemitem> and
|
||||
<systemitem class="systemname">site2.example.com </systemitem>zones.</simpara></listitem>
|
||||
<listitem>
|
||||
<simpara>Exchange mail with anyone in the <systemitem class="systemname">site1</systemitem> and
|
||||
<systemitem class="systemname">site2.example.com</systemitem> zones.</simpara></listitem></itemizedlist>
|
||||
|
||||
<para>Here is an example configuration for the setup we just
|
||||
described above. Note that this is only configuration information;
|
||||
for information on how to configure your zone files, <xref
|
||||
linkend="sample_configuration"/></para>
|
||||
|
||||
<para>Internal DNS server config:</para>
|
||||
<programlisting>
|
||||
acl internals { 172.16.72.0/24; 192.168.1.0/24;
|
||||
};
|
||||
acl externals { <varname>bastion-ips-go-here</varname>; };
|
||||
options {
|
||||
...
|
||||
...
|
||||
forward only;
|
||||
forwarders { <varname>bastion-ips-go-here</varname>; }; // forward to external
|
||||
servers
|
||||
allow-transfer { none; }; // sample allow-transfer
|
||||
(no one)
|
||||
allow-query { internals; externals; }; // restrict
|
||||
query access
|
||||
allow-recursion { internals; }; // restrict recursion
|
||||
...
|
||||
...
|
||||
};
|
||||
zone "site1.example.com" { //
|
||||
sample slave zone
|
||||
type master;
|
||||
file "m/site1.example.com";
|
||||
forwarders { }; // do normal iterative
|
||||
// resolution (do not forward)
|
||||
allow-query { internals; externals; };
|
||||
allow-transfer { internals; };
|
||||
};
|
||||
zone "site2.example.com" {
|
||||
type slave;
|
||||
file "s/site2.example.com";
|
||||
masters { 172.16.72.3; };
|
||||
forwarders { };
|
||||
allow-query { internals; externals; };
|
||||
allow-transfer { internals; };
|
||||
};
|
||||
zone "site1.internal" {
|
||||
type master;
|
||||
file "m/site1.internal";
|
||||
forwarders { };
|
||||
allow-query { internals; };
|
||||
allow-transfer { internals; }
|
||||
};
|
||||
zone "site2.internal" {
|
||||
type slave;
|
||||
file "s/site2.internal";
|
||||
masters { 172.16.72.3; };
|
||||
forwarders { };
|
||||
allow-query { internals };
|
||||
allow-transfer { internals; }
|
||||
};
|
||||
</programlisting>
|
||||
<para>External (bastion host) DNS server config:</para>
|
||||
<programlisting>
|
||||
acl internals { 172.16.72.0/24; 192.168.1.0/24;
|
||||
};
|
||||
acl externals { bastion-ips-go-here; };
|
||||
options {
|
||||
...
|
||||
...
|
||||
allow-transfer { none; }; // sample allow-transfer
|
||||
(no one)
|
||||
allow-query { internals; externals; }; // restrict
|
||||
query access
|
||||
allow-recursion { internals; externals; }; // restrict
|
||||
recursion
|
||||
...
|
||||
...
|
||||
};
|
||||
zone "site1.example.com" { //
|
||||
sample slave zone
|
||||
type master;
|
||||
file "m/site1.foo.com";
|
||||
allow-query { any; };
|
||||
allow-transfer { internals; externals; };
|
||||
};
|
||||
zone "site2.example.com" {
|
||||
type slave;
|
||||
file "s/site2.foo.com";
|
||||
masters { another_bastion_host_maybe; };
|
||||
allow-query { any; };
|
||||
allow-transfer { internals; externals; }
|
||||
};
|
||||
</programlisting>
|
||||
<para>In the <filename>resolv.conf</filename> (or equivalent) on
|
||||
the bastion host(s):</para>
|
||||
<programlisting>
|
||||
search ...
|
||||
nameserver 172.16.72.2
|
||||
nameserver 172.16.72.3
|
||||
nameserver 172.16.72.4
|
||||
</programlisting>
|
||||
</sect1>
|
||||
<sect1><title id="tsig">TSIG</title>
|
||||
<para>This is a short guide to setting up Transaction SIGnatures
|
||||
(TSIG) based transaction security in <acronym>BIND</acronym>. It describes changes
|
||||
to the configuration file as well as what changes are required for
|
||||
different features, including the process of creating transaction
|
||||
keys and using transaction signatures with <acronym>BIND</acronym>.</para>
|
||||
<para><acronym>BIND</acronym> primarily supports TSIG for server to server communication.
|
||||
This includes zone transfer, notify, and recursive query messages.
|
||||
Resolvers based on newer versions of <acronym>BIND</acronym> 8 have limited support
|
||||
for TSIG.</para>
|
||||
|
||||
<para>TSIG might be most useful for dynamic update. A primary
|
||||
server for a dynamic zone should use access control to control
|
||||
updates, but IP-based access control is insufficient. Key-based
|
||||
access control is far superior, <xref
|
||||
linkend="proposed_standards"/>. The <command>nsupdate</command>
|
||||
program supports TSIG via the <option>-k</option> and
|
||||
<option>-y</option> command line options.</para>
|
||||
|
||||
<sect2><title>Generate Shared Keys for Each Pair of Hosts</title>
|
||||
<para>A shared secret is generated to be shared between <emphasis>host1</emphasis> and <emphasis>host2</emphasis>.
|
||||
An arbitrary key name is chosen: "host1-host2.". The key name must
|
||||
be the same on both hosts.</para>
|
||||
<sect3><title>Automatic Generation</title>
|
||||
<para>The following command will generate a 128 bit (16 byte) HMAC-MD5
|
||||
key as described above. Longer keys are better, but shorter keys
|
||||
are easier to read. Note that the maximum key length is 512 bits;
|
||||
keys longer than that will be digested with MD5 to produce a 128
|
||||
bit key.</para>
|
||||
<para><userinput>dnssec-keygen -a hmac-md5 -b 128 -n HOST host1-host2.</userinput></para>
|
||||
<para>The key is in the file <filename>Khost1-host2.+157+00000.private</filename>.
|
||||
Nothing directly uses this file, but the base-64 encoded string
|
||||
following "<literal>Key:</literal>"
|
||||
can be extracted from the file and used as a shared secret:</para>
|
||||
<programlisting>Key: La/E5CjG9O+os1jq0a2jdA==</programlisting>
|
||||
<para>The string "<literal>La/E5CjG9O+os1jq0a2jdA==</literal>" can
|
||||
be used as the shared secret.</para></sect3>
|
||||
<sect3><title>Manual Generation</title>
|
||||
<para>The shared secret is simply a random sequence of bits, encoded
|
||||
in base-64. Most ASCII strings are valid base-64 strings (assuming
|
||||
the length is a multiple of 4 and only valid characters are used),
|
||||
so the shared secret can be manually generated.</para>
|
||||
<para>Also, a known string can be run through <command>mmencode</command> or
|
||||
a similar program to generate base-64 encoded data.</para></sect3></sect2>
|
||||
<sect2><title>Copying the Shared Secret to Both Machines</title>
|
||||
<para>This is beyond the scope of DNS. A secure transport mechanism
|
||||
should be used. This could be secure FTP, ssh, telephone, etc.</para></sect2>
|
||||
<sect2><title>Informing the Servers of the Key's Existence</title>
|
||||
<para>Imagine <emphasis>host1</emphasis> and <emphasis>host 2</emphasis> are
|
||||
both servers. The following is added to each server's <filename>named.conf</filename> file:</para>
|
||||
<programlisting>
|
||||
key host1-host2. {
|
||||
algorithm hmac-md5;
|
||||
secret "La/E5CjG9O+os1jq0a2jdA==";
|
||||
};
|
||||
</programlisting>
|
||||
<para>The algorithm, hmac-md5, is the only one supported by <acronym>BIND</acronym>.
|
||||
The secret is the one generated above. Since this is a secret, it
|
||||
is recommended that either <filename>named.conf</filename> be non-world
|
||||
readable, or the key directive be added to a non-world readable
|
||||
file that is included by <filename>named.conf</filename>.</para>
|
||||
<para>At this point, the key is recognized. This means that if the
|
||||
server receives a message signed by this key, it can verify the
|
||||
signature. If the signature succeeds, the response is signed by
|
||||
the same key.</para></sect2>
|
||||
<sect2><title>Instructing the Server to Use the Key</title>
|
||||
<para>Since keys are shared between two hosts only, the server must
|
||||
be told when keys are to be used. The following is added to the <filename>named.conf</filename> file
|
||||
for <emphasis>host1</emphasis>, if the IP address of <emphasis>host2</emphasis> is
|
||||
10.1.2.3:</para>
|
||||
<programlisting>
|
||||
server 10.1.2.3 {
|
||||
keys { host1-host2. ;};
|
||||
};
|
||||
</programlisting>
|
||||
<para>Multiple keys may be present, but only the first is used.
|
||||
This directive does not contain any secrets, so it may be in a world-readable
|
||||
file.</para>
|
||||
<para>If <emphasis>host1</emphasis> sends a message that is a response
|
||||
to that address, the message will be signed with the specified key. <emphasis>host1</emphasis> will
|
||||
expect any responses to signed messages to be signed with the same
|
||||
key.</para>
|
||||
<para>A similar statement must be present in <emphasis>host2</emphasis>'s
|
||||
configuration file (with <emphasis>host1</emphasis>'s address) for <emphasis>host2</emphasis> to
|
||||
sign non-response messages to <emphasis>host1</emphasis>.</para></sect2>
|
||||
<sect2><title>TSIG Key Based Access Control</title>
|
||||
<para><acronym>BIND</acronym> allows IP addresses and ranges to be specified in ACL
|
||||
definitions and
|
||||
<command>allow-{ query | transfer | update } </command>directives.
|
||||
This has been extended to allow TSIG keys also. The above key would
|
||||
be denoted <command>key host1-host2.</command></para>
|
||||
<para>An example of an allow-update directive would be:</para>
|
||||
<programlisting>
|
||||
allow-update { key host1-host2. ;};
|
||||
</programlisting>
|
||||
|
||||
<para>This allows dynamic updates to succeed only if the request
|
||||
was signed by a key named
|
||||
"<command>host1-host2.</command>".</para> <para>The more
|
||||
powerful <command>update-policy</command> statement <xref
|
||||
linkend="dynamic_update_policies"/>.</para>
|
||||
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Errors</title>
|
||||
|
||||
<para>The processing of TSIG signed messages can result in
|
||||
several errors. If a signed message is sent to a non-TSIG aware
|
||||
server, a FORMERR will be returned, since the server will not
|
||||
understand the record. This is a result of misconfiguration,
|
||||
since the server must be explicitly configured to send a TSIG
|
||||
signed message to a specific server.</para>
|
||||
|
||||
<para>If a TSIG aware server receives a message signed by an
|
||||
unknown key, the response will be unsigned with the TSIG
|
||||
extended error code set to BADKEY. If a TSIG aware server
|
||||
receives a message with a signature that does not validate, the
|
||||
response will be unsigned with the TSIG extended error code set
|
||||
to BADSIG. If a TSIG aware server receives a message with a time
|
||||
outside of the allowed range, the response will be signed with
|
||||
the TSIG extended error code set to BADTIME, and the time values
|
||||
will be adjusted so that the response can be successfully
|
||||
verified. In any of these cases, the message's rcode is set to
|
||||
NOTAUTH.</para>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>TKEY</title>
|
||||
|
||||
<para><command>TKEY</command> is a mechanism for automatically
|
||||
generating a shared secret between two hosts. There are several
|
||||
"modes" of <command>TKEY</command> that specify how the key is
|
||||
generated or assigned. <acronym>BIND</acronym> implements only one of these modes,
|
||||
the Diffie-Hellman key exchange. Both hosts are required to have
|
||||
a Diffie-Hellman KEY record (although this record is not required
|
||||
to be present in a zone). The <command>TKEY</command> process
|
||||
must use signed messages, signed either by TSIG or SIG(0). The
|
||||
result of <command>TKEY</command> is a shared secret that can be
|
||||
used to sign messages with TSIG. <command>TKEY</command> can also
|
||||
be used to delete shared secrets that it had previously
|
||||
generated.</para>
|
||||
|
||||
<para>The <command>TKEY</command> process is initiated by a client
|
||||
or server by sending a signed <command>TKEY</command> query
|
||||
(including any appropriate KEYs) to a TKEY-aware server. The
|
||||
server response, if it indicates success, will contain a
|
||||
<command>TKEY</command> record and any appropriate keys. After
|
||||
this exchange, both participants have enough information to
|
||||
determine the shared secret; the exact process depends on the
|
||||
<command>TKEY</command> mode. When using the Diffie-Hellman
|
||||
<command>TKEY</command> mode, Diffie-Hellman keys are exchanged,
|
||||
and the shared secret is derived by both participants.</para>
|
||||
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>SIG(0)</title>
|
||||
|
||||
<para><acronym>BIND</acronym> 9 partially supports DNSSEC SIG(0) transaction
|
||||
signatures as specified in RFC 2535. SIG(0) uses public/private
|
||||
keys to authenticate messages. Access control is performed in the
|
||||
same manner as TSIG keys; privileges can be granted or denied
|
||||
based on the key name.</para>
|
||||
|
||||
<para>When a SIG(0) signed message is received, it will only be
|
||||
verified if the key is known and trusted by the server; the server
|
||||
will not attempt to locate and/or validate the key.</para>
|
||||
|
||||
<para><acronym>BIND</acronym> 9 does not ship with any tools that generate SIG(0)
|
||||
signed messages.</para>
|
||||
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title id="DNSSEC">DNSSEC</title>
|
||||
|
||||
<para>Cryptographic authentication of DNS information is possible
|
||||
through the DNS Security (<emphasis>DNSSEC</emphasis>) extensions,
|
||||
defined in RFC 2535. This section describes the creation and use
|
||||
of DNSSEC signed zones.</para>
|
||||
|
||||
<para>In order to set up a DNSSEC secure zone, there are a series
|
||||
of steps which must be followed. <acronym>BIND</acronym> 9 ships with several tools
|
||||
that are used in this process, which are explained in more detail
|
||||
below. In all cases, the "<option>-h</option>" option prints a
|
||||
full list of parameters.</para>
|
||||
|
||||
<para>There must also be communication with the administrators of
|
||||
the parent and/or child zone to transmit keys and signatures. A
|
||||
zone's security status must be indicated by the parent zone for a
|
||||
DNSSEC capable resolver to trust its data.</para>
|
||||
|
||||
<para>For other servers to trust data in this zone, they must
|
||||
either be statically configured with this zone's zone key or the
|
||||
zone key of another zone above this one in the DNS tree.</para>
|
||||
|
||||
<sect2>
|
||||
<title>Generating Keys</title>
|
||||
|
||||
<para>The <command>dnssec-keygen</command> program is used to
|
||||
generate keys.</para>
|
||||
|
||||
<para>A secure zone must contain one or more zone keys. The
|
||||
zone keys will sign all other records in the zone, as well as
|
||||
the zone keys of any secure delegated zones. Zone keys must
|
||||
have the same name as the zone, a name type of
|
||||
<command>ZONE</command>, and must be usable for authentication.
|
||||
It is recommended that zone keys be mandatory to implement a
|
||||
cryptographic algorithm; currently the only key mandatory to
|
||||
implement an algorithm is DSA.</para>
|
||||
|
||||
<para>The following command will generate a 768 bit DSA key for
|
||||
the <filename>child.example</filename> zone:</para>
|
||||
|
||||
<para><userinput>dnssec-keygen -a DSA -b 768 -n ZONE child.example.</userinput></para>
|
||||
|
||||
<para>Two output files will be produced:
|
||||
<filename>Kchild.example.+003+12345.key</filename> and
|
||||
<filename>Kchild.example.+003+12345.private</filename> (where
|
||||
12345 is an example of a key tag). The key file names contain
|
||||
the key name (<filename>child.example.</filename>), algorithm (3
|
||||
is DSA, 1 is RSA, etc.), and the key tag (12345 in this case).
|
||||
The private key (in the <filename>.private</filename> file) is
|
||||
used to generate signatures, and the public key (in the
|
||||
<filename>.key</filename> file) is used for signature
|
||||
verification.</para>
|
||||
|
||||
<para>To generate another key with the same properties (but with
|
||||
a different key tag), repeat the above command.</para>
|
||||
|
||||
<para>The public keys should be inserted into the zone file with
|
||||
<command>$INCLUDE</command> statements, including the
|
||||
<filename>.key </filename>files.</para>
|
||||
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Creating a Keyset</title>
|
||||
|
||||
<para>The <command>dnssec-makekeyset</command> program is used
|
||||
to create a key set from one or more keys.</para>
|
||||
|
||||
<para>Once the zone keys have been generated, a key set must be
|
||||
built for transmission to the administrator of the parent zone,
|
||||
so that the parent zone can sign the keys with its own zone key
|
||||
and correctly indicate the security status of this zone. When
|
||||
building a key set, the list of keys to be included and the TTL
|
||||
of the set must be specified, and the desired signature validity
|
||||
period of the parent's signature may also be specified.</para>
|
||||
|
||||
<para>The list of keys to be inserted into the key set may also
|
||||
included non-zone keys present at the top of the zone.
|
||||
<command>dnssec-makekeyset</command> may also be used at other
|
||||
names in the zone.</para>
|
||||
|
||||
<para>The following command generates a key set containing the
|
||||
above key and another key similarly generated, with a TTL of
|
||||
3600 and a signature validity period of 10 days starting from
|
||||
now.</para>
|
||||
|
||||
<para><userinput>dnssec-makekeyset -t 3600 -e +86400 Kchild.example.+003+12345 Kchild.example.+003+23456</userinput></para>
|
||||
|
||||
<para>One output file is produced:
|
||||
<filename>child.example.keyset</filename>. This file should be
|
||||
transmitted to the parent to be signed. It includes the keys,
|
||||
as well as signatures over the key set generated by the zone
|
||||
keys themselves, which are used to prove ownership of the
|
||||
private keys and encode the desired validity period.</para>
|
||||
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Signing the Child's Keyset</title>
|
||||
|
||||
<para>The <command>dnssec-signkey</command> program is used to
|
||||
sign one child's keyset.</para>
|
||||
|
||||
<para>If the <filename>child.example</filename> zone has any
|
||||
delegations which are secure, for example,
|
||||
<filename>grand.child.example</filename>, the
|
||||
<filename>child.example</filename> administrator should receive
|
||||
keyset files for each secure subzone. These keys must be signed
|
||||
by this zone's zone keys.</para>
|
||||
|
||||
<para>The following command signs the child's key set with the
|
||||
zone keys:</para>
|
||||
|
||||
<para><userinput>dnssec-signkey grand.child.example.keyset Kchild.example.+003+12345 Kchild.example.+003+23456</userinput></para>
|
||||
|
||||
<para>One output file is produced:
|
||||
<filename>grand.child.example.signedkey</filename>. This file
|
||||
should be both transmitted back to the child and retained. It
|
||||
includes all keys (the child's keys) from the keyset file and
|
||||
signatures generated by this zone's zone keys.</para>
|
||||
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Signing the Zone</title>
|
||||
|
||||
<para>The <command>dnssec-signzone</command> program is used to
|
||||
sign a zone.</para>
|
||||
|
||||
<para>Any <filename>signedkey</filename> files corresponding to
|
||||
secure subzones should be present, as well as a
|
||||
<filename>signedkey</filename> file for this zone generated by
|
||||
the parent (if there is one). The zone signer will generate
|
||||
<literal>NXT</literal> and <literal>SIG</literal> records for
|
||||
the zone, as well as incorporate the zone key signature from the
|
||||
parent and indicate the security status at all delegation
|
||||
points.</para>
|
||||
|
||||
<para>The following command signs the zone, assuming it is in a
|
||||
file called <filename>zone.child.example</filename>. By
|
||||
default, all zone keys which have an available private key are
|
||||
used to generate signatures.</para>
|
||||
|
||||
<para><userinput>dnssec-signzone -o child.example zone.child.example</userinput></para>
|
||||
|
||||
<para>One output file is produced:
|
||||
<filename>zone.child.example.signed</filename>. This file
|
||||
should be referenced by <filename>named.conf</filename> as the
|
||||
input file for the zone.</para>
|
||||
|
||||
</sect2>
|
||||
<sect2><title>Configuring Servers</title>
|
||||
|
||||
<para>Unlike in <acronym>BIND</acronym> 8, data is not verified on load in <acronym>BIND</acronym> 9,
|
||||
so zone keys for authoritative zones do not need to be specified
|
||||
in the configuration file.</para>
|
||||
|
||||
<para>The public key for any security root must be present in
|
||||
the configuration file's <command>trusted-keys</command>
|
||||
statement, as described later in this document. </para>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>IPv6 Support in <acronym>BIND</acronym> 9</title>
|
||||
|
||||
<para><acronym>BIND</acronym> 9 fully supports all currently defined forms of IPv6
|
||||
name to address and address to name lookups. It will also use
|
||||
IPv6 addresses to make queries when running on an IPv6 capable
|
||||
system.</para>
|
||||
|
||||
<para>For forward lookups, <acronym>BIND</acronym> 9 supports both A6 and AAAA
|
||||
records. The of AAAA records is deprecated, but it is still
|
||||
useful for hosts to have both AAAA and A6 records to maintain
|
||||
backward compatibility with installations where AAAA records are
|
||||
still used. In fact, the stub resolvers currently shipped with
|
||||
most operating system support only AAAA lookups, because following
|
||||
A6 chains is much harder than doing A or AAAA lookups.</para>
|
||||
|
||||
<para>For IPv6 reverse lookups, <acronym>BIND</acronym> 9 supports the new
|
||||
"bitstring" format used in the <emphasis>ip6.arpa</emphasis>
|
||||
domain, as well as the older, deprecated "nibble" format used in
|
||||
the <emphasis>ip6.int</emphasis> domain.</para>
|
||||
|
||||
<para><acronym>BIND</acronym> 9 includes a new lightweight resolver library and
|
||||
resolver daemon which new applications may choose to use to avoid
|
||||
the complexities of A6 chain following and bitstring labels,<xref
|
||||
linkend="lightweight_resolver"/>.</para>
|
||||
|
||||
<sect2>
|
||||
<title>Address Lookups Using AAAA Records</title>
|
||||
|
||||
<para>The AAAA record is a parallel to the IPv4 A record. It
|
||||
specifies the entire address in a single record. For
|
||||
example,</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN example.com.
|
||||
host 1h IN AAAA 3ffe:8050:201:1860:42::1
|
||||
</programlisting>
|
||||
|
||||
<para>While their use is deprecated, they are useful to support
|
||||
older IPv6 applications. They should not be added where they
|
||||
are not absolutely necessary.</para>
|
||||
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Address Lookups Using A6 Records</title>
|
||||
|
||||
<para>The A6 record is more flexible than the AAAA record, and
|
||||
is therefore more complicated. The A6 record can be used to
|
||||
form a chain of A6 records, each specifying part of the IPv6
|
||||
address. It can also be used to specify the entire record as
|
||||
well. For example, this record supplies the same data as the
|
||||
AAAA record in the previous example:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN example.com.
|
||||
host 1h IN A6 0 3ffe:8050:201:1860:42::1
|
||||
</programlisting>
|
||||
<sect3>
|
||||
<title>A6 Chains</title>
|
||||
|
||||
<para>A6 records are designed to allow network
|
||||
renumbering. This works when an A6 record only specifies the
|
||||
part of the address space the domain owner controls. For
|
||||
example, a host may be at a company named "company." It has
|
||||
two ISPs which provide IPv6 address space for it. These two
|
||||
ISPs fully specify the IPv6 prefix they supply.</para>
|
||||
|
||||
<para>In the company's address space:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN example.com.
|
||||
host 1h IN A6 64 0:0:0:0:42::1 company.example1.net.
|
||||
host 1h IN A6 64 0:0:0:0:42::1 company.example2.net.
|
||||
</programlisting>
|
||||
|
||||
<para>ISP1 will use:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN example1.net.
|
||||
company 1h IN A6 0 3ffe:8050:201:1860::
|
||||
</programlisting>
|
||||
|
||||
<para>ISP2 will use:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN example2.net.
|
||||
company 1h IN A6 0 1234:5678:90ab:fffa::
|
||||
</programlisting>
|
||||
|
||||
<para>When <systemitem
|
||||
class="systemname">host.example.com</systemitem> is looked up,
|
||||
the resolver (in the resolver daemon or caching name server)
|
||||
will find two partial A6 records, and will use the additional
|
||||
name to find the remainder of the data.</para>
|
||||
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>A6 Records for DNS Servers</title>
|
||||
|
||||
<para>When an A6 record specifies the address of a name
|
||||
server, it should use the full address rather than specifying
|
||||
a partial address. For example:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN example.com.
|
||||
@ 4h IN NS ns0
|
||||
4h IN NS ns1
|
||||
ns0 4h IN A6 0 3ffe:8050:201:1860:42::1
|
||||
ns1 4h IN A 192.168.42.1
|
||||
</programlisting>
|
||||
|
||||
<para>It is recommended that IPv4-in-IPv6 mapped addresses not
|
||||
be used. If a host has an IPv4 address, use an A record, not
|
||||
an A6, with <literal>::ffff:192.168.42.1</literal> as the
|
||||
address.</para>
|
||||
|
||||
</sect3>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Address to Name Lookups Using Nibble Format</title>
|
||||
|
||||
<para>While the use of nibble format to look up names is
|
||||
deprecated, it is supported for backwards compatiblity with
|
||||
existing IPv6 applications.</para>
|
||||
|
||||
<para>When looking up an address in nibble format, the address
|
||||
components are simply reversed, just as in IPv4, and
|
||||
<literal>ip6.int.</literal> is appended to the resulting name.
|
||||
For example, the following would provide reverse name lookup for
|
||||
a host with address
|
||||
<literal>3ffe:8050:201:1860:42::1</literal>.</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN 0.6.8.1.1.0.2.0.0.5.0.8.e.f.f.3.ip6.int.
|
||||
1.0.0.0.0.0.0.0.0.0.0.0.2.4.0.0 4h IN PTR host.example.com.
|
||||
</programlisting>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Address to Name Lookups Using Bitstring Format</title>
|
||||
|
||||
<para>Bitstring labels can start and end on any bit boundary,
|
||||
rather than on a multiple of 4 bits as in the nibble
|
||||
format. They also use <emphasis>ip6.arpa</emphasis> rather than
|
||||
<emphasis>ip6.int</emphasis>.</para>
|
||||
|
||||
<para>To replicate the previous example using bitstrings:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN \[x3ffe805002011860/64].ip6.arpa.
|
||||
\[x0042000000000001/64] 4h IN PTR host.example.com.
|
||||
</programlisting>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Using DNAME for Delegation of IPv6 Reverse Addresses</title>
|
||||
|
||||
<para>In IPV6, the same host may have many addresses from many
|
||||
network providers. Since the trailing portion of the address
|
||||
usually remains constant, <command>DNAME</command> can help
|
||||
reduce the number of zone files used for reverse mapping that
|
||||
need to be maintained.</para>
|
||||
|
||||
<para>For example, consider a host which has two providers
|
||||
(<systemitem class="systemname">example.net</systemitem> and
|
||||
<systemitem class="systemname">example2.net</systemitem>) and
|
||||
therefore two IPv6 addresses. Since the host chooses its own 64
|
||||
bit host address portion, the provider address is the only part
|
||||
that changes:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN example.com.
|
||||
host A6 64 ::1234:5678:1212:5675 cust1.example.net.
|
||||
A6 64 ::1234:5678:1212:5675 subnet5.example2.net.
|
||||
$ORIGIN example.net.
|
||||
cust1 A6 48 0:0:0:dddd:: ipv6net.example.net.
|
||||
ipv6net A6 0 aa:bb:cccc::
|
||||
$ORIGIN example2.net.
|
||||
subnet5 A6 48 0:0:0:1:: ipv6net2.example2.net.
|
||||
ipv6net2 A6 0 6666:5555:4::
|
||||
</programlisting>
|
||||
|
||||
<para>This sets up forward lookups. To handle the reverse lookups,
|
||||
the provider <systemitem class="systemname">example.net</systemitem>
|
||||
would have:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN \[x00aa00bbcccc/48].ip6.arpa.
|
||||
\[xdddd/16] DNAME ipv6-rev.example.com.
|
||||
</programlisting>
|
||||
|
||||
<para>and <systemitem
|
||||
class="systemname">example2.net</systemitem> would have:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN \[x666655550004/48].ip6.arpa.
|
||||
\[x0001/16] DNAME ipv6-rev.example.com.
|
||||
</programlisting>
|
||||
|
||||
<para><systemitem class="systemname">example.com</systemitem>
|
||||
needs only one zone file to handle both of these reverse
|
||||
mappings:</para>
|
||||
|
||||
<programlisting>
|
||||
$ORIGIN ipv6-rev.example.com.
|
||||
\[x1234567812125675/64] PTR host.example.com.
|
||||
</programlisting>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<chapter><title id="lightweight_resolver">The <acronym>BIND</acronym> 9 Lightweight Resolver</title>
|
||||
<sect1><title>The Lightweight Resolver Library</title>
|
||||
<para>Traditionally applications have been linked with a stub resolver
|
||||
library that sends recursive DNS queries to a local caching name
|
||||
server.</para>
|
||||
<para>IPv6 introduces new complexity into the resolution process,
|
||||
such as following A6 chains and DNAME records, and simultaneous
|
||||
lookup of IPv4 and IPv6 addresses. These are hard or impossible
|
||||
to implement in a traditional stub resolver.</para>
|
||||
<para>Instead, <acronym>BIND</acronym> 9 provides resolution services to local clients
|
||||
using a combination of a lightweight resolver library and a resolver
|
||||
daemon process running on the local host. These communicate using
|
||||
a simple UDP-based protocol, the "lightweight resolver protocol"
|
||||
that is distinct from and simpler than the full DNS protocol.</para></sect1>
|
||||
<sect1><title>Running a Resolver Daemon</title>
|
||||
<para>To use the lightweight resolver interface, the system must
|
||||
run the resolver daemon <command>lwresd</command>.</para>
|
||||
<para>Applications using the lightweight resolver library will make
|
||||
UDP requests to the IPv4 loopback address (127.0.0.1) on port 921.
|
||||
The daemon will try to find the answer to the questions "what are the
|
||||
addresses for host <systemitem class="systemname">foo.example.com</systemitem>?" and "what are
|
||||
the names for IPv4 address 204.152.184.79?"</para>
|
||||
<para>The daemon currently only looks in the DNS, but in the future
|
||||
it may use other sources such as <literal>/etc/hosts</literal>,
|
||||
NIS, etc.</para>
|
||||
<para>The <command>lwresd</command> daemon is essentially a stripped-down,
|
||||
caching-only name server that answers requests using the lightweight
|
||||
resolver protocol rather than the DNS protocol. Because it needs
|
||||
to run on each host, it is designed to require no or minimal configuration.
|
||||
It uses the name servers listed on <command>nameserver</command> lines
|
||||
in <filename>/etc/resolv.conf</filename> as forwarders, but is also
|
||||
capable of doing the resolution autonomously if none are specified.</para></sect1></chapter>
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,82 +0,0 @@
|
|||
<chapter><title><acronym>BIND</acronym> 9 Security Considerations</title>
|
||||
<sect1><title id="Access_Control_Lists">Access Control Lists</title>
|
||||
<para>Access Control Lists (ACLs), are address match lists that
|
||||
you can set up and nickname for future use in <command>allow-query</command>, <command>allow-recursion</command>, <command>blackhole</command>, <command>allow-transfer</command>,
|
||||
etc.</para>
|
||||
<para>Using ACLs allows you to have finer control over who can access
|
||||
your nameserver, without cluttering up your config files with huge
|
||||
lists of IP addresses.</para>
|
||||
<para>It is a <emphasis>good idea</emphasis> to use ACLs, and to
|
||||
control access to your server. Limiting access to your server by
|
||||
outside parties can help prevent spoofing and DoS attacks against
|
||||
your server.</para>
|
||||
<para>Here is an example of how to properly apply ACLs:</para>
|
||||
<programlisting>
|
||||
// Set up an ACL named "bogusnets" that will block RFC1918 space,
|
||||
// which is commonly used in spoofing attacks.
|
||||
acl bogusnets { 0.0.0.0/8; 1.0.0.0/8; 2.0.0.0/8; 192.0.2.0/24; 224.0.0.0/3; 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16; };
|
||||
// Set up an ACL called our-nets. Replace this with the real IP numbers.
|
||||
acl our-nets { x.x.x.x/24; x.x.x.x/21; };
|
||||
options {
|
||||
...
|
||||
...
|
||||
allow-query { our-nets; };
|
||||
allow-recursion { our-nets; };
|
||||
...
|
||||
blackhole { bogusnets; };
|
||||
...
|
||||
};
|
||||
zone "example.com" {
|
||||
type master;
|
||||
file "m/example.com";
|
||||
allow-query { any; };
|
||||
};
|
||||
</programlisting>
|
||||
<para>This allows recursive queries of the server from the outside
|
||||
unless recursion has been previously disabled.</para>
|
||||
<para>For more information on how to use ACLs to protect your server,
|
||||
see the <emphasis>AUSCERT</emphasis> advisory at
|
||||
<ulink url="ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos">ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos</ulink></para></sect1>
|
||||
<sect1><title><command>chroot</command> and <command>setuid</command> (for
|
||||
UNIX servers)</title>
|
||||
<para>On UNIX servers, it is possible to run <acronym>BIND</acronym> in a <emphasis>chrooted</emphasis> environment
|
||||
(<command>chroot()</command>) by specifying the "<option>-t</option>"
|
||||
option. This can help improve system security by placing <acronym>BIND</acronym> in
|
||||
a "sandbox," which will limit the damage done if a server is compromised.</para>
|
||||
<para>Another useful feature in the UNIX version of <acronym>BIND</acronym> is the
|
||||
ability to run the daemon as a nonprivileged user ( <option>-u</option> <replaceable>user</replaceable> ).
|
||||
We suggest running as a nonprivileged user when using the <command>chroot</command> feature.</para>
|
||||
<para>Here is an example command line to load <acronym>BIND</acronym> in a <command>chroot()</command> sandbox,
|
||||
<command>/var/named</command>, and to run <command>named</command> <command>setuid</command> to
|
||||
user 202:</para>
|
||||
<para><userinput>/usr/local/bin/named -u 202 -t /var/named</userinput></para>
|
||||
<sect2><title>The <command>chroot</command> Environment</title>
|
||||
<para>In order for a <command>chroot()</command> environment to
|
||||
work properly in a particular directory (for example, <filename>/var/named</filename>),
|
||||
you will need to set up an environment that includes everything
|
||||
<acronym>BIND</acronym> needs to run. From <acronym>BIND</acronym>'s point of view, <filename>/var/named</filename> is
|
||||
the root of the filesystem. You will need <filename>/dev/null</filename>,
|
||||
and any library directories and files that <acronym>BIND</acronym> needs to run on
|
||||
your system. Please consult your operating system's instructions
|
||||
if you need help figuring out which library files you need to copy
|
||||
over to the <command>chroot()</command> sandbox.</para>
|
||||
<para>If you are running an operating system that supports static
|
||||
binaries, you can also compile <acronym>BIND</acronym> statically and avoid the need
|
||||
to copy system libraries over to your <command>chroot()</command> sandbox.</para></sect2>
|
||||
<sect2><title>Using the <command>setuid</command> Function </title>
|
||||
<para>Prior to running the <command>named</command> daemon, use
|
||||
the <command>touch</command> utility (to change file access and
|
||||
modification times) or the <command>chown</command> utility (to
|
||||
set the user id and/or group id) on files to which you want <acronym>BIND</acronym>
|
||||
to write.</para></sect2></sect1>
|
||||
<sect1><title>Dynamic Updates</title>
|
||||
<para>Access to the dynamic update facility should be strictly limited.
|
||||
In earlier versions of <acronym>BIND</acronym> the only way to do this was based on
|
||||
the IP address of the host requesting the update. <acronym>BIND9</acronym> also
|
||||
supports authenticating updates cryptographically by means of transaction
|
||||
signatures (TSIG). The use of TSIG is strongly recommended.</para>
|
||||
<para>Some sites choose to keep all dynamically updated DNS data
|
||||
in a subdomain and delegate that subdomain to a separate zone. This
|
||||
way, the top-level zone containing critical data such as the IP addresses
|
||||
of public web and mail servers need not allow dynamic update at
|
||||
all.</para></sect1></chapter>
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
<chapter>
|
||||
<title>Troubleshooting</title>
|
||||
<sect1>
|
||||
<title>Common Problems</title>
|
||||
<sect2>
|
||||
<title>It's not working; how can I figure out what's wrong?</title>
|
||||
|
||||
<para>The best solution to solving installation and
|
||||
configuration issues is to take preventative measures by setting
|
||||
up logging files beforehand (see the sample configurations in
|
||||
<xref linkend="sample_configuration"/>). The log files provide a
|
||||
source of hints and information that can be used to figure out
|
||||
what went wrong and how to fix the problem.</para>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>Incrementing and Changing the Serial Number</title>
|
||||
|
||||
<para>Zone serial numbers are just numbers-they aren't date
|
||||
related. A lot of people set them to a number that represents a
|
||||
date, usually of the form YYYYMMDDRR. A number of people have been
|
||||
testing these numbers for Y2K compliance and have set the number
|
||||
to the year 2000 to see if it will work. They then try to restore
|
||||
the old serial number. This will cause problems because serial
|
||||
numbers are used to indicate that a zone has been updated. If the
|
||||
serial number on the slave server is lower than the serial number
|
||||
on the master, the slave server will attempt to update its copy of
|
||||
the zone.</para>
|
||||
|
||||
<para>Setting the serial number to a lower number on the master
|
||||
server than the slave server means that the slave will not perform
|
||||
updates to its copy of the zone.</para>
|
||||
|
||||
<para>The solution to this is to add 2147483647 (2^31-1) to the
|
||||
number, reload the zone and make sure all slaves have updated to
|
||||
the new zone serial number, then reset the number to what you want
|
||||
it to be, and reload the zone again.</para>
|
||||
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>Where Can I Get Help?</title>
|
||||
|
||||
<para>The Internet Software Consortium (<acronym>ISC</acronym>) offers a wide range
|
||||
of support and service agreements for <acronym>BIND</acronym> and <acronym>DHCP</acronym> servers. Four
|
||||
levels of premium support are available and each level includes
|
||||
support for all <acronym>ISC</acronym> programs, significant discounts on products
|
||||
and training, and a recognized priority on bug fixes and
|
||||
non-funded feature requests. In addition, <acronym>ISC</acronym> offers a standard
|
||||
support agreement package which includes services ranging from bug
|
||||
fix announcements to remote support. It also includes training in
|
||||
<acronym>BIND</acronym> and <acronym>DHCP</acronym>.</para>
|
||||
|
||||
<para>To discuss arrangements for support, contact
|
||||
<ulink url="email:info@isc.org">info@isc.org</ulink> or visit the
|
||||
<acronym>ISC</acronym> web page at <ulink
|
||||
url="http://www.isc.org/services/support/">http://www.isc.org/services/support/</ulink>
|
||||
to read more.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
@ -1,825 +0,0 @@
|
|||
<appendix>
|
||||
<title>Appendices</title>
|
||||
<sect1>
|
||||
<title>Acknowledgements</title>
|
||||
<sect2>
|
||||
<title>A Brief History of the <acronym>DNS</acronym> and <acronym>BIND</acronym></title>
|
||||
|
||||
<para>Although the "official" beginning of the Domain Name
|
||||
System occurred in 1984 with the publication of RFC 920, the
|
||||
core of the new system was described in 1983 in RFCs 882 and
|
||||
883. From 1984 to 1987, the ARPAnet (the precursor to today's
|
||||
Internet) became a testbed of experimentation for developing the
|
||||
new naming/addressing scheme in an rapidly expanding,
|
||||
operational network environment. New RFCs were written and
|
||||
published in 1987 that modified the original documents to
|
||||
incorporate improvements based on the working model. RFC 1034,
|
||||
"Domain Names-Concepts and Facilities," and RFC 1035, "Domain
|
||||
Names-Implementation and Specification" were published and
|
||||
became the standards upon which all <acronym>DNS</acronym> implementations are
|
||||
built.
|
||||
</para>
|
||||
|
||||
<para>The first working domain name server, called "Jeeves," was
|
||||
written in 1983-84 by Paul Mockapetris for operation on DEC Tops-20
|
||||
machines located at the University of Southern California's Information
|
||||
Sciences Institute (USC-ISI) and SRI International's Network Information
|
||||
Center (SRI-NIC). A <acronym>DNS</acronym> server for Unix machines, the Berkeley Internet
|
||||
Name Domain (<acronym>BIND</acronym>) package, was written soon after by a group of
|
||||
graduate students at the University of California at Berkeley under
|
||||
a grant from the US Defense Advanced Research Projects Administration
|
||||
(DARPA). Versions of <acronym>BIND</acronym> through 4.8.3 were maintained by the Computer
|
||||
Systems Research Group (CSRG) at UC Berkeley. Douglas Terry, Mark
|
||||
Painter, David Riggle and Songnian Zhou made up the initial <acronym>BIND</acronym>
|
||||
project team. After that, additional work on the software package
|
||||
was done by Ralph Campbell. Kevin Dunlap, a Digital Equipment Corporation
|
||||
employee on loan to the CSRG, worked on <acronym>BIND</acronym> for 2 years, from 1985
|
||||
to 1987. Many other people also contributed to <acronym>BIND</acronym> development
|
||||
during that time: Doug Kingston, Craig Partridge, Smoot Carl-Mitchell,
|
||||
Mike Muuss, Jim Bloom and Mike Schwartz. <acronym>BIND</acronym> maintenance was subsequently
|
||||
handled by Mike Karels and O. Kure.</para>
|
||||
<para><acronym>BIND</acronym> versions 4.9 and 4.9.1 were released by Digital Equipment
|
||||
Corporation (now Compaq Computer Corporation). Paul Vixie, then
|
||||
a DEC employee, became <acronym>BIND</acronym>'s primary caretaker. Paul was assisted
|
||||
by Phil Almquist, Robert Elz, Alan Barrett, Paul Albitz, Bryan Beecher, Andrew
|
||||
Partan, Andy Cherenson, Tom Limoncelli, Berthold Paffrath, Fuat
|
||||
Baran, Anant Kumar, Art Harkin, Win Treese, Don Lewis, Christophe
|
||||
Wolfhugel, and others.</para>
|
||||
<para><acronym>BIND</acronym> Version 4.9.2 was sponsored by Vixie Enterprises. Paul
|
||||
Vixie became <acronym>BIND</acronym>'s principal architect/programmer.</para>
|
||||
<para><acronym>BIND</acronym> versions from 4.9.3 onward have been developed and maintained
|
||||
by the Internet Software Consortium with support being provided
|
||||
by ISC's sponsors. As co-architects/programmers, Bob Halley and
|
||||
Paul Vixie released the first production-ready version of <acronym>BIND</acronym> version
|
||||
8 in May 1997.</para>
|
||||
<para><acronym>BIND</acronym> development work is made possible today by the sponsorship
|
||||
of several corporations, and by the tireless work efforts of numerous
|
||||
individuals.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title id="historical_dns_information">Historical <acronym>DNS</acronym> Information</title>
|
||||
<sect2>
|
||||
<title id="classes_of_resource_records">Classes of Resource Records</title>
|
||||
<sect3>
|
||||
<title>HS = hesiod</title>
|
||||
<para>The <optional>hesiod</optional> class is an information service
|
||||
developed by MIT's Project Athena. It is used to share information
|
||||
about various systems databases, such as users, groups, printers
|
||||
and so on. The keyword <command>hs</command> is a synonym for
|
||||
hesiod.</para>
|
||||
</sect3>
|
||||
<sect3>
|
||||
<title>CH = chaos</title>
|
||||
<para>The <command>chaos</command> class is used to specify zone
|
||||
data for the MIT-developed CHAOSnet, a LAN protocol created in the
|
||||
mid-1970s.</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>General <acronym>DNS</acronym> Reference Information</title>
|
||||
<sect2>
|
||||
<title>IPv6 addresses (A6)</title>
|
||||
<para>IPv6 addresses are 128-bit identifiers for interfaces and
|
||||
sets of interfaces which were introduced in the <acronym>DNS</acronym> to facilitate
|
||||
scalable Internet routing. There are three types of addresses: <emphasis>Unicast</emphasis>,
|
||||
an identifier for a single interface; <emphasis>Anycast</emphasis>,
|
||||
an identifier for a set of interfaces; and <emphasis>Multicast</emphasis>,
|
||||
an identifier for a set of interfaces. Here we describe the global
|
||||
Unicast address scheme. For more information, see RFC 2374.</para>
|
||||
<para>The aggregatable global Unicast address format is as follows:</para>
|
||||
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "6"
|
||||
colsep = "0" rowsep = "0" tgroupstyle = "1Level-table">
|
||||
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.477in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "0.501in"/>
|
||||
<colspec colname = "3" colnum = "3" colsep = "0" colwidth = "0.523in"/>
|
||||
<colspec colname = "4" colnum = "4" colsep = "0" colwidth = "0.731in"/>
|
||||
<colspec colname = "5" colnum = "5" colsep = "0" colwidth = "1.339in"/>
|
||||
<colspec colname = "6" colnum = "6" colsep = "0" colwidth = "2.529in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>3</para></entry>
|
||||
<entry colname = "2" colsep = "1" rowsep = "1"><para>13</para></entry>
|
||||
<entry colname = "3" colsep = "1" rowsep = "1"><para>8</para></entry>
|
||||
<entry colname = "4" colsep = "1" rowsep = "1"><para>24</para></entry>
|
||||
<entry colname = "5" colsep = "1" rowsep = "1"><para>16</para></entry>
|
||||
<entry colname = "6" rowsep = "1"><para>64 bits</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1"><para>FP</para></entry>
|
||||
<entry colname = "2" colsep = "1"><para>TLA ID</para></entry>
|
||||
<entry colname = "3" colsep = "1"><para>RES</para></entry>
|
||||
<entry colname = "4" colsep = "1"><para>NLA ID</para></entry>
|
||||
<entry colname = "5" colsep = "1"><para>SLA ID</para></entry>
|
||||
<entry colname = "6"><para>Interface ID</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry nameend = "4" namest = "1"><para><------ Public Topology
|
||||
------></para></entry>
|
||||
<entry colname = "5"><para></para></entry>
|
||||
<entry colname = "6"><para></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para></para></entry>
|
||||
<entry colname = "2"><para></para></entry>
|
||||
<entry colname = "3"><para></para></entry>
|
||||
<entry colname = "4"><para></para></entry>
|
||||
<entry colname = "5"><para><-Site Topology-></para></entry>
|
||||
<entry colname = "6"><para></para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para></para></entry>
|
||||
<entry colname = "2"><para></para></entry>
|
||||
<entry colname = "3"><para></para></entry>
|
||||
<entry colname = "4"><para></para></entry>
|
||||
<entry colname = "5"><para></para></entry>
|
||||
<entry colname = "6"><para><------ Interface Identifier ------></para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup></informaltable>
|
||||
<para>Where
|
||||
<informaltable colsep = "0" rowsep = "0"><tgroup
|
||||
cols = "3" colsep = "0" rowsep = "0" tgroupstyle = "2Level-table">
|
||||
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.375in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "0.250in"/>
|
||||
<colspec colname = "3" colnum = "3" colsep = "0" colwidth = "3.500in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para>FP</para></entry>
|
||||
<entry colname = "2"><para>=</para></entry>
|
||||
<entry colname = "3"><para>Format Prefix (001)</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para>TLA ID</para></entry>
|
||||
<entry colname = "2"><para>=</para></entry>
|
||||
<entry colname = "3"><para>Top-Level Aggregation Identifier</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para>RES</para></entry>
|
||||
<entry colname = "2"><para>=</para></entry>
|
||||
<entry colname = "3"><para>Reserved for future use</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para>NLA ID</para></entry>
|
||||
<entry colname = "2"><para>=</para></entry>
|
||||
<entry colname = "3"><para>Next-Level Aggregation Identifier</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para>SLA ID</para></entry>
|
||||
<entry colname = "2"><para>=</para></entry>
|
||||
<entry colname = "3"><para>Site-Level Aggregation Identifier</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1"><para>INTERFACE ID</para></entry>
|
||||
<entry colname = "2"><para>=</para></entry>
|
||||
<entry colname = "3"><para>Interface Identifier</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup></informaltable></para>
|
||||
<para>The <emphasis>Public Topology</emphasis> is provided by the
|
||||
upstream provider or ISP, and (roughly) corresponds to the IPv4 <emphasis>network</emphasis> section
|
||||
of the address range. The <emphasis>Site Topology</emphasis> is
|
||||
where you can subnet this space, much the same as subnetting an
|
||||
IPv4 /16 network into /24 subnets. The <emphasis>Interface Identifier</emphasis> is
|
||||
the address of an individual interface on a given network. (With
|
||||
IPv6, addresses belong to interfaces rather than machines.)</para>
|
||||
<para>The subnetting capability of IPv6 is much more flexible than
|
||||
that of IPv4: subnetting can now be carried out on bit boundaries,
|
||||
in much the same way as Classless InterDomain Routing (CIDR).</para>
|
||||
<para>The internal structure of the Public Topology for an A6 global
|
||||
unicast address consists of:</para>
|
||||
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "4"
|
||||
colsep = "0" rowsep = "0" tgroupstyle = "2Level-table">
|
||||
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.506in"/>
|
||||
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "0.662in"/>
|
||||
<colspec colname = "3" colnum = "3" colsep = "0" colwidth = "0.556in"/>
|
||||
<colspec colname = "4" colnum = "4" colsep = "0" colwidth = "0.825in"/>
|
||||
<tbody>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1" rowsep = "1"><para>3</para></entry>
|
||||
<entry colname = "2" colsep = "1" rowsep = "1"><para>13</para></entry>
|
||||
<entry colname = "3" colsep = "1" rowsep = "1"><para>8</para></entry>
|
||||
<entry colname = "4" rowsep = "1"><para>24</para></entry>
|
||||
</row>
|
||||
<row rowsep = "0">
|
||||
<entry colname = "1" colsep = "1"><para>FP</para></entry>
|
||||
<entry colname = "2" colsep = "1"><para>TLA ID</para></entry>
|
||||
<entry colname = "3" colsep = "1"><para>RES</para></entry>
|
||||
<entry colname = "4"><para>NLA ID</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup></informaltable>
|
||||
<para>A 3 bit FP (Format Prefix) of 001 indicates this is a global
|
||||
Unicast address. FP lengths for other types of addresses may vary.</para>
|
||||
<para>13 TLA (Top Level Aggregator) bits give the prefix of your
|
||||
top-level IP backbone carrier.</para>
|
||||
<para>8 Reserved bits</para>
|
||||
<para>24 bits for Next Level Aggregators. This allows organizations
|
||||
with a TLA to hand out portions of their IP space to client organizations,
|
||||
so that the client can then split up the network further by filling
|
||||
in more NLA bits, and hand out IPv6 prefixes to their clients, and
|
||||
so forth.</para>
|
||||
<para>There is no particular structure for the Site topology section.
|
||||
Organizations can allocate these bits in any way they desire.</para>
|
||||
<para>The Interface Identifier must be unique on that network. On
|
||||
ethernet networks, one way to ensure this is to set the address
|
||||
to the first three bytes of the hardware address, "FFFE", then the
|
||||
last three bytes of the hardware address. The lowest significant
|
||||
bit of the first byte should then be complemented. Addresses are
|
||||
written as 32-bit blocks separated with a colon, and leading zeros
|
||||
of a block may be omitted, for example:</para>
|
||||
<para><command>3ffe:8050:201:9:a00:20ff:fe81:2b32</command></para>
|
||||
<para>IPv6 address specifications are likely to contain long strings
|
||||
of zeros, so the architects have included a shorthand for specifying
|
||||
them. The double colon (`::') indicates the longest possible string
|
||||
of zeros that can fit, and can be used only once in an address.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title id="Bibliography">Bibliography (and Suggested Reading)</title>
|
||||
<sect2>
|
||||
<title id="RFCs">Request for Comments (RFCs)</title>
|
||||
<para>Specification documents for the Internet protocol suite, including
|
||||
the <acronym>DNS</acronym>, are published as part of the Request for Comments (RFCs)
|
||||
series of technical notes. The standards themselves are defined
|
||||
by the Internet Engineering Task Force (IETF) and the Internet Engineering
|
||||
Steering Group (IESG). RFCs can be obtained online via FTP at
|
||||
<ulink url="ftp://www.isi.edu/in-notes/">ftp://www.isi.edu/in-notes/RFC<replaceable>xxx</replaceable>.txt</ulink> (where <replaceable>xxx</replaceable> is
|
||||
the number of the RFC). RFCs are also available via the Web at <ulink
|
||||
url="http://www.ietf.org/rfc/">http://www.ietf.org/rfc/</ulink>.</para>
|
||||
<bibliography>
|
||||
<bibliodiv>
|
||||
<!-- one of (BIBLIOENTRY BIBLIOMIXED) -->
|
||||
<title>Standards</title>
|
||||
<biblioentry>
|
||||
<abbrev>RFC974</abbrev>
|
||||
<author>
|
||||
<surname>Partridge</surname>
|
||||
<firstname>C.</firstname>
|
||||
</author>
|
||||
<title>Mail Routing and the Domain System</title>
|
||||
<pubdate>January 1986</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1034</abbrev>
|
||||
<author>
|
||||
<surname>Mockapetris</surname>
|
||||
<firstname>P.V.</firstname>
|
||||
</author>
|
||||
<title>Domain Names — Concepts and Facilities</title>
|
||||
<pubdate>November 1987</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1035</abbrev>
|
||||
<author>
|
||||
<surname>Mockapetris</surname>
|
||||
<firstname>P. V.</firstname>
|
||||
</author> <title>Domain Names — Implementation and
|
||||
Specification</title>
|
||||
<pubdate>November 1987</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title id="proposed_standards">Proposed Standards</title>
|
||||
<!-- one of (BIBLIOENTRY BIBLIOMIXED) -->
|
||||
<biblioentry>
|
||||
<abbrev>RFC2181</abbrev>
|
||||
<author>
|
||||
<surname>Elz</surname>
|
||||
<firstname>R., R. Bush</firstname>
|
||||
</author>
|
||||
<title>Clarifications to the <acronym>DNS</acronym> Specification</title>
|
||||
<pubdate>July 1997</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2308</abbrev>
|
||||
<author>
|
||||
<surname>Andrews</surname>
|
||||
<firstname>M.</firstname>
|
||||
</author>
|
||||
<title>Negative Caching of <acronym>DNS</acronym> Queries</title>
|
||||
<pubdate>March 1998</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1995</abbrev>
|
||||
<author>
|
||||
<surname>Ohta</surname>
|
||||
<firstname>M.</firstname>
|
||||
</author>
|
||||
<title>Incremental Zone Transfer in <acronym>DNS</acronym></title>
|
||||
<pubdate>August 1996</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1996</abbrev>
|
||||
<author>
|
||||
<surname>Vixie</surname>
|
||||
<firstname>P.</firstname>
|
||||
</author>
|
||||
<title>A Mechanism for Prompt Notification of Zone Changes</title>
|
||||
<pubdate>August 1996</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2136</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Vixie</surname>
|
||||
<firstname>P.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>S.</firstname>
|
||||
<surname>Thomson</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Y.</firstname>
|
||||
<surname>Rekhter</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>J.</firstname>
|
||||
<surname>Bound</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Dynamic Updates in the Domain Name System</title>
|
||||
<pubdate>April 1997</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2845</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Vixie</surname>
|
||||
<firstname>P.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>O.</firstname>
|
||||
<surname>Gudmundsson</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>D.</firstname>
|
||||
<surname>Eastlake</surname>
|
||||
<lineage>3rd</lineage></author>
|
||||
<author>
|
||||
<firstname>B.</firstname>
|
||||
<surname>Wellington</surname>
|
||||
</author></authorgroup>
|
||||
<title>Secret Key Transaction Authentication for <acronym>DNS</acronym> (TSIG)</title>
|
||||
<pubdate>May 2000</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title>Proposed Standards Still Under Development</title>
|
||||
<note>
|
||||
<para><emphasis>Note:</emphasis> the following list of
|
||||
RFCs are undergoing major revision by the IETF.</para>
|
||||
</note>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1886</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Thomson</surname>
|
||||
<firstname>S.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>C.</firstname>
|
||||
<surname>Huitema</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title><acronym>DNS</acronym> Extensions to support IP version 6</title>
|
||||
<pubdate>December 1995</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2065</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Eastlake</surname>
|
||||
<lineage>3rd</lineage>
|
||||
<firstname>D.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>C.</firstname>
|
||||
<surname>Kaufman</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Domain Name System Security Extensions</title>
|
||||
<pubdate>January 1997</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2137</abbrev>
|
||||
<author>
|
||||
<surname>Eastlake</surname>
|
||||
<lineage>3rd</lineage>
|
||||
<firstname>D.</firstname>
|
||||
</author>
|
||||
<title>Secure Domain Name System Dynamic Update</title>
|
||||
<pubdate>April 1997</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title>Other Important RFCs About <acronym>DNS</acronym> Implementation</title>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1535</abbrev>
|
||||
<author>
|
||||
<surname>Gavron</surname>
|
||||
<firstname>E.</firstname>
|
||||
</author>
|
||||
<title>A Security Problem and Proposed Correction With Widely Deployed <acronym>DNS</acronym> Software.</title>
|
||||
<pubdate>October 1993</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1536</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Kumar</surname>
|
||||
<firstname>A.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>J.</firstname>
|
||||
<surname>Postel</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>C.</firstname>
|
||||
<surname>Neuman</surname></author>
|
||||
<author>
|
||||
<firstname>P.</firstname>
|
||||
<surname>Danzig</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>S.</firstname>
|
||||
<surname>Miller</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Common <acronym>DNS</acronym> Implementation Errors and Suggested Fixes</title>
|
||||
<pubdate>October 1993</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1982</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Elz</surname>
|
||||
<firstname>R.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>R.</firstname>
|
||||
<surname>Bush</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Serial Number Arithmetic</title>
|
||||
<pubdate>August 1996</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title>Resource Record Types</title>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1183</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Everhart</surname>
|
||||
<firstname>C.F.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>L. A.</firstname>
|
||||
<surname>Mamakos</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>R.</firstname>
|
||||
<surname>Ullmann</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>P.</firstname>
|
||||
<surname>Mockapetris</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>New <acronym>DNS</acronym> RR Definitions</title>
|
||||
<pubdate>October 1990</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1706</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Manning</surname>
|
||||
<firstname>B.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>R.</firstname>
|
||||
<surname>Colella</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title><acronym>DNS</acronym> NSAP Resource Records</title>
|
||||
<pubdate>October 1994</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2168</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Daniel</surname>
|
||||
<firstname>R.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>M.</firstname>
|
||||
<surname>Mealling</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Resolution of Uniform Resource Identifiers using
|
||||
the Domain Name System</title>
|
||||
<pubdate>June 1997</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1876</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Davis</surname>
|
||||
<firstname>C.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>P.</firstname>
|
||||
<surname>Vixie</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>T.</firstname>
|
||||
<firstname>Goodwin</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>I.</firstname>
|
||||
<surname>Dickinson</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>A Means for Expressing Location Information in the Domain
|
||||
Name System</title>
|
||||
<pubdate>January 1996</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2052</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Gulbrandsen</surname>
|
||||
<firstname>A.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>P.</firstname>
|
||||
<surname>Vixie</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>A <acronym>DNS</acronym> RR for Specifying the Location of
|
||||
Services.</title>
|
||||
<pubdate>October 1996</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2163</abbrev>
|
||||
<author>
|
||||
<surname>Allocchio</surname>
|
||||
<firstname>A.</firstname>
|
||||
</author>
|
||||
<title>Using the Internet <acronym>DNS</acronym> to Distribute MIXER
|
||||
Conformant Global Address Mapping</title>
|
||||
<pubdate>January 1998</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2230</abbrev>
|
||||
<author>
|
||||
<surname>Atkinson</surname>
|
||||
<firstname>R.</firstname>
|
||||
</author>
|
||||
<title>Key Exchange Delegation Record for the <acronym>DNS</acronym></title>
|
||||
<pubdate>October 1997</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title><acronym>DNS</acronym> and the Internet</title>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1101</abbrev>
|
||||
<author>
|
||||
<surname>Mockapetris</surname>
|
||||
<firstname>P. V.</firstname>
|
||||
</author>
|
||||
<title><acronym>DNS</acronym> Encoding of Network Names and Other Types</title>
|
||||
<pubdate>April 1989</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1123</abbrev>
|
||||
<author>
|
||||
<surname>Braden</surname>
|
||||
<surname>R.</surname>
|
||||
</author>
|
||||
<title>Requirements for Internet Hosts - Application and Support</title>
|
||||
<pubdate>October 1989</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1591</abbrev>
|
||||
<author>
|
||||
<surname>Postel</surname>
|
||||
<firstname>J.</firstname></author>
|
||||
<title>Domain Name System Structure and Delegation</title>
|
||||
<pubdate>March 1994</pubdate></biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2317</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Eidnes</surname>
|
||||
<firstname>H.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>G.</firstname>
|
||||
<surname>de Groot</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>P.</firstname>
|
||||
<surname>Vixie</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Classless IN-ADDR.ARPA Delegation</title>
|
||||
<pubdate>March 1998</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title><acronym>DNS</acronym> Operations</title>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1537</abbrev>
|
||||
<author>
|
||||
<surname>Beertema</surname>
|
||||
<firstname>P.</firstname>
|
||||
</author>
|
||||
<title>Common <acronym>DNS</acronym> Data File Configuration Errors</title>
|
||||
<pubdate>October 1993</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1912</abbrev>
|
||||
<author>
|
||||
<surname>Barr</surname>
|
||||
<firstname>D.</firstname>
|
||||
</author>
|
||||
<title>Common <acronym>DNS</acronym> Operational and Configuration Errors</title>
|
||||
<pubdate>February 1996</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1912</abbrev>
|
||||
<author>
|
||||
<surname>Barr</surname>
|
||||
<firstname>D.</firstname>
|
||||
</author>
|
||||
<title>Common <acronym>DNS</acronym> Operational and Configuration Errors</title>
|
||||
<pubdate>February 1996</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2010</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Manning</surname>
|
||||
<firstname>B.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>P.</firstname>
|
||||
<surname>Vixie</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Operational Criteria for Root Name Servers.</title>
|
||||
<pubdate>October 1996</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2219</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Hamilton</surname>
|
||||
<firstname>M.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>R.</firstname>
|
||||
<surname>Wright</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Use of <acronym>DNS</acronym> Aliases for Network Services.</title>
|
||||
<pubdate>October 1997</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title>Other <acronym>DNS</acronym>-related RFCs</title>
|
||||
<note>
|
||||
<para>Note: the following list of RFCs, although
|
||||
<acronym>DNS</acronym>-related, are not concerned with implementing software.</para>
|
||||
</note>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1464</abbrev>
|
||||
<author>
|
||||
<surname>Rosenbaum</surname>
|
||||
<firstname>R.</firstname>
|
||||
</author>
|
||||
<title>Using the Domain Name System To Store Arbitrary String Attributes</title>
|
||||
<pubdate>May 1993</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1713</abbrev>
|
||||
<author>
|
||||
<surname>Romao</surname>
|
||||
<firstname>A.</firstname>
|
||||
</author>
|
||||
<title>Tools for <acronym>DNS</acronym> Debugging</title>
|
||||
<pubdate>November 1994</pubdate></biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1794</abbrev>
|
||||
<author>
|
||||
<surname>Brisco</surname>
|
||||
<firstname>T.</firstname>
|
||||
</author>
|
||||
<title><acronym>DNS</acronym> Support for Load Balancing</title>
|
||||
<pubdate>April 1995</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2240</abbrev>
|
||||
<author>
|
||||
<surname>Vaughan</surname>
|
||||
<firstname>O.</firstname></author>
|
||||
<title>A Legal Basis for Domain Name Allocation</title>
|
||||
<pubdate>November 1997</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2345</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Klensin</surname>
|
||||
<firstname>J.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>T.</firstname>
|
||||
<surname>Wolf</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>G.</firstname>
|
||||
<surname>Oglesby</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title>Domain Names and Company Name Retrieval</title>
|
||||
<pubdate>May 1998</pubdate>
|
||||
</biblioentry>
|
||||
<biblioentry>
|
||||
<abbrev>RFC2352</abbrev>
|
||||
<author>
|
||||
<surname>Vaughan</surname>
|
||||
<firstname>O.</firstname>
|
||||
</author>
|
||||
<title>A Convention For Using Legal Names as Domain Names</title>
|
||||
<pubdate>May 1998</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
<bibliodiv>
|
||||
<title>Obsolete and Unimplemented Experimental RRs</title>
|
||||
<biblioentry>
|
||||
<abbrev>RFC1712</abbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Farrell</surname>
|
||||
<firstname>C.</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>M.</firstname>
|
||||
<surname>Schulze</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>S.</firstname>
|
||||
<surname>Pleitner</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>D.</firstname>
|
||||
<surname>Baldoni</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title><acronym>DNS</acronym> Encoding of Geographical
|
||||
Location</title>
|
||||
<pubdate>November 1994</pubdate>
|
||||
</biblioentry>
|
||||
</bibliodiv>
|
||||
</bibliography>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title id="Internet_Drafts">Internet Drafts</title>
|
||||
<para>Internet Drafts (IDs) are rough-draft working documents of
|
||||
the Internet Engineering Task Force. They are, in essence, RFCs
|
||||
in the preliminary stages of development. Implementors are cautioned not
|
||||
to regard IDs as archival, and they should not be quoted or cited
|
||||
in any formal documents unless accompanied by the disclaimer that
|
||||
they are "works in progress." IDs have a lifespan of six months
|
||||
after which they are deleted unless updated by their authors.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>Other Documents About <acronym>BIND</acronym></title>
|
||||
<para></para>
|
||||
<bibliography>
|
||||
<biblioentry>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<surname>Albitz</surname>
|
||||
<firstname>Paul</firstname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Cricket</firstname>
|
||||
<surname>Liu</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<title><acronym>DNS</acronym> and <acronym>BIND</acronym></title>
|
||||
<copyright>
|
||||
<year>1998</year>
|
||||
<holder>Sebastopol, CA: O'Reilly and Associates</holder>
|
||||
</copyright>
|
||||
</biblioentry>
|
||||
</bibliography>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</appendix>
|
||||
File diff suppressed because it is too large
Load diff
145
doc/arm/README-SGML
Normal file
145
doc/arm/README-SGML
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
The BIND v9 ARM master document is now kept in DocBook XML format.
|
||||
|
||||
The entire ARM is in the single file:
|
||||
|
||||
Bv9ARM-book.xml
|
||||
|
||||
All of the other documents - HTML, PDF, etc - are generated from this
|
||||
master source.
|
||||
|
||||
This file attempts to describe what tools are necessary for the
|
||||
maintenance of this document as well as the generation of the
|
||||
alternate formats of this document.
|
||||
|
||||
This file will also spend a very little time describing the XML and
|
||||
SGML headers so you can understand a bit what you may need to do to be
|
||||
able to work with this document in any fashion other than simply
|
||||
editing it.
|
||||
|
||||
We will spend almost no time on the actual tags and how to write an
|
||||
XML DocBook compliant document. If you are at all familiar with SGML
|
||||
or HTML it will be very evident. You only need to know what the tags
|
||||
are and how to use them. You can find a good resource either for this
|
||||
either online or in printed form:
|
||||
|
||||
DocBook: The Definitive Guide
|
||||
By Norman Walsh and Leonard Muellner
|
||||
ISBN: 156592-580-7
|
||||
1st Edition, October 1999
|
||||
Copyright (C) 1999 by O'Reilly & Associates, Inc. All rights reserved.
|
||||
|
||||
The book is available online in HTML format:
|
||||
|
||||
http://docbook.org/
|
||||
|
||||
and buried in:
|
||||
|
||||
http://www.nwalsh.com/docbook/defguide/index.html
|
||||
|
||||
A lot of useful stuff is at NWalsh's site in general. You may also
|
||||
want to look at:
|
||||
|
||||
http://www.xml.com/
|
||||
|
||||
The BIND v9 ARM is based on the XML 4.0 DocBook DTD. Every XML and
|
||||
SGML document begins with a prefix that tells where to find the file
|
||||
that describes the meaning and structure of the tags used in the rest
|
||||
of the document.
|
||||
|
||||
For our XML DocBook 4.0 based document this prefix looks like this:
|
||||
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.0//EN"
|
||||
"/usr/local/share/xml/dtd/docbook/docbookx.dtd">
|
||||
|
||||
This "DOCTYPE" statement has three parts, of which we are only using
|
||||
two:
|
||||
|
||||
o The highest level term that represents this document (in this case
|
||||
it is "book"
|
||||
|
||||
o The identifier that tells us which DTD to use. This identifier has
|
||||
two parts, the "Formal Public Identifier" (or FPI) and the system
|
||||
identifier. In SGML you can have either a FPI or a SYSTEM identifier
|
||||
but you have to have at least one of them. In XML you have to have a
|
||||
SYSTEM identifier.
|
||||
|
||||
FP & SYSTEM identifiers - These are names/lookups for the actual
|
||||
DTD. The FPI is a globally unique name that should, on a properly
|
||||
configured system, tell you exactly what DTD to use. The SYSTEM
|
||||
identifier gives an absolute location for the DTD. In XML these are
|
||||
supposed to be properly formatted URL's.
|
||||
|
||||
SGML has these things called "catalogs" that are files that map FPI's
|
||||
in to actual files. A "catalog" can also be used to remap a SYSTEM
|
||||
identifier so you can say something like: "http://www.oasis.org/foo"
|
||||
is actually "/usr/local/share/xml/foo.dtd"
|
||||
|
||||
When you use various SGML/XML tools they need to be configured to look
|
||||
at the same "catalog" files so that as you move from tool to tool they
|
||||
all refer to the same DTD for the same document.
|
||||
|
||||
We will be spending most of our configuration time making sure our
|
||||
tools use the same "catalog" files and that we have the same DTD's
|
||||
installed on our machines. XML's requirement of the SYSTEM identifier
|
||||
over the FPI will probably lead to more problems as it does not
|
||||
guarantee that everyone is using the same DTD.
|
||||
|
||||
I did my initial work with the "sgmltools" the XML 4.0 DocBook DTD and
|
||||
"jade" or "openjade."
|
||||
|
||||
HOW TO VALIDATE A DOCUMENT:
|
||||
|
||||
I use the sgmltools "nsgmls" document validator. Since we are using
|
||||
XML we need to use the XML declarations, which are installed as part
|
||||
of the modular DSSL style sheets:
|
||||
|
||||
nsgmls -sv /usr/local/share/sgml/docbook/dsssl/modular/dtds/decls/xml.dcl \
|
||||
Bv9ARM-book.xml
|
||||
|
||||
HOW TO RENDER A DOCUMENT AS HTML or TeX:
|
||||
|
||||
o Generate html doc with:
|
||||
|
||||
jade -d /usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl \
|
||||
-t sgml \
|
||||
-v /usr/local/share/sgml/docbook/dsssl/modular/dtds/decls/xml.dcl \
|
||||
Bv9ARM-book.xml
|
||||
|
||||
o Generate TeX documentation:
|
||||
|
||||
jade -d /usr/local/share/sgml/docbook/dsssl/modular/print/docbook.dsl \
|
||||
-t tex \
|
||||
-v /usr/local/share/sgml/docbook/dsssl/modular/dtds/decls/xml.dcl \
|
||||
Bv9ARM-book.xml
|
||||
|
||||
You can see that I am using a DSSSL style sheet for DocBook. Actually
|
||||
two different ones - one for rendering html, and one for 'print'
|
||||
media.
|
||||
|
||||
To use the start of a nominum DSSSL style instead of the default one
|
||||
(all it does is change the chunking to the chapter level and makes the
|
||||
files end with ".html" instead of ".htm" so far) replace the:
|
||||
|
||||
-d /usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl
|
||||
|
||||
with
|
||||
|
||||
-d ./nominum-docbook-html.dsl
|
||||
|
||||
This style sheet will attempt to reference the one above.
|
||||
|
||||
I am currently working on fixing these up so that it works the same on
|
||||
our various systems. The main trick is knowing which DTD's and DSSSL
|
||||
stylesheets you have installed, installing the right ones, and
|
||||
configuring a CATALOG that refers to them in the same way. We will
|
||||
probably end up putting our CATALOG's in the same place and then we
|
||||
should be able to generate and validate our documents with a minimal
|
||||
number of command line arguments.
|
||||
|
||||
When running these commands you will get a lot of messages about a
|
||||
bunch of general entities not being defined and having no default
|
||||
entity. You can ignore those for now.
|
||||
|
||||
Also with the style sheets we have and jade as it is you will get
|
||||
messages about "xref to title" being unsupported. You can ignore these
|
||||
for now as well.
|
||||
100
doc/arm/nominum-docbook-html.dsl
Normal file
100
doc/arm/nominum-docbook-html.dsl
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
|
||||
<!ENTITY dbstyle SYSTEM "/usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl" CDATA DSSSL>
|
||||
]>
|
||||
|
||||
<style-sheet>
|
||||
<style-specification use="docbook">
|
||||
<style-specification-body>
|
||||
|
||||
<!-- ;; your stuff goes here... -->
|
||||
(define %section-autolabel%
|
||||
;; REFENTRY section-autolabel
|
||||
;; PURP Are sections enumerated?
|
||||
;; DESC
|
||||
;; If true, unlabeled sections will be enumerated.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define %html-ext%
|
||||
;; REFENTRY html-ext
|
||||
;; PURP Default extension for HTML output files
|
||||
;; DESC
|
||||
;; The default extension for HTML output files.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
".html")
|
||||
|
||||
(define nochunks
|
||||
;; REFENTRY nochunks
|
||||
;; PURP Suppress chunking of output pages
|
||||
;; DESC
|
||||
;; If true, the entire source document is formatted as a single HTML
|
||||
;; document and output on stdout.
|
||||
;; (This option can conveniently be set with '-V nochunks' on the
|
||||
;; Jade command line).
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#f)
|
||||
|
||||
(define rootchunk
|
||||
;; REFENTRY rootchunk
|
||||
;; PURP Make a chunk for the root element when nochunks is used
|
||||
;; DESC
|
||||
;; If true, a chunk will be created for the root element, even though
|
||||
;; nochunks is specified. This option has no effect if nochunks is not
|
||||
;; true.
|
||||
;; (This option can conveniently be set with '-V rootchunk' on the
|
||||
;; Jade command line).
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define html-index
|
||||
;; REFENTRY html-index
|
||||
;; PURP HTML indexing?
|
||||
;; DESC
|
||||
;; Turns on HTML indexing. If true, then index data will be written
|
||||
;; to the file defined by 'html-index-filename'. This data can be
|
||||
;; collated and turned into a DocBook index with bin/collateindex.pl.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define html-manifest
|
||||
;; REFENTRY html-manifest
|
||||
;; PURP Write a manifest?
|
||||
;; DESC
|
||||
;; If not '#f' then the list of HTML files created by the stylesheet
|
||||
;; will be written to the file named by 'html-manifest-filename'.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define (chunk-element-list)
|
||||
(list (normalize "preface")
|
||||
(normalize "chapter")
|
||||
(normalize "appendix")
|
||||
(normalize "article")
|
||||
(normalize "glossary")
|
||||
(normalize "bibliography")
|
||||
(normalize "index")
|
||||
(normalize "colophon")
|
||||
(normalize "setindex")
|
||||
(normalize "reference")
|
||||
(normalize "refentry")
|
||||
(normalize "part")
|
||||
(normalize "book") ;; just in case nothing else matches...
|
||||
(normalize "set") ;; sets are definitely chunks...
|
||||
))
|
||||
|
||||
</style-specification-body>
|
||||
</style-specification>
|
||||
<external-specification id="docbook" document="dbstyle">
|
||||
</style-sheet>
|
||||
100
doc/arm/nominum-docbook-html.dsl.in
Normal file
100
doc/arm/nominum-docbook-html.dsl.in
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
|
||||
<!ENTITY dbstyle SYSTEM "/usr/local/share/sgml/docbook/dsssl/modular/html/docbook.dsl" CDATA DSSSL>
|
||||
]>
|
||||
|
||||
<style-sheet>
|
||||
<style-specification use="docbook">
|
||||
<style-specification-body>
|
||||
|
||||
<!-- ;; your stuff goes here... -->
|
||||
(define %section-autolabel%
|
||||
;; REFENTRY section-autolabel
|
||||
;; PURP Are sections enumerated?
|
||||
;; DESC
|
||||
;; If true, unlabeled sections will be enumerated.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define %html-ext%
|
||||
;; REFENTRY html-ext
|
||||
;; PURP Default extension for HTML output files
|
||||
;; DESC
|
||||
;; The default extension for HTML output files.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
".html")
|
||||
|
||||
(define nochunks
|
||||
;; REFENTRY nochunks
|
||||
;; PURP Suppress chunking of output pages
|
||||
;; DESC
|
||||
;; If true, the entire source document is formatted as a single HTML
|
||||
;; document and output on stdout.
|
||||
;; (This option can conveniently be set with '-V nochunks' on the
|
||||
;; Jade command line).
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#f)
|
||||
|
||||
(define rootchunk
|
||||
;; REFENTRY rootchunk
|
||||
;; PURP Make a chunk for the root element when nochunks is used
|
||||
;; DESC
|
||||
;; If true, a chunk will be created for the root element, even though
|
||||
;; nochunks is specified. This option has no effect if nochunks is not
|
||||
;; true.
|
||||
;; (This option can conveniently be set with '-V rootchunk' on the
|
||||
;; Jade command line).
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define html-index
|
||||
;; REFENTRY html-index
|
||||
;; PURP HTML indexing?
|
||||
;; DESC
|
||||
;; Turns on HTML indexing. If true, then index data will be written
|
||||
;; to the file defined by 'html-index-filename'. This data can be
|
||||
;; collated and turned into a DocBook index with bin/collateindex.pl.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define html-manifest
|
||||
;; REFENTRY html-manifest
|
||||
;; PURP Write a manifest?
|
||||
;; DESC
|
||||
;; If not '#f' then the list of HTML files created by the stylesheet
|
||||
;; will be written to the file named by 'html-manifest-filename'.
|
||||
;; /DESC
|
||||
;; AUTHOR N/A
|
||||
;; /REFENTRY
|
||||
#t)
|
||||
|
||||
(define (chunk-element-list)
|
||||
(list (normalize "preface")
|
||||
(normalize "chapter")
|
||||
(normalize "appendix")
|
||||
(normalize "article")
|
||||
(normalize "glossary")
|
||||
(normalize "bibliography")
|
||||
(normalize "index")
|
||||
(normalize "colophon")
|
||||
(normalize "setindex")
|
||||
(normalize "reference")
|
||||
(normalize "refentry")
|
||||
(normalize "part")
|
||||
(normalize "book") ;; just in case nothing else matches...
|
||||
(normalize "set") ;; sets are definitely chunks...
|
||||
))
|
||||
|
||||
</style-specification-body>
|
||||
</style-specification>
|
||||
<external-specification id="docbook" document="dbstyle">
|
||||
</style-sheet>
|
||||
Loading…
Reference in a new issue