Build all NSD features by default

Hello NSD developers,

The new release candidate of NSD, with the new prometheus metrics feature, got me thinking about NSD’s feature set, and how so many of its features have to be enabled at compile time. The result of of this is that NSD packages on various operating systems behave differently. I would like to propose that you adjust the build process to compile in all the features of NSD, and default them to “off”, so that operators can enable the features they need in the nsd.conf configuration file. My longer rationale follows.

Let’s take the “dnstap” feature, for example. On the Debian/Ubuntu builds, it is enabled. However, it’s not enabled in Fedora EPEL (and thus not available in Fedora, RedHat, CentOS and all the RedHat derivatives) nor in Homebrew (macOS).

Another feature, “rate-limit”, is enabled in both the Debian family builds as well as Fedora EPEL, but not in Homebrew. This feature also exposes the inconsistency in the documentation. The man page of nsd.conf has all the “dnstap” options described, noting that they only apply if “dnstap” has been compiled in. But for rate limiting, it’s confusing, at the very least. If RRL is compiled in, then the man page describes all the options. However, if RRL is not compiled in, then many (but not all) of the options are omitted from the man page. Some RRL options appear here and there randomly, in relation to other options such as “xfrd-tcp-max”, “refuse-any” and “answer-cookie”. A user of macOS, with nsd installed from Homebrew, reading the nsd.conf man page, would be quite confused.

Fedora user: hey, you can enable rate limiting
macOS user: okay, but how? The man page of nsd.conf doesn’t give any examples.
Fedora user: seriously? are you sure you have the latest version? 4.11.1?
macOS user: yes, I am certain that I have 4.11.1 installed.
Fedora user: and the nsd.conf man page doesn’t mention any “rrl” options?
macOS user: well, it does mention some options. If I search for “rrl”, I see some options, including a pointer to the “rrl-ratelimit” section, but it’s just not there.
Fedora user: what? seriously? are you sure you compiled with “–enable-rate-limit”
macOS user: compiled? No, I installed the nsd package from Homebrew. Are you saying I need to compile it myself just to enable the rate-limit feature?
Fedora user: yeah, you can download the source, and compile it yourself, and fine-tune nsd exactly as you like. You can also enable some other features like X and Y.
macOS user: groan. I just wanted to quickly install and use the software, not faff around with configure scripts, makefiles and all these enable/disable options.

Over the years, as NSD has acquired more and more features, some have been randomly compiled in by default, and others left out, to be enabled at compile time. Most software that I know of, just includes all the features, to be turned on in the configuration file. The documentation is also consistent. If a certain feature is not available on a certain OS, then of course it cannot be compiled in, but this is rare.

I understand that some features, when newly introduced, may need to be compile-time options, because they might depends on unstable libraries or need testing. But eventually, such features should just become standard as well.

What do other users think of this?

Regards,
Anand Buddhdev

Hi all!

I agree. I use nsd on Debian VPS, but I git cloned and compiled just to have
everything the way I like it. (And of course Debian ships with an older
version anyways unless I add testing or unstable repositories and pin a
specific version.) Thanks for asking.

Hi,

I think Anand’s suggestion sounds like a good idea.

However, as we’re using NSD primarily on Ubuntu, we currently need to compile it ourselves anyway - the official Ubuntu packages are prehistorical. So: What I’d really like to see are nlnetlabs-built NSD packages for Ubuntu. And I imagine other users would want to see similar packages for Debian etc. :slight_smile:

Indeed, Debian/Ubuntu Repos with up2date version would be great (just like ISC, PowerDNS and Knot provides them)
thanks
Klaus

hi,

I do agree with both Anand (default-on at compile time as much as possible) and Klaus (nsd debian repos by NLnetlabs).
(Recently got burned by using the version in debian stable
which have the ixfr bug https://packages.debian.org/bookworm/nsd = v4.6).

Regards,
  Tamás

                                                         I would like to
propose that you adjust the build process to compile in *all* the features
of NSD, and default them to "off", so that operators can enable the
features they need in the nsd.conf configuration file.

Best suggestion ever, Anand, and I would very much hope other DNS server brands
follow suit if/when technically possible.

  -JP