These files are based on the BIND v9 ARM in FrameMaker. After these files are edited they will become the master source for the BIND v9 ARM. Still need to include style sheets and the actual XML DocBook DTD for those who do not have it.
2741 lines
145 KiB
XML
2741 lines
145 KiB
XML
<chapter><title><acronym>BIND</acronym> 9 Configuration Reference</title>
|
|
<para><acronym>BIND</acronym> 9 configuration is broadly similar to <acronym>BIND</acronym> 8.x; however,
|
|
there are a few new areas of configuration, such as views. <acronym>BIND</acronym>
|
|
8.x configuration files should work with few alterations in <acronym>BIND</acronym>
|
|
9, although more complex configurations should be reviewed to check
|
|
if they can be more efficiently implemented using the new features
|
|
found in <acronym>BIND</acronym> 9.</para>
|
|
<para><acronym>BIND</acronym> 4 configuration files can be converted to the new format
|
|
using the shell script
|
|
<filename>contrib/named-bootconf/named-bootconf.sh</filename>.</para>
|
|
<sect1><title id="configuration_file_elements">Configuration File Elements</title>
|
|
<para>Following is a list of elements used throughout the <acronym>BIND</acronym> configuration
|
|
file documentation:</para>
|
|
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "2Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.855in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.770in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>acl_name</varname></para></entry>
|
|
<entry colname = "2"><para>The name of an <varname>address_match_list</varname> as
|
|
defined by the <command>acl</command> statement.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>address_match_list</varname></para></entry>
|
|
<entry colname = "2"><para>A list of one or more <varname>ip_addr</varname><command>, </command><varname>ip_prefix</varname><command>, </command><varname>key_id</varname><command>, </command>or <varname>acl_name</varname> elements,
|
|
<xref linkend="address_match_lists"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>domain_name</varname></para></entry>
|
|
<entry colname = "2"><para>A quoted string which will be used as
|
|
a DNS name, for example "<systemitem class="systemname">my.test.domain</systemitem>".</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>dotted_decimal</varname></para></entry>
|
|
<entry colname = "2"><para>One or more integers valued 0 through
|
|
255 separated only by dots (`.'), such as <command>123</command>, <command>45.67</command> or <command>89.123.45.67</command>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>ip4_addr</varname></para></entry>
|
|
<entry colname = "2"><para>An IPv4 address with exactly four elements
|
|
in <varname>dotted_decimal</varname> notation.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>ip6_addr</varname></para></entry>
|
|
<entry colname = "2"><para>An IPv6 address, such as <command>fe80::200:f8ff:fe01:9742</command>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>ip_addr</varname></para></entry>
|
|
<entry colname = "2"><para>An <varname>ip4_addr</varname> or<command> </command><varname>ip6_addr</varname>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>ip_port</varname></para></entry>
|
|
<entry colname = "2"><para>An IP port <varname>number</varname>.
|
|
<varname>number</varname> is limited to 0 through 65535, with values
|
|
below 1024 typically restricted to root-owned processes. In some
|
|
cases an asterisk (`*') character can be used as a placeholder to
|
|
select a random high-numbered port.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>ip_prefix</varname></para></entry>
|
|
<entry colname = "2"><para>An IP network specified as an <varname>ip_addr</varname>,
|
|
followed by a slash (`/') and then the number of bits in the netmask.
|
|
For example, <command>127/8</command> is the network <command>127.0.0.0</command> with
|
|
netmask <command>255.0.0.0</command> and <command>1.2.3.0/28</command> is
|
|
network <command>1.2.3.0</command> with netmask <command>255.255.255.240</command>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>key_id</varname></para></entry>
|
|
<entry colname = "2"><para>A <varname>domain_name</varname> representing
|
|
the name of a shared key, to be used for transaction security.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>key_list</varname></para></entry>
|
|
<entry colname = "2"><para>A list of one or more <varname>key_id</varname>s,
|
|
separated by semicolons and ending with a semicolon.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>number</varname></para></entry>
|
|
<entry colname = "2"><para>A non-negative integer with an entire
|
|
range limited by the range of a C language signed integer (2,147,483,647
|
|
on a machine with 32 bit integers). Its acceptable value might further
|
|
be limited by the context in which it is used.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>path_name</varname></para></entry>
|
|
<entry colname = "2"><para>A quoted string which will be used as
|
|
a pathname, such as <filename>zones/master/my.test.domain</filename>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>size_spec</varname></para></entry>
|
|
<entry colname = "2"><para>A number, the word <userinput>unlimited</userinput>,
|
|
or the word <userinput>default</userinput>.</para><para>The maximum
|
|
value of <varname>size_spec</varname> is that of unsigned long integers
|
|
on the machine. An <varname>unlimited</varname> <varname>size_spec</varname> requests unlimited
|
|
use, or the maximum available amount. A <varname>default size_spec</varname> uses
|
|
the limit that was in force when the server was started.</para><para>A <varname>number</varname> can
|
|
optionally be followed by a scaling factor: <userinput>K</userinput> or <userinput>k</userinput><command> </command>for
|
|
kilobytes, <userinput>M</userinput> or <userinput>m</userinput> for
|
|
megabytes, and <userinput>G</userinput> or <userinput>g</userinput> for gigabytes,
|
|
which scale by 1024, 1024*1024, and 1024*1024*1024 respectively.</para><para>Integer
|
|
storage overflow is currently silently ignored during conversion
|
|
of scaled values, resulting in values less than intended, possibly
|
|
even negative. Using <varname>unlimited</varname> is the best way
|
|
to safely set a really large number.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>yes_or_no</varname></para></entry>
|
|
<entry colname = "2"><para>Either <userinput>yes</userinput> or <userinput>no</userinput>.
|
|
The words <userinput>true</userinput> and <userinput>false</userinput> are
|
|
also accepted, as are the numbers <userinput>1</userinput> and <userinput>0</userinput>.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<sect2><title id="address_match_lists">Address Match Lists</title>
|
|
<sect3><title>Syntax</title>
|
|
<programlisting><varname>address_match_list</varname> = address_match_list_element ;
|
|
<optional> address_match_list_element; ... </optional>
|
|
<varname>address_match_list_element</varname> = <optional> ! </optional> (ip_address <optional>/length</optional> |
|
|
key key_id | acl_name | { address_match_list } )
|
|
</programlisting>
|
|
</sect3>
|
|
<sect3><title>Definition and Usage</title>
|
|
<para>Address match lists are primarily used to determine access
|
|
control for various server operations. They are also used to define
|
|
priorities for querying other nameservers and to set the addresses
|
|
on which <command>named</command> will listen for queries. The elements
|
|
which constitute an address match list can be any of the following:</para>
|
|
<itemizedlist><listitem>
|
|
<simpara>an IP address (IPv4 or IPv6)</simpara></listitem>
|
|
<listitem>
|
|
<simpara>an IP prefix (in the `/'-notation)</simpara></listitem>
|
|
<listitem>
|
|
<simpara>a key ID, as defined by the key statement</simpara></listitem>
|
|
<listitem>
|
|
<simpara>the name of an address match list previously defined with
|
|
the <command>acl</command> statement</simpara></listitem>
|
|
<listitem>
|
|
<simpara>a nested address match list enclosed in braces</simpara></listitem></itemizedlist>
|
|
<para>Elements can be negated with a leading exclamation mark (`!')
|
|
and the match list names "any," "none," "localhost" and "localnets"
|
|
are predefined. More information on those names can be found in
|
|
the description of the acl statement.</para>
|
|
<para>The addition of the key clause made the name of this syntactic
|
|
element something of a misnomer, since security keys can be used
|
|
to validate access without regard to a host or network address. Nonetheless,
|
|
the term "address match list" is still used throughout the documentation.</para>
|
|
<para>When a given IP address or prefix is compared to an address
|
|
match list, the list is traversed in order until an element matches.
|
|
The interpretation of a match depends on whether the list is being used
|
|
for access control, defining listen-on ports, or as a topology,
|
|
and whether the element was negated.</para>
|
|
<para>When used as an access control list, a non-negated match allows
|
|
access and a negated match denies access. If there is no match,
|
|
access is denied. The clauses <command>allow-query</command>, <command>allow-transfer</command>, <command>allow-update</command> and <command>blackhole</command> all
|
|
use address match lists this. Similarly, the listen-on option will cause
|
|
the server to not accept queries on any of the machine's addresses
|
|
which do not match the list.</para>
|
|
<para>When used with the topology clause, a non-negated match returns
|
|
a distance based on its position on the list (the closer the match
|
|
is to the start of the list, the shorter the distance is between
|
|
it and the server). A negated match will be assigned the maximum
|
|
distance from the server. If there is no match, the address will
|
|
get a distance which is further than any non-negated list element,
|
|
and closer than any negated element.</para>
|
|
<para>Because of the first-match aspect of the algorithm, an element
|
|
that defines a subset of another element in the list should come
|
|
before the broader element, regardless of whether either is negated. For
|
|
example, in
|
|
<command>1.2.3/24; ! 1.2.3.13;</command> the 1.2.3.13 element is
|
|
completely useless because the algorithm will match any lookup for
|
|
1.2.3.13 to the 1.2.3/24 element. Using <command>! 1.2.3.13; 1.2.3/24</command> fixes
|
|
that problem by having 1.2.3.13 blocked by the negation but all
|
|
other 1.2.3.* hosts fall through.</para></sect3></sect2>
|
|
<sect2>
|
|
<title>Comment Syntax</title>
|
|
|
|
<para>The <acronym>BIND</acronym> 9 comment syntax allows for comments to appear
|
|
anywhere that white space may appear in a <acronym>BIND</acronym> configuration
|
|
file. To appeal to programmers of all kinds, they can be written
|
|
in C, C++, or shell/perl constructs.</para>
|
|
|
|
<sect3>
|
|
<title>Syntax</title>
|
|
|
|
<para><programlisting>/* This is a <acronym>BIND</acronym> comment as in C */</programlisting>
|
|
<programlisting>// This is a <acronym>BIND</acronym> comment as in C++</programlisting>
|
|
<programlisting># This is a <acronym>BIND</acronym> comment as in common UNIX shells and perl</programlisting>
|
|
</para>
|
|
</sect3>
|
|
<sect3>
|
|
<title>Definition and Usage</title>
|
|
<para>Comments may appear anywhere that whitespace may appear in
|
|
a <acronym>BIND</acronym> configuration file.</para>
|
|
<para>C-style comments start with the two characters /* (slash,
|
|
star) and end with */ (star, slash). Because they are completely
|
|
delimited with these characters, they can be used to comment only
|
|
a portion of a line or to span multiple lines.</para>
|
|
<para>C-style comments cannot be nested. For example, the following
|
|
is not valid because the entire comment ends with the first */:</para>
|
|
<para><programlisting>/* This is the start of a comment.
|
|
This is still part of the comment.
|
|
/* This is an incorrect attempt at nesting a comment. */
|
|
This is no longer in any comment. */
|
|
</programlisting></para>
|
|
|
|
<para>C++-style comments start with the two characters // (slash,
|
|
slash) and continue to the end of the physical line. They cannot
|
|
be continued across multiple physical lines; to have one logical
|
|
comment span multiple lines, each line must use the // pair.</para>
|
|
<para>For example:</para>
|
|
<para><programlisting>// This is the start of a comment. The next line
|
|
// is a new comment, even though it is logically
|
|
// part of the previous comment.
|
|
</programlisting></para>
|
|
<para>Shell-style (or perl-style, if you prefer) comments start
|
|
with the character <literal>#</literal> (number sign) and continue to the end of the
|
|
physical line, as in C++ comments.</para>
|
|
<para>For example:</para>
|
|
<para><programlisting># This is the start of a comment. The next line
|
|
# is a new comment, even though it is logically
|
|
# part of the previous comment.
|
|
</programlisting></para>
|
|
<warning>
|
|
<para>WARNING: you cannot use the semicolon (`;') character
|
|
to start a comment such as you would in a zone file. The
|
|
semicolon indicates the end of a configuration
|
|
statement.</para>
|
|
</warning>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
<sect1>
|
|
<title id="Configuration_File_Grammar">Configuration File Grammar</title>
|
|
|
|
<para>A <acronym>BIND</acronym> 9 configuration consists of statements and comments.
|
|
Statements end with a semicolon. Statements and comments are the
|
|
only elements that can appear without enclosing braces. Many
|
|
statements contain a block of substatements, which are also
|
|
terminated with a semicolon.</para>
|
|
|
|
<para>The following statements are supported:</para>
|
|
|
|
<informaltable colsep = "0" rowsep = "0">
|
|
<tgroup cols = "2" colsep = "0" rowsep = "0" tgroupstyle =
|
|
"2Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.336in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.778in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>acl</command></para></entry>
|
|
<entry colname = "2"><para>defines a named IP address
|
|
matching list, for access control and other uses.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>controls</command></para></entry>
|
|
<entry colname = "2"><para>declares control channels to be used
|
|
by the <command>rndc</command> utility.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>include</command></para></entry>
|
|
<entry colname = "2"><para>includes a file.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>key</command></para></entry>
|
|
<entry colname = "2"><para>specifies key information for use in
|
|
authentication and authorization using TSIG.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>logging</command></para></entry>
|
|
<entry colname = "2"><para>specifies what the server logs, and where
|
|
the log messages are sent.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>options</command></para></entry>
|
|
<entry colname = "2"><para>controls global server configuration
|
|
options and sets defaults for other statements.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>server</command></para></entry>
|
|
<entry colname = "2"><para>sets certain configuration options on
|
|
a per-server basis.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>trusted-keys</command></para></entry>
|
|
<entry colname = "2"><para>defines trusted DNSSEC keys.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>view</command></para></entry>
|
|
<entry colname = "2"><para>defines a view.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>zone</command></para></entry>
|
|
<entry colname = "2"><para>defines a zone.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
|
|
<para>The <command>logging</command> and
|
|
<command>options</command> statements may only occur once per
|
|
configuration.</para>
|
|
|
|
<sect2>
|
|
<title><command>acl</command> Statement Grammar</title>
|
|
|
|
<programlisting><command>acl</command> acl-name {
|
|
address_match_list
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2>
|
|
<title id="acl"><command>acl</command> Statement Definition and
|
|
Usage</title>
|
|
|
|
<para>The <command>acl</command> statement assigns a symbolic
|
|
name to an address match list. It gets its name from a primary
|
|
use of address match lists: Access Control Lists (ACLs).</para>
|
|
|
|
<para>Note that an address match list's name must be defined
|
|
with <command>acl</command> before it can be used elsewhere; no
|
|
forward references are allowed.</para>
|
|
|
|
<para>The following ACLs are built-in:</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.130in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "4.000in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>any</command></para></entry>
|
|
<entry colname = "2"><para>Matches all hosts.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>none</command></para></entry>
|
|
<entry colname = "2"><para>Matches no hosts.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>localhost</command></para></entry>
|
|
<entry colname = "2"><para>Matches the IP addresses of all interfaces
|
|
on the system.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>localnets</command></para></entry>
|
|
<entry colname = "2"><para>Matches any host on a network for which
|
|
the system has an interface.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>controls</command> Statement Grammar</title>
|
|
<programlisting><command>controls</command> {
|
|
inet ( ip_addr | * ) <optional> port ip_port </optional> allow <replaceable> address_match_list </replaceable>
|
|
keys <replaceable> key_list </replaceable>;
|
|
<optional> inet ...; </optional>
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>controls</command> Statement Definition and
|
|
Usage</title>
|
|
|
|
<para>The <command>controls</command> statement declares control
|
|
channels to be used by system administrators to affect the
|
|
operation of the local nameserver. These control channels are
|
|
used by the <command>rndc</command> utility to send commands to
|
|
and retrieve non-DNS results from a nameserver.</para>
|
|
|
|
<para>An <command>inet</command> control channel is a TCP/IP
|
|
socket accessible to the Internet, created at the specified
|
|
<command>ip_port</command> on the specified
|
|
<command>ip_addr</command>. If no port is specified, port 953
|
|
is used by default. "*" cannot be used for
|
|
<command>ip_port</command>.</para>
|
|
|
|
<para>The ability to issue commands over the control channel is
|
|
restricted by the <command>allow</command> and
|
|
<command>keys</command> clauses. Connections to the control
|
|
channel are permitted based on the address permissions in
|
|
<command>address_match_list</command>. <command>key_id</command>
|
|
members of the <command>address_match_list</command> are
|
|
ignored, and instead are interpreted independently based the
|
|
<command>key_list</command>. Each <command>key_id</command> in
|
|
the <command>key_list</command> is allowed to be used to
|
|
authenticate commands and responses given over the control
|
|
channel by digitally signing each message between the server and
|
|
a command client (<xref linkend="rndc"/>). All commands to the
|
|
control channel must be signed by one of its specified keys to
|
|
be honored.</para>
|
|
|
|
<para> For the initial release of <acronym>BIND</acronym> 9.0.0, only one command
|
|
is possible over the command channel, the command to reload the
|
|
server. We will expand command set in future releases.</para>
|
|
|
|
<para>The UNIX control channel type of <acronym>BIND</acronym> 8 is not supported
|
|
in <acronym>BIND</acronym> 9.0.0, and is not expected to be added in future
|
|
releases. If it is present in the controls statement from a
|
|
<acronym>BIND</acronym> 8 configuration file, a non-fatal warning will be
|
|
logged.</para>
|
|
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>include</command> Statement Grammar</title>
|
|
<programlisting>include <replaceable>filename</replaceable>;</programlisting>
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>include</command> Statement Definition and
|
|
Usage</title>
|
|
|
|
<para>The <command>include</command> statement inserts the
|
|
specified file at the point that the <command>include</command>
|
|
statement is encountered. The <command>include</command>
|
|
statement facilitates the administration of configuration files
|
|
by permitting the reading or writing of some things but not
|
|
others. For example, the statement could include private keys
|
|
that are readable only by a nameserver.</para>
|
|
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>key</command> Statement Grammar</title>
|
|
<programlisting>key <replaceable>key_id</replaceable> {
|
|
algorithm <replaceable>string</replaceable>;
|
|
secret <replaceable>string</replaceable>;
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>key</command> Statement Definition and Usage</title>
|
|
|
|
<para>The <command>key</command> statement defines a shared
|
|
secret key for use with TSIG, <xref linkend="tsig"/>.</para>
|
|
|
|
<para>The <replaceable>key_id</replaceable>, also known as the
|
|
key name, is a domain name uniquely identifying the key. It can
|
|
be used in a "server" statement to cause requests sent to that
|
|
server to be signed with this key, or in address match lists to
|
|
verify that incoming requests have been signed with a key
|
|
matching this name, algorithm, and secret.</para>
|
|
|
|
<para>The <replaceable>algorithm_id</replaceable> is a string
|
|
that specifies a security/authentication algorithm. The only
|
|
algorithm currently supported with TSIG authentication is
|
|
<literal>hmac-md5</literal>. The
|
|
<replaceable>secret_string</replaceable> is the secret to be
|
|
used by the algorithm, and is treated as a base-64 encoded
|
|
string.</para>
|
|
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>logging</command> Statement Grammar</title>
|
|
<programlisting><command>logging</command> {
|
|
[ <command>channel</command> <replaceable>channel_name</replaceable> {
|
|
( <command>file</command> <replaceable>path name</replaceable>
|
|
[ <command>versions</command> ( <replaceable>number</replaceable> | <literal>unlimited</literal> ) ]
|
|
[ <command>size</command> <replaceable>size spec</replaceable> ]
|
|
| <command>syslog</command> ( <replaceable>syslog_facility</replaceable> )
|
|
| <literal>null</literal> );
|
|
[ <command>severity</command> (<option>critical</option> | <option>error</option> | <option>warning</option> | <option>notice</option> |
|
|
<option>info</option> | <option>debug</option> [ <replaceable>level</replaceable> ] | <option>dynamic</option> ); ]
|
|
[ <command>print-category</command> <option>yes</option> or <option>no</option>; ]
|
|
[ <command>print-severity</command> <option>yes</option> or <option>no</option>; ]
|
|
[ <command>print-time</command> <option>yes</option> or <option>no</option>; ]
|
|
}; ]
|
|
[ <command>category</command> <replaceable>category_name</replaceable> {
|
|
<replaceable>channel_name</replaceable> ; [ <replaceable>channel_nam</replaceable>e ; ... ]
|
|
}; ]
|
|
...
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2><title><command>logging</command> Statement Definition and
|
|
Usage</title>
|
|
<para>The <command>logging</command> statement configures a wide
|
|
variety of logging options for the nameserver. Its <command>channel</command> phrase
|
|
associates output methods, format options and severity levels with
|
|
a name that can then be used with the <command>category</command> phrase
|
|
to select how various classes of messages are logged.</para>
|
|
<para>Only one <command>logging</command> statement is used to define
|
|
as many channels and categories as are wanted. If there is no <command>logging</command> statement,
|
|
the logging configuration will be:</para>
|
|
<programlisting><command>logging</command> {
|
|
category "default" { "default_syslog"; "default_debug"; };
|
|
};
|
|
</programlisting>
|
|
<para>In <acronym>BIND</acronym> 9, the logging configuration is only established when
|
|
the entire configuration file has been parsed. In <acronym>BIND</acronym> 8, it was
|
|
established as soon as the <command>logging</command> statement
|
|
was parsed. When the server is starting up, all logging messages
|
|
regarding syntax errors in the configuration file go to the default
|
|
channels, or to standard error if the "<option>-g</option>" option
|
|
was specified.</para>
|
|
<sect3><title>The <command>channel</command> Phrase</title>
|
|
<para>All log output goes to one or more <emphasis>channels</emphasis>;
|
|
you can make as many of them as you want.</para>
|
|
<para>Every channel definition must include a clause that says whether
|
|
messages selected for the channel go to a file, to a particular
|
|
syslog facility, or are discarded. It can optionally also limit
|
|
the message severity level that will be accepted by the channel
|
|
(the default is <command>info</command>), and whether to include
|
|
a <command>named</command>-generated time stamp, the category name
|
|
and/or severity level (the default is not to include any).</para>
|
|
<para>The word <command>null</command> as the destination option
|
|
for the channel will cause all messages sent to it to be discarded;
|
|
in that case, other options for the channel are meaningless.</para>
|
|
<para>The <command>file</command> clause can include limitations
|
|
both on how large the file is allowed to become, and how many versions
|
|
of the file will be saved each time the file is opened.</para>
|
|
<para>The <command>size</command> option for files is simply a hard
|
|
ceiling on log growth. If the file ever exceeds the size, then <command>named</command> will
|
|
not write anything more to it until the file is reopened; exceeding
|
|
the size does not automatically trigger a reopen. The default behavior
|
|
is not to limit the size of the file.</para>
|
|
<para>If you use the <command>version</command> log file option,
|
|
then <command>named</command> will retain that many backup versions
|
|
of the file by renaming them when opening. For example, if you choose
|
|
to keep 3 old versions of the file <filename>lamers.log</filename> then
|
|
just before it is opened <filename>lamers.log.1</filename> is renamed
|
|
to <filename>lamers.log.2</filename>, <filename>lamers.log.0</filename> is
|
|
renamed to <filename>lamers.log.1</filename>, and <filename>lamers.log</filename> is
|
|
renamed to <filename>lamers.log.0</filename>. No rolled versions
|
|
are kept by default; any existing log file is simply appended. The <command>unlimited</command> keyword
|
|
is synonymous with <command>99</command> in current <acronym>BIND</acronym> releases.</para>
|
|
<para>Example usage of the size and versions options:</para>
|
|
<programlisting>channel "an_example_channel" {
|
|
file "example.log" versions 3 size 20m;
|
|
print-time yes;
|
|
print-category yes;
|
|
};
|
|
</programlisting>
|
|
<para>The argument for the <command>syslog</command> clause is a
|
|
syslog facility as described in the <command>syslog</command> man
|
|
page. How <command>syslog</command> will handle messages sent to
|
|
this facility is described in the <command>syslog.conf</command> man
|
|
page. If you have a system which uses a very old version of <command>syslog</command> that
|
|
only uses two arguments to the <command>openlog()</command> function,
|
|
then this clause is silently ignored.</para>
|
|
<para>The <command>severity</command> clause works like <command>syslog</command>'s
|
|
"priorities," except that they can also be used if you are writing
|
|
straight to a file rather than using <command>syslog</command>.
|
|
Messages which are not at least of the severity level given will
|
|
not be selected for the channel; messages of higher severity levels
|
|
will be accepted.</para>
|
|
<para>If you are using <command>syslog</command>, then the <command>syslog.conf</command> priorities
|
|
will also determine what eventually passes through. For example,
|
|
defining a channel facility and severity as <command>daemon</command> and <command>debug</command> but
|
|
only logging <command>daemon.warning</command> via <command>syslog.conf</command> will
|
|
cause messages of severity <command>info</command> and <command>notice</command> to
|
|
be dropped. If the situation were reversed, with <command>named</command> writing
|
|
messages of only <command>warning</command> or higher, then <command>syslogd</command> would
|
|
print all messages it received from the channel.</para>
|
|
<para>The server can supply extensive debugging information when
|
|
it is in debugging mode. If the server's global debug level is greater
|
|
than zero, then debugging mode will be active. The global debug
|
|
level is set either by starting the <command>named</command> server
|
|
with the <option>-d</option> flag followed by a positive integer,
|
|
or by running <command>rndc trace</command>. <note>
|
|
<simpara>the latter
|
|
method is not yet implemented</simpara></note> The global debug level
|
|
can be set to zero, and debugging mode turned off, by running <command>ndc
|
|
notrace</command>. All debugging messages in the server have a debug
|
|
level, and higher debug levels give more detailed output. Channels
|
|
that specify a specific debug severity, for example:</para>
|
|
<programlisting>channel "specific_debug_level" {
|
|
file "foo";
|
|
severity debug 3;
|
|
};
|
|
</programlisting>
|
|
<para>will get debugging output of level 3 or less any time the
|
|
server is in debugging mode, regardless of the global debugging
|
|
level. Channels with <command>dynamic</command> severity use the
|
|
server's global level to determine what messages to print.</para>
|
|
<para>If <command>print-time</command> has been turned on, then
|
|
the date and time will be logged. <command>print-time</command> may
|
|
be specified for a <command>syslog</command> channel, but is usually
|
|
pointless since <command>syslog</command> also prints the date and
|
|
time. If <command>print-category</command> is requested, then the
|
|
category of the message will be logged as well. Finally, if <command>print-severity</command> is
|
|
on, then the severity level of the message will be logged. The <command>print-</command> options may
|
|
be used in any combination, and will always be printed in the following
|
|
order: time, category, severity. Here is an example where all three <command>print-</command> options
|
|
are on:</para>
|
|
<para><computeroutput>28-Feb-2000 15:05:32.863 general: notice: running</computeroutput></para>
|
|
<para>There are four predefined channels that are used for
|
|
<command>named</command>'s default logging as follows. How they are
|
|
used is described in <xref linkend="the_category_phrase"/>.
|
|
</para>
|
|
<programlisting>channel "default_syslog" {
|
|
syslog daemon; // end to syslog's daemon
|
|
// facility
|
|
severity info; // only send priority info
|
|
// and higher
|
|
};
|
|
channel "default_debug" {
|
|
file "named.run"; // write to named.run in
|
|
// the working directory
|
|
// Note: stderr is used instead
|
|
// of "named.run"
|
|
// if the server is started
|
|
// with the '-f' option.
|
|
severity dynamic // log at the server's
|
|
// current debug level
|
|
};
|
|
channel "default_stderr" { // writes to stderr
|
|
file "<stderr>"; // this is illustrative only;
|
|
// there's currently no way of
|
|
// specifying an internal file
|
|
// descriptor in the
|
|
// configuration language.
|
|
severity info; // only send priority info
|
|
// and higher
|
|
};
|
|
channel "null" {
|
|
null; // toss anything sent to
|
|
// this channel
|
|
};
|
|
</programlisting>
|
|
<para>The <command>default_debug</command> channel normally writes
|
|
to a file <filename>named.run</filename> in the server's working
|
|
directory. For security reasons, when the "<option>-u</option>"
|
|
command line option is used, the <filename>named.run</filename> file
|
|
is created only after <command>named</command> has changed to the
|
|
new UID, and any debug output generated while <command>named</command> is
|
|
starting up and still running as root is discarded. If you need
|
|
to capture this output, you must run the server with the "<option>-g</option>"
|
|
option and redirect standard error to a file.</para>
|
|
<para>Once a channel is defined, it cannot be redefined. Thus you
|
|
cannot alter the built-in channels directly, but you can modify
|
|
the default logging by pointing categories at channels you have defined.</para></sect3>
|
|
<sect3><title id="the_category_phrase">The <command>category</command> Phrase</title>
|
|
<para>There are many categories, so you can send the logs you want
|
|
to see wherever you want, without seeing logs you don't want. If
|
|
you don't specify a list of channels for a category, then log messages
|
|
in that category will be sent to the <command>default</command> category
|
|
instead. If you don't specify a default category, the following
|
|
"default default" is used:</para>
|
|
<programlisting>category "default" { "default_syslog"; "default_debug"; };
|
|
</programlisting>
|
|
<para>As an example, let's say you want to log security events to
|
|
a file, but you also want keep the default logging behavior. You'd
|
|
specify the following:</para>
|
|
<programlisting>channel "my_security_channel" {
|
|
file "my_security_file";
|
|
severity info;
|
|
};
|
|
category "security" {
|
|
"my_security_channel";
|
|
"default_syslog";
|
|
"default_debug";
|
|
};</programlisting>
|
|
<para>To discard all messages in a category, specify the <command>null</command> channel:</para>
|
|
<programlisting>category "xfer-out" { "null"; };
|
|
category "notify" { "null"; };
|
|
</programlisting>
|
|
<para>Following are the available categories and brief descriptions
|
|
of the types of log information they contain. More
|
|
categories may be added in future <acronym>BIND</acronym> releases.</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.150in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.350in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>default</command></para></entry>
|
|
<entry colname = "2"><para>The default category defines the logging
|
|
options for those categories where no specific configuration has been
|
|
defined.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>general</command></para></entry>
|
|
<entry colname = "2"><para>The catch-all. Many things still aren't
|
|
classified into categories, and they all end up here.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>database</command></para></entry>
|
|
<entry colname = "2"><para>Messages relating to the databases used
|
|
internally by the name server to store zone and cache data.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>security</command></para></entry>
|
|
<entry colname = "2"><para>Approval and denial of requests.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>config</command></para></entry>
|
|
<entry colname = "2"><para>Configuration file parsing and processing.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>resolver</command></para></entry>
|
|
<entry colname = "2"><para>DNS resolution, such as the recursive
|
|
lookups performed on behalf of clients by a caching name server.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>xfer-in</command></para></entry>
|
|
<entry colname = "2"><para>Zone transfers the server is receiving.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>xfer-out</command></para></entry>
|
|
<entry colname = "2"><para>Zone transfers the server is sending.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>notify</command></para></entry>
|
|
<entry colname = "2"><para>The NOTIFY protocol.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>client</command></para></entry>
|
|
<entry colname = "2"><para>Processing of client requests.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>network</command></para></entry>
|
|
<entry colname = "2"><para>Network operations.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>update</command></para></entry>
|
|
<entry colname = "2"><para>Dynamic updates.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
</sect3>
|
|
</sect2>
|
|
<sect2>
|
|
<title><command>options</command> Statement Grammar</title>
|
|
|
|
<para>This is the grammar of the <command>option</command>
|
|
statement in the <filename>named.conf</filename> file:</para>
|
|
<programlisting><command>options</command> {
|
|
<optional> version <replaceable>version_string</replaceable>; </optional>
|
|
<optional> directory <replaceable>path_name</replaceable>; </optional>
|
|
<optional> named-xfer <replaceable>path_name</replaceable>; </optional>
|
|
<optional> tkey-domain <replaceable>domainname</replaceable>; </optional>
|
|
<optional> tkey-dhkey <replaceable>key_name</replaceable> <replaceable>key_tag</replaceable>; </optional>
|
|
<optional> dump-file <replaceable>path_name</replaceable>; </optional>
|
|
<optional> memstatistics-file <replaceable>path_name</replaceable>; </optional>
|
|
<optional> pid-file <replaceable>path_name</replaceable>; </optional>
|
|
<optional> statistics-file <replaceable>path_name</replaceable>; </optional>
|
|
<optional> auth-nxdomain <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> deallocate-on-exit <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> dialup <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> fake-iquery <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> fetch-glue <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> has-old-clients <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> host-statistics <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> multiple-cnames <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> notify <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> recursion <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> rfc2308-type1 <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> use-id-pool <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> maintain-ixfr-base <replaceable>yes_or_no</replaceable>; </optional>
|
|
<optional> forward ( <replaceable>only</replaceable> | <replaceable>first</replaceable> ); </optional>
|
|
<optional> forwarders { <optional> <replaceable>in_addr</replaceable> ; <optional> <replaceable>in_addr</replaceable> ; ... </optional> </optional> }; </optional>
|
|
<optional> check-names ( <replaceable>master</replaceable> | <replaceable>slave</replaceable> | <replaceable>
|
|
response</replaceable> )( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
|
|
<optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
|
|
<optional> allow-transfer { <replaceable>address_match_list</replaceable> }; </optional>
|
|
<optional> allow-recursion { <replaceable>address_match_list</replaceable> }; </optional>
|
|
<optional> blackhole { <replaceable>address_match_list</replaceable> }; </optional>
|
|
<optional> listen-on <optional> port <replaceable>ip_port</replaceable> </optional> { <replaceable>address_match_list</replaceable> }; </optional>
|
|
<optional> query-source <optional> address ( <replaceable>ip_addr</replaceable> | <replaceable>*</replaceable> ) </optional> <optional> port ( <replaceable>ip_port</replaceable> | <replaceable>*</replaceable> ) </optional>; </optional>
|
|
<optional> max-transfer-time-in <replaceable>number</replaceable>; </optional>
|
|
<optional> max-transfer-time-out <replaceable>number</replaceable>; </optional>
|
|
<optional> max-transfer-idle-in <replaceable>number</replaceable>; </optional>
|
|
<optional> max-transfer-idle-out <replaceable>number</replaceable>; </optional>
|
|
<optional> tcp-clients <replaceable>number</replaceable>; </optional>
|
|
<optional> recursive-clients <replaceable>number</replaceable>; </optional>
|
|
<optional> serial-queries <replaceable>number</replaceable>; </optional>
|
|
<optional> transfer-format <replaceable>( one-answer | many-answers )</replaceable>; </optional>
|
|
<optional> transfers-in <replaceable>number</replaceable>; </optional>
|
|
<optional> transfers-out <replaceable>number</replaceable>; </optional>
|
|
<optional> transfers-per-ns <replaceable>number</replaceable>; </optional>
|
|
<optional> transfer-source <replaceable>ip4_addr</replaceable>; </optional>
|
|
<optional> transfer-source-v6 <replaceable>ip6_addr</replaceable>; </optional>
|
|
<optional> also-notify { <replaceable>ip_addr</replaceable>; <optional> <replaceable>ip_addr</replaceable>; ... </optional> }; </optional>
|
|
<optional> max-ixfr-log-size <replaceable>number</replaceable>; </optional>
|
|
<optional> coresize <replaceable>size_spec</replaceable> ; </optional>
|
|
<optional> datasize <replaceable>size_spec</replaceable> ; </optional>
|
|
<optional> files <replaceable>size_spec</replaceable> ; </optional>
|
|
<optional> stacksize <replaceable>size_spec</replaceable> ; </optional>
|
|
<optional> cleaning-interval <replaceable>number</replaceable>; </optional>
|
|
<optional> heartbeat-interval <replaceable>number</replaceable>; </optional>
|
|
<optional> interface-interval <replaceable>number</replaceable>; </optional>
|
|
<optional> statistics-interval <replaceable>number</replaceable>; </optional>
|
|
<optional> topology <optional>{ <replaceable>address_match_list</replaceable> }</optional>; </optional>
|
|
<optional> sortlist <optional>{ <replaceable>address_match_list</replaceable> }</optional>; </optional>
|
|
<optional> rrset-order <optional>{ <replaceable>order_spec</replaceable> ; <optional> <replaceable>order_spec</replaceable> ; ... </optional> </optional> }</optional>;
|
|
<optional> lame-ttl <replaceable>number</replaceable>; </optional>
|
|
<optional> max-ncache-ttl <replaceable>number</replaceable>; </optional>
|
|
<optional> max-cache-ttl <replaceable>number</replaceable>; </optional>
|
|
<optional> sig-validity-interval <replaceable>number</replaceable> ; </optional>
|
|
<optional> min-roots <replaceable>number</replaceable>; </optional>
|
|
<optional> use-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
|
|
<optional> treat-cr-as-space <replaceable>yes_or_no</replaceable> ; </optional>
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2><title><command>options</command> Statement Definition and
|
|
Usage</title>
|
|
<para>The <command>options</command> statement sets up global options
|
|
to be used by <acronym>BIND</acronym>. This statement may appear only once in a configuration
|
|
file. If more than one occurrence is found, the first occurrence
|
|
determines the actual options used, and a warning will be generated.
|
|
If there is no <command>options</command> statement, an options
|
|
block with each option set to its default will be used.<informaltable
|
|
colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "3Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.591in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.159in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>version</command></para></entry>
|
|
<entry colname = "2"><para>The version the server should report
|
|
via a query of name <filename>version.bind</filename> in class <command>chaos</command>.
|
|
The default is the real version number of this server.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>directory</command></para></entry>
|
|
<entry colname = "2"><para>The working directory of the server.
|
|
Any non-absolute pathnames in the configuration file will be taken
|
|
as relative to this directory. The default location for most server
|
|
output files (e.g. <filename>named.run</filename>) is this directory.
|
|
If a directory is not specified, the working directory defaults
|
|
to `<filename>.</filename>', the directory from which the server
|
|
was started. The directory specified should be an absolute path.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>named-xfer</command></para></entry>
|
|
<entry colname = "2"><para>
|
|
It was used in <acronym>BIND</acronym> 8 to specify the pathname to the <command>named-xfer</command> program.
|
|
In <acronym>BIND</acronym> 9, no separate <command>named-xfer</command> program is
|
|
needed; its functionality is built into the name server.</para><note>
|
|
<simpara>This option is obsolete.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>tkey-domain</command></para></entry>
|
|
<entry colname = "2"><para>The domain appended to the names of all
|
|
shared keys generated with <command>TKEY</command>. When a client
|
|
requests a <command>TKEY</command> exchange, it may or may not specify
|
|
the desired name for the key. If present, the name of the shared
|
|
key will be "<varname>client specified part</varname>" + "<varname>tkey-domain</varname>".
|
|
Otherwise, the name of the shared key will be "<varname>random hex
|
|
digits</varname>" + "<varname>tkey-domain</varname>". In most cases,
|
|
the <command>domainname</command> should be the server's domain
|
|
name.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>tkey-dhkey</command></para></entry>
|
|
<entry colname = "2"><para>The Diffie-Hellman key used by the server
|
|
to generate shared keys with clients using the Diffie-Hellman mode
|
|
of <command>TKEY</command>. The server must be able to load the
|
|
public and private keys from files in the working directory. In
|
|
most cases, the keyname should be the server's host name.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>dump-file</command></para></entry>
|
|
<entry colname = "2"><para>The pathname of the file the server dumps
|
|
the database to when it receives <command>SIGINT</command> signal
|
|
(<command>ndc dumpdb</command>). If not specified, the default is <filename>named_dump.db</filename>.</para><note>
|
|
<simpara>Not
|
|
yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>memstatistics-file</command></para></entry>
|
|
<entry colname = "2"><para>The pathname of the file the server writes memory
|
|
usage statistics to on exit. If not specified, the default is <filename>named.memstats</filename>.</para><note>
|
|
<simpara>Not
|
|
yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>pid-file</command></para></entry>
|
|
<entry colname = "2"><para>The pathname of the file the server writes
|
|
its process ID in. If not specified, the default is operating system
|
|
dependent, but is usually
|
|
<filename>/var/run/named.pid</filename> or <filename>/etc/named.pid</filename>.
|
|
The pid-file is used by programs that want to send signals to the running
|
|
nameserver.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>statistics-file</command></para></entry>
|
|
<entry colname = "2"><para>The pathname of the file the server appends statistics
|
|
to. If not specified, the default is <filename>named.stats</filename>.</para><note>
|
|
<simpara>Not
|
|
yet implemented in <acronym>BIND</acronym> 9</simpara></note>.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable> </para>
|
|
<sect3><title id="boolean_options">Boolean Options</title>
|
|
<informaltable colsep = "0"
|
|
rowsep = "0"><tgroup cols = "2" colsep = "0"
|
|
rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.507in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "2.993in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>auth-nxdomain</command></para></entry>
|
|
<entry colname = "2"><para>If <userinput>yes</userinput>, then the <command>AA</command> bit
|
|
is always set on NXDOMAIN responses, even if the server is not actually
|
|
authoritative. The default is <userinput>no</userinput>; this is
|
|
a change from <acronym>BIND</acronym> 8. If you are using very old DNS software, you
|
|
may need to set it to <userinput>yes</userinput>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>deallocate-on-exit</command></para></entry>
|
|
<entry colname = "2"><para>This option was used in <acronym>BIND</acronym> 8 to enable checking
|
|
for memory leaks on exit. <acronym>BIND</acronym> 9 ignores the option and always performs
|
|
the checks.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>dialup</command></para></entry>
|
|
<entry colname = "2"><para>If <userinput>yes</userinput>, then the
|
|
server treats all zones as if they are doing zone transfers across
|
|
a dial on demand dialup link, which can be brought up by traffic
|
|
originating from this server. This has different effects according
|
|
to zone type and concentrates the zone maintenance so that it all
|
|
happens in a short interval, once every <command>heartbeat-interval</command> and
|
|
hopefully during the one call. It also suppresses some of the normal
|
|
zone maintenance traffic. The default is <userinput>no</userinput>.</para><para>The <command>dialup</command> option
|
|
may also be specified in the <command>zone</command> statement,
|
|
in which case it overrides the <command>options dialup </command>statement.</para><para>If
|
|
the zone is a master then the server will send out a NOTIFY request
|
|
to all the slaves. This will trigger the zone serial number check
|
|
in the slave (providing it supports NOTIFY) allowing the slave to
|
|
verify the zone while the connection is active.</para><para>If the
|
|
zone is a slave or stub then the server will suppress the regular
|
|
"zone up to date" queries and only perform them when the
|
|
<command>heartbeat-interval</command> expires.</para><note>
|
|
<simpara>Not yet implemented
|
|
in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>fake-iquery</command></para></entry>
|
|
<entry colname = "2"><para>In <acronym>BIND</acronym> 8, this option was used to enable simulating
|
|
the obsolete DNS query type IQUERY. <acronym>BIND</acronym> 9 never does IQUERY simulation.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>fetch-glue</command></para></entry>
|
|
<entry colname = "2"><para>(Information present outside of the authoritative
|
|
nodes in the zone is called <emphasis>glue</emphasis> information).
|
|
If <userinput>yes</userinput> (the default), the server will fetch
|
|
glue resource records it doesn't have when constructing the additional
|
|
data section of a response. <command>fetch-glue </command><userinput>no</userinput><command> </command>can
|
|
be used in conjunction with <command>recursion </command><userinput>no</userinput><command> </command>to
|
|
prevent the server's cache from growing or becoming corrupted (at
|
|
the cost of requiring more work from the client).</para><note>
|
|
<simpara>Not yet
|
|
implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>has-old-clients</command></para></entry>
|
|
<entry colname = "2"><para>This option was incorrectly implemented
|
|
in <acronym>BIND</acronym> 8, and is ignored by <acronym>BIND</acronym> 9. To achieve the intended effect
|
|
of
|
|
<command>has-old-clients </command><userinput>yes</userinput>, specify
|
|
the two separate options <command>auth-nxdomain </command><userinput>yes</userinput> and <command>rfc2308-type1 </command><userinput>no</userinput> instead.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>host-statistics</command></para></entry>
|
|
<entry colname = "2"><para>If <userinput>yes</userinput>, then statistics
|
|
are kept for every host that the nameserver interacts with. The
|
|
default is <userinput>no</userinput>.</para><note>
|
|
<simpara>turning on <command>host-statistics</command> can consume
|
|
huge amounts of memory.</simpara></note><note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>maintain-ixfr-base</command></para></entry>
|
|
<entry colname = "2"><para><varname>This option is obsolete</varname>.
|
|
It was used in <acronym>BIND</acronym> 8 to determine whether a transaction log was
|
|
kept for Incremental Zone Transfer. <acronym>BIND</acronym> 9 maintains a transaction
|
|
log whenever possible. If you need to disable outgoing incremental zone
|
|
transfers, use <command>provide-ixfr </command><userinput>no</userinput>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>multiple-cnames</command></para></entry>
|
|
<entry colname = "2"><para>This option was used in <acronym>BIND</acronym> 8 to allow
|
|
a domain name to allow multiple CNAME records in violation of the
|
|
DNS standards. <acronym>BIND</acronym> 9 currently does not check for multiple CNAMEs
|
|
in zone data loaded from master files, but such checks may be introduced
|
|
in a later release. <acronym>BIND</acronym> 9 always strictly enforces the CNAME rules
|
|
in dynamic updates.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>notify</command></para></entry>
|
|
<entry colname = "2"><para>If <userinput>yes</userinput> (the default),
|
|
DNS NOTIFY messages are sent when a zone the server is authoritative for
|
|
changes, <xref linkend="notify"/>.
|
|
The <command>notify</command> option may also be specified in the <command>zone</command> statement,
|
|
in which case it overrides the <command>options notify</command> statement.
|
|
It would only be necessary to turn off this option if it caused slaves
|
|
to crash<varname>.</varname></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>recursion</command></para></entry>
|
|
<entry colname = "2"><para>If <userinput>yes</userinput>, and a
|
|
DNS query requests recursion, then the server will attempt to do
|
|
all the work required to answer the query. If recursion is not on,
|
|
the server will return a referral to the client if it doesn't know
|
|
the answer. The default is <userinput>yes</userinput>. See also <command>fetch-glue</command> above.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>rfc2308-type1</command></para></entry>
|
|
<entry colname = "2"><para>Setting this to <userinput>yes</userinput> will
|
|
cause the server to send NS records along with the SOA record for negative
|
|
answers. The default is <userinput>no</userinput>.</para>
|
|
<note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>use-id-pool</command></para></entry>
|
|
<entry colname = "2"><para><varname>This option is obsolete</varname>.
|
|
<acronym>BIND</acronym> 9 always allocates query IDs from a pool.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>treat-cr-as-space</command></para></entry>
|
|
<entry colname = "2"><para>This option was used in <acronym>BIND</acronym> 8 to make
|
|
the server treat "<command>\r</command>" characters the same way
|
|
as <command><space> </command>" " or "<command>\t</command>",
|
|
to facilitate loading of zone files on a UNIX system that were generated
|
|
on an NT or DOS machine. In <acronym>BIND</acronym> 9, both UNIX "<command>\n</command>"
|
|
and NT/DOS "<command>\r\n</command>" newlines are always accepted,
|
|
and the option is ignored.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></sect3>
|
|
<sect3><title>Forwarding</title>
|
|
<para>The forwarding facility can be used to create a large site-wide
|
|
cache on a few servers, reducing traffic over links to external
|
|
nameservers. It can also be used to allow queries by servers that
|
|
do not have direct access to the Internet, but wish to look up exterior
|
|
names anyway. Forwarding occurs only on those queries for which
|
|
the server is not authoritative and does not have the answer in
|
|
its cache.</para>
|
|
<para><informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.973in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.527in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>forward</command></para></entry>
|
|
<entry colname = "2"><para>This option is only meaningful if the
|
|
forwarders list is not empty. A value of <varname>first</varname>,
|
|
the default, causes the server to query the forwarders first, and
|
|
if that doesn't answer the question the server will then look for
|
|
the answer itself. If <varname>only</varname> is specified, the
|
|
server will only query the forwarders.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>forwarders</command></para></entry>
|
|
<entry colname = "2"><para>Specifies the IP addresses to be used
|
|
for forwarding. The default is the empty list (no forwarding).</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></para>
|
|
<para>Forwarding can also be configured on a per-domain basis, allowing
|
|
for the global forwarding options to be overridden in a variety
|
|
of ways. You can set particular domains to use different forwarders,
|
|
or have a different <command>forward only/first</command> behavior,
|
|
or not forward at all, <xref linkend="zone_statement_grammar"/>.</para></sect3>
|
|
<sect3><title id="name_checking">Name Checking</title>
|
|
<para>The server can check domain names based upon their expected
|
|
client contexts. For example, a domain name used as a hostname can
|
|
be checked for compliance with the RFCs defining valid hostnames.</para>
|
|
<para>Three checking methods are available:</para>
|
|
<para><informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.797in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.703in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>ignore</command></para></entry>
|
|
<entry colname = "2"><para>No checking is done.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>warn</command></para></entry>
|
|
<entry colname = "2"><para>Names are checked against their expected
|
|
client contexts. Invalid names are logged, but processing continues normally.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>fail</command></para></entry>
|
|
<entry colname = "2"><para>Names are checked against their expected
|
|
client contexts. Invalid names are logged, and the offending data
|
|
is rejected.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></para>
|
|
<para>The server can check names in three areas: master zone files,
|
|
slave zone files, and in responses to queries the server has initiated.
|
|
If <command>check-names response fail</command> has been specified,
|
|
and answering the client's question would require sending an invalid
|
|
name to the client, the server will send a REFUSED response code
|
|
to the client.</para>
|
|
<para>The defaults are:</para>
|
|
<programlisting> check-names master fail;
|
|
check-names slave warn;
|
|
check-names response ignore;
|
|
</programlisting>
|
|
<para><command>check-names</command> may also be specified in the <command>zone</command> statement,
|
|
in which case it overrides the <command>options check-names</command> statement.
|
|
When used in a <command>zone</command> statement, the area is not
|
|
specified because it can be deduced from the zone type.</para>
|
|
<note>
|
|
<para>Name checking is not yet implemented in <acronym>BIND</acronym> 9.</para></note></sect3>
|
|
<sect3><title id="access_control">Access Control</title>
|
|
<para>Access to the server can be restricted based on the IP address
|
|
of the requesting system. <xref linkend="address_match_lists"/> for
|
|
details on how to specify IP address lists.</para>
|
|
<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.375in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.125in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>allow-query</command></para></entry>
|
|
<entry colname = "2"><para>Specifies which hosts are allowed to
|
|
ask ordinary questions. <command>allow-query</command> may also
|
|
be specified in the <command>zone</command> statement, in which
|
|
case it overrides the <command>options allow-query</command> statement. If
|
|
not specified, the default is to allow queries from all hosts.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>allow-recursion</command></para></entry>
|
|
<entry colname = "2"><para>Specifies which hosts are allowed to
|
|
make recursive queries through this server. If not specified, the
|
|
default is to allow recursive queries from all hosts. </para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>allow-transfer</command></para></entry>
|
|
<entry colname = "2"><para>Specifies which hosts are allowed to
|
|
receive zone transfers from the server. <command>allow-transfer</command> may
|
|
also be specified in the <command>zone</command> statement, in which
|
|
case it overrides the <command>options allow-transfer</command> statement.
|
|
If not specified, the default is to allow transfers from all hosts.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>blackhole</command></para></entry>
|
|
<entry colname = "2"><para>Specifies a list of addresses that the
|
|
server will not accept queries from or use to resolve a query. Queries
|
|
from these addresses will not be responded to. The default is <userinput>none</userinput>.</para>
|
|
<note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></para></sect3>
|
|
<sect3><title>Interfaces</title>
|
|
<para>The interfaces and ports that the server will answer queries
|
|
from may be specified using the <command>listen-on</command> option. <command>listen-on</command> takes
|
|
an optional port, and an <varname>address_match_list</varname>.
|
|
The server will listen on all interfaces allowed by the address
|
|
match list. If a port is not specified, port 53 will be used.</para>
|
|
<para>Multiple <command>listen-on</command> statements are allowed.
|
|
For example,</para>
|
|
<programlisting>listen-on { 5.6.7.8; };
|
|
listen-on port 1234 { !1.2.3.4; 1.2/16; };
|
|
</programlisting>
|
|
|
|
<para>will enable the nameserver on port 53 for the IP address
|
|
5.6.7.8, and on port 1234 of an address on the machine in net
|
|
1.2 that is not 1.2.3.4.</para>
|
|
|
|
<para>If no <command>listen-on</command> is specified, the
|
|
server will listen on port 53 on all interfaces.</para>
|
|
|
|
<para>The <command>listen-on-v6</command> option is used to
|
|
specify the ports on which the server will listen for incoming
|
|
queries sent using IPv6.</para>
|
|
|
|
<para>The server does not bind a separate socket to each IPv6
|
|
interface address as it does for IPv4. Instead, it always
|
|
listens on the IPv6 wildcard address. Therefore, the only
|
|
values allowed for the <varname>address_match_list</varname>
|
|
argument to the <command>listen-on-v6</command> statement are
|
|
<programlisting>{ any; }</programlisting> and
|
|
<programlisting>{ none;}</programlisting></para>
|
|
|
|
<para>Multiple <command>listen-on-v6</command> options can be
|
|
used to listen on multiple ports:</para>
|
|
|
|
<programlisting>listen-on-v6 port 53 { any; };
|
|
listen-on-v6 port 1234 { any; };
|
|
</programlisting>
|
|
<para>To make the server not listen on any IPv6 address, use</para>
|
|
<programlisting>listen-on-v6 { none; };
|
|
</programlisting>
|
|
<para>If no <command>listen-on-v6 </command>statement is specified,
|
|
the server will listen on port 53 on the IPv6 wildcard address.</para></sect3>
|
|
<sect3><title>Query Address</title>
|
|
<para>If the server doesn't know the answer to a question, it will
|
|
query other nameservers. <command>query-source</command> specifies
|
|
the address and port used for such queries. For queries sent over
|
|
IPv6, there is a separate <command>query-source-v6</command> option.
|
|
If <command>address</command> is <command>*</command> or is omitted,
|
|
a wildcard IP address (<command>INADDR_ANY</command>) will be used.
|
|
If <command>port</command> is <command>*</command> or is omitted,
|
|
a random unprivileged port will be used. The defaults are</para>
|
|
<programlisting>query-source address * port *;
|
|
query-source-v6 address * port *
|
|
</programlisting>
|
|
<note>
|
|
<para><command>query-source</command> currently applies only
|
|
to UDP queries; TCP queries always use a wildcard IP address and
|
|
a random unprivileged port.</para></note></sect3>
|
|
<sect3><title id="zone_transfers">Zone Transfers</title>
|
|
<para><acronym>BIND</acronym> has mechanisms in place to facilitate zone transfers
|
|
and set limits on the amount of load that transfers place on the
|
|
system. The following options apply to zone transfers.</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.750in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "2.750in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>also-notify</command></para></entry>
|
|
<entry colname = "2"><para>Defines a global list of IP addresses
|
|
that are also sent NOTIFY messages whenever a fresh copy of the
|
|
zone is loaded. This helps to ensure that copies of the zones will
|
|
quickly converge on stealth servers. If an <command>also-notify</command> list
|
|
is given in a <command>zone</command> statement, it will override
|
|
the <command>options also-notify</command> statement. When a <command>zone notify</command> statement
|
|
is set to <command>no</command>, the IP addresses in the global <command>also-notify</command> list will
|
|
not be sent NOTIFY messages for that zone. The default is the empty
|
|
list (no global notification list).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-time-in</command></para></entry>
|
|
<entry colname = "2"><para>Inbound zone transfers running longer than
|
|
this many minutes will be terminated. The default is 120 minutes
|
|
(2 hours).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-idle-in</command></para></entry>
|
|
<entry colname = "2"><para>Inbound zone transfers making no progress
|
|
in this many minutes will be terminated. The default is 60 minutes
|
|
(1 hour).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-time-out</command></para></entry>
|
|
<entry colname = "2"><para>Outbound zone transfers running longer than
|
|
this many minutes will be terminated. The default is 120 minutes
|
|
(2 hours).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-idle-out</command></para></entry>
|
|
<entry colname = "2"><para>Outbound zone transfers making no progress
|
|
in this many minutes will be terminated. The default is 60 minutes</para><para>(1
|
|
hour).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>serial-queries</command></para></entry>
|
|
<entry colname = "2"><para>Slave servers will periodically query master
|
|
servers to find out if zone serial numbers have changed. Each such
|
|
query uses a minute amount of the slave server's network bandwidth,
|
|
but more importantly each query uses a small amount of memory in
|
|
the slave server while waiting for the master server to respond.
|
|
The <command>serial-queries </command>option sets the maximum number
|
|
of concurrent serial-number queries allowed to be outstanding at
|
|
any given time. The default is 4.</para><note>
|
|
|
|
<simpara>If a server loads a large (tens or
|
|
hundreds of thousands) number of slave zones, then
|
|
this limit should be raised to the high hundreds
|
|
or low thousands, otherwise the slave server may
|
|
never actually become aware of zone changes in the
|
|
master servers. Beware, though, that setting this
|
|
limit arbitrarily high can spend a considerable
|
|
amount of your slave server's network, CPU, and
|
|
memory resources. As with all tunable limits, this
|
|
one should be changed gently and monitored for its
|
|
effects.</simpara>
|
|
|
|
</note>
|
|
<note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note>
|
|
</entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>transfer-format</command></para></entry>
|
|
<entry colname = "2"><para>The server supports two zone transfer methods. <command>one-answer</command> uses
|
|
one DNS message per resource record transferred. <command>many-answers</command> packs
|
|
as many resource records as possible into a message. <command>many-answers</command> is
|
|
more efficient, but is only known to be understood by <acronym>BIND</acronym> 9, <acronym>BIND</acronym>
|
|
8.x and patched versions of <acronym>BIND</acronym> 4.9.5. The default is <command>many-answers</command>. <command>transfer-format</command> may
|
|
be overridden on a per-server basis by using the <command>server</command> statement.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>transfers-in</command></para></entry>
|
|
<entry colname = "2"><para>The maximum number of inbound zone transfers
|
|
that can be running concurrently. The default value is <literal>10</literal>.
|
|
Increasing <command>transfers-in</command> may speed up the convergence
|
|
of slave zones, but it also may increase the load on the local system.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>transfers-out</command></para></entry>
|
|
<entry colname = "2"><para>The maximum number of outbound zone transfers
|
|
that can be running concurrently. Zone transfer requests in excess
|
|
of the limit will be refused. The default value is <literal>10</literal>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>transfers-per-ns</command></para></entry>
|
|
<entry colname = "2"><para>The maximum number of inbound zone transfers
|
|
that can be concurrently transferring from a given remote nameserver.
|
|
The default value is <literal>2</literal>. Increasing <command>transfers-per-ns</command> may
|
|
speed up the convergence of slave zones, but it also may increase
|
|
the load on the remote nameserver. <command>transfers-per-ns</command> may
|
|
be overridden on a per-server basis by using the <command>transfers</command> phrase
|
|
of the <command>server</command> statement.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>transfer-source</command></para></entry>
|
|
<entry colname = "2"><para><command>transfer-source</command> determines
|
|
which local address will be bound to IPv4 TCP connections used to
|
|
fetch zones transferred inbound by the server. If not set, it defaults
|
|
to a system controlled value which will usually be the address of
|
|
the interface "closest to" the remote end. This address must appear
|
|
in the remote end's <command>allow-transfer</command> option for
|
|
the zone being transferred, if one is specified. This statement
|
|
sets the <command>transfer-source</command> for all zones, but can
|
|
be overridden on a per-zone basis by including a
|
|
<command>transfer-source</command> statement within the <command>zone</command> block
|
|
in the configuration file.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>transfer-source-v6</command></para></entry>
|
|
<entry colname = "2"><para>The same as <command>transfer-source</command>,
|
|
except zone transfers are performed using IPv6.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</sect3>
|
|
<sect3>
|
|
<title>Resource Limits</title>
|
|
|
|
<para>The server's usage of many system resources can be
|
|
limited. Some operating systems don't support some of the
|
|
limits. On such systems, a warning will be issued if the
|
|
unsupported limit is used. Some operating systems don't
|
|
support limiting resources.</para> <para>Scaled values are
|
|
allowed when specifying resource limits. For example,
|
|
<command>1G</command> can be used instead of
|
|
<command>1073741824</command> to specify a limit of one
|
|
gigabyte. <command>unlimited</command> requests unlimited use,
|
|
or the maximum available amount. <command>default</command>
|
|
uses the limit that was in force when the server was
|
|
started. See the description of <command>size_spec</command>
|
|
in <xref linkend="configuration_file_elements"/>.</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><command>coresize</command></para></entry>
|
|
<entry colname = "2"><para>The maximum size of a core dump. The default
|
|
is <literal>default</literal>.</para><note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym>
|
|
9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>datasize</command></para></entry>
|
|
<entry colname = "2"><para>The maximum amount of data memory the server
|
|
may use. The default is <literal>default</literal>.</para><note>
|
|
<simpara>Not
|
|
yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>files</command></para></entry>
|
|
<entry colname = "2"><para>The maximum number of files the server
|
|
may have open concurrently. The default is <literal>unlimited</literal>.
|
|
</para><note>
|
|
<simpara>on some operating systems the server cannot set an unlimited
|
|
value and cannot determine the maximum number of open files the
|
|
kernel can support. On such systems, choosing
|
|
<literal>unlimited</literal> will
|
|
cause the server to use the larger of the <command>rlim_max</command> for <command>RLIMIT_NOFILE</command> and
|
|
the value returned by <command>sysconf(_SC_OPEN_MAX)</command>.
|
|
If the actual kernel limit is larger than this value, use <command>limit
|
|
files </command>to specify the limit explicitly.</simpara></note><note><simpara>Not yet
|
|
implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-ixfr-log-size</command></para></entry>
|
|
<entry colname = "2"><para>The <command>max-ixfr-log-size</command> will
|
|
be used in a future release of the server to limit the size of the
|
|
transaction log kept for Incremental Zone Transfer.</para><note>
|
|
<simpara>Not
|
|
yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>recursive-clients</command></para></entry>
|
|
<entry colname = "2"><para>The maximum number of simultaneous recursive
|
|
lookups the server will perform on behalf of clients. The default
|
|
is <literal>1000</literal>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>stacksize</command></para></entry>
|
|
<entry colname = "2"><para>The maximum amount of stack memory the server
|
|
may use. The default is <literal>default</literal>.</para><note>
|
|
<simpara>Not
|
|
yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>tcp-clients</command></para></entry>
|
|
<entry colname = "2"><para>The maximum number of simultaneous client TCP
|
|
connections that the server will accept. The default is <literal>100</literal>.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<note>
|
|
<para>Resource limits are not yet implemented in <acronym>BIND</acronym> 9.</para></note></sect3>
|
|
<sect3><title>Periodic Task Intervals</title>
|
|
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.625in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "2.875in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>cleaning-interval</command></para></entry>
|
|
<entry colname = "2"><para>The server will remove expired resource records
|
|
from the cache every <command>cleaning-interval</command> minutes.
|
|
The default is 60 minutes.
|
|
If set to 0, no periodic cleaning will occur.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>heartbeat-interval</command></para></entry>
|
|
<entry colname = "2"><para>The server will perform zone maintenance tasks
|
|
for all zones marked <command>dialup yes</command> whenever this
|
|
interval expires. The default is 60 minutes. Reasonable values are up
|
|
to 1 day (1440 minutes). If set to 0, no zone maintenance for these zones will occur.</para><note>
|
|
<simpara>Not yet
|
|
implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>interface-interval</command></para></entry>
|
|
<entry colname = "2"><para>The server will scan the network interface list
|
|
every <command>interface-interval</command> minutes. The default
|
|
is 60 minutes. If set to 0, interface scanning will only occur when
|
|
the configuration file is loaded. After the scan, listeners will be
|
|
started on any new interfaces (provided they are allowed by the
|
|
<command>listen-on</command> configuration). Listeners on interfaces
|
|
that have gone away will be cleaned up.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>statistics-interval</command></para></entry>
|
|
<entry colname = "2"><para>Nameserver statistics will be logged
|
|
every <command>statistics-interval</command> minutes. The default is
|
|
60. If set to 0, no statistics will be logged.</para><note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym>9.</simpara></note></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></sect3>
|
|
<sect3><title id="topology">Topology</title>
|
|
<para>All other things being equal, when the server chooses a nameserver
|
|
to query from a list of nameservers, it prefers the one that is
|
|
topologically closest to itself. The <command>topology</command> statement
|
|
takes an <command>address_match_list</command> and interprets it
|
|
in a special way. Each top-level list element is assigned a distance.
|
|
Non-negated elements get a distance based on their position in the
|
|
list, where the closer the match is to the start of the list, the
|
|
shorter the distance is between it and the server. A negated match
|
|
will be assigned the maximum distance from the server. If there
|
|
is no match, the address will get a distance which is further than
|
|
any non-negated list element, and closer than any negated element.
|
|
For example,</para>
|
|
<programlisting>topology {
|
|
10/8;
|
|
!1.2.3/24;
|
|
{ 1.2/16; 3/8; };
|
|
};</programlisting>
|
|
<para>will prefer servers on network 10 the most, followed by hosts
|
|
on network 1.2.0.0 (netmask 255.255.0.0) and network 3, with the
|
|
exception of hosts on network 1.2.3 (netmask 255.255.255.0), which
|
|
is preferred least of all.</para>
|
|
<para>The default topology is</para>
|
|
<programlisting> topology { localhost; localnets; };
|
|
</programlisting>
|
|
<note><simpara>The <command>topology</command> option
|
|
is not yet implemented in <acronym>BIND</acronym> 9.</simpara></note>
|
|
</sect3>
|
|
<sect3>
|
|
<title id="the_sortlist_statement">The <command>sortlist</command> Statement</title>
|
|
<para>Resource Records (RRs) are the data associated with the names
|
|
in a domain name space. The data is maintained in the form of sets
|
|
of RRs. The order of RRs in a set is, by default, not significant.
|
|
Therefore, to control the sorting of records in a set of resource
|
|
records, or <varname>RRset</varname>, you must use the <command>sortlist</command> statement.</para>
|
|
<para>RRs are explained more fully in <xref
|
|
linkend="types_of_resource_records_and_when_to_use_them"/>. Specifications for RRs
|
|
are documented in RFC 1035.</para>
|
|
<para>When returning multiple RRs the nameserver will normally return
|
|
them in <varname>Round Robin</varname><varname> </varname>order,
|
|
that is, after each request the first RR is put at the end of the
|
|
list. The client resolver code should rearrange the RRs as appropriate,
|
|
that is, using any addresses on the local net in preference to other addresses.
|
|
However, not all resolvers can do this or are correctly configured.
|
|
When a client is using a local server the sorting can be performed
|
|
in the server, based on the client's address. This only requires
|
|
configuring the nameservers, not all the clients.</para>
|
|
<para>The <command>sortlist</command> statement (see below) takes
|
|
an <command>address_match_list </command>and interprets it even
|
|
more specifically than the <command>topology</command> statement
|
|
does (<xref linkend="topology"/>). Each top level statement in the <command>sortlist</command> must
|
|
itself be an explicit <command>address_match_list</command> with
|
|
one or two elements. The first element (which may be an IP address,
|
|
an IP prefix, an ACL name or a nested <command>address_match_list</command>)
|
|
of each top level list is checked against the source address of
|
|
the query until a match is found.</para>
|
|
<para>Once the source address of the query has been matched, if
|
|
the top level statement contains only one element, the actual primitive
|
|
element that matched the source address is used to select the address
|
|
in the response to move to the beginning of the response. If the
|
|
statement is a list of two elements, then the second element is
|
|
treated the same as the <command>address_match_list</command> in
|
|
a <command>topology</command> statement. Each top level element
|
|
is assigned a distance and the address in the response with the minimum
|
|
distance is moved to the beginning of the response.</para>
|
|
<para>In the following example, any queries received from any of
|
|
the addresses of the host itself will get responses preferring addresses
|
|
on any of the locally connected networks. Next most preferred are addresses
|
|
on the 192.168.1/24 network, and after that either the 192.168.2/24
|
|
or
|
|
192.168.3/24 network with no preference shown between these two
|
|
networks. Queries received from a host on the 192.168.1/24 network
|
|
will prefer other addresses on that network to the 192.168.2/24
|
|
and
|
|
192.168.3/24 networks. Queries received from a host on the 192.168.4/24
|
|
or the 192.168.5/24 network will only prefer other addresses on
|
|
their directly connected networks.</para>
|
|
<programlisting>sortlist {
|
|
{ localhost; // IF the local host
|
|
{ localnets; // THEN first fit on the
|
|
192.168.1/24; // following nets
|
|
{ 192,168.2/24; 192.168.3/24; }; }; };
|
|
{ 192.168.1/24; // IF on class C 192.168.1
|
|
{ 192.168.1/24; // THEN use .1, or .2 or .3
|
|
{ 192.168.2/24; 192.168.3/24; }; }; };
|
|
{ 192.168.2/24; // IF on class C 192.168.2
|
|
{ 192.168.2/24; // THEN use .2, or .1 or .3
|
|
{ 192.168.1/24; 192.168.3/24; }; }; };
|
|
{ 192.168.3/24; // IF on class C 192.168.3
|
|
{ 192.168.3/24; // THEN use .3, or .1 or .2
|
|
{ 192.168.1/24; 192.168.2/24; }; }; };
|
|
{ { 192.168.4/24; 192.168.5/24; }; // if .4 or .5, prefer that net
|
|
};
|
|
};</programlisting>
|
|
<para>The following example will give reasonable behavior for the
|
|
local host and hosts on directly connected networks. It is similar
|
|
to the behavior of the address sort in <acronym>BIND</acronym> 8.x. Responses sent
|
|
to queries from the local host will favor any of the directly connected
|
|
networks. Responses sent to queries from any other hosts on a directly
|
|
connected network will prefer addresses on that same network. Responses
|
|
to other queries will not be sorted.</para>
|
|
<programlisting>sortlist {
|
|
{ localhost; localnets; };
|
|
{ localnets; };
|
|
};
|
|
</programlisting>
|
|
<note><simpara>The <command>sortlist</command> option
|
|
is not yet implemented in <acronym>BIND</acronym> 9.</simpara></note>
|
|
</sect3>
|
|
<sect3><title id="rrset_ordering">RRset Ordering</title>
|
|
<para>When multiple records are returned in an answer it may be
|
|
useful to configure the order of the records placed into the response.
|
|
For example, the records for a zone might be configured always to
|
|
be returned in the order they are defined in the zone file. Or perhaps
|
|
a random shuffle of the records as they are returned is wanted.
|
|
The <command>rrset-order</command> statement permits configuration
|
|
of the ordering made of the records in a multiple record response.
|
|
The default, if no ordering is defined, is a cyclic ordering (round
|
|
robin).</para>
|
|
<para>An <command>order_spec</command> is defined as follows:</para>
|
|
<programlisting><optional> class <replaceable>class_name</replaceable> </optional><optional> type <replaceable>type_name</replaceable> </optional><optional> name <replaceable>"domain_name"</replaceable></optional>
|
|
order <replaceable>ordering</replaceable>
|
|
</programlisting>
|
|
<para>If no class is specified, the default is <command>ANY</command>.
|
|
If no type is specified, the default is <command>ANY</command>.
|
|
If no name is specified, the default is "<command>*</command>".</para>
|
|
<para>The legal values for <command>ordering</command> are:</para>
|
|
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.750in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.750in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>fixed</command></para></entry>
|
|
<entry colname = "2"><para>Records are returned in the order they
|
|
are defined in the zone file.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>random</command></para></entry>
|
|
<entry colname = "2"><para>Records are returned in some random order.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>cyclic</command></para></entry>
|
|
<entry colname = "2"><para>Records are returned in a round-robin
|
|
order.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>For example:</para>
|
|
<programlisting>rrset-order {
|
|
class IN type A name "host.example.com" order random;
|
|
order cyclic;
|
|
};
|
|
</programlisting>
|
|
<para>will cause any responses for type A records in class IN that
|
|
have "<systemitem class="systemname">host.example.com</systemitem>" as a suffix, to always be returned
|
|
in random order. All other records are returned in cyclic order.</para>
|
|
<para>If multiple <command>rrset-order</command> statements appear,
|
|
they are not combined-the last one applies.</para>
|
|
<para>If no <command>rrset-order</command> statement is specified,
|
|
then a default one of:
|
|
<programlisting>rrset-order { class ANY type ANY name "*"; order cyclic ; };
|
|
</programlisting>
|
|
is used.</para>
|
|
<note><simpara>The <command>rrset-order</command> statement
|
|
is not yet implemented in <acronym>BIND</acronym> 9.</simpara></note>
|
|
</sect3>
|
|
<sect3><title id="tuning">Tuning</title>
|
|
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.250in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.250in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>lame-ttl</command></para></entry>
|
|
<entry colname = "2"><para>Sets the number of seconds to cache a
|
|
lame server indication. 0 disables caching. (This is NOT recommended.)
|
|
Default is <literal>600</literal> (10 minutes). Maximum value is
|
|
<programlisting><literal>1800</literal></programlisting> (30
|
|
minutes).</para>
|
|
<note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note>
|
|
</entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-ncache-ttl</command></para></entry>
|
|
<entry colname = "2"><para>To reduce network traffic and increase performance
|
|
the server stores negative answers. <command>max-ncache-ttl</command> is
|
|
used to set a maximum retention time for these answers in the server
|
|
in seconds. The default
|
|
<command>max-ncache-ttl</command> is <programlisting><literal>10800</literal></programlisting> seconds
|
|
(3 hours).
|
|
<command>max-ncache-ttl</command> cannot exceed 7 days and will
|
|
be silently truncated to 7 days if set to a greater value.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-cache-ttl</command></para></entry>
|
|
<entry colname = "2"><para><command>max-cache-ttl</command> sets
|
|
the maximum time for which the server will cache ordinary (positive)
|
|
answers. The default is one week (7 days).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>min-roots</command></para></entry>
|
|
<entry colname = "2"><para>The minimum number of root servers that
|
|
is required for a request for the root servers to be accepted. Default
|
|
is <userinput>2</userinput>.</para>
|
|
<note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym>
|
|
9.</simpara></note>
|
|
</entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>sig-validity-interval</command></para></entry>
|
|
<entry colname = "2"><para>Specifies the number of days into the
|
|
future when DNSSEC signatures automatically generated as a result
|
|
of dynamic updates (<xref linkend="dynamic_update"/>)
|
|
will expire. The default is <literal>30</literal> days. The signature
|
|
inception time is unconditionally set to one hour before the current time
|
|
to allow for a limited amount of clock skew.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></sect3>
|
|
<sect3>
|
|
<title>Deprecated Features</title>
|
|
|
|
<para><command>use-ixfr</command> is deprecated in <acronym>BIND</acronym> 9. If
|
|
you need to disable IXFR to a particular server or servers see
|
|
the information on the <command>provide-ixfr</command> option
|
|
in <xref
|
|
linkend="server_statement_definition_and_usage"/>. See also
|
|
<xref linkend="incremental_zone_transfers"/>.</para>
|
|
|
|
</sect3></sect2>
|
|
<sect2>
|
|
<title><command id="server_statement_grammar">server</command>
|
|
Statement Grammar</title>
|
|
<programlisting>server <replaceable>ip_addr</replaceable> {
|
|
<optional> bogus <replaceable>yes_or_no</replaceable> ; </optional>
|
|
<optional> provide-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
|
|
<optional> request-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
|
|
<optional> transfers <replaceable>number</replaceable> ; </optional>
|
|
<optional> transfer-format <replaceable>( one-answer | many-answers )</replaceable> ; ]</optional>
|
|
<optional> keys <replaceable>{ string ; <optional> string ; <optional>...</optional></optional> }</replaceable> ; </optional>
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2><title><command id="server_statement_definition_and_usage">server</command> Statement Definition
|
|
and Usage</title>
|
|
<para>The <command>server</command> statement defines the characteristics
|
|
to be associated with a remote nameserver.</para>
|
|
<para>If you discover that a remote server is giving out bad data,
|
|
marking it as bogus will prevent further queries to it. The default
|
|
value of <command>bogus</command> is <command>no</command>.</para>
|
|
<note>
|
|
<simpara>The <command>bogus</command> clause
|
|
is not yet implemented in <acronym>BIND</acronym> 9.</simpara></note>
|
|
<para>The <command>provide-ixfr</command> clause determines whether
|
|
the local server, acting as master, will respond with an incremental
|
|
zone transfer when the given remote server, a slave, requests it.
|
|
If set to <command>yes</command>, incremental transfer will be provided
|
|
whenever possible. If set to <command>no</command>, all transfers
|
|
to the remote server will be nonincremental. If not set, the value
|
|
of the <command>provide-ixfr </command>option in the global options block
|
|
is used as a default.</para>
|
|
<para>The <command>request-ixfr</command> clause determines whether
|
|
the local server, acting as a slave, will request incremental zone
|
|
transfers from the given remote server, a master. If not set, the
|
|
value of the <command>request-ixfr</command> option in the global
|
|
options block is used as a default.</para>
|
|
<para>IXFR requests to servers that do not support IXFR will automatically
|
|
fall back to AXFR. Therefore, there is no need to manually list
|
|
which servers support IXFR and which ones do not; the global default
|
|
of <command>yes</command> should always work. The purpose of the <command>provide-ixfr</command> and <command>request-ixfr</command> clauses is
|
|
to make it possible to disable the use of IXFR even when both master
|
|
and slave claim to support it, for example if one of the servers
|
|
is buggy and crashes or corrupts data when IXFR is used.</para>
|
|
<para>The server supports two zone transfer methods. The first, <command>one-answer</command>,
|
|
uses one DNS message per resource record transferred. <command>many-answers</command> packs
|
|
as many resource records as possible into a message. <command>many-answers</command> is
|
|
more efficient, but is only known to be understood by <acronym>BIND</acronym> 9, <acronym>BIND</acronym>
|
|
8.x, and patched versions of <acronym>BIND</acronym> 4.9.5. You can specify which method
|
|
to use for a server with the <command>transfer-format </command>option.
|
|
If <command>transfer-format </command>is not specified, the <command>transfer-format</command> specified
|
|
by the <command>options</command> statement will be used.</para>
|
|
<para><command>transfers</command> is used to limit the number of
|
|
concurrent inbound zone transfers from the specified server. If
|
|
no <command>transfers</command> clause is specified, the limit is
|
|
set according to the <command>transfers-per-ns</command> option.</para>
|
|
<para>The <command>keys</command> clause is used to identify a <command>key_id </command>defined
|
|
by the <command>key</command> statement, to be used for transaction
|
|
security when talking to the remote server. The <command>key</command> statement
|
|
must come before the <command>server</command> statement that references
|
|
it. When a request is sent to the remote server, a request signature
|
|
will be generated using the key specified here and appended to the
|
|
message. A request originating from the remote server is not required
|
|
to be signed by this key.</para>
|
|
<para>Although the grammar of the <command>keys</command> clause
|
|
allows for multiple keys, only a single key per server is currently
|
|
supported.</para></sect2>
|
|
<sect2><title><command>trusted-keys</command> Statement Grammar</title>
|
|
<programlisting>trusted-keys {
|
|
<replaceable>string</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ;
|
|
<optional> <replaceable>string</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; <optional>...</optional></optional>
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2><title><command>trusted-keys</command> Statement Definition
|
|
and Usage</title>
|
|
<para>The <command>trusted-keys</command> statement defines DNSSEC
|
|
security roots. DNSSEC is described in <xref linkend="DNSSEC"/>. A security root is defined when the public key for a non-authoritative
|
|
zone is known, but cannot be securely obtained through DNS, either
|
|
because it is the DNS root zone or its parent zone is unsigned.
|
|
Once a key has been configured as a trusted key, it is treated as
|
|
if it had been validated and proven secure. The resolver attempts
|
|
DNSSEC validation on all DNS data in subdomains of a security root.</para>
|
|
<para>The <command>trusted-keys</command> statement can contain
|
|
multiple key entries, each consisting of the key's domain name,
|
|
flags, protocol, algorithm, and the base-64 representation of the
|
|
key data.</para></sect2>
|
|
<sect2><title><command>view</command> Statement Grammar</title>
|
|
<programlisting>view <replaceable>view_name</replaceable> {
|
|
match-clients { <replaceable>address_match_list</replaceable> } ;
|
|
<optional> <replaceable>view_option</replaceable>; ...</optional>
|
|
<optional> <replaceable>zone_statement</replaceable>; ...</optional>
|
|
};
|
|
</programlisting></sect2>
|
|
<sect2><title><command>view</command> Statement Definition and Usage</title>
|
|
<para>The <command>view</command> statement is a powerful new feature
|
|
of <acronym>BIND</acronym> 9 that lets a name server answer a DNS query differently
|
|
depending on who is asking. It is particularly useful for implementing
|
|
split DNS setups without having to run multiple servers.</para>
|
|
<para>Each <command>view</command> statement defines a view of the
|
|
DNS namespace that will be seen by those clients whose IP addresses
|
|
match the <varname>address_match_list</varname> of the view's <command>match-clients</command> clause.
|
|
The order of the <command>view</command> statements is significant-a
|
|
client query will be resolved in the context of the first <command>view</command> whose <command>match-clients </command>list
|
|
matches the client's IP address.</para>
|
|
<para>Zones defined within a <command>view</command> statement will
|
|
be only be accessible to clients that match the <command>view</command>.
|
|
By defining a zone of the same name in multiple views, different
|
|
zone data can be given to different clients, for example, "internal"
|
|
and "external" clients in a split DNS setup.</para>
|
|
<para>Many of the options given in the <command>options</command> statement
|
|
can also be used within a <command>view</command> statement, and then
|
|
apply only when resolving queries with that view. When no a view-specific
|
|
value is given, the value in the <command>options</command> statement
|
|
is used as a default. Also, zone options can have default values specified
|
|
in the <command>view</command> statement; these view-specific defaults
|
|
take precedence over those in the <command>options</command> statement. </para>
|
|
<para>Views are class specific. If no class is given, class IN
|
|
is assumed.</para>
|
|
<para>If there are no <command>view</command> statements in the
|
|
config file, a default view that matches any client is automatically
|
|
created in class IN, and any <command>zone</command> statements
|
|
specified on the top level of the configuration file are considered
|
|
to be part of this default view. If any explicit <command>view</command> statements
|
|
are present, all <command>zone</command> statements must occur inside <command>view</command> statements.</para>
|
|
<para>Here is an example of a typical split DNS setup implemented
|
|
using <command>view</command> statements.</para>
|
|
<programlisting>view "internal" {
|
|
// This should match our internal networks.
|
|
match-clients { 10.0.0.0/8; };
|
|
// Provide recursive service to internal clients only.
|
|
recursion yes;
|
|
// Provide a complete view of the example.com zone
|
|
// including addresses of internal hosts.
|
|
zone "example.com" {
|
|
type master;
|
|
file "example-internal.db";
|
|
};
|
|
};
|
|
view "external" {
|
|
match-clients { any; };
|
|
// Refuse recursive service to external clients.
|
|
recursion no;
|
|
// Provide a restricted view of the example.com zone
|
|
// containing only publicly accessible hosts.
|
|
zone "example.com" {
|
|
type master;
|
|
file "example-external.db";
|
|
};
|
|
};
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2><title id="zone_statement_grammar"><command>zone</command>
|
|
Statement Grammar</title>
|
|
<programlisting>zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> <optional>{
|
|
type ( master | slave | hint | stub | forward ) ;
|
|
<optional> allow-query { <replaceable>address_match_list</replaceable> } ; </optional>
|
|
<optional> allow-transfer { <replaceable>address_match_list</replaceable> } ; </optional>
|
|
<optional> allow-update { <replaceable>address_match_list</replaceable> } ; </optional>
|
|
<optional> update-policy { <replaceable>update_policy_rule</replaceable> <optional>...</optional> } ; </optional>
|
|
<optional> allow-update-forwarding { <replaceable>address_match_list</replaceable> } ; </optional>
|
|
<optional> also-notify { <optional> <replaceable>ip_addr</replaceable> ; <optional><replaceable>ip_addr</replaceable> ; <optional>...</optional></optional></optional> } ; </optional>
|
|
<optional> check-names (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
|
|
<optional> dialup <replaceable>true_or_false</replaceable> ; </optional>
|
|
<optional> file <replaceable>string</replaceable> ; </optional>
|
|
<optional> forward (<constant>only</constant>|<constant>first</constant>) ; </optional>
|
|
<optional> forwarders { <optional> <replaceable>ip_addr</replaceable> ; <optional> <replaceable>ip_addr</replaceable> ; <optional>...</optional></optional></optional> } ; </optional>
|
|
<optional> ixfr-base <replaceable>string</replaceable> ; </optional>
|
|
<optional> ixfr-tmp-file <replaceable>string</replaceable> ; </optional>
|
|
<optional> maintain-ixfr-base <replaceable>true_or_false</replaceable> ; </optional>
|
|
<optional> masters <optional>port <replaceable>number</replaceable></optional> { <replaceable>ip_addr</replaceable> ; <optional><replaceable>ip_addr</replaceable> ; <optional>...</optional></optional> } ; </optional>
|
|
<optional> max-ixfr-log-size <replaceable>number</replaceable> ; </optional>
|
|
<optional> max-transfer-idle-in <replaceable>number</replaceable> ; </optional>
|
|
<optional> max-transfer-idle-out <replaceable>number</replaceable> ; </optional>
|
|
<optional> max-transfer-time-in <replaceable>number</replaceable> ; </optional>
|
|
<optional> max-transfer-time-out <replaceable>number</replaceable> ; </optional>
|
|
<optional> notify <replaceable>true_or_false</replaceable> ; </optional>
|
|
<optional> pubkey <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; </optional>
|
|
<optional> transfer-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) ; </optional>
|
|
<optional> transfer-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) ; </optional>
|
|
<optional> sig-validity-interval <replaceable>number</replaceable> ; </optional>
|
|
}</optional>;
|
|
</programlisting>
|
|
</sect2>
|
|
<sect2><title><command>zone</command> Statement Definition and Usage</title>
|
|
<sect3><title>Zone Types</title>
|
|
<informaltable colsep = "0" rowsep = "0">
|
|
<tgroup cols = "2" colsep = "0" rowsep = "0"
|
|
tgroupstyle = "3Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.908in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "4.217in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>master</varname></para></entry>
|
|
<entry colname = "2"><para>The server has a master copy of the data
|
|
for the zone and will be able to provide authoritative answers for
|
|
it.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>slave</varname></para></entry>
|
|
<entry colname = "2"><para>A slave zone is a replica of a master
|
|
zone. The masters list specifies one or more IP addresses that the
|
|
slave contacts to update its copy of the zone. If a port is specified,
|
|
the slave then checks to see if the zone is current and zone transfers
|
|
will be done to the port given. If a file is specified, then the
|
|
replica will be written to this file whenever the zone is changed,
|
|
and reloaded from this file on a server restart. Use of a file is
|
|
recommended, since it often speeds server start-up and eliminates
|
|
a needless waste of bandwidth. Note that for large numbers (in the
|
|
tens or hundreds of thousands) of zones per server, it is best to
|
|
use a two level naming scheme for zone file names. For example,
|
|
a slave server for the zone <systemitem class="systemname">example.com</systemitem> might place
|
|
the zone contents into a file called
|
|
<filename>ex/example.com</filename> where <filename>ex/ </filename>is
|
|
just the first two letters of the zone name. (Most operating systems
|
|
behave very slowly if you put 100K files into a single directory.)</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>stub</varname></para></entry>
|
|
<entry colname = "2"><para>A stub zone is similar to a slave zone,
|
|
except that it replicates only the NS records of a master zone instead
|
|
of the entire zone. Stub zones are not a standard part of the DNS;
|
|
they are a peculiarity of <acronym>BIND</acronym> 4 and <acronym>BIND</acronym> 8 that relies heavily
|
|
on the particular way the zone data is structured in those servers.
|
|
<acronym>BIND</acronym> 9 attempts to emulate the <acronym>BIND</acronym> 4/8 stub zone feature for backwards compatibility,
|
|
but we do not recommend its use in new configurations.</para><para>In
|
|
<acronym>BIND</acronym> 4/8, zone transfers of a parent zone included the NS records
|
|
from stub children of that zone. This meant that, in some cases,
|
|
users could get away with configuring child stubs only in the master
|
|
server for the parent zone. <acronym>BIND</acronym> 9 never mixes together zone data
|
|
from different zones in this way. Therefore, if a <acronym>BIND</acronym> 9 master
|
|
serving a parent zone has child stub zones configured, all the slave
|
|
servers for the parent zone also need to have the same child stub
|
|
zones configured..</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>forward</varname></para></entry>
|
|
<entry colname = "2"><para>A "forward zone" is a way to configure
|
|
forwarding on a per-domain basis. A <command>zone</command> statement
|
|
of type <command>forward</command> can contain a <command>forward</command> and/or <command>forwarders</command> statement,
|
|
which will apply to queries within the domain given by the zone
|
|
name. If no <command>forwarders</command> statement is present or
|
|
an empty list for <command>forwarders</command> is given, then no
|
|
forwarding will be done for the domain, cancelling the effects of
|
|
any forwarders in the <command>options</command> statement. Thus
|
|
if you want to use this type of zone to change the behavior of the
|
|
global <command>forward</command> option (that is, "forward first
|
|
to", then "forward only", or vice versa, but want to use the same
|
|
servers as set globally) you need to respecify the global forwarders.</para>
|
|
<note>
|
|
<simpara>Domain-specific
|
|
forwarding is not yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>hint</varname></para></entry>
|
|
<entry colname = "2"><para>The initial set of root nameservers is
|
|
specified using a "hint zone". When the server starts up, it uses
|
|
the root hints to find a root nameserver and get the most recent
|
|
list of root nameservers. If no hint zone is specified for class
|
|
IN, the server users a compiled-in default set of root servers hints.
|
|
Classes other than IN have no built-in defaults hints.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></sect3>
|
|
<sect3><title>Class</title>
|
|
<para>The zone's name may optionally be followed by a class. If
|
|
a class is not specified, class <literal>IN</literal> (for <varname>Internet</varname>),
|
|
is assumed. This is correct for the vast majority of cases.</para>
|
|
<para>The <literal>hesiod</literal> class is
|
|
named for an information service from MIT's Project Athena. It is
|
|
used to share information about various systems databases, such
|
|
as users, groups, printers and so on. The keyword
|
|
<literal>HS</literal> is
|
|
a synonym for hesiod.</para>
|
|
<para>Another MIT development is CHAOSnet, a LAN protocol created
|
|
in the mid-1970s. Zone data for it can be specified with the <literal>CHAOS</literal> class.</para></sect3>
|
|
<sect3>
|
|
<title>Zone Options</title>
|
|
<informaltable colsep = "0"
|
|
rowsep = "0">
|
|
<tgroup cols = "2" colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.653in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "2.847in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>allow-query</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>allow-query</command><xref linkend="access_control"/></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>allow-transfer</command></para></entry>
|
|
<entry colname = "2"><para>See the description of <command>allow-transfer</command><xref linkend="access_control"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>allow-update</command></para></entry>
|
|
<entry colname = "2"><para>Specifies which hosts are allowed to
|
|
submit Dynamic DNS updates for master zones. The default is to deny
|
|
updates from all hosts.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>update-policy</command></para></entry>
|
|
<entry colname = "2"><para>Specifies a "Simple Secure Update" policy. See
|
|
<xref linkend="dynamic_update_policies"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>allow-update-forwarding</command></para></entry>
|
|
<entry colname = "2"><para>Specifies which hosts are allowed to
|
|
submit Dynamic DNS updates to slave zones to be forwarded to the
|
|
master. The default is to deny update forwarding from all hosts.</para><note>
|
|
<simpara>Update
|
|
forwarding is not yet implemented.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>also-notify</command></para></entry>
|
|
<entry colname = "2"><para>Only meaningful if <command>notify</command> is
|
|
active for this zone. The set of machines that will receive a
|
|
<programlisting><literal>DNS NOTIFY</literal></programlisting> message
|
|
for this zone is made up of all the listed nameservers (other than
|
|
the primary master) for the zone plus any IP addresses specified
|
|
with <command>also-notify</command>.
|
|
<command>also-notify</command> is not meaningful for stub zones.
|
|
The default is the empty list<varname>.</varname></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>check-names</command></para></entry>
|
|
<entry colname = "2"><para>See <xref
|
|
linkend="name_checking"/>.</para>
|
|
<note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>dialup</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>dialup</command> under <xref linkend="boolean_options"/>.
|
|
<note><simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>forward</command></para></entry>
|
|
<entry colname = "2"><para>Only meaningful if the zone has a forwarders
|
|
list. The <command>only</command> value causes the lookup to fail
|
|
after trying the forwarders and getting no answer, while <command>first</command> would
|
|
allow a normal lookup to be tried.</para>
|
|
<note>
|
|
<simpara>Not yet implemented in <acronym>BIND</acronym> 9.</simpara></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>forwarders</command></para></entry>
|
|
<entry colname = "2"><para>Used to override the list of global forwarders.
|
|
If it is not specified in a zone of type <command>forward</command>,
|
|
no forwarding is done for the zone; the global options are not used.</para><note>
|
|
<para>Not
|
|
yet implemented in <acronym>BIND</acronym> 9.</para></note></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>ixfr-base</command></para></entry>
|
|
<entry colname = "2"><para>Was used in <acronym>BIND</acronym> 8 to specify the name
|
|
of the transaction log (journal) file for dynamic update and IXFR.
|
|
<acronym>BIND</acronym> 9 ignores the option and constructs the name of the journal
|
|
file by appending ".<filename>jnl</filename>" to the name of the
|
|
zone file.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-time-in</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>max-transfer-time-in</command> under <xref linkend="zone_transfers"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-idle-in</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>max-transfer-idle-in</command> under <xref linkend="zone_transfers"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-time-out</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>max-transfer-time-out</command> under <xref linkend="zone_transfers"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>max-transfer-idle-out</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>max-transfer-idle-out</command> under <xref linkend="zone_transfers"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>notify</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>notify</command> under <xref linkend="boolean_options"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>pubkey</command></para></entry>
|
|
<entry colname = "2"><para>In <acronym>BIND</acronym> 8, this option was intended for specifying
|
|
a public zone key for verification of signatures in DNSSEC signed
|
|
zones when they are loaded from disk. <acronym>BIND</acronym> 9 does not verify signatures
|
|
on loading and ignores the option.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>sig-validity-interval</command></para></entry>
|
|
<entry colname = "2"><para>See the description of
|
|
<command>sig-validity-interval</command> under <xref linkend="tuning"/>.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>transfer-source</command></para></entry>
|
|
<entry colname = "2"><para>Determines which local address will be bound
|
|
to the IPv4 TCP connection used to fetch this zone. If not set,
|
|
it defaults to a system controlled value which will usually be the
|
|
address of the interface "closest to" the remote end. If the remote
|
|
end user is an <command>allow-transfer</command> option for this
|
|
zone, the address, supplied by the <command>transfer-source</command> option,
|
|
needs to be specified in that <command>allow-transfer</command> option.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>transfer-source-v6</para></entry>
|
|
<entry colname = "2"><para>Similar to transfer-source, but for zone transfers
|
|
performed using IPv6.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable></sect3>
|
|
<sect3><title id="dynamic_update_policies">Dynamic Update Policies</title>
|
|
<para><acronym>BIND</acronym> 9 supports two alternative methods of granting clients
|
|
the right to perform dynamic updates to a zone, configured by the <command>allow-update</command> and <command>update-policy</command> option,
|
|
respectively.</para>
|
|
<para>The <command>allow-update</command> clause works the same
|
|
way as in previous versions of <acronym>BIND</acronym>. It grants given clients the
|
|
permission to update any record of any name in the zone.</para>
|
|
<para>The <command>update-policy</command> clause is new in <acronym>BIND</acronym>
|
|
9 and allows more fine-grained control over what updates are allowed.
|
|
A set of rules is specified, where each rule either grants or denies
|
|
permissions for one or more names to be updated by one or more identities.
|
|
If the dynamic update request message is signed (that is, it includes
|
|
either a TSIG or SIG(0) record), the identity of the signer can
|
|
be determined.</para>
|
|
<para>Rules are specified in the <command>update-policy</command> zone
|
|
option, and are only meaningful for master zones. When the <command>update-policy</command> statement
|
|
is present, it is a configuration error for the <command>allow-update</command> statement
|
|
to be present. The <command>update-policy</command> statement only
|
|
examines the signer of a message; the source address is not relevant.</para>
|
|
<para>This is how a rule definition looks:</para>
|
|
<programlisting>
|
|
( <command>grant</command> | <command>deny</command> ) <replaceable>identity</replaceable> <replaceable>nametype</replaceable> <replaceable>name</replaceable> <optional> <replaceable>types</replaceable> </optional>
|
|
</programlisting>
|
|
<para>Each rule grants or denies privileges. Once a message has
|
|
successfully matched a rule, the operation is immediately granted
|
|
or denied and no further rules are examined. A rule is matched
|
|
when the signer matches the identity field, the name matches the
|
|
name field, and the type is specified in the type field.</para>
|
|
<para>The identity field specifies a name or a wildcard name. The
|
|
nametype field has 4 values: <varname>name</varname>, <varname>subdomain</varname>, <varname>wildcard</varname>,
|
|
and <varname>self</varname>
|
|
</para>
|
|
<informaltable>
|
|
<tgroup cols = "2" colsep = "0"
|
|
rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.819in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.681in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>name</varname></para></entry>
|
|
<entry colname = "2"><para>Matches when the updated name is the
|
|
same as the name in the name field.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>subdomain</varname></para></entry>
|
|
<entry colname = "2"><para>Matches when the updated name is a subdomain
|
|
of the name in the name field.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>wildcard</varname></para></entry>
|
|
<entry colname = "2"><para>Matches when the updated name is a valid
|
|
expansion of the wildcard name in the name field.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><varname>self</varname></para></entry>
|
|
<entry colname = "2"><para>Matches when the updated name is the
|
|
same as the message signer. The name field is ignored.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>If no types are specified, the rule matches all types except
|
|
SIG, NS, SOA, and NXT. Types may be specified by name, including
|
|
"ANY" (ANY matches all types except NXT, which can never be updated).
|
|
</para>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
<sect1>
|
|
<title>Zone File</title>
|
|
<sect2>
|
|
<title id="types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</title>
|
|
<para>This section, largely borrowed from RFC 1034, describes the
|
|
concept of a Resource Record (RR) and explains when each is used.
|
|
Since the publication of RFC 1034, several new RRs have been identified
|
|
and implemented in the DNS. These are also included.</para>
|
|
<sect3>
|
|
<title>Resource Records</title>
|
|
|
|
<para>A domain name identifies a node. Each node has a set of
|
|
resource information, which may be empty. The set of resource
|
|
information associated with a particular name is composed of
|
|
separate RRs. The order of RRs in a set is not significant and
|
|
need not be preserved by nameservers, resolvers, or other
|
|
parts of the DNS. However, sorting of multiple RRs is
|
|
permitted for optimization purposes, for example, to specify
|
|
that a particular nearby server be tried first. See <xref
|
|
linkend="the_sortlist_statement"/> and <xref
|
|
linkend="rrset_ordering"/>.</para>
|
|
|
|
<para>The components of a Resource Record are:</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.000in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.500in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>owner name</para></entry>
|
|
<entry colname = "2"><para>the domain name where the RR is found.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>type</para></entry>
|
|
<entry colname = "2"><para>an encoded 16 bit value that specifies
|
|
the type of the resource in this resource record. Types refer to
|
|
abstract resources.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>TTL</para></entry>
|
|
<entry colname = "2"><para>the time to live of the RR. This field
|
|
is a 32 bit integer in units of seconds, and is primarily used by
|
|
resolvers when they cache RRs. The TTL describes how long a RR can
|
|
be cached before it should be discarded.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>class</para></entry>
|
|
<entry colname = "2"><para>an encoded 16 bit value that identifies
|
|
a protocol family or instance of a protocol.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>RDATA</para></entry>
|
|
<entry colname = "2"><para>the type and sometimes class-dependent
|
|
data that describes the resource.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>The following are <emphasis>types</emphasis> of valid RRs
|
|
(some of these listed, although not obsolete, are experimental (x)
|
|
or historical (h) and no longer in general use):</para>
|
|
<informaltable colsep = "0"
|
|
rowsep = "0"><tgroup cols = "2" colsep = "0"
|
|
rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.875in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.625in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>A</para></entry>
|
|
<entry colname = "2"><para>a host address.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>A6</para></entry>
|
|
<entry colname = "2"><para>an IPv6 address.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>AAAA</para></entry>
|
|
<entry colname = "2"><para>Obsolete format of IPv6 address</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>AFSDB</para></entry>
|
|
<entry colname = "2"><para>(x) location of AFS database servers.
|
|
Experimental.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>CNAME</para></entry>
|
|
<entry colname = "2"><para>identifies the canonical name of an alias.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>DNAME</para></entry>
|
|
<entry colname = "2"><para>for delegation of reverse addresses.
|
|
Replaces the domain name specified with another name to be looked
|
|
up. Described in RFC 2672.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>HINFO</para></entry>
|
|
<entry colname = "2"><para>identifies the CPU and OS used by a host.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>ISDN</para></entry>
|
|
<entry colname = "2"><para>(x) representation of ISDN addresses.
|
|
Experimental.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>KEY</para></entry>
|
|
<entry colname = "2"><para>stores a public key associated with a
|
|
DNS name.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>LOC</para></entry>
|
|
<entry colname = "2"><para>(x) for storing GPS info. See RFC 1876.
|
|
Experimental.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>MX</para></entry>
|
|
<entry colname = "2"><para>identifies a mail exchange for the domain.
|
|
See RFC 974 for details.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>NS</para></entry>
|
|
<entry colname = "2"><para>the authoritative nameserver for the
|
|
domain.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>NXT</para></entry>
|
|
<entry colname = "2"><para>used in DNSSEC to securely indicate that
|
|
RRs with an owner name in a certain name interval do not exist in
|
|
a zone and indicate what RR types are present for an existing name.
|
|
See RFC 2535 for details.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>PTR</para></entry>
|
|
<entry colname = "2"><para>a pointer to another part of the domain
|
|
name space.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>RP</para></entry>
|
|
<entry colname = "2"><para>(x) information on persons responsible
|
|
for the domain. Experimental.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>RT</para></entry>
|
|
<entry colname = "2"><para>(x) route-through binding for hosts that
|
|
do not have their own direct wide area network addresses. Experimental.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>SIG</para></entry>
|
|
<entry colname = "2"><para>("signature") contains data authenticated
|
|
in the secure DNS. See RFC 2535 for details.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>SOA</para></entry>
|
|
<entry colname = "2"><para>identifies the start of a zone of authority.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>SRV</para></entry>
|
|
<entry colname = "2"><para>information about well known network
|
|
services (replaces WKS).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>WKS</para></entry>
|
|
<entry colname = "2"><para>(h) information about which well known
|
|
network services, such as SMTP, that a domain supports. Historical,
|
|
replaced by newer RR SRV.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>X25</para></entry>
|
|
<entry colname = "2"><para>(x) representation of X.25 network addresses. Experimental.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>The following <emphasis>classes</emphasis> of resource records
|
|
are currently valid in the DNS:</para><informaltable colsep = "0"
|
|
rowsep = "0"><tgroup cols = "2" colsep = "0" rowsep = "0"
|
|
tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.875in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.625in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>IN</para></entry>
|
|
<entry colname = "2"><para>the Internet system.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry nameend = "2" namest = "1"><para>For information about other,
|
|
older classes of RRs, see <xref linkend="classes_of_resource_records"/>.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para><emphasis>RDATA</emphasis> is the type-dependent or class-dependent
|
|
data that describes the resource:</para><informaltable colsep = "0"
|
|
rowsep = "0"><tgroup cols = "2" colsep = "0" rowsep = "0"
|
|
tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.875in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "3.625in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>A</para></entry>
|
|
<entry colname = "2"><para>for the IN class, a 32 bit IP address.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>A6</para></entry>
|
|
<entry colname = "2"><para>maps a domain name to an IPv6 address,
|
|
with a provision for indirection for leading "prefix" bits.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>CNAME</para></entry>
|
|
<entry colname = "2"><para>a domain name.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>DNAME</para></entry>
|
|
<entry colname = "2"><para>provides alternate naming to an entire
|
|
subtree of the domain name space, rather than to a single node.
|
|
It causes some suffix of a queried name to be substituted with
|
|
a name from the DNAME record's RDATA.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>MX</para></entry>
|
|
<entry colname = "2"><para>a 16 bit preference value (lower is better)
|
|
followed by a host name willing to act as a mail exchange for the
|
|
owner domain.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>NS</para></entry>
|
|
<entry colname = "2"><para>a fully qualified domain name.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>PTR</para></entry>
|
|
<entry colname = "2"><para>a fully qualified domain name.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>SOA</para></entry>
|
|
<entry colname = "2"><para>several fields.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>The owner name is often implicit, rather than forming an integral
|
|
part of the RR. For example, many nameservers internally form tree
|
|
or hash structures for the name space, and chain RRs off nodes.
|
|
The remaining RR parts are the fixed header (type, class, TTL)
|
|
which is consistent for all RRs, and a variable part (RDATA) that
|
|
fits the needs of the resource being described.</para>
|
|
<para>The meaning of the TTL field is a time limit on how long an
|
|
RR can be kept in a cache. This limit does not apply to authoritative
|
|
data in zones; it is also timed out, but by the refreshing policies
|
|
for the zone. The TTL is assigned by the administrator for the
|
|
zone where the data originates. While short TTLs can be used to
|
|
minimize caching, and a zero TTL prohibits caching, the realities
|
|
of Internet performance suggest that these times should be on the
|
|
order of days for the typical host. If a change can be anticipated,
|
|
the TTL can be reduced prior to the change to minimize inconsistency
|
|
during the change, and then increased back to its former value following
|
|
the change.</para>
|
|
<para>The data in the RDATA section of RRs is carried as a combination
|
|
of binary strings and domain names. The domain names are frequently
|
|
used as "pointers" to other data in the DNS.</para></sect3>
|
|
<sect3><title>Textual expression of RRs</title>
|
|
<para>RRs are represented in binary form in the packets of the DNS
|
|
protocol, and are usually represented in highly encoded form when
|
|
stored in a nameserver or resolver. In the examples provided in
|
|
RFC 1034, a style similar to that used in master files was employed
|
|
in order to show the contents of RRs. In this format, most RRs
|
|
are shown on a single line, although continuation lines are possible
|
|
using parentheses.</para>
|
|
<para>The start of the line gives the owner of the RR. If a line
|
|
begins with a blank, then the owner is assumed to be the same as
|
|
that of the previous RR. Blank lines are often included for readability.</para>
|
|
<para>Following the owner, we list the TTL, type, and class of the
|
|
RR. Class and type use the mnemonics defined above, and TTL is
|
|
an integer before the type field. In order to avoid ambiguity in
|
|
parsing, type and class mnemonics are disjoint, TTLs are integers,
|
|
and the type mnemonic is always last. The IN class and TTL values
|
|
are often omitted from examples in the interests of clarity.</para>
|
|
<para>The resource data or RDATA section of the RR are given using
|
|
knowledge of the typical representation for the data.</para>
|
|
<para>For example, we might show the RRs carried in a message as:</para> <informaltable
|
|
colsep = "0" rowsep = "0"><tgroup cols = "3"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.381in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "1.020in"/>
|
|
<colspec colname = "3" colnum = "3" colsep = "0" colwidth = "2.099in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>ISI.EDU.</literal></para></entry>
|
|
<entry colname = "2"><para><literal>MX</literal></para></entry>
|
|
<entry colname = "3"><para><literal>10 VENERA.ISI.EDU.</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para></para></entry>
|
|
<entry colname = "2"><para><literal>MX</literal></para></entry>
|
|
<entry colname = "3"><para><literal>10 VAXA.ISI.EDU</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>VENERA.ISI.EDU</literal></para></entry>
|
|
<entry colname = "2"><para><literal>A</literal></para></entry>
|
|
<entry colname = "3"><para><literal>128.9.0.32</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para></para></entry>
|
|
<entry colname = "2"><para><literal>A</literal></para></entry>
|
|
<entry colname = "3"><para><literal>10.1.0.52</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>VAXA.ISI.EDU</literal></para></entry>
|
|
<entry colname = "2"><para><literal>A</literal></para></entry>
|
|
<entry colname = "3"><para><literal>10.2.0.27</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para></para></entry>
|
|
<entry colname = "2"><para><literal>A</literal></para></entry>
|
|
<entry colname = "3"><para><literal>128.9.0.33</literal></para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>The MX RRs have an RDATA section which consists of a 16 bit
|
|
number followed by a domain name. The address RRs use a standard
|
|
IP address format to contain a 32 bit internet address.</para>
|
|
<para>This example shows six RRs, with two RRs at each of three
|
|
domain names.</para>
|
|
<para>Similarly we might see:</para><informaltable colsep = "0"
|
|
rowsep = "0"><tgroup cols = "3" colsep = "0" rowsep = "0"
|
|
tgroupstyle = "4Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.491in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "1.067in"/>
|
|
<colspec colname = "3" colnum = "3" colsep = "0" colwidth = "2.067in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>XX.LCS.MIT.EDU. IN</literal></para></entry>
|
|
<entry colname = "2"><para><literal>A</literal></para></entry>
|
|
<entry colname = "3"><para><literal>10.0.0.44</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>CH</literal></para></entry>
|
|
<entry colname = "2"><para><literal>A</literal></para></entry>
|
|
<entry colname = "3"><para><literal>MIT.EDU. 2420</literal></para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>This example shows two addresses for <systemitem class="systemname">XX.LCS.MIT.EDU</systemitem>,
|
|
each of a different class.</para></sect3></sect2>
|
|
<sect2><title>Discussion of MX Records</title>
|
|
<para>As described above, domain servers store information as a
|
|
series of resource records, each of which contains a particular
|
|
piece of information about a given domain name (which is usually,
|
|
but not always, a host). The simplest way to think of a RR is as
|
|
a typed pair of datum, a domain name matched with relevant data,
|
|
and stored with some additional type information to help systems determine
|
|
when the RR is relevant.</para>
|
|
<para>MX records are used to control delivery of email. The data
|
|
specified in the record is a priority and a domain name. The priority
|
|
controls the order in which email delivery is attempted, with the
|
|
lowest number first. If two priorities are the same, a server is
|
|
chosen randomly. If no servers at a given priority are responding,
|
|
the mail transport agent will fall back to the next largest priority.
|
|
Priority numbers do not have any absolute meaning - they are relevant
|
|
only respective to other MX records for that domain name. The domain
|
|
name given is the machine to which the mail will be delivered. It <emphasis>must</emphasis> have
|
|
an associated A record-a CNAME is not sufficient.</para>
|
|
<para>For a given domain, if there is both a CNAME record and an
|
|
MX record, the MX record is in error, and will be ignored. Instead,
|
|
the mail will be delivered to the server specified in the MX record
|
|
pointed to by the CNAME.</para>
|
|
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "5"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "3Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "1.708in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "0.444in"/>
|
|
<colspec colname = "3" colnum = "3" colsep = "0" colwidth = "0.444in"/>
|
|
<colspec colname = "4" colnum = "4" colsep = "0" colwidth = "0.976in"/>
|
|
<colspec colname = "5" colnum = "5" colsep = "0" colwidth = "1.553in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>example.com.</literal></para></entry>
|
|
<entry colname = "2"><para><literal>IN</literal></para></entry>
|
|
<entry colname = "3"><para><literal>MX</literal></para></entry>
|
|
<entry colname = "4"><para><literal>10</literal></para></entry>
|
|
<entry colname = "5"><para><literal>mail.example.com.</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para></para></entry>
|
|
<entry colname = "2"><para><literal>IN</literal></para></entry>
|
|
<entry colname = "3"><para><literal>MX</literal></para></entry>
|
|
<entry colname = "4"><para><literal>10</literal></para></entry>
|
|
<entry colname = "5"><para><literal>mail2.example.com.</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para></para></entry>
|
|
<entry colname = "2"><para><literal>IN</literal></para></entry>
|
|
<entry colname = "3"><para><literal>MX</literal></para></entry>
|
|
<entry colname = "4"><para><literal>20</literal></para></entry>
|
|
<entry colname = "5"><para><literal>mail.backup.org.</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>mail.example.com.</literal></para></entry>
|
|
<entry colname = "2"><para><literal>IN</literal></para></entry>
|
|
<entry colname = "3"><para><literal>A</literal></para></entry>
|
|
<entry colname = "4"><para><literal>10.0.0.1</literal></para></entry>
|
|
<entry colname = "5"><para></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>mail2.example.com.</literal></para></entry>
|
|
<entry colname = "2"><para><literal>IN</literal></para></entry>
|
|
<entry colname = "3"><para><literal>A</literal></para></entry>
|
|
<entry colname = "4"><para><literal>10.0.0.2</literal></para></entry>
|
|
<entry colname = "5"><para></para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable><para>For example:</para>
|
|
<para>Mail delivery will be attempted to <systemitem class="systemname">mail.example.com</systemitem> and <systemitem class="systemname">mail2.example.com</systemitem> (in
|
|
any order), and if neither of those succeed, delivery to <systemitem class="systemname">mail.backup.org</systemitem> will
|
|
be attempted.</para></sect2>
|
|
<sect2><title id="Setting_TTLs">Setting TTLs</title>
|
|
<para>The time to live of the RR field is a 32 bit integer represented
|
|
in units of seconds, and is primarily used by resolvers when they
|
|
cache RRs. The TTL describes how long a RR can be cached before it
|
|
should be discarded. The following three types of TTL are currently
|
|
used in a zone file.</para>
|
|
<informaltable colsep = "0" rowsep = "0"><tgroup cols = "2"
|
|
colsep = "0" rowsep = "0" tgroupstyle = "3Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.750in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "4.375in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>SOA</para></entry>
|
|
<entry colname = "2"><para>The last field in the SOA is the negative
|
|
caching TTL. This controls how long other servers will cache no-such-domain
|
|
(NXDOMAIN) responses from you.</para><para>The maximum time for
|
|
negative caching is 3 hours (3h).</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>$TTL</para></entry>
|
|
<entry colname = "2"><para>The $TTL directive at the top of the
|
|
zone file (before the SOA) gives a default TTL for every RR without
|
|
a specific TTL set.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para>RR TTLs</para></entry>
|
|
<entry colname = "2"><para>Each RR can have a TTL as the second
|
|
field in the RR, which will control how long other servers can cache
|
|
the it.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>All of these TTLs default to units of seconds, though units
|
|
can be explicitly specified, for example, <literal>1h30m</literal>. </para></sect2>
|
|
<sect2><title>Inverse Mapping in IPv4</title>
|
|
<para>Reverse name resolution (that is, translation from IP address
|
|
to name) is achieved by means of the <emphasis>in-addr.arpa</emphasis> domain
|
|
and PTR records. Entries in the in-addr.arpa domain are made in
|
|
least-to-most significant order, read left to right. This is the
|
|
opposite order to the way IP addresses are usually written. Thus,
|
|
a machine with an IP address of 10.1.2.3 would have a corresponding
|
|
in-addr.arpa name of
|
|
3.2.1.10.in-addr.arpa. This name should have a PTR resource record
|
|
whose data field is the name of the machine or, optionally, multiple
|
|
PTR records if the machine has more than one name. For example,
|
|
in the <optional>example.com</optional> domain:</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><literal>$ORIGIN</literal></para></entry>
|
|
<entry colname = "2"><para><literal>2.1.10.in-addr.arpa</literal></para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><literal>3</literal></para></entry>
|
|
<entry colname = "2"><para><literal>IN PTR foo.example.com.</literal></para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<note>
|
|
<para>The <command>$ORIGIN</command> lines in the examples
|
|
are for providing context to the examples only-they do not necessarily
|
|
appear in the actual usage. They are only used here to indicate
|
|
that the example is relative to the listed origin.</para></note></sect2>
|
|
<sect2><title>Other Zone File Directives</title>
|
|
<para>The Master File Format was initially defined in RFC 1035 and
|
|
has subsequently been extended. While the Master File Format itself
|
|
is class independent all records in a Master File must be of the same
|
|
class.</para>
|
|
<para>Master File Directives include <command>$ORIGIN</command>, <command>$INCLUDE</command>,
|
|
and <command>$TTL.</command></para>
|
|
<sect3><title>The <command>$ORIGIN</command> Directive</title>
|
|
<para>Syntax: <command>$ORIGIN
|
|
</command><replaceable>domain-name</replaceable> <optional> <replaceable>comment</replaceable></optional></para>
|
|
<para><command>$ORIGIN </command>sets the domain name that will
|
|
be appended to any unqualified records. When a zone is first read
|
|
in there is an implicit <command>$ORIGIN </command><<varname>zone-name</varname>><command>.</command> The
|
|
current <command>$ORIGIN</command> is appended to the domain specified
|
|
in the <command>$ORIGIN</command> argument if it is not absolute.</para>
|
|
<programlisting><literal>$ORIGIN example.com
|
|
WWW CNAME MAIN-SERVER</literal></programlisting>
|
|
<para>is equivalent to</para>
|
|
<programlisting><literal>WWW.EXAMPLE.COM CNAME MAIN-SERVER.EXAMPLE.COM.</literal></programlisting></sect3>
|
|
<sect3><title>The <command>$INCLUDE</command> Directive</title>
|
|
<para>Syntax: <command>$INCLUDE</command>
|
|
<replaceable>filename</replaceable> <optional>
|
|
<replaceable>origin</replaceable> </optional> <optional> <replaceable>comment</replaceable> </optional></para>
|
|
<para>Read and process the file <filename>filename</filename> as
|
|
if it were included into the file at this point. If <command>origin</command> is
|
|
specified the file is processed with <command>$ORIGIN</command> set
|
|
to that value, otherwise the current <command>$ORIGIN</command> is
|
|
used.</para>
|
|
<note>
|
|
<para>The behavior when <command>origin</command> is
|
|
specified differs from that described in RFC 1035. The origin and
|
|
current domain revert to the values they were prior to the <command>$INCLUDE</command> once
|
|
the file has been read.</para></note></sect3>
|
|
<sect3><title>The <command>$TTL</command> Directive</title>
|
|
<para>Syntax: <command>$TTL</command>
|
|
<replaceable>default-ttl</replaceable> <optional>
|
|
<replaceable>comment</replaceable> </optional></para>
|
|
<para>Set the default Time To Live (TTL) for subsequent records
|
|
with undefined TTLs. Valid TTLs are of the range 0-2147483647 seconds.</para>
|
|
<para><command>$TTL</command> is defined in RFC 2308.</para></sect3></sect2>
|
|
<sect2><title><acronym>BIND</acronym> Master File Extension: the <command>$GENERATE</command> Directive</title>
|
|
<para>Syntax: <command>$GENERATE</command> <replaceable>range</replaceable> <replaceable>hs</replaceable> <replaceable>type</replaceable> <replaceable>rhs</replaceable> <optional> <replaceable>comment</replaceable> </optional></para>
|
|
<para><command>$GENERATE</command> is used to create a series of
|
|
resource records that only differ from each other by an iterator. <command>$GENERATE </command>can
|
|
be used to easily generate the sets of records required to support
|
|
sub /24 reverse delegations described in RFC 2317: Classless IN-ADDR.ARPA
|
|
delegation.</para>
|
|
<programlisting><literal>$ORIGIN 0.0.192.IN-ADDR.ARPA.
|
|
$GENERATE 1-2 0 NS SERVER$.EXAMPLE.
|
|
$GENERATE 1-127 $ CNAME $.0</literal></programlisting>
|
|
<para>is equivalent to</para>
|
|
<programlisting><literal>0.0.0.192.IN-ADDR.ARPA NS SERVER1.EXAMPLE.
|
|
0.0.0.192.IN-ADDR.ARPA NS SERVER2.EXAMPLE.
|
|
1.0.0.192.IN-ADDR.ARPA CNAME 1.0.0.0.192.IN-ADDR.ARPA
|
|
2.0.0.192.IN-ADDR.ARPA CNAME 2.0.0.0.192.IN-ADDR.ARPA
|
|
...
|
|
127.0.0.192.IN-ADDR.ARPA CNAME 127.0.0.0.192.IN-ADDR.ARPA
|
|
.</literal></programlisting>
|
|
<informaltable colsep = "0" rowsep = "0">
|
|
<tgroup cols = "2" colsep = "0" rowsep = "0" tgroupstyle = "3Level-table">
|
|
<colspec colname = "1" colnum = "1" colsep = "0" colwidth = "0.875in"/>
|
|
<colspec colname = "2" colnum = "2" colsep = "0" colwidth = "4.250in"/>
|
|
<tbody>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>range</command></para></entry>
|
|
<entry colname = "2"><para>This can be one of two forms: start-stop
|
|
or start-stop/step. If the first form is used then step is set to
|
|
1. All of start, stop and step must be positive.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>lhs</command></para></entry>
|
|
<entry colname = "2"><para><command>lhs</command> describes the
|
|
owner name of the resource records to be created. Any single <command>$</command> symbols
|
|
within the <command>lhs</command> side are replaced by the iterator
|
|
value. To get a $ in the output use a double <command>$</command>,
|
|
e.g. <command>$$</command>. If the <command>lhs</command> is not
|
|
absolute, the current <command>$ORIGIN </command>is appended to
|
|
the name.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>type</command></para></entry>
|
|
<entry colname = "2"><para>At present the only supported types are
|
|
PTR, CNAME and NS.</para></entry>
|
|
</row>
|
|
<row rowsep = "0">
|
|
<entry colname = "1"><para><command>rhs</command></para></entry>
|
|
<entry colname = "2"><para>rhs is a domain name. It is processed
|
|
similarly to lhs.</para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup></informaltable>
|
|
<para>The <command>$GENERATE</command> directive is a <acronym>BIND</acronym> extension
|
|
and not part of the standard zone file format.
|
|
<note>
|
|
<simpara>It is not yet implemented in <acronym>BIND</acronym> 9.</simpara>
|
|
</note>
|
|
</para>
|
|
</sect2>
|
|
</sect1>
|
|
</chapter>
|