xref: /netbsd-src/external/mpl/bind/dist/doc/notes/notes-9.20.0.rst (revision 9689912e6b171cbda866ec33f15ae94a04e2c02d)
1.. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
2..
3.. SPDX-License-Identifier: MPL-2.0
4..
5.. This Source Code Form is subject to the terms of the Mozilla Public
6.. License, v. 2.0.  If a copy of the MPL was not distributed with this
7.. file, you can obtain one at https://mozilla.org/MPL/2.0/.
8..
9.. See the COPYRIGHT file distributed with this work for additional
10.. information regarding copyright ownership.
11
12Notes for BIND 9.20.0
13---------------------
14
15.. note:: This section only lists changes since BIND 9.18.28, the most
16          recent release on the previous stable branch of BIND at the
17          time of the publication of BIND 9.20.0.
18
19New Features
20~~~~~~~~~~~~
21
22- The :any:`forwarders` statement now supports the :any:`tls` argument,
23  to be used to forward queries to DoT-enabled servers. :gl:`#3726`
24
25- :iscman:`named` now supports forwarding Dynamic DNS updates through
26  DNS-over-TLS (DoT). :gl:`#3512`
27
28- The :iscman:`nsupdate` tool now supports DNS-over-TLS (DoT).
29  :gl:`!6752`
30
31- The :any:`tls` block was extended with a new :any:`cipher-suites` option
32  that allows permitted cipher suites for TLSv1.3 to be set. Please
33  consult the documentation for additional details.
34  :gl:`#3504`
35
36- Initial support for the PROXYv2 protocol was added. :iscman:`named`
37  can now accept PROXYv2 headers over all currently implemented DNS
38  transports and :iscman:`dig` can insert these headers into the queries
39  it sends. Please consult the related documentation
40  (:any:`allow-proxy`, :any:`allow-proxy-on`, :any:`listen-on`, and
41  :any:`listen-on-v6` for :iscman:`named`, :option:`dig +proxy` and
42  :option:`dig +proxy-plain` for :iscman:`dig`) for additional details.
43  :gl:`#4388`
44
45- The client-side support of the EDNS EXPIRE option has been expanded to
46  include IXFR and AXFR query types. This enhancement enables
47  :iscman:`named` to perform AXFR and IXFR queries while incorporating
48  the EDNS EXPIRE option. :gl:`#4170`
49
50- A new configuration option :any:`require-cookie` has been introduced.
51  It specifies whether there should be a DNS COOKIE in the response for
52  a given prefix; if not, :iscman:`named` falls back to TCP. This is
53  useful if it is known that a given server supports DNS COOKIE. It can
54  also be used to force all non-DNS COOKIE responses to fall back to
55  TCP. :gl:`#2295`
56
57- The :any:`check-svcb` option has been added to control the checking of
58  additional constraints on SVCB records. This change affects
59  :iscman:`named`, :iscman:`named-checkconf`, :iscman:`named-checkzone`,
60  :iscman:`named-compilezone`, and :iscman:`nsupdate`. :gl:`#3576`
61
62- The new :any:`resolver-use-dns64` option enables :iscman:`named` to
63  apply :any:`dns64` rules to IPv4 server addresses when sending
64  recursive queries, so that resolution can be performed over a NAT64
65  connection. :gl:`#608`
66
67- A new option to :any:`dnssec-policy` has been added, :any:`cdnskey`,
68  that allows users to enable or disable the publication of CDNSKEY
69  records. :gl:`#4050`
70
71- When using :any:`dnssec-policy`, it is now possible to configure the
72  digest type to use when CDS records need to be published with
73  :any:`cds-digest-types`. Also, publication of specific CDNSKEY/CDS
74  records can now be set with :option:`dnssec-signzone -G`. :gl:`#3837`
75
76- Support for multi-signer model 2 (:rfc:`8901`) when using
77  :any:`inline-signing` was added. :gl:`#2710`
78
79- HSM support was added to :any:`dnssec-policy`. Keys can now be
80  configured with a ``key-store`` that allows users to set the directory
81  where key files are stored and to set a PKCS#11 URI string. The latter
82  requires OpenSSL 3 and a valid PKCS#11 provider to be configured for
83  OpenSSL. :gl:`#1129`
84
85- A new DNSSEC tool :iscman:`dnssec-ksr` has been added to create Key
86  Signing Request (KSR) and Signed Key Response (SKR) files. :gl:`#1128`
87
88- :iscman:`dnssec-verify` and :iscman:`dnssec-signzone` now accept a
89  ``-J`` option to specify a journal file to read when loading the zone
90  to be verified or signed. :gl:`#2486`
91
92- :iscman:`dnssec-keygen` now allows the options :option:`-k
93  <dnssec-keygen -k>` and :option:`-f <dnssec-keygen -f>` to be used
94  together. This allows the creation of keys for a given
95  :any:`dnssec-policy` that match only the KSK (``-fK``) or ZSK (``-fZ``)
96  roles. :gl:`#1128`
97
98- The :any:`response-policy` statement was extended with a new argument
99  ``ede``. It enables an :rfc:`8914` Extended DNS Error (EDE) code of choice to
100  be set for responses which have been modified by a given RPZ. :gl:`#3410`
101
102- A new way of configuring the preferred source address when talking to
103  remote servers, such as :any:`primaries` and :any:`parental-agents`,
104  has been added: setting the ``source`` and/or ``source-v6`` arguments
105  for a given statement is now possible. This new approach is intended
106  to eventually replace statements such as :any:`parental-source`,
107  :any:`parental-source-v6`, :any:`transfer-source`, etc. :gl:`#3762`
108
109- The new command-line :option:`delv +ns` option activates name server
110  mode, to more accurately reproduce the behavior of :iscman:`named`
111  when resolving a query. In this mode, :iscman:`delv` uses an internal
112  recursive resolver rather than an external server. All messages sent
113  and received during the resolution and validation process are logged.
114  This can be used in place of :option:`dig +trace`. :gl:`#3842`
115
116- The read timeout in :iscman:`rndc` can now be specified on the command
117  line using the :option:`-t <rndc -t>` option, allowing commands that
118  take a long time to complete sufficient time to do so. :gl:`#4046`
119
120- The statistics channel now includes information about incoming zone
121  transfers that are currently in progress. :gl:`#3883`
122
123- Information on incoming zone transfers in the statistics channel now
124  also shows the zones' "first refresh" flag, which indicates that a zone
125  is not fully ready and that its first ever refresh is pending or is in
126  progress. The number of such zones is now also exposed by the
127  :option:`rndc status` command. :gl:`#4241`
128
129- Added a new statistics variable ``recursive high-water`` that reports
130  the maximum number of simultaneous recursive clients BIND has handled
131  while running. :gl:`#4668`
132
133- A new command, :option:`rndc fetchlimit`, prints a list of name server
134  addresses that are currently rate-limited due to
135  :any:`fetches-per-server` and domain names that are rate-limited due
136  to :any:`fetches-per-zone`. :gl:`#665`
137
138- Queries and responses now emit distinct dnstap entries for DNS-over-TLS
139  (DoT) and DNS-over-HTTPS (DoH), and :any:`dnstap-read` understands
140  these entries. :gl:`#4523`
141
142- :iscman:`dnstap-read` can now print long timestamps with millisecond
143  precision. :gl:`#2360`
144
145- Support for libsystemd's ``sd_notify()`` function was added, enabling
146  :iscman:`named` to report its status to the init system. This allows
147  systemd to wait until :iscman:`named` is fully ready before starting
148  other services that depend on name resolution. :gl:`#1176`
149
150- Support for User Statically Defined Tracing (USDT) probes has been
151  added. These probes enable fine-grained application tracing and
152  introduce no overhead when they are not enabled. :gl:`#4041`
153
154Removed Features
155~~~~~~~~~~~~~~~~
156
157- Support for Red Hat Enterprise Linux version 7 (and clones) has been
158  dropped. A C11-compliant compiler is now required to compile BIND 9.
159  :gl:`#3729`
160
161- Compiling with `jemalloc`_ versions older than 4.0.0 is no longer
162  supported; those versions do not provide the features required by
163  current BIND 9 releases. :gl:`#4296`
164
165- The ``auto-dnssec`` configuration statement has been removed. Please
166  use :any:`dnssec-policy` or manual signing instead.
167  See article `how to migrate <https://kb.isc.org/docs/dnssec-key-and-signing-policy#migrate-to-dnssecpolicy>`_
168  from ``auto-dnssec`` to :any:`dnssec-policy`.
169
170  The following
171  statements have become obsolete: :any:`dnskey-sig-validity`,
172  :any:`dnssec-dnskey-kskonly`, :any:`dnssec-update-mode`,
173  :any:`sig-validity-interval`, and :any:`update-check-ksk`.
174  :gl:`#3672`
175
176- Dynamic updates that add and remove DNSKEY and NSEC3PARAM records no
177  longer trigger key rollovers and denial-of-existence operations. This
178  also means that the :any:`dnssec-secure-to-insecure` option has been
179  obsoleted. :gl:`#3686`
180
181- The ``glue-cache`` *option* has been removed. The glue cache *feature*
182  still works and is now permanently *enabled*. :gl:`#2147`
183
184- Configuring the control channel to use a Unix domain socket has been a
185  fatal error since BIND 9.18. The feature has now been completely
186  removed and :iscman:`named-checkconf` now reports it as a
187  configuration error. :gl:`#4311`
188
189- The statements setting alternate local addresses for inbound zone
190  transfers (``alt-transfer-source``, ``alt-transfer-source-v6``, and
191  ``use-alt-transfer-source``) have been removed. :gl:`#3714`
192
193- The ``resolver-nonbackoff-tries`` and ``resolver-retry-interval``
194  statements have been removed. Using them is now a fatal error.
195  :gl:`#4405`
196
197- BIND 9 no longer supports non-zero :any:`stale-answer-client-timeout`
198  values, when the feature is turned on. When using a non-zero value,
199  :iscman:`named` now generates a warning log message, and treats the
200  value as ``0``. :gl:`#4447`
201
202- The Differentiated Services Code Point (DSCP) feature has been
203  removed: configuring DSCP values in ``named.conf`` is now a
204  configuration error. :gl:`#3789`
205
206- The ``keep-response-order`` option has been declared obsolete and the
207  functionality has been removed. :iscman:`named` expects DNS clients to
208  be fully compliant with :rfc:`7766`. :gl:`#3140`
209
210- Zone type ``delegation-only``, and the ``delegation-only`` and
211  ``root-delegation-only`` statements, have been removed. Using them is
212  a configuration error.
213
214  These statements were created to address the SiteFinder controversy,
215  in which certain top-level domains redirected misspelled queries to
216  other sites instead of returning NXDOMAIN responses. Since top-level
217  domains are now DNSSEC-signed, and DNSSEC validation is active by
218  default, the statements are no longer needed. :gl:`#3953`
219
220- The ``coresize``, ``datasize``, ``files``, and ``stacksize`` options
221  have been removed. The limits these options set should be enforced
222  externally, either by manual configuration (e.g. using ``ulimit``) or
223  via the process supervisor (e.g. ``systemd``). :gl:`#3676`
224
225- Support for using AES as the DNS COOKIE algorithm (``cookie-algorithm
226  aes;``) has been removed. The only supported DNS COOKIE algorithm is
227  now the current default, SipHash-2-4. :gl:`#4421`
228
229- The TKEY Mode 2 (Diffie-Hellman Exchanged Keying Mode) has been
230  removed and using TKEY Mode 2 is now a fatal error. Users are advised
231  to switch to TKEY Mode 3 (GSS-API). :gl:`#3905`
232
233- Special-case code that was originally added to allow GSS-TSIG to work
234  around bugs in the Windows 2000 version of Active Directory has now
235  been removed, since Windows 2000 is long past end-of-life. The
236  :option:`-o <nsupdate -o>` option and the ``oldgsstsig`` command to
237  :iscman:`nsupdate` have been deprecated, and are now treated as
238  synonyms for :option:`-g <nsupdate -g>` and ``gsstsig`` respectively.
239  :gl:`#4012`
240
241- Support for the ``lock-file`` statement and the ``named -X``
242  command-line option has been removed. An external process supervisor
243  should be used instead. :gl:`#4391`
244
245  Alternatively, the ``flock`` utility (part of util-linux) can be used
246  on Linux systems to achieve the same effect as ``lock-file`` or
247  ``named -X``:
248
249  ::
250
251    flock -n -x <directory>/named.lock <path>/named <arguments>
252
253- The :iscman:`named` command-line option :option:`-U <named -U>`, which
254  specified the number of UDP dispatches, has been removed. Using it now
255  returns a warning. :gl:`#1879`
256
257- The ``--with-tuning`` option for ``configure`` has been removed. Each
258  of the compile-time settings that required different values based on
259  the "workload" (which were previously affected by the value of the
260  ``--with-tuning`` option) has either been removed or changed to a
261  sensible default. :gl:`#3664`
262
263- The functions that were in the ``libbind9`` shared library have been
264  moved to the ``libisc`` and ``libisccfg`` libraries. The now-empty
265  ``libbind9`` has been removed and is no longer installed. :gl:`#3903`
266
267- The ``irs_resconf`` module has been moved to the ``libdns`` shared
268  library. The now-empty ``libirs`` library has been removed and is no
269  longer installed. :gl:`#3904`
270
271.. _`jemalloc`: https://jemalloc.net/
272
273Deprecated Features
274~~~~~~~~~~~~~~~~~~~
275
276Features listed in this section still work but are scheduled for eventual
277removal.
278
279- The use of the :any:`max-zone-ttl` option in :namedconf:ref:`options`
280  and :namedconf:ref:`zone` blocks has been deprecated; it should now be
281  configured as part of :any:`dnssec-policy`. A warning is logged if
282  this option is used in :namedconf:ref:`options` or :any:`zone` blocks.
283  In a future release, it will become nonoperational. :gl:`#2918`
284
285- The :any:`sortlist` option has been deprecated and will be removed in a
286  future BIND 9.21.x release. Users should not rely on a specific order
287  of resource records in DNS messages.  :gl:`#4593`
288
289- The ``fixed`` value for the :any:`rrset-order` option and the
290  corresponding ``configure`` script option have been deprecated and will
291  be removed in a future BIND 9.21.x release. Users should not rely on a
292  specific order of resource records in DNS messages.  :gl:`#4446`
293
294Feature Changes
295~~~~~~~~~~~~~~~
296
297- BIND now depends on `liburcu`_, Userspace RCU, for lock-free data
298  structures. :gl:`#3934`
299
300- On Linux, `libcap`_ is now a required dependency to help :iscman:`named`
301  keep needed privileges. :gl:`#3583`
302
303- Compiling BIND 9 now requires at least libuv version 1.34.0 or higher.
304  libuv should be available on all supported platforms either as a
305  native package or as a backport. :gl:`#3567`
306
307- Outgoing zone transfers are no longer enabled by default. An explicit
308  :any:`allow-transfer` ACL must now be set at the :any:`zone`,
309  :any:`view`, or :namedconf:ref:`options` level to enable outgoing
310  transfers. :gl:`#4728`
311
312- DNS zones signed using :any:`dnssec-policy` now automatically detect
313  their parent servers, and BIND queries them to check the content of the
314  DS RRset. This allows DNSSEC key rollovers to safely and automatically
315  proceed when the parent zone is updated with new DNSSEC keys, i.e.
316  using the CDS/CDNSKEY mechanism. This behavior is facilitated by the
317  new :any:`checkds` feature, which automatically populates
318  :any:`parental-agents` by resolving the parent NS records. These parent
319  name servers are queried to check the DS RRset during a KSK rollover
320  initiated by :any:`dnssec-policy`. :gl:`#3901`
321
322- The responsiveness of :iscman:`named` was improved, when serving as an
323  authoritative DNS server for a delegation-heavy zone(s) shortly after
324  loading such zone(s). :gl:`#4045`
325
326- To improve query-processing latency under load, the uninterrupted time
327  spent on resolving long chains of cached domain names has been
328  reduced. :gl:`#4185`
329
330- QNAME minimization is now used when looking up the addresses of name
331  servers during the recursive resolution process. :gl:`#4209`
332
333- BIND now returns BADCOOKIE for out-of-date or otherwise bad but
334  well-formed DNS server cookies. :gl:`#4194`
335
336- The DNS name compression algorithm used in BIND 9 has been revised: it
337  now compresses more thoroughly than before, so responses containing
338  names with many labels might have a smaller encoding than before.
339  :gl:`#3661`
340
341- Processing large incremental transfers (IXFR) has been offloaded to a
342  separate work thread so that it does not prevent networking threads
343  from processing regular traffic in the meantime. :gl:`#4367`
344
345- Querying the statistics channel no longer blocks DNS communication on
346  the networking event loop level. :gl:`#4680`
347
348- The :any:`inline-signing` zone option is now ignored if there is no
349  :any:`dnssec-policy` configured for the zone. This means that unsigned
350  zones no longer create redundant signed versions of the zone.
351  :gl:`#4349`
352
353- The :any:`inline-signing` statement can now also be set inside
354  :any:`dnssec-policy`. The default is to use :any:`inline-signing`.
355  This also applies to the built-in policies ``default` and ``insecure``.
356  If  :any:`inline-signing` is set at the ``zone`` level, it overrides the
357  value set in :any:`dnssec-policy`. :gl:`#3677`
358
359- Due to the change in default value from ``no`` to ``yes``,
360  DNSSEC-enabled dynamic zones that do not have :any:`inline-signing`
361  explicitly set must now add the option to their configuration with the
362  value ``no`` if they do not want their zone also to be inline-signed.
363
364- Following :rfc:`9276` recommendations, :any:`dnssec-policy` now only
365  allows an NSEC3 iteration count of 0 for the DNSSEC-signed zones using
366  NSEC3 that the policy manages. :gl:`#4363`
367
368- The maximum number of NSEC3 iterations allowed for validation purposes
369  has been lowered from 150 to 50. DNSSEC responses containing NSEC3
370  records with iteration counts greater than 50 are now treated as
371  insecure. :gl:`#4363`
372
373- The ``dnssec-validation yes`` option now requires an explicitly
374  configured :any:`trust-anchors` statement. If using manual trust
375  anchors is not operationally required, then please consider using
376  ``dnssec-validation auto`` instead. :gl:`#4373`
377
378- :iscman:`named-compilezone` no longer performs zone integrity checks
379  by default; this allows faster conversion of a zone file from one
380  format to another. :gl:`#4364`
381
382  Zone checks can be performed by running :iscman:`named-checkzone`
383  separately, or the previous default behavior can be restored by using:
384
385  ::
386
387    named-compilezone -i full -k fail -n fail -r warn -m warn -M warn -S warn -T warn -W warn -C check-svcb:fail
388
389- The red-black tree data structure used in the RBTDB (the default
390  database implementation for cache and zone databases), has been
391  replaced with QP-tries.  This is expected to improve performance and
392  scalability, though in the current implementation large zones require
393  roughly 15% more memory than the old red-black tree data structure.
394
395  A side effect of this change is that zone files that are created with
396  :any:`masterfile-style` ``relative`` - for example, the output of
397  :any:`dnssec-signzone` - will no longer have multiple different
398  `$ORIGIN` statements. There should be no other changes to server
399  behavior.
400
401  The old RBT-based database still exists for now, and can be used by
402  specifying ``database rbt`` in a ``zone`` statement in ``named.conf``,
403  or by compiling with ``configure --with-zonedb=rbt
404  --with-cachedb=rbt``. :gl:`#4411` :gl:`#4614`
405
406- Multiple RNDC messages are now processed when sent in a single TCP
407  message.
408
409  ISC would like to thank Dominik Thalhammer for reporting the issue and
410  preparing the initial patch. :gl:`#4416`
411
412- The DNSSEC signing data included in zone statistics identified
413  keys only by the key ID; this caused confusion when two keys using
414  different algorithms had the same ID. Zone statistics now identify
415  keys using the algorithm number, followed by "+", followed by the
416  key ID: for example, ``8+54274``. :gl:`#3525`
417
418- The TTL of the NSEC3PARAM record for every NSEC3-signed zone was
419  previously set to 0. It is now changed to match the SOA MINIMUM value
420  for the given zone. :gl:`#3570`
421
422- On startup, :iscman:`named` now sets the limit on the number of open
423  files to the maximum allowed by the operating system, instead of
424  trying to set it to "unlimited". :gl:`#3676`
425
426- When an international domain name is not valid according to IDNA2008,
427  :iscman:`dig` now tries to convert it according to IDNA2003 rules, or
428  pass it through unchanged, instead of stopping with an error message.
429  The ``idna2`` utility can be used to check IDNA syntax. :gl:`#3527`
430
431- The memory statistics have been reduced to a single counter,
432  ``InUse``; ``Malloced`` is an alias that holds the same value. The
433  other counters were usable with the old BIND 9 internal memory
434  allocator, but they are unnecessary now that the latter has been
435  removed. :gl:`#3718`
436
437- The log message ``resolver priming query complete`` has been moved
438  from the INFO log level to the DEBUG(1) log level, to prevent
439  :iscman:`delv` from emitting that message when setting up its internal
440  resolver. :gl:`#3842`
441
442- Worker threads' event loops are now managed by a new "loop manager"
443  API, significantly changing the architecture of the task, timer, and
444  networking subsystems for improved performance and code flow.
445  :gl:`#3508`
446
447- The code for DNS over TCP and DNS over TLS transports has been
448  replaced with a new, unified transport implementation. :gl:`#3374`
449
450.. _`liburcu`: https://liburcu.org/
451.. _`libcap`: https://sites.google.com/site/fullycapable/
452
453Bug Fixes
454~~~~~~~~~
455
456- When the same :any:`notify-source` address and port number was
457  configured for multiple destinations and zones, an unresponsive server
458  could tie up the relevant network socket until it timed out; in the
459  meantime, NOTIFY messages for other servers silently failed.
460  :iscman:`named` will now retry sending such NOTIFY messages over TCP.
461  Furthermore, NOTIFY failures are now logged at the INFO level.
462  :gl:`#4001` :gl:`#4002`
463
464- DNS compression is no longer applied to the root name (``.``) if it is
465  repeatedly used in the same RRset. :gl:`#3423`
466
467- :iscman:`named` could incorrectly return non-truncated, glueless
468  referrals for responses whose size was close to the UDP packet size
469  limit. This has been fixed. :gl:`#1967`
470
471Known Issues
472~~~~~~~~~~~~
473
474- On some platforms, including FreeBSD, :iscman:`named` must be run as
475  root to use the :iscman:`rndc` control channel on a privileged port
476  (i.e., with a port number less than 1024; this includes the default
477  :iscman:`rndc` :rndcconf:ref:`port`, 953). Currently, using the
478  :option:`named -u` option to switch to an unprivileged user makes
479  :iscman:`rndc` unusable. This will be fixed in a future release; in
480  the meantime, ``mac_portacl`` can be used as a workaround, as
481  documented in https://kb.isc.org/docs/aa-00621. :gl:`#4793`
482
483- See :ref:`above <relnotes_known_issues>` for a list of all known issues
484  affecting this BIND 9 branch.
485