Blame README.md

Packit Service ae04f2
Packit Service ae04f2
 - Copyright (C) Internet Systems Consortium, Inc. ("ISC")
Packit Service ae04f2
 -
Packit Service ae04f2
 - This Source Code Form is subject to the terms of the Mozilla Public
Packit Service ae04f2
 - License, v. 2.0. If a copy of the MPL was not distributed with this
Packit Service ae04f2
 - file, You can obtain one at http://mozilla.org/MPL/2.0/.
Packit Service ae04f2
 -
Packit Service ae04f2
 - See the COPYRIGHT file distributed with this work for additional
Packit Service ae04f2
 - information regarding copyright ownership.
Packit Service ae04f2
-->
Packit Service ae04f2
# BIND 9
Packit Service ae04f2
Packit Service ae04f2
### Contents
Packit Service ae04f2
Packit Service ae04f2
1. [Introduction](#intro)
Packit Service ae04f2
1. [Reporting bugs and getting help](#help)
Packit Service ae04f2
1. [Contributing to BIND](#contrib)
Packit Service ae04f2
1. [BIND 9.11 features](#features)
Packit Service ae04f2
1. [Building BIND](#build)
Packit Service ae04f2
1. [macOS](#macos)
Packit Service ae04f2
1. [Dependencies](#dependencies)
Packit Service ae04f2
1. [Compile-time options](#opts)
Packit Service ae04f2
1. [Automated testing](#testing)
Packit Service ae04f2
1. [Documentation](#doc)
Packit Service ae04f2
1. [Change log](#changes)
Packit Service ae04f2
1. [Acknowledgments](#ack)
Packit Service ae04f2
Packit Service ae04f2
###  Introduction
Packit Service ae04f2
Packit Service ae04f2
BIND (Berkeley Internet Name Domain) is a complete, highly portable
Packit Service ae04f2
implementation of the DNS (Domain Name System) protocol.
Packit Service ae04f2
Packit Service ae04f2
The BIND name server, `named`, is able to serve as an authoritative name
Packit Service ae04f2
server, recursive resolver, DNS forwarder, or all three simultaneously.  It
Packit Service ae04f2
implements views for split-horizon DNS, automatic DNSSEC zone signing and
Packit Service ae04f2
key management, catalog zones to facilitate provisioning of zone data
Packit Service ae04f2
throughout a name server constellation, response policy zones (RPZ) to
Packit Service ae04f2
protect clients from malicious data, response rate limiting (RRL) and
Packit Service ae04f2
recursive query limits to reduce distributed denial of service attacks,
Packit Service ae04f2
and many other advanced DNS features.  BIND also includes a suite of
Packit Service ae04f2
administrative tools, including the `dig` and `delv` DNS lookup tools,
Packit Service ae04f2
`nsupdate` for dynamic DNS zone updates, `rndc` for remote name server
Packit Service ae04f2
administration, and more.
Packit Service ae04f2
Packit Service ae04f2
BIND 9 is a complete re-write of the BIND architecture that was used in
Packit Service ae04f2
versions 4 and 8.  Internet Systems Consortium
Packit Service ae04f2
([https://www.isc.org](https://www.isc.org)), a 501(c)(3) public benefit
Packit Service ae04f2
corporation dedicated to providing software and services in support of the
Packit Service ae04f2
Internet infrastructure, developed BIND 9 and is responsible for its
Packit Service ae04f2
ongoing maintenance and improvement.  BIND is open source software
Packit Service ae04f2
licensed under the terms of ISC License for all versions up to and
Packit Service ae04f2
including BIND 9.10, and the Mozilla Public License version 2.0 for all
Packit Service ae04f2
subsequent versions.
Packit Service ae04f2
Packit Service ae04f2
For a summary of features introduced in past major releases of BIND,
Packit Service ae04f2
see the file [HISTORY](HISTORY.md).
Packit Service ae04f2
Packit Service ae04f2
For a detailed list of changes made throughout the history of BIND 9, see
Packit Service ae04f2
the file [CHANGES](CHANGES). See [below](#changes) for details on the
Packit Service ae04f2
CHANGES file format.
Packit Service ae04f2
Packit Service ae04f2
For up-to-date versions and release notes, see
Packit Service ae04f2
[https://www.isc.org/download/](https://www.isc.org/download/).
Packit Service ae04f2
Packit Service ae04f2
###  Reporting bugs and getting help
Packit Service ae04f2
Packit Service ae04f2
To report non-security-sensitive bugs or request new features, you may
Packit Service ae04f2
open an Issue in the BIND 9 project on the
Packit Service ae04f2
[ISC GitLab server](https://gitlab.isc.org) at
Packit Service ae04f2
[https://gitlab.isc.org/isc-projects/bind9](https://gitlab.isc.org/isc-projects/bind9).
Packit Service ae04f2
Packit Service ae04f2
Please note that, unless you explicitly mark the newly created Issue as
Packit Service ae04f2
"confidential", it will be publicly readable.  Please do not include any
Packit Service ae04f2
information in bug reports that you consider to be confidential unless
Packit Service ae04f2
the issue has been marked as such.  In particular, if submitting the
Packit Service ae04f2
contents of your configuration file in a non-confidential Issue, it is
Packit Service ae04f2
advisable to obscure key secrets: this can be done automatically by
Packit Service ae04f2
using `named-checkconf -px`.
Packit Service ae04f2
Packit Service ae04f2
If the bug you are reporting is a potential security issue, such as an
Packit Service ae04f2
assertion failure or other crash in `named`, please do *NOT* use GitLab to
Packit Service ae04f2
report it. Instead, send mail to
Packit Service ae04f2
[security-officer@isc.org](mailto:security-officer@isc.org) using our
Packit Service ae04f2
OpenPGP key to secure your message. (Information about OpenPGP and links
Packit Service ae04f2
to our key can be found at
Packit Service ae04f2
[https://www.isc.org/pgpkey](https://www.isc.org/pgpkey).) Please do not
Packit Service ae04f2
discuss the bug on any public mailing list.
Packit Service ae04f2
Packit Service ae04f2
For a general overview of ISC security policies, read the Knowledge Base
Packit Service ae04f2
article at [https://kb.isc.org/docs/aa-00861](https://kb.isc.org/docs/aa-00861).
Packit Service ae04f2
Packit Service ae04f2
Professional support and training for BIND are available from
Packit Service ae04f2
ISC at [https://www.isc.org/support](https://www.isc.org/support).
Packit Service ae04f2
Packit Service ae04f2
To join the __BIND Users__ mailing list, or view the archives, visit
Packit Service ae04f2
[https://lists.isc.org/mailman/listinfo/bind-users](https://lists.isc.org/mailman/listinfo/bind-users).
Packit Service ae04f2
Packit Service ae04f2
If you're planning on making changes to the BIND 9 source code, you
Packit Service ae04f2
may also want to join the __BIND Workers__ mailing list, at
Packit Service ae04f2
[https://lists.isc.org/mailman/listinfo/bind-workers](https://lists.isc.org/mailman/listinfo/bind-workers).
Packit Service ae04f2
Packit Service ae04f2
###  Contributing to BIND
Packit Service ae04f2
Packit Service ae04f2
ISC maintains a public git repository for BIND; details can be found
Packit Service ae04f2
at [http://www.isc.org/git/](http://www.isc.org/git/).
Packit Service ae04f2
Packit Service ae04f2
Information for BIND contributors can be found in the following files:
Packit Service ae04f2
- General information: [doc/dev/contrib.md](doc/dev/contrib.md)
Packit Service ae04f2
- BIND 9 code style: [doc/dev/style.md](doc/dev/style.md)
Packit Service ae04f2
- BIND architecture and developer guide: [doc/dev/dev.md](doc/dev/dev.md)
Packit Service ae04f2
Packit Service ae04f2
Patches for BIND may be submitted as
Packit Service ae04f2
[merge requests](https://gitlab.isc.org/isc-projects/bind9/merge_requests)
Packit Service ae04f2
in the [ISC GitLab server](https://gitlab.isc.org) at
Packit Service ae04f2
at [https://gitlab.isc.org/isc-projects/bind9/merge_requests](https://gitlab.isc.org/isc-projects/bind9/merge_requests).
Packit Service ae04f2
Packit Service ae04f2
By default, external contributors don't have ability to fork BIND in the
Packit Service ae04f2
GitLab server, but if you wish to contribute code to BIND, you may request
Packit Service ae04f2
permission to do so. Thereafter, you can create git branches and directly
Packit Service ae04f2
submit requests that they be reviewed and merged.
Packit Service ae04f2
Packit Service ae04f2
If you prefer, you may also submit code by opening a
Packit Service ae04f2
[GitLab Issue](https://gitlab.isc.org/isc-projects/bind9/issues) and
Packit Service ae04f2
including your patch as an attachment, preferably generated by
Packit Service ae04f2
`git format-patch`.
Packit Service ae04f2
Packit Service ae04f2
###  BIND 9.11 features
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.0 includes a number of changes from BIND 9.10 and earlier
Packit Service ae04f2
releases.  New features include:
Packit Service ae04f2
Packit Service ae04f2
* Added support for Catalog Zones, a new method for provisioning servers: a
Packit Service ae04f2
  list of zones to be served is stored in a DNS zone, along with their
Packit Service ae04f2
  configuration parameters. Changes to the catalog zone are propagated to
Packit Service ae04f2
  slaves via normal AXFR/IXFR, whereupon the zones that are listed in it
Packit Service ae04f2
  are automatically added, deleted or reconfigured.
Packit Service ae04f2
* Added support for "dnstap", a fast and flexible method of capturing and
Packit Service ae04f2
  logging DNS traffic.
Packit Service ae04f2
* Added support for "dyndb", a new API for loading zone data from an
Packit Service ae04f2
  external database, developed by Red Hat for the FreeIPA project.
Packit Service ae04f2
* "fetchlimit" quotas are now compiled in by default.  These are for the
Packit Service ae04f2
  use of recursive resolvers that are are under high query load for domains
Packit Service ae04f2
  whose authoritative servers are nonresponsive or are experiencing a
Packit Service ae04f2
  denial of service attack:
Packit Service ae04f2
    * `fetches-per-server` limits the number of simultaneous queries that
Packit Service ae04f2
      can be sent to any single authoritative server.  The configured value
Packit Service ae04f2
      is a starting point; it is automatically adjusted downward if the
Packit Service ae04f2
      server is partially or completely non-responsive. The algorithm used
Packit Service ae04f2
      to adjust the quota can be configured via the "fetch-quota-params"
Packit Service ae04f2
      option.
Packit Service ae04f2
    * `fetches-per-zone` limits the number of simultaneous queries that can
Packit Service ae04f2
      be sent for names within a single domain.  (Note: Unlike
Packit Service ae04f2
      `fetches-per-server`, this value is not self-tuning.)
Packit Service ae04f2
    * New stats counters have been added to count queries spilled due to
Packit Service ae04f2
      these quotas.
Packit Service ae04f2
* Added a new `dnssec-keymgr` key maintenance utility, which can generate or
Packit Service ae04f2
  update keys as needed to ensure that a zone's keys match a defined DNSSEC
Packit Service ae04f2
  policy.
Packit Service ae04f2
* The experimental "SIT" feature in BIND 9.10 has been renamed "COOKIE" and
Packit Service ae04f2
  is no longer optional. EDNS COOKIE is a mechanism enabling clients to
Packit Service ae04f2
  detect off-path spoofed responses, and servers to detect spoofed-source
Packit Service ae04f2
  queries.  Clients that identify themselves using COOKIE options are not
Packit Service ae04f2
  subject to response rate limiting (RRL) and can receive larger UDP
Packit Service ae04f2
  responses.
Packit Service ae04f2
* SERVFAIL responses can now be cached for a limited time (defaulting to 1
Packit Service ae04f2
  second, with an upper limit of 30).  This can reduce the frequency of
Packit Service ae04f2
  retries when a query is persistently failing.
Packit Service ae04f2
* Added an `nsip-wait-recurse` switch to RPZ. This causes NSIP rules to be
Packit Service ae04f2
  skipped if a name server IP address isn't in the cache yet; the address
Packit Service ae04f2
  will be looked up and the rule will be applied on future queries.
Packit Service ae04f2
* Added a Python RNDC module. This allows multiple commands to sent over a
Packit Service ae04f2
  persistent RNDC channel, which saves time.
Packit Service ae04f2
* The `controls` block in named.conf can now grant read-only `rndc` access
Packit Service ae04f2
  to specified clients or keys. Read-only clients could, for example, check
Packit Service ae04f2
  `rndc status` but could not reconfigure or shut down the server.
Packit Service ae04f2
* `rndc` commands can now return arbitrarily large amounts of text to the
Packit Service ae04f2
  caller.
Packit Service ae04f2
* The zone serial number of a dynamically updatable zone can now be set via
Packit Service ae04f2
  `rndc signing -serial <number> <zonename>`.  This allows inline-signing
Packit Service ae04f2
  zones to be set to a specific serial number.
Packit Service ae04f2
* The new `rndc nta` command can be used to set a Negative Trust Anchor
Packit Service ae04f2
  (NTA), disabling DNSSEC validation for a specific domain; this can be
Packit Service ae04f2
  used when responses from a domain are known to be failing validation due
Packit Service ae04f2
  to administrative error rather than because of a spoofing attack.
Packit Service ae04f2
  Negative trust anchors are strictly temporary; by default they expire
Packit Service ae04f2
  after one hour, but can be configured to last up to one week.
Packit Service ae04f2
* `rndc delzone` can now be used on zones that were not originally created
Packit Service ae04f2
  by "rndc addzone".
Packit Service ae04f2
* `rndc modzone` reconfigures a single zone, without requiring the entire
Packit Service ae04f2
  server to be reconfigured.
Packit Service ae04f2
* `rndc showzone` displays the current configuration of a zone.
Packit Service ae04f2
* `rndc managed-keys` can be used to check the status of RFC 5001 managed
Packit Service ae04f2
  trust anchors, or to force trust anchors to be refreshed.
Packit Service ae04f2
* `max-cache-size` can now be set to a percentage of available memory. The
Packit Service ae04f2
  default is 90%.
Packit Service ae04f2
* Update forwarding performance has been improved by allowing a single TCP
Packit Service ae04f2
  connection to be shared by multiple updates.
Packit Service ae04f2
* The EDNS Client Subnet (ECS) option is now supported for authoritative
Packit Service ae04f2
  servers; if a query contains an ECS option then ACLs containing `geoip`
Packit Service ae04f2
  or `ecs` elements can match against the the address encoded in the
Packit Service ae04f2
  option.  This can be used to select a view for a query, so that different
Packit Service ae04f2
  answers can be provided depending on the client network.
Packit Service ae04f2
* The EDNS EXPIRE option has been implemented on the client side, allowing
Packit Service ae04f2
  a slave server to set the expiration timer correctly when transferring
Packit Service ae04f2
  zone data from another slave server.
Packit Service ae04f2
* The key generation and manipulation tools (`dnssec-keygen`,
Packit Service ae04f2
  `dnssec-settime`, `dnssec-importkey`, `dnssec-keyfromlabel`) now take
Packit Service ae04f2
  `-Psync` and `-Dsync` options to set the publication and deletion times
Packit Service ae04f2
  of CDS and CDNSKEY parent-synchronization records.  Both `named` and
Packit Service ae04f2
  `dnssec-signzone` can now publish and remove these records at the
Packit Service ae04f2
  scheduled times.
Packit Service ae04f2
* A new `minimal-any` option reduces the size of UDP responses for query
Packit Service ae04f2
  type ANY by returning a single arbitrarily selected RRset instead of all
Packit Service ae04f2
  RRsets.
Packit Service ae04f2
* A new `masterfile-style` zone option controls the formatting of text zone
Packit Service ae04f2
  files:  When set to `full`, a zone file is dumped in
Packit Service ae04f2
  single-line-per-record format.
Packit Service ae04f2
* `serial-update-method` can now be set to `date`. On update, the serial
Packit Service ae04f2
  number will be set to the current date in YYYYMMDDNN format.
Packit Service ae04f2
* `dnssec-signzone -N date` sets the serial number to YYYYMMDDNN.
Packit Service ae04f2
* `named -L <filename>` causes named to send log messages to the specified
Packit Service ae04f2
  file by default instead of to the system log.
Packit Service ae04f2
* `dig +ttlunits` prints TTL values with time-unit suffixes: w, d, h, m, s
Packit Service ae04f2
  for weeks, days, hours, minutes, and seconds.
Packit Service ae04f2
* `dig +unknownformat` prints dig output in RFC 3597 "unknown record"
Packit Service ae04f2
  presentation format.
Packit Service ae04f2
* `dig +ednsopt` allows dig to set arbitrary EDNS options on requests.
Packit Service ae04f2
* `dig +ednsflags` allows dig to set yet-to-be-defined EDNS flags on
Packit Service ae04f2
  requests.
Packit Service ae04f2
* `mdig` is an alternate version of dig which sends multiple pipelined TCP
Packit Service ae04f2
  queries to a server.  Instead of waiting for a response after sending a
Packit Service ae04f2
  query, it sends all queries immediately and displays responses in the
Packit Service ae04f2
  order received.
Packit Service ae04f2
* `serial-query-rate` no longer controls NOTIFY messages.  These are
Packit Service ae04f2
  separately controlled by `notify-rate` and `startup-notify-rate`.
Packit Service ae04f2
* `nsupdate` now performs `check-names` processing by default on records to
Packit Service ae04f2
  be added.  This can be disabled with `check-names no`.
Packit Service ae04f2
* The statistics channel now supports DEFLATE compression, reducing the
Packit Service ae04f2
  size of the data sent over the network when querying statistics.
Packit Service ae04f2
* New counters have been added to the statistics channel to track the sizes
Packit Service ae04f2
  of incoming queries and outgoing responses in histogram buckets, as
Packit Service ae04f2
  specified in RSSAC002.
Packit Service ae04f2
* A new NXDOMAIN redirect method (option `nxdomain-redirect`) has been
Packit Service ae04f2
  added, allowing redirection to a specified DNS namespace instead of a
Packit Service ae04f2
  single redirect zone.
Packit Service ae04f2
* When starting up, named now ensures that no other named process is
Packit Service ae04f2
  already running.
Packit Service ae04f2
* Files created by named to store information, including `mkeys` and `nzf`
Packit Service ae04f2
  files, are now named after their corresponding views unless the view name
Packit Service ae04f2
  contains characters incompatible with use as a filename. Old style
Packit Service ae04f2
  filenames (based on the hash of the view name) will still work.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.1
Packit Service ae04f2
	
Packit Service ae04f2
BIND 9.11.1 is a maintenance release, and addresses the security
Packit Service ae04f2
flaws disclosed in CVE-2016-6170, CVE-2016-8864, CVE-2016-9131,
Packit Service ae04f2
CVE-2016-9147, CVE-2016-9444, CVE-2016-9778, CVE-2017-3135,
Packit Service ae04f2
CVE-2017-3136, CVE-2017-3137 and CVE-2017-3138.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.2
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.2 is a maintenance release, and addresses the security flaws
Packit Service ae04f2
disclosed in CVE-2017-3140, CVE-2017-3141, CVE-2017-3142 and CVE-2017-3143.
Packit Service ae04f2
It also addresses several bugs related to the use of an LMDB database to
Packit Service ae04f2
store data related to zones added via `rndc addzone` or catalog zones.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.3
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.3 is a maintenance release, and addresses the security flaw
Packit Service ae04f2
disclosed in CVE-2017-3145.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.4
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.4 is a maintenance release, and addresses the security flaw
Packit Service ae04f2
disclosed in CVE-2018-5738. It also introduces "root key sentinel" support,
Packit Service ae04f2
enabling validating resolvers to indicate via a special query which trust
Packit Service ae04f2
anchors are configured for the root zone.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.5
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.5 is a maintenance release, and also addresses CVE-2018-5741
Packit Service ae04f2
by correcting faulty documentation and introducing the following new
Packit Service ae04f2
feature:
Packit Service ae04f2
Packit Service ae04f2
* New `krb5-selfsub` and `ms-selfsub` rule types for `update-policy`
Packit Service ae04f2
  statements allow updating of subdomains based on a Kerberos or
Packit Service ae04f2
  Active Directory machine principal.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.6
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.6 is a maintenance release, and also addresses the security
Packit Service ae04f2
flaws disclosed in CVE-2018-5743, CVE-2018-5745, CVE-2018-5744,
Packit Service ae04f2
and CVE-2019-6465.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.7
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.7 is a maintenance release, and also addresses the security
Packit Service ae04f2
flaw disclosed in CVE-2018-5743.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.8
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.8 is a maintenance release, and also addresses the security
Packit Service ae04f2
flaw disclosed in CVE-2019-6471.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.9
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.9 is a maintenance release, and also adds support for
Packit Service ae04f2
the new MaxMind GeoIP2 geolocation API when built with
Packit Service ae04f2
`configure --with-geoip2`.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.10
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.10 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.11
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.11 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.12
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.12 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.13
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.13 is a maintenance release, and also addresses the security
Packit Service ae04f2
vulnerability disclosed in CVE-2019-6477.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.14
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.14 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.15
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.15 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.16
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.16 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.17
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.17 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.18
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.18 is a maintenance release.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.19
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.19 is a maintenance release, and also addresses the security
Packit Service ae04f2
vulnerabilities disclosed in CVE-2020-8616 and CVE-2020-8617.
Packit Service ae04f2
Packit Service ae04f2
#### BIND 9.11.20
Packit Service ae04f2
Packit Service ae04f2
BIND 9.11.20 is a maintenance release, and also addresses the security
Packit Service ae04f2
vulnerability disclosed in CVE-2020-8619.
Packit Service ae04f2
Packit Service ae04f2
###  Building BIND
Packit Service ae04f2
Packit Service ae04f2
Minimally, BIND requires a UNIX or Linux system with an ANSI C compiler,
Packit Service ae04f2
basic POSIX support, and a 64-bit integer type. Successful builds have been
Packit Service ae04f2
observed on many versions of Linux and UNIX, including RHEL/CentOS, Fedora,
Packit Service ae04f2
Debian, Ubuntu, SLES, openSUSE, Slackware, Alpine, FreeBSD, NetBSD,
Packit Service ae04f2
OpenBSD, macOS, Solaris, OpenIndiana, OmniOS CE, HP-UX, and OpenWRT.
Packit Service ae04f2
Packit Service ae04f2
BIND is also available for Windows Server 2008 and higher.  See
Packit Service ae04f2
`win32utils/build.txt` for details on building for Windows
Packit Service ae04f2
systems.
Packit Service ae04f2
Packit Service ae04f2
To build on a UNIX or Linux system, use:
Packit Service ae04f2
Packit Service ae04f2
		$ ./configure
Packit Service ae04f2
		$ make
Packit Service ae04f2
Packit Service ae04f2
If you're planning on making changes to the BIND 9 source, you should run
Packit Service ae04f2
`make depend`.  If you're using Emacs, you might find `make tags` helpful.
Packit Service ae04f2
Packit Service ae04f2
Several environment variables that can be set before running `configure` will
Packit Service ae04f2
affect compilation.  Significant ones are:
Packit Service ae04f2
Packit Service ae04f2
|Variable|Description |
Packit Service ae04f2
|--------------------|-----------------------------------------------|
Packit Service ae04f2
|`CC`|The C compiler to use.  `configure` tries to figure out the right one for supported systems.|
Packit Service ae04f2
|`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`. |
Packit Service ae04f2
|`STD_CINCLUDES`|System header file directories.  Can be used to specify where add-on thread or IPv6 support is, for example.  Defaults to empty string.|
Packit Service ae04f2
|`STD_CDEFINES`|Any additional preprocessor symbols you want defined.  Defaults to empty string. For a list of possible settings, see the file [OPTIONS](OPTIONS.md).|
Packit Service ae04f2
|`LDFLAGS`|Linker flags. Defaults to empty string.|
Packit Service ae04f2
|`BUILD_CC`|Needed when cross-compiling: the native C compiler to use when building for the target system.|
Packit Service ae04f2
|`BUILD_CFLAGS`|`CFLAGS` for the target system during cross-compiling.|
Packit Service ae04f2
|`BUILD_CPPFLAGS`|`CPPFLAGS` for the target system during cross-compiling.|
Packit Service ae04f2
|`BUILD_LDFLAGS`|`LDFLAGS` for the target system during cross-compiling.|
Packit Service ae04f2
|`BUILD_LIBS`|`LIBS` for the target system during cross-compiling.|
Packit Service ae04f2
Packit Service ae04f2
Additional environment variables affecting the build are listed at the
Packit Service ae04f2
end of the `configure` help text, which can be obtained by running the
Packit Service ae04f2
command:
Packit Service ae04f2
Packit Service ae04f2
    $ ./configure --help
Packit Service ae04f2
Packit Service ae04f2
On platforms where neither the C11 Atomic operations library nor custom ISC
Packit Service ae04f2
atomic operations are available, updating the statistics counters is not
Packit Service ae04f2
locked due to performance reasons and therefore the counters might be
Packit Service ae04f2
inaccurate.  Anybody building BIND 9 is strongly advised to use a modern
Packit Service ae04f2
C11 compiler with C11 Atomic operations library support.
Packit Service ae04f2
Packit Service ae04f2
####  macOS
Packit Service ae04f2
Packit Service ae04f2
Building on macOS assumes that the "Command Tools for Xcode" is installed.
Packit Service ae04f2
This can be downloaded from
Packit Service ae04f2
[https://developer.apple.com/download/more/](https://developer.apple.com/download/more/)
Packit Service ae04f2
or, if you have Xcode already installed, you can run `xcode-select
Packit Service ae04f2
--install`.  (Note that an Apple ID may be required to access the download
Packit Service ae04f2
page.)
Packit Service ae04f2
Packit Service ae04f2
###  Dependencies
Packit Service ae04f2
Packit Service ae04f2
Portions of BIND that are written in Python, including
Packit Service ae04f2
`dnssec-keymgr`, `dnssec-coverage`, `dnssec-checkds`, and some of the
Packit Service ae04f2
system tests, require the `argparse`, `ply` and `distutils.core` modules
Packit Service ae04f2
to be available.
Packit Service ae04f2
`argparse` is a standard module as of Python 2.7 and Python 3.2.
Packit Service ae04f2
`ply` is available from [https://pypi.python.org/pypi/ply](https://pypi.python.org/pypi/ply).
Packit Service ae04f2
`distutils.core` is required for installation.
Packit Service ae04f2
Packit Service ae04f2
####  Compile-time options
Packit Service ae04f2
Packit Service ae04f2
To see a full list of configuration options, run `configure --help`.
Packit Service ae04f2
Packit Service ae04f2
On most platforms, BIND 9 is built with multithreading support, allowing it
Packit Service ae04f2
to take advantage of multiple CPUs.  You can configure this by specifying
Packit Service ae04f2
`--enable-threads` or `--disable-threads` on the `configure` command line.
Packit Service ae04f2
The default is to enable threads, except on some older operating systems on
Packit Service ae04f2
which threads are known to have had problems in the past.  (Note: Prior to
Packit Service ae04f2
BIND 9.10, the default was to disable threads on Linux systems; this has
Packit Service ae04f2
now been reversed.  On Linux systems, the threaded build is known to change
Packit Service ae04f2
BIND's behavior with respect to file permissions; it may be necessary to
Packit Service ae04f2
specify a user with the -u option when running `named`.)
Packit Service ae04f2
Packit Service ae04f2
To build shared libraries, specify `--with-libtool` on the `configure`
Packit Service ae04f2
command line.
Packit Service ae04f2
Packit Service ae04f2
For the server to support DNSSEC, you need to build it with crypto support.
Packit Service ae04f2
To use OpenSSL, you should have OpenSSL 1.0.2e or newer installed.  If the
Packit Service ae04f2
OpenSSL library is installed in a nonstandard location, specify the prefix
Packit Service ae04f2
using `--with-openssl=<PREFIX>` on the configure command line. To use a
Packit Service ae04f2
PKCS#11 hardware service module for cryptographic operations, specify the
Packit Service ae04f2
path to the PKCS#11 provider library using `--with-pkcs11=<PREFIX>`, and
Packit Service ae04f2
configure BIND with "--enable-native-pkcs11".
Packit Service ae04f2
Packit Service ae04f2
To support the HTTP statistics channel, the server must be linked with at
Packit Service ae04f2
least one of the following libraries: `libxml2`
Packit Service ae04f2
[http://xmlsoft.org](http://xmlsoft.org) or `json-c`
Packit Service ae04f2
[https://github.com/json-c/json-c](https://github.com/json-c/json-c).
Packit Service ae04f2
If these are installed at a nonstandard location, then:
Packit Service ae04f2
Packit Service ae04f2
* for `libxml2`, specify the prefix using `--with-libxml2=/prefix`,
Packit Service ae04f2
* for `json-c`, adjust `PKG_CONFIG_PATH`.
Packit Service ae04f2
Packit Service ae04f2
To support compression on the HTTP statistics channel, the server must be
Packit Service ae04f2
linked against `libzlib`.  If this is installed in a nonstandard location,
Packit Service ae04f2
specify the prefix using `--with-zlib=/prefix`.
Packit Service ae04f2
Packit Service ae04f2
To support storing configuration data for runtime-added zones in an LMDB
Packit Service ae04f2
database, the server must be linked with liblmdb. If this is installed in a
Packit Service ae04f2
nonstandard location, specify the prefix using `with-lmdb=/prefix`.
Packit Service ae04f2
Packit Service ae04f2
To support GeoIP location-based ACLs, the server must be linked with
Packit Service ae04f2
libGeoIP. This is not turned on by default; BIND must be configured with
Packit Service ae04f2
"--with-geoip". If the library is installed in a nonstandard location, use
Packit Service ae04f2
specify the prefix using "--with-geoip=/prefix".
Packit Service ae04f2
Packit Service ae04f2
For DNSTAP packet logging, you must have installed `libfstrm`
Packit Service ae04f2
[https://github.com/farsightsec/fstrm](https://github.com/farsightsec/fstrm)
Packit Service ae04f2
and `libprotobuf-c`
Packit Service ae04f2
[https://developers.google.com/protocol-buffers](https://developers.google.com/protocol-buffers),
Packit Service ae04f2
and BIND must be configured with `--enable-dnstap`.
Packit Service ae04f2
Packit Service ae04f2
Certain compiled-in constants and default settings can be increased to
Packit Service ae04f2
values better suited to large servers with abundant memory resources (e.g,
Packit Service ae04f2
64-bit servers with 12G or more of memory) by specifying
Packit Service ae04f2
`--with-tuning=large` on the `configure` command line. This can improve
Packit Service ae04f2
performance on big servers, but will consume more memory and may degrade
Packit Service ae04f2
performance on smaller systems.
Packit Service ae04f2
Packit Service ae04f2
On some platforms it is necessary to explicitly request large file support
Packit Service ae04f2
to handle files bigger than 2GB.  This can be done by using
Packit Service ae04f2
`--enable-largefile` on the `configure` command line.
Packit Service ae04f2
Packit Service ae04f2
Support for the "fixed" rrset-order option can be enabled or disabled by
Packit Service ae04f2
specifying `--enable-fixed-rrset` or `--disable-fixed-rrset` on the
Packit Service ae04f2
configure command line.  By default, fixed rrset-order is disabled to
Packit Service ae04f2
reduce memory footprint.
Packit Service ae04f2
Packit Service ae04f2
If your operating system has integrated support for IPv6, it will be used
Packit Service ae04f2
automatically.  If you have installed KAME IPv6 separately, use
Packit Service ae04f2
`--with-kame[=PATH]` to specify its location.
Packit Service ae04f2
Packit Service ae04f2
The `--enable-querytrace` option causes `named` to log every step of
Packit Service ae04f2
processing every query. This should only be enabled when debugging, because
Packit Service ae04f2
it has a significant negative impact on query performance.
Packit Service ae04f2
Packit Service ae04f2
`make install` will install `named` and the various BIND 9 libraries.  By
Packit Service ae04f2
default, installation is into /usr/local, but this can be changed with the
Packit Service ae04f2
`--prefix` option when running `configure`.
Packit Service ae04f2
Packit Service ae04f2
You may specify the option `--sysconfdir` to set the directory where
Packit Service ae04f2
configuration files like `named.conf` go by default, and `--localstatedir`
Packit Service ae04f2
to set the default parent directory of `run/named.pid`.   For backwards
Packit Service ae04f2
compatibility with BIND 8, `--sysconfdir` defaults to `/etc` and
Packit Service ae04f2
`--localstatedir` defaults to `/var` if no `--prefix` option is given.  If
Packit Service ae04f2
there is a `--prefix` option, sysconfdir defaults to `$prefix/etc` and
Packit Service ae04f2
localstatedir defaults to `$prefix/var`.
Packit Service ae04f2
Packit Service ae04f2
###  Automated testing
Packit Service ae04f2
Packit Service ae04f2
A system test suite can be run with `make test`.  The system tests require
Packit Service ae04f2
you to configure a set of virtual IP addresses on your system (this allows
Packit Service ae04f2
multiple servers to run locally and communicate with one another).  These
Packit Service ae04f2
IP addresses can be configured by running the command
Packit Service ae04f2
`bin/tests/system/ifconfig.sh up` as root.
Packit Service ae04f2
Packit Service ae04f2
Some tests require Perl and the `Net::DNS` and/or `IO::Socket::INET6` modules,
Packit Service ae04f2
and will be skipped if these are not available. Some tests require Python
Packit Service ae04f2
and the `dnspython` module and will be skipped if these are not available.
Packit Service ae04f2
See bin/tests/system/README for further details.
Packit Service ae04f2
Packit Service ae04f2
Unit tests are implemented using the [CMocka unit testing framework](https://cmocka.org/).
Packit Service ae04f2
To build them, use `configure --with-cmocka`. Execution of tests is done
Packit Service ae04f2
by the [Kyua test execution engine](https://github.com/jmmv/kyua); if the
Packit Service ae04f2
`kyua` command is available, then unit tests can be run via `make test`
Packit Service ae04f2
or `make unit`.
Packit Service ae04f2
Packit Service ae04f2
###  Documentation
Packit Service ae04f2
Packit Service ae04f2
The *BIND 9 Administrator Reference Manual* is included with the source
Packit Service ae04f2
distribution, in DocBook XML, HTML, and PDF format, in the `doc/arm`
Packit Service ae04f2
directory.
Packit Service ae04f2
Packit Service ae04f2
Some of the programs in the BIND 9 distribution have man pages in their
Packit Service ae04f2
directories.  In particular, the command line options of `named` are
Packit Service ae04f2
documented in `bin/named/named.8`.
Packit Service ae04f2
Packit Service ae04f2
Frequently (and not-so-frequently) asked questions and their answers
Packit Service ae04f2
can be found in the ISC Knowledge Base at
Packit Service ae04f2
[https://kb.isc.org](https://kb.isc.org).
Packit Service ae04f2
Packit Service ae04f2
Additional information on various subjects can be found in other
Packit Service ae04f2
`README` files throughout the source tree.
Packit Service ae04f2
Packit Service ae04f2
###  Change log
Packit Service ae04f2
Packit Service ae04f2
A detailed list of all changes that have been made throughout the
Packit Service ae04f2
development BIND 9 is included in the file CHANGES, with the most recent
Packit Service ae04f2
changes listed first.  Change notes include tags indicating the category of
Packit Service ae04f2
the change that was made; these categories are:
Packit Service ae04f2
Packit Service ae04f2
|Category	|Description	        			|
Packit Service ae04f2
|--------------	|-----------------------------------------------|
Packit Service ae04f2
| [func] | New feature |
Packit Service ae04f2
| [bug] | General bug fix |
Packit Service ae04f2
| [security] | Fix for a significant security flaw |
Packit Service ae04f2
| [experimental] | Used for new features when the syntax or other aspects of the design are still in flux and may change |
Packit Service ae04f2
| [port] | Portability enhancement |
Packit Service ae04f2
| [maint] | Updates to built-in data such as root server addresses and keys |
Packit Service ae04f2
| [tuning] | Changes to built-in configuration defaults and constants to improve performance |
Packit Service ae04f2
| [performance] | Other changes to improve server performance |
Packit Service ae04f2
| [protocol] | Updates to the DNS protocol such as new RR types |
Packit Service ae04f2
| [test] | Changes to the automatic tests, not affecting server functionality |
Packit Service ae04f2
| [cleanup] | Minor corrections and refactoring |
Packit Service ae04f2
| [doc] | Documentation |
Packit Service ae04f2
| [contrib] | Changes to the contributed tools and libraries in the 'contrib' subdirectory |
Packit Service ae04f2
| [placeholder] | Used in the master development branch to reserve change numbers for use in other branches, e.g. when fixing a bug that only exists in older releases |
Packit Service ae04f2
Packit Service ae04f2
In general, [func] and [experimental] tags will only appear in new-feature
Packit Service ae04f2
releases (i.e., those with version numbers ending in zero).  Some new
Packit Service ae04f2
functionality may be backported to older releases on a case-by-case basis.
Packit Service ae04f2
All other change types may be applied to all currently-supported releases.
Packit Service ae04f2
Packit Service ae04f2
#### Bug report identifiers
Packit Service ae04f2
Packit Service ae04f2
Most notes in the CHANGES file include a reference to a bug report or
Packit Service ae04f2
issue number. Prior to 2018, these were usually of the form `[RT #NNN]`
Packit Service ae04f2
and referred to entries in the "bind9-bugs" RT database, which was not open
Packit Service ae04f2
to the public. More recent entries use the form `[GL #NNN]` or, less often,
Packit Service ae04f2
`[GL !NNN]`, which, respectively, refer to issues or merge requests in the
Packit Service ae04f2
GitLab database. Most of these are publicly readable, unless they include
Packit Service ae04f2
information which is confidential or security sensitive.
Packit Service ae04f2
Packit Service ae04f2
To look up a GitLab issue by its number, use the URL
Packit Service ae04f2
[https://gitlab.isc.org/isc-projects/bind9/issues/NNN](https://gitlab.isc.org/isc-projects/bind9/issues).
Packit Service ae04f2
To look up a merge request, use
Packit Service ae04f2
[https://gitlab.isc.org/isc-projects/bind9/merge_requests/NNN](https://gitlab.isc.org/isc-projects/bind9/merge_requests).
Packit Service ae04f2
Packit Service ae04f2
In rare cases, an issue or merge request number may be followed with the
Packit Service ae04f2
letter "P". This indicates that the information is in the private ISC
Packit Service ae04f2
GitLab instance, which is not visible to the public.
Packit Service ae04f2
Packit Service ae04f2
###  Acknowledgments
Packit Service ae04f2
Packit Service ae04f2
* The original development of BIND 9 was underwritten by the
Packit Service ae04f2
  following organizations:
Packit Service ae04f2
Packit Service ae04f2
		Sun Microsystems, Inc.
Packit Service ae04f2
		Hewlett Packard
Packit Service ae04f2
		Compaq Computer Corporation
Packit Service ae04f2
		IBM
Packit Service ae04f2
		Process Software Corporation
Packit Service ae04f2
		Silicon Graphics, Inc.
Packit Service ae04f2
		Network Associates, Inc.
Packit Service ae04f2
		U.S. Defense Information Systems Agency
Packit Service ae04f2
		USENIX Association
Packit Service ae04f2
		Stichting NLnet - NLnet Foundation
Packit Service ae04f2
		Nominum, Inc.
Packit Service ae04f2
Packit Service ae04f2
* This product includes software developed by the OpenSSL Project for use
Packit Service ae04f2
  in the OpenSSL Toolkit.
Packit Service ae04f2
  [http://www.OpenSSL.org/](http://www.OpenSSL.org/)
Packit Service ae04f2
* This product includes cryptographic software written by Eric Young
Packit Service ae04f2
  (eay@cryptsoft.com)
Packit Service ae04f2
* This product includes software written by Tim Hudson (tjh@cryptsoft.com)