2017-04-27 23:38:51 -07:00
<!--
2018-02-23 09:53:12 +01:00
- Copyright (C) Internet Systems Consortium, Inc. ("ISC")
2017-04-23 17:06:00 -07:00
-
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
2018-02-23 09:53:12 +01:00
-
- See the COPYRIGHT file distributed with this work for additional
- information regarding copyright ownership.
2017-04-27 23:38:51 -07:00
-->
2017-04-20 19:21:54 -07:00
# BIND 9
### Contents
1. [Introduction ](#intro )
1. [Reporting bugs and getting help ](#help )
1. [Contributing to BIND ](#contrib )
1. [Building BIND ](#build )
2017-12-21 10:54:53 +11:00
1. [macOS ](#macos )
2019-01-19 16:12:45 -08:00
1. [Dependencies ](#dependencies )
2017-04-20 19:21:54 -07:00
1. [Compile-time options ](#opts )
1. [Automated testing ](#testing )
1. [Documentation ](#doc )
1. [Change log ](#changes )
1. [Acknowledgments ](#ack )
### <a name="intro"/> Introduction
BIND (Berkeley Internet Name Domain) is a complete, highly portable
2020-06-16 19:35:44 +00:00
implementation of the Domain Name System (DNS) protocol.
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
The BIND name server, `named` , can act as an authoritative name
server, recursive resolver, DNS forwarder, or all three simultaneously. It
2017-04-20 19:21:54 -07:00
implements views for split-horizon DNS, automatic DNSSEC zone signing and
key management, catalog zones to facilitate provisioning of zone data
throughout a name server constellation, response policy zones (RPZ) to
protect clients from malicious data, response rate limiting (RRL) and
recursive query limits to reduce distributed denial of service attacks,
2020-06-16 19:35:44 +00:00
and many other advanced DNS features. BIND also includes a suite of
2017-04-20 19:21:54 -07:00
administrative tools, including the `dig` and `delv` DNS lookup tools,
`nsupdate` for dynamic DNS zone updates, `rndc` for remote name server
administration, and more.
2020-06-16 19:35:44 +00:00
BIND 9 began as a complete rewrite of the BIND architecture that was
2018-05-23 23:19:17 -07:00
used in versions 4 and 8. Internet Systems Consortium
2020-06-16 19:35:44 +00:00
([https://www.isc.org ](https://www.isc.org )), a 501(c)(3) US public benefit
2017-04-20 19:21:54 -07:00
corporation dedicated to providing software and services in support of the
Internet infrastructure, developed BIND 9 and is responsible for its
2020-06-16 19:35:44 +00:00
ongoing maintenance and improvement. BIND is open source software
2019-06-06 22:09:13 +01:00
licensed under the terms of the Mozilla Public License, version 2.0.
2017-04-20 19:21:54 -07:00
For a detailed list of changes made throughout the history of BIND 9, see
the file [CHANGES ](CHANGES ). See [below ](#changes ) for details on the
CHANGES file format.
2019-11-12 22:17:56 +00:00
For up-to-date versions and release notes, see
[https://www.isc.org/download/ ](https://www.isc.org/download/ ).
2017-04-20 19:21:54 -07:00
2018-05-23 23:19:17 -07:00
For information about supported platforms, see [PLATFORMS ](PLATFORMS.md ).
2017-04-20 19:21:54 -07:00
### <a name="help"/> Reporting bugs and getting help
2018-03-08 09:00:45 -04:00
To report non-security-sensitive bugs or request new features, you may
2020-06-16 19:35:44 +00:00
open an issue in the BIND 9 project on the
2018-03-08 09:00:45 -04:00
[ISC GitLab server ](https://gitlab.isc.org ) at
[https://gitlab.isc.org/isc-projects/bind9 ](https://gitlab.isc.org/isc-projects/bind9 ).
2020-06-16 19:35:44 +00:00
Please note that, unless you explicitly mark the newly created issue as
"confidential," it will be publicly readable. Please do not include any
2018-03-08 09:00:45 -04:00
information in bug reports that you consider to be confidential unless
2020-06-16 19:35:44 +00:00
the issue has been marked as such. In particular, if submitting the
contents of your configuration file in a non-confidential issue, it is
advisable to obscure key secrets; this can be done automatically by
2018-03-08 09:00:45 -04:00
using `named-checkconf -px` .
2020-06-16 19:35:44 +00:00
If you are reporting a bug that is a potential security issue, such as an
2018-03-08 09:00:45 -04:00
assertion failure or other crash in `named` , please do *NOT* use GitLab to
2020-02-11 15:14:50 +01:00
report it. Instead, send mail to
[security-officer@isc.org ](mailto:security-officer@isc.org ) using our
OpenPGP key to secure your message. (Information about OpenPGP and links
to our key can be found at
[https://www.isc.org/pgpkey ](https://www.isc.org/pgpkey ).) Please do not
discuss the bug on any public mailing list.
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
For a general overview of ISC security policies, read the Knowledgebase
2019-09-09 09:35:02 +02:00
article at [https://kb.isc.org/docs/aa-00861 ](https://kb.isc.org/docs/aa-00861 ).
2017-04-20 19:21:54 -07:00
Professional support and training for BIND are available from
2020-06-16 19:35:44 +00:00
ISC. Contact us at [https://www.isc.org/contact ](https://www.isc.org/contact )
for more information.
2017-04-20 19:21:54 -07:00
To join the __BIND Users__ mailing list, or view the archives, visit
[https://lists.isc.org/mailman/listinfo/bind-users ](https://lists.isc.org/mailman/listinfo/bind-users ).
If you're planning on making changes to the BIND 9 source code, you
may also want to join the __BIND Workers__ mailing list, at
[https://lists.isc.org/mailman/listinfo/bind-workers ](https://lists.isc.org/mailman/listinfo/bind-workers ).
### <a name="contrib"/> Contributing to BIND
2017-10-17 13:47:33 -07:00
ISC maintains a public git repository for BIND; details can be found
2020-06-16 19:35:44 +00:00
at [https://www.isc.org/sourceaccess/ ](https://www.isc.org/sourceaccess/ ).
2017-04-20 19:21:54 -07:00
Information for BIND contributors can be found in the following files:
2019-07-31 13:54:46 +02:00
- General information: [CONTRIBUTING.md ](CONTRIBUTING.md )
- Code of Conduct: [CODE_OF_CONDUCT.md ](CODE_OF_CONDUCT.md )
2017-04-20 19:21:54 -07:00
- BIND 9 code style: [doc/dev/style.md ](doc/dev/style.md )
- BIND architecture and developer guide: [doc/dev/dev.md ](doc/dev/dev.md )
2018-03-08 09:00:45 -04:00
Patches for BIND may be submitted as
2019-09-09 09:35:02 +02:00
[merge requests ](https://gitlab.isc.org/isc-projects/bind9/merge_requests )
2020-06-16 19:35:44 +00:00
on the [ISC GitLab server ](https://gitlab.isc.org ).
2018-03-08 09:00:45 -04:00
2020-06-16 19:35:44 +00:00
By default, external contributors do not have the ability to fork BIND on the
GitLab server; if you wish to contribute code to BIND, you may request
2018-03-08 09:00:45 -04:00
permission to do so. Thereafter, you can create git branches and directly
submit requests that they be reviewed and merged.
If you prefer, you may also submit code by opening a
2020-06-16 19:35:44 +00:00
[GitLab issue ](https://gitlab.isc.org/isc-projects/bind9/issues ) and
2018-03-08 09:00:45 -04:00
including your patch as an attachment, preferably generated by
`git format-patch` .
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
### <a name="build"/> Building BIND 9
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
At a minimum, BIND requires a Unix or Linux system with an ANSI C compiler,
basic POSIX support, and a 64-bit integer type. BIND also requires the
2021-05-22 10:40:00 -07:00
`libuv` asynchronous I/O library, the `nghttp2` HTTP/2 library, the
`jemalloc` memory allocation library, and the OpenSSL cryptography
library. On Linux, BIND requires the `libcap` library to set process
privileges, though this requirement can be overridden by disabling
capability support at compile time. See [Compile-time options ](#opts )
below for details on other libraries that may be required to support
optional features.
2019-11-17 07:25:57 +00:00
Successful builds have been observed on many versions of Linux and
2020-06-16 19:35:44 +00:00
Unix, including RHEL/CentOS, Fedora, Debian, Ubuntu, SLES, openSUSE,
2019-11-17 07:25:57 +00:00
Slackware, Alpine, FreeBSD, NetBSD, OpenBSD, macOS, Solaris,
OpenIndiana, OmniOS CE, HP-UX, and OpenWRT.
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
To build on a Unix or Linux system, use:
2017-04-20 19:21:54 -07:00
2020-04-24 12:28:59 +10:00
$ autoreconf -fi (if you are building in the git repository)
2017-04-20 19:21:54 -07:00
$ ./configure
$ make
2020-11-16 11:00:50 +01:00
If you're using Emacs, you might find `make tags` helpful.
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
Several environment variables, which can be set before running `configure` ,
2020-02-11 15:14:50 +01:00
affect compilation. Significant ones are:
2017-04-20 19:21:54 -07:00
|Variable|Description |
|--------------------|-----------------------------------------------|
|`CC` |The C compiler to use. `configure` tries to figure out the right one for supported systems.|
|`CFLAGS` |C compiler flags. Defaults to include -g and/or -O2 as supported by the compiler. Please include '-g' if you need to set `CFLAGS` . |
|`LDFLAGS` |Linker flags. Defaults to empty string.|
2020-02-11 15:14:50 +01:00
Additional environment variables affecting the build are listed at the
end of the `configure` help text, which can be obtained by running the
command:
$ ./configure --help
2017-12-21 10:54:53 +11:00
#### <a name="macos"> macOS
2017-12-15 14:38:09 +11:00
2020-06-16 19:35:44 +00:00
Building on macOS assumes that the "Command Tools for Xcode" are installed.
These can be downloaded from
2020-02-11 15:14:50 +01:00
[https://developer.apple.com/download/more/ ](https://developer.apple.com/download/more/ )
2020-08-04 12:19:15 +10:00
or, if you have Xcode already installed, you can run `xcode-select --install` .
(Note that an Apple ID may be required to access the download page.)
2017-12-15 14:38:09 +11:00
2020-04-24 12:28:59 +10:00
#### <a name="dependencies"> Dependencies
2020-06-16 19:35:44 +00:00
To build BIND you need to have the following packages installed:
2020-04-24 12:28:59 +10:00
libuv
pkg-config / pkgconfig / pkgconf
2020-06-16 19:35:44 +00:00
To build BIND from the git repository, you need the following tools
2020-04-24 12:28:59 +10:00
installed:
autoconf (includes autoreconf)
automake
libtool
2017-04-20 19:21:54 -07:00
#### <a name="opts"/> Compile-time options
To see a full list of configuration options, run `configure --help` .
For the server to support DNSSEC, you need to build it with crypto support.
2021-04-21 13:52:15 +02:00
To use OpenSSL, you must have OpenSSL 1.0.2e or newer installed. If the
2017-04-20 19:21:54 -07:00
OpenSSL library is installed in a nonstandard location, specify the prefix
2018-07-02 19:09:32 -07:00
using `--with-openssl=<PREFIX>` on the configure command line. To use a
2017-04-20 19:21:54 -07:00
PKCS#11 hardware service module for cryptographic operations, specify the
2018-07-02 19:09:32 -07:00
path to the PKCS#11 provider library using `--with-pkcs11=<PREFIX>` , and
configure BIND with `--enable-native-pkcs11` .
2017-04-20 19:21:54 -07:00
2021-04-21 13:52:15 +02:00
To support DNS over HTTPS, the server must be linked with `libnghttp2` .
2017-04-20 19:21:54 -07:00
To support the HTTP statistics channel, the server must be linked with at
2019-09-09 09:35:02 +02:00
least one of the following libraries: `libxml2`
[http://xmlsoft.org ](http://xmlsoft.org ) or `json-c`
[https://github.com/json-c/json-c ](https://github.com/json-c/json-c ).
If these are installed at a nonstandard location, then:
2019-02-06 11:56:42 +01:00
2020-06-16 19:35:44 +00:00
* for `libxml2` , specify the prefix using `--with-libxml2=/prefix` .
2019-09-09 09:35:02 +02:00
* for `json-c` , adjust `PKG_CONFIG_PATH` .
2017-04-20 19:21:54 -07:00
To support compression on the HTTP statistics channel, the server must be
2020-06-16 19:35:44 +00:00
linked against `libzlib` . If this is installed in a nonstandard location,
2017-04-20 19:21:54 -07:00
specify the prefix using `--with-zlib=/prefix` .
To support storing configuration data for runtime-added zones in an LMDB
2020-06-16 19:35:44 +00:00
database, the server must be linked with `liblmdb` . If this is installed in a
2018-07-02 19:09:32 -07:00
nonstandard location, specify the prefix using `with-lmdb=/prefix` .
2017-04-20 19:21:54 -07:00
2019-06-27 21:11:45 -07:00
To support MaxMind GeoIP2 location-based ACLs, the server must be linked
with `libmaxminddb` . This is turned on by default if the library is
found; if the library is installed in a nonstandard location,
specify the prefix using `--with-maxminddb=/prefix` . GeoIP2 support
can be switched off with `--disable-geoip` .
2017-04-20 19:21:54 -07:00
2019-09-09 09:35:02 +02:00
For DNSTAP packet logging, you must have installed `libfstrm`
2017-04-20 19:21:54 -07:00
[https://github.com/farsightsec/fstrm ](https://github.com/farsightsec/fstrm )
2019-09-09 09:35:02 +02:00
and `libprotobuf-c`
2017-04-20 19:21:54 -07:00
[https://developers.google.com/protocol-buffers ](https://developers.google.com/protocol-buffers ),
2018-07-02 19:09:32 -07:00
and BIND must be configured with `--enable-dnstap` .
2020-03-12 12:27:13 +00:00
Certain compiled-in constants and default settings can be decreased to
2020-02-07 08:57:56 +01:00
values better suited to small machines, e.g. OpenWRT boxes, by specifying
2020-06-16 19:35:44 +00:00
`--with-tuning=small` on the `configure` command line. This decreases
memory usage by using smaller structures, but degrades performance.
2019-01-19 16:12:45 -08:00
2018-07-02 19:09:32 -07:00
On Linux, process capabilities are managed in user space using
the `libcap` library, which can be installed on most Linux systems via
2019-09-09 09:35:02 +02:00
the `libcap-dev` or `libcap-devel` package. Process capability support can
2018-07-02 19:09:32 -07:00
also be disabled by configuring with `--disable-linux-caps` .
2017-04-20 19:21:54 -07:00
On some platforms it is necessary to explicitly request large file support
to handle files bigger than 2GB. This can be done by using
`--enable-largefile` on the `configure` command line.
Support for the "fixed" rrset-order option can be enabled or disabled by
specifying `--enable-fixed-rrset` or `--disable-fixed-rrset` on the
2020-06-16 19:35:44 +00:00
configure command line. By default, fixed rrset-order is disabled to
2017-04-20 19:21:54 -07:00
reduce memory footprint.
2019-01-19 16:12:45 -08:00
The `--enable-querytrace` option causes `named` to log every step of
2020-06-16 19:35:44 +00:00
processing every query. The `--enable-singletrace` option turns on the
2020-05-15 16:34:09 -07:00
same verbose tracing, but allows an individual query to be separately
2020-06-16 19:35:44 +00:00
traced by setting its query ID to 0. These options should only be enabled
2020-05-15 16:34:09 -07:00
when debugging, because they have a significant negative impact on query
performance.
2019-01-19 16:12:45 -08:00
2020-06-16 19:35:44 +00:00
`make install` installs `named` and the various BIND 9 libraries. By
2017-04-20 19:21:54 -07:00
default, installation is into /usr/local, but this can be changed with the
`--prefix` option when running `configure` .
You may specify the option `--sysconfdir` to set the directory where
configuration files like `named.conf` go by default, and `--localstatedir`
2020-06-16 19:35:44 +00:00
to set the default parent directory of `run/named.pid` . `--sysconfdir`
2019-02-05 15:14:21 +01:00
defaults to `$prefix/etc` and `--localstatedir` defaults to `$prefix/var` .
2017-04-20 19:21:54 -07:00
### <a name="testing"/> Automated testing
2020-06-16 19:35:44 +00:00
A system test suite can be run with `make check` . The system tests require
2017-04-20 19:21:54 -07:00
you to configure a set of virtual IP addresses on your system (this allows
2020-06-16 19:35:44 +00:00
multiple servers to run locally and communicate with each other). These
2017-10-17 13:47:33 -07:00
IP addresses can be configured by running the command
2017-04-20 19:21:54 -07:00
`bin/tests/system/ifconfig.sh up` as root.
2019-09-09 09:35:02 +02:00
Some tests require Perl and the `Net::DNS` and/or `IO::Socket::INET6` modules,
2020-06-16 19:35:44 +00:00
and are skipped if these are not available. Some tests require Python
and the `dnspython` module and are skipped if these are not available.
2017-04-20 19:21:54 -07:00
See bin/tests/system/README for further details.
2020-06-16 19:35:44 +00:00
Unit tests are implemented using the CMocka unit testing framework. To build
2018-08-07 16:46:53 +02:00
them, use `configure --with-cmocka` . Execution of tests is done by the automake
parallel test driver; unit tests are also run by `make check` .
2017-04-20 19:21:54 -07:00
### <a name="doc"/> Documentation
2020-06-16 19:35:44 +00:00
The *BIND 9 Administrator Reference Manual* (ARM) is included with the source
distribution, and in .rst format, in the `doc/arm`
directory. HTML and PDF versions are automatically generated and can
be viewed at [https://bind9.readthedocs.io/en/latest/index.html ](https://bind9.readthedocs.io/en/latest/index.html ).
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
Man pages for some of the programs in the BIND 9 distribution
are also included in the BIND ARM.
2017-04-20 19:21:54 -07:00
Frequently (and not-so-frequently) asked questions and their answers
2020-06-16 19:35:44 +00:00
can be found in the ISC Knowledgebase at
2017-04-20 19:21:54 -07:00
[https://kb.isc.org ](https://kb.isc.org ).
Additional information on various subjects can be found in other
`README` files throughout the source tree.
### <a name="changes"/> Change log
A detailed list of all changes that have been made throughout the
2020-06-16 19:35:44 +00:00
development of BIND 9 is included in the file CHANGES, with the most recent
changes listed first. Change notes include tags indicating the category of
2017-04-20 19:21:54 -07:00
the change that was made; these categories are:
|Category |Description |
|-------------- |-----------------------------------------------|
| [func] | New feature |
| [bug] | General bug fix |
| [security] | Fix for a significant security flaw |
| [experimental] | Used for new features when the syntax or other aspects of the design are still in flux and may change |
| [port] | Portability enhancement |
| [maint] | Updates to built-in data such as root server addresses and keys |
| [tuning] | Changes to built-in configuration defaults and constants to improve performance |
| [performance] | Other changes to improve server performance |
| [protocol] | Updates to the DNS protocol such as new RR types |
| [test] | Changes to the automatic tests, not affecting server functionality |
| [cleanup] | Minor corrections and refactoring |
| [doc] | Documentation |
| [contrib] | Changes to the contributed tools and libraries in the 'contrib' subdirectory |
2020-09-03 13:10:48 +02:00
| [placeholder] | Used in the main development branch to reserve change numbers for use in other branches, e.g., when fixing a bug that only exists in older releases |
2017-04-20 19:21:54 -07:00
2020-06-16 19:35:44 +00:00
In general, [func] and [experimental] tags only appear in new-feature
releases (i.e., those with version numbers ending in zero). Some new
2017-04-20 19:21:54 -07:00
functionality may be backported to older releases on a case-by-case basis.
2020-06-16 19:35:44 +00:00
All other change types may be applied to all currently supported releases.
2017-04-20 19:21:54 -07:00
2019-05-16 16:39:24 -07:00
#### Bug report identifiers
Most notes in the CHANGES file include a reference to a bug report or
issue number. Prior to 2018, these were usually of the form `[RT #NNN]`
and referred to entries in the "bind9-bugs" RT database, which was not open
to the public. More recent entries use the form `[GL #NNN]` or, less often,
`[GL !NNN]` , which, respectively, refer to issues or merge requests in the
2019-09-09 09:35:02 +02:00
GitLab database. Most of these are publicly readable, unless they include
2020-06-16 19:35:44 +00:00
information which is confidential or security-sensitive.
2019-05-16 16:39:24 -07:00
2019-09-09 09:35:02 +02:00
To look up a GitLab issue by its number, use the URL
2019-05-16 16:39:24 -07:00
[https://gitlab.isc.org/isc-projects/bind9/issues/NNN ](https://gitlab.isc.org/isc-projects/bind9/issues ).
To look up a merge request, use
[https://gitlab.isc.org/isc-projects/bind9/merge_requests/NNN ](https://gitlab.isc.org/isc-projects/bind9/merge_requests ).
In rare cases, an issue or merge request number may be followed with the
letter "P". This indicates that the information is in the private ISC
2019-09-09 09:35:02 +02:00
GitLab instance, which is not visible to the public.
2019-05-16 16:39:24 -07:00
2017-04-20 19:21:54 -07:00
### <a name="ack"/> Acknowledgments
* The original development of BIND 9 was underwritten by the
following organizations:
Sun Microsystems, Inc.
Hewlett Packard
Compaq Computer Corporation
IBM
Process Software Corporation
Silicon Graphics, Inc.
Network Associates, Inc.
U.S. Defense Information Systems Agency
USENIX Association
Stichting NLnet - NLnet Foundation
Nominum, Inc.
* This product includes software developed by the OpenSSL Project for use
in the OpenSSL Toolkit.
2020-06-16 19:35:44 +00:00
[https://www.OpenSSL.org/ ](https://www.OpenSSL.org/ )
2017-04-20 19:21:54 -07:00
* This product includes cryptographic software written by Eric Young
2020-06-16 19:35:44 +00:00
(eay@cryptsoft .com).
* This product includes software written by Tim Hudson (tjh@cryptsoft .com).