13 months after the release of 0.25.0, we finally have a bigger feature release of Hickory DNS, the suite of DNS libraries and authoritative/recursive name servers written in pure Rust. A lot of work has gone into this release, so we wanted to take a moment to release this before we continue work on deploying the Hickory DNS recursive resolver at Let's Encrypt (and did you see that Hickory is being used in some of Google's Pixel devices?). Because of the ongoing work, we expect that 0.27.0 might happen quite a bit sooner than in 13 months from now.
These release notes describe a number of high-level improvements as well as API changes that are likely to break a larger fraction of our downstream users. Feedback (both on these notes and the release itself) is always welcome in our issue tracker or via our Discord server.
Most of the following notes are broken up by specific components: the server binary and our library crates. However, for this release we've made several changes to the structure of our crates itself:
- Network protocol support has moved out of the hickory-proto crate, into a new hickory-net crate (#3394); this allows the hickory-proto crate to cleanly focus on message encoding and decoding.
- The hickory-client crate has been subsumed into hickory-net, in the
clientmodule (#3366). No future releases of the hickory-client crate are expected. - The hickory-recursor crate has been merged into hickory-resolver (#3370), guarded by a
recursorfeature which must be enabled explicitly. The recursor implementation was already tightly coupled to the resolver internals, so keeping it separate didn't really make sense.
Additionally, substantial cross-crate changes have been made to improve our error handling:
- More error handling simplification
- proto: split NetError out of ProtoError
- proto: clean up ProtoError
- Be more strict about decode errors
- resolver: remove unnecessary ResolveError wrapper
- Avoid large errors
hickory-dns (the server binary)
- We've added a number of ways to optimize performance via low-level networking configuration:
- We further extended and reworked our metrics:
- Miscellaneous changes:
hickory-server (the library API)
- The
Authoritytrait was renamed toZoneHandlerand simplified to better reflect its usage: - Miscellaneous changes:
hickory-resolver
We made many improvements to improve correctness and efficiency of both the recursive resolver and the "stub" resolver. In addition, we want to highlight the following changes:
- We substantially changed the high-level resolver and configuration API:
- Refactor name server configuration
- Enable validation when trust anchors are configured
- Introduce ServerGroup type to replace NameServerGroupConfig
- Configure by name server
- Tweak high-level API
- Hide validate option if DNSSEC support is not available
- Default trust_negative_responses to true
- Use a single list of servers
- Make ResolverConfig fields public
- Simplify ConnectionProvider interface
- Abstract NS conn/conn config policy
- Make connection pool track servers
- We improved handling of the system default resolution settings:
- We improved the efficiency of the resolver internals:
- Miscellaneous changes:
hickory-net
We made substantial improvements to DNSSEC validation and our handling of potentially spoofing messages.
- Miscellaneous changes:
hickory-proto
- We have made the fields for several core types directly public:
- We now enable EDNS by default in outgoing messages, increasing the max payload length:
- We removed SIG(0) authentication in favor of the more popular TSIG alternative:
- Miscellaneous changes:
Details
For more details, review the detailed release notes for our pre-releases:
and these final PRs merged after beta 4:
- proto: reject zero-length data for non-update messages by @djc in #3577
- server: deduplicate response encoding by @djc in #3555
- Disable dig retries when testing cache behavior by @divergentdave in #3590
- Conformance: print communication errors from dig by @divergentdave in #3591
Thanks
Finally, we want to thank everyone who contributed to this release: @bryanlarsen, @billf, @hargut, @ibigbug, @xi0, @steffengy, @james7132, @Thomasdezeeuw, @Kriskras99, @mispp, @conradludgate, @nabijaczleweli, @musicinmybrain, @msrd0, @jmwample, @LAGonauta, @tisonkun, @provokateurin, @lemon-sh, @thomas-zahner, @jpds, @lpraneis, @zachsmith1, @jackboykin, @ZnqbuZ, @Jeidnx, @kn0sys, @matheus23, @benesch, @roblabla and of course our maintainers @cpu, @divergentdave, @marcus0x62 and @djc.