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