168N/ACopyright (C) 2000, 2001 Internet Software Consortium.
168N/A BIND 8 to BIND 9 Migration Notes
168N/ABIND 9 is designed to be mostly upwards compatible with BIND 8, but
168N/Athere is still a number of caveats you should be aware of when
168N/Aupgrading an existing BIND 8 installation to use BIND 9.
168N/A1. Configuration File Compatibility
168N/A1.1. Unimplemented Options and Changed Defaults
168N/Awarning message. A message is also logged about each option whose
168N/AThe default of the "transfer-format" option has changed from
168N/A"one-answer" to "many-answers". If you have slave servers that do not
168N/Aunderstand the many-answers zone transfer format (
e.g., BIND 4.9.5 or
168N/Aolder) you need to explicitly specify "transfer-format one-answer;" in
168N/Aeither the options block or a server statement.
168N/A1.2. Handling of Configuration File Errors
168N/AIn BIND 9, named refuses to start if it detects an error in
168N/Aserver to run with a partial configuration. Errors detected during
168N/Asubsequent reloads do not cause the server to exit.
168N/AErrors in master files never cause the server to exit.
168N/AThe set of logging categories in BIND 9 is different from that
168N/Ain BIND 8. If you have customized your logging on a per-category
168N/Abasis, you need to modify your logging statement to use the
168N/AAnother difference is that the "logging" statement only takes effect
168N/Athe server starts up, any messages about errors in the configuration
168N/Afile are always logged to the default destination (syslog) when the
168N/Aserver first starts up, regardless of the contents of the "logging"
168N/Astatement. In BIND 8, the new logging configuration took effect
168N/Aimmediately after the "logging" statement was read.
168N/A1.4. Notify messages and Refesh queries
168N/AThe source address and port for these is now controlled by
168N/A"notify-source" and "transfer-source", respectively, rather that
168N/Aquery-source as in BIND 8.
171N/AMultiple classes have to be put into explicit views for each class.
171N/A2. Zone File Compatibility
171N/A2.1. Strict RFC1035 Interpretation of TTLs in Zone Files
168N/ABIND 8 allowed you to omit all TTLs from a zone file, and used the
168N/Avalue of the SOA MINTTL field as a default for missing TTL values.
168N/ABIND 9 enforces strict compliance with the RFC1035 and RFC2308 TTL
168N/Arules. The default TTL is the value specified with the $TTL
168N/Adirective, or the previous explicit TTL if there is no $TTL directive.
168N/AIf there is no $TTL directive and the first RR in the file does not
168N/Ahave an explicit TTL field, the error message "no TTL specified" is
168N/Alogged and loading the zone file fails.
168N/ATo avoid problems, use a $TTL directive in each zone file.
168N/A2.2. Periods in SOA Serial Numbers Deprecated
168N/ASome versions of BIND allow SOA serial numbers with an embedded
168N/Aperiod, like "3.002", and convert them into integers in a rather
168N/Aunintuitive way. This feature is not supported by BIND 9; serial
168N/Anumbers must be integers.
168N/A2.3. Handling of Unbalanced Quotes
168N/ATXT records with unbalanced quotes, like 'host TXT "foo', were not
168N/Atreated as errors in some versions of BIND. If your zone files
168N/Acontain such records, you will get potentially confusing error
168N/Amessages like "unexpected end of file" because BIND 9 will interpret
168N/Aeverything up to the next quote character as a literal string.
2.4. Handling of Line Breaks
Some versions of BIND accept RRs containing line breaks that are not
properly quoted with parentheses, like the following SOA:
( 1 3600 1800 1814400 3600 )
This is not legal master file syntax and will be treated as an error
by BIND 9. The fix is to move the opening parenthesis to the first
2.5. Unimplemented BIND 8 Extensions
$GENERATE: The "$$" construct for getting a literal $ into a domain
name is deprecated. Use \$ instead.
3. Interoperability Impact of New Protocol Features
BIND 9 uses EDNS0 (RFC2671) to advertise its receive buffer size. It
also sets an EDNS flag bit in queries to indicate that it wishes to
receive DNSSEC responses; this flag bit usage is not yet standardized,
Most older servers that do not support EDNS0, including prior versions
of BIND, will send a FORMERR or NOTIMP response to these queries.
When this happens, BIND 9 will automatically retry the query without
Unfortunately, there exists at least one non-BIND name server
implementation that silently ignores these queries instead of sending
an error response. Resolving names in zones where all or most
authoritative servers use this server will be very slow or fail
completely. We have contacted the manufacturer of the name server in
case, and they are working on a solution.
4. Unrestricted Character Set
BIND 9 does not restrict the character set of domain names - it is
fully 8-bit clean in accordance with RFC2181 section 11.
It is strongly recommended that hostnames published in the DNS follow
the RFC952 rules, but BIND 9 will not enforce this restriction.
Historically, some applications have suffered from security flaws
where data originating from the network, such as names returned by
gethostbyaddr(), are used with insufficient checking and may cause a
breach of security when containing unexpected characters; see
for details. Some earlier versions of BIND attempt to protect these
flawed applications from attack by discarding data containing
characters deemed inappropriate in host names or mail addresses, under
no-check-names" in
resolv.conf. BIND 9 provides no such protection;
if applications with these flaws are still being used, they should
5. Server Administration Tools
The "ndc" program has been replaced by "rndc", which is capable of
remote operation. Unlike ndc, rndc requires a configuration file;
details. Some of the ndc commands are still unimplemented in rndc.
6. No Information Leakage between Zones
BIND 9 stores the authoritative data for each zone in a separate data
structure, as recommended in RFC1035 and as required by DNSSEC and
IXFR. When a BIND 9 server is authoritative for both a child zone and
its parent, it will have two distinct sets of NS records at the
delegation point: the authoritative NS records at the child's apex,
and a set of glue NS records in the parent.
BIND 8 was unable to properly distinguish between these two sets of NS
records and would "leak" the child's NS records into the parent,
effectively causing the parent zone to be silently modified: responses
and zone transfers from the parent contained the child's NS records
rather than the glue configured into the parent (if any). In the case
of children of type "stub", this behavior was documented as a feature,
allowing the glue NS records to be omitted from the parent
Sites that were relying on this BIND 8 behavior need to add any
omitted glue NS records, and any necessary glue A records, to the
Although stub zones can no longer be used as a mechanism for injecting
NS records into their parent zones, they are still useful as a way of
directing queries for a given domain to a particular set of name
$Id: migration,v 1.27 2001/03/19 18:07:32 gson Exp $