1nsd.conf(5) nsd 4.3.9 nsd.conf(5)
2
3
4
6 nsd.conf - NSD configuration file
7
9 nsd.conf
10
12 Nsd.conf is used to configure nsd(8). The file format has attributes
13 and values. Some attributes have attributes inside them. The notation
14 is: attribute: value.
15
16 Comments start with # and last to the end of line. Empty lines are ig‐
17 nored as is whitespace at the beginning of a line. Quotes can be used,
18 for names with spaces, eg. "file name.zone".
19
20 Nsd.conf specifies options for the nsd server, zone files, primaries
21 and secondaries.
22
24 An example of a short nsd.conf file is below.
25
26 # Example.com nsd.conf file
27 # This is a comment.
28
29 server:
30 server-count: 1 # use this number of cpu cores
31 database: "" # or use ""
32 zonelistfile: "/var/lib/nsd/zone.list"
33 username: nsd
34 logfile: "/var/log/nsd.log"
35 pidfile: ""
36 xfrdfile: "/var/lib/nsd/ixfr.state"
37
38 zone:
39 name: example.com
40 zonefile: /etc/nsd/example.com.zone
41
42 zone:
43 # this server is master, 192.0.2.1 is the secondary.
44 name: masterzone.com
45 zonefile: /etc/nsd/masterzone.com.zone
46 notify: 192.0.2.1 NOKEY
47 provide-xfr: 192.0.2.1 NOKEY
48
49 zone:
50 # this server is secondary, 192.0.2.2 is master.
51 name: secondzone.com
52 zonefile: /etc/nsd/secondzone.com.zone
53 allow-notify: 192.0.2.2 NOKEY
54 request-xfr: 192.0.2.2 NOKEY
55
56 Then, use kill -HUP to reload changes from master zone files. And use
57 kill -TERM to stop the server.
58
60 There must be whitespace between keywords. Attribute keywords end with
61 a colon ':'. An attribute is followed by its containing attributes, or
62 a value.
63
64 At the top level only server:, key:, pattern:, zone:, tls-auth:, and
65 remote-control: are allowed. These are followed by their attributes or
66 a new top-level keyword. The zone: attribute is followed by zone op‐
67 tions. The server: attribute is followed by global options for the NSD
68 server. A key: attribute is used to define keys for authentication. The
69 pattern: attribute is followed by the zone options for zones that use
70 the pattern. A tls-auth: attribute is used to define credentials for
71 authenticating an outgoing TLS connection used for XFR-over-TLS.
72
73 Files can be included using the include: directive. It can appear any‐
74 where, and takes a single filename as an argument. Processing continues
75 as if the text from the included file was copied into the config file
76 at that point. If a chroot is used an absolute filename is needed
77 (with the chroot prepended), so that the include can be parsed before
78 and after application of the chroot (and the knowledge of what that ch‐
79 root is). You can use '*' to include a wildcard match of files, eg.
80 "foo/nsd.d/*.conf". Also '?', '{}', '[]', and '~' work, see glob(7).
81 If no files match the pattern, this is not an error.
82
83 Server Options
84 The global options (if not overridden from the NSD commandline) are
85 taken from the server: clause. There may only be one server: clause.
86
87 ip-address: <ip4 or ip6>[@port] [servers] [bindtodevice] [setfib]
88 NSD will bind to the listed ip-address. Can be given multiple
89 times to bind multiple ip-addresses. Optionally, a port number
90 can be given. If none are given NSD listens to the wildcard in‐
91 terface. Same as commandline option -a.
92
93 To limit which NSD server(s) listen on the given interface,
94 specify one or more servers separated by whitespace after
95 <ip>[@port]. Ranges can be used as a shorthand to specify multi‐
96 ple consecutive servers. By default every server will listen.
97
98 If an interface name is used instead of ip4 or ip6, the list of
99 IP addresses associated with that interface is picked up and
100 used at server start.
101
102 For servers with multiple IP addresses that can be used to send
103 traffic to the internet, list them one by one, or the source ad‐
104 dress of replies could be wrong. This is because if the udp
105 socket associates a source address of 0.0.0.0 then the kernel
106 picks an ip-address with which to send to the internet, and it
107 picks the wrong one. Typically needed for anycast instances.
108 Use ip-transparent to be able to list addresses that turn on
109 later (typical for certain load-balancing).
110
111 interface: <ip4 or ip6>[@port] [servers] [bindtodevice] [setfib]
112 Same as ip-address (for ease of compatibility with un‐
113 bound.conf).
114
115 ip-transparent: <yes or no>
116 Allows NSD to bind to non local addresses. This is useful to
117 have NSD listen to IP addresses that are not (yet) added to the
118 network interface, so that it can answer immediately when the
119 address is added. Default is no.
120
121 ip-freebind: <yes or no>
122 Set the IP_FREEBIND option to bind to nonlocal addresses and in‐
123 terfaces that are down. Similar to ip-transparent. Default is
124 no.
125
126 reuseport: <yes or no>
127 Use the SO_REUSEPORT socket option, and create file descriptors
128 for every server in the server-count. This improves performance
129 of the network stack. Only really useful if you also configure
130 a server-count higher than 1 (such as, equal to the number of
131 cpus). The default is no. It works on Linux, but does not work
132 on FreeBSD, and likely does not work on other systems.
133
134 send-buffer-size: <number>
135 Set the send buffer size for query-servicing sockets. Set to 0
136 to use the default settings.
137
138 receive-buffer-size: <number>
139 Set the receive buffer size for query-servicing sockets. Set to
140 0 to use the default settings.
141
142 debug-mode: <yes or no>
143 Turns on debugging mode for nsd, does not fork a daemon process.
144 Default is no. Same as commandline option -d. If set to yes it
145 does not fork and stays in the foreground, which can be helpful
146 for commandline debugging, but is also used by certain server
147 supervisor processes to ascertain that the server is running.
148
149 do-ip4: <yes or no>
150 If yes, NSD listens to IPv4 connections. Default yes.
151
152 do-ip6: <yes or no>
153 If yes, NSD listens to IPv6 connections. Default yes.
154
155 database: <filename>
156 By default '' is used. The specified file is used to store the
157 compiled zone information. Same as commandline option -f. If
158 set to "" then no database is used. This uses less memory but
159 zone updates are not (immediately) spooled to disk.
160
161 zonelistfile: <filename>
162 By default /var/lib/nsd/zone.list is used. The specified file is
163 used to store the dynamically added list of zones. The list is
164 written to by NSD to add and delete zones. It is a text file
165 with a zone-name and pattern-name on each line. This file is
166 used for the nsd-control addzone and delzone commands.
167
168 identity: <string>
169 Returns the specified identity when asked for CH TXT ID.SERVER.
170 Default is the name as returned by gethostname(3). Same as com‐
171 mandline option -i. See hide-identity to set the server to not
172 respond to such queries.
173
174 version: <string>
175 Returns the specified version string when asked for CH TXT ver‐
176 sion.server, and version.bind queries. Default is the compiled
177 package version. See hide-version to set the server to not re‐
178 spond to such queries.
179
180 nsid: <string>
181 Add the specified nsid to the EDNS section of the answer when
182 queried with an NSID EDNS enabled packet. As a sequence of hex
183 characters or with ascii_ prefix and then an ascii string. Same
184 as commandline option -I.
185
186 logfile: <filename>
187 Log messages to the logfile. The default is to log to stderr and
188 syslog (with facility LOG_DAEMON). Same as commandline option
189 -l.
190
191 log-only-syslog: <yes or no>
192 Log messages only to syslog. Useful with systemd so that print
193 to stderr does not cause duplicate log strings in journald. Be‐
194 fore syslog has been opened, the server uses stderr. Stderr is
195 also used if syslog is not available. Default is no.
196
197 server-count: <number>
198 Start this many NSD servers. Default is 1. Same as commandline
199 option -N.
200
201 cpu-affinity: <number> <number> ...
202 Overall CPU affinity for NSD server(s). Default is no affinity.
203 -n.
204
205 server-N-cpu-affinity: <number>
206 Bind NSD server specified by N to a specific core. Default is to
207 have affinity set to every core specified in cpu-affinity. This
208 setting only takes effect if cpu-affinity is enabled. -n
209
210 xfrd-cpu-affinity: <number>
211 Bind xfrd to a specific core. Default is to have affinity set to
212 every core specified in cpu-affinity. This setting only takes
213 effect if cpu-affinity is enabled. -n
214
215 tcp-count: <number>
216 The maximum number of concurrent, active TCP connections by each
217 server. Default is 100. Same as commandline option -n.
218
219 tcp-reject-overflow: <yes or no>
220 If set to yes, TCP connections made beyond the maximum set by
221 tcp-count will be dropped immediately (accepted and closed).
222 Default is no.
223
224 tcp-query-count: <number>
225 The maximum number of queries served on a single TCP connection.
226 Default is 0, meaning there is no maximum.
227
228 tcp-timeout: <number>
229 Overrides the default TCP timeout. This also affects zone trans‐
230 fers over TCP. The default is 120 seconds.
231
232 tcp-mss: <number>
233 Maximum segment size (MSS) of TCP socket on which the server re‐
234 sponds to queries. Value lower than common MSS on Ethernet (1220
235 for example) will address path MTU problem. Note that not all
236 platform supports socket option to set MSS (TCP_MAXSEG). De‐
237 fault is system default MSS determined by interface MTU and ne‐
238 gotiation between server and client.
239
240 outgoing-tcp-mss: <number>
241 Maximum segment size (MSS) of TCP socket for outgoing XFR re‐
242 quest to other namesevers. Value lower than common MSS on Ether‐
243 net (1220 for example) will address path MTU problem. Note that
244 not all platform supports socket option to set MSS (TCP_MAXSEG).
245 Default is system default MSS determined by interface MTU and
246 negotiation between NSD and other servers.
247
248 ipv4-edns-size: <number>
249 Preferred EDNS buffer size for IPv4. Default 1232.
250
251 ipv6-edns-size: <number>
252 Preferred EDNS buffer size for IPv6. Default 1232.
253
254 pidfile: <filename>
255 Use the pid file instead of the platform specific default, usu‐
256 ally . Same as commandline option -P. With "" there is no pid‐
257 file, for some startup management setups, where a pidfile is not
258 useful to have.
259
260 port: <number>
261 Answer queries on the specified port. Default is 53. Same as
262 commandline option -p.
263
264 statistics: <number>
265 If not present no statistics are dumped. Statistics are produced
266 every number seconds. Same as commandline option -s.
267
268 chroot: <directory>
269 NSD will chroot on startup to the specified directory. Note that
270 if elsewhere in the configuration you specify an absolute path‐
271 name to a file inside the chroot, you have to prepend the chroot
272 path. That way, you can switch the chroot option on and off
273 without having to modify anything else in the configuration. Set
274 the value to "" (the empty string) to disable the chroot. By de‐
275 fault "" is used. Same as commandline option -t.
276
277 username: <username>
278 After binding the socket, drop user privileges and assume the
279 username. Can be username, id or id.gid. Same as commandline op‐
280 tion -u.
281
282 zonesdir: <directory>
283 Change the working directory to the specified directory before
284 accessing zone files. Also, NSD will access database, zonelist‐
285 file, logfile, pidfile, xfrdfile, xfrdir, server-key-file,
286 server-cert-file, control-key-file and control-cert-file rela‐
287 tive to this directory. Set the value to "" (the empty string)
288 to disable the change of working directory. By default
289 "/etc/nsd" is used.
290
291 difffile: <filename>
292 Ignored, for compatibility with NSD3 config files.
293
294 xfrdfile: <filename>
295 The soa timeout and zone transfer daemon in NSD will save its
296 state to this file. State is read back after a restart. The
297 state file can be deleted without too much harm, but timestamps
298 of zones will be gone. If it is configured as "", the state
299 file is not used, all slave zones are checked for updates upon
300 startup. For more details see the section on zone expiry behav‐
301 ior of NSD. Default is /var/lib/nsd/ixfr.state.
302
303 xfrdir: <directory>
304 The zone transfers are stored here before they are processed. A
305 directory is created here that is removed when NSD exits. De‐
306 fault is /tmp.
307
308 xfrd-reload-timeout: <number>
309 If this value is -1, xfrd will not trigger a reload after a zone
310 transfer. If positive xfrd will trigger a reload after a zone
311 transfer, then it will wait for the number of seconds before it
312 will trigger a new reload. Setting this value throttles the
313 reloads to once per the number of seconds. The default is 1 sec‐
314 ond.
315
316 verbosity: <level>
317 This value specifies the verbosity level for (non-debug) log‐
318 ging. Default is 0. 1 gives more information about incoming no‐
319 tifies and zone transfers. 2 lists soft warnings that are en‐
320 countered. 3 prints more information.
321
322 Verbosity 0 will print warnings and errors, and other events
323 that are important to keep NSD running.
324
325 Verbosity 1 prints additionally messages of interest. Success‐
326 ful notifies, successful incoming zone transfer (the zone is up‐
327 dated), failed incoming zone transfers or the inability to
328 process zone updates.
329
330 Verbosity 2 prints additionally soft errors, like connection re‐
331 sets over TCP. And notify refusal, and axfr request refusals.
332
333 hide-version: <yes or no>
334 Prevent NSD from replying with the version string on CHAOS class
335 queries. Default is no.
336
337 hide-identity: <yes or no>
338 Prevent NSD from replying with the identity string on CHAOS
339 class queries. Default is no.
340
341 drop-updates: <yes or no>
342 If set to yes, drop received packets with the UPDATE opcode.
343 Default is no.
344
345 use-systemd: <yes or no>
346 This option is deprecated and ignored. If compiled with libsys‐
347 temd, NSD signals readiness to systemd and use of the option is
348 not necessary.
349
350 log-time-ascii: <yes or no>
351 Log time in ascii, if "no" then in seconds epoch. Default is
352 yes. This chooses the format when logging to file. The print‐
353 out via syslog has a timestamp formatted by syslog.
354
355 round-robin: <yes or no>
356 Enable round robin rotation of records in the answer. This
357 changes the order of records in the answer and this may balance
358 load across them. The default is no.
359
360 minimal-responses: <yes or no>
361 Enable minimal responses for smaller answers. This makes pack‐
362 ets smaller. Extra data is only added for referrals, when it is
363 really necessary. This is different from the --enable-minimal-
364 responses configure time option, that reduces packets, but ex‐
365 actly to the fragmentation length, the nsd.conf option reduces
366 packets as small as possible. The default is no.
367
368 confine-to-zone: <yes or no>
369 If set to yes, additional information will not be added to the
370 response if the apex zone of the additional information does not
371 match the apex zone of the initial query (E.G. CNAME resolu‐
372 tion). Default is no.
373
374 refuse-any: <yes or no>
375 Refuse queries of type ANY. This is useful to stop query floods
376 trying to get large responses. Note that rrl ratelimiting also
377 has type ANY as a ratelimiting type. It sends truncation in re‐
378 sponse to UDP type ANY queries, and it allows TCP type ANY
379 queries like normal. The default is no.
380
381 zonefiles-check: <yes or no>
382 Make NSD check the mtime of zone files on start and sighup. If
383 you disable it it starts faster (less disk activity in case of a
384 lot of zones). The default is yes. The nsd-control reload com‐
385 mand reloads zone files regardless of this option.
386
387 zonefiles-write: <seconds>
388 Write changed secondary zones to their zonefile every N seconds.
389 If the zone (pattern) configuration has "" zonefile, it is not
390 written. Zones that have received zone transfer updates are
391 written to their zonefile. Default is 0 (disabled) when there
392 is a database, and 3600 (1 hour) when database is "". The data‐
393 base also commits zone transfer contents. You can configure it
394 away from the default by putting the config statement for zone‐
395 files-write: after the database: statement in the config file.
396
397 rrl-size: <numbuckets>
398 This option gives the size of the hashtable. Default 1000000.
399 More buckets use more memory, and reduce the chance of hash col‐
400 lisions.
401
402 rrl-ratelimit: <qps>
403 The max qps allowed (from one query source). Default is on (with
404 a suggested 200 qps). If set to 0 then it is disabled (unlimited
405 rate), also set the whitelist-ratelimit to 0 to disable rate‐
406 limit processing. If you set verbosity to 2 the blocked and un‐
407 blocked subnets are logged. Blocked queries are blocked and
408 some receive TCP fallback replies. Once the rate limit is
409 reached, NSD begins dropping responses. However, one in every
410 "rrl-slip" number of responses is allowed, with the TC bit set.
411 If slip is set to 2, the outgoing response rate will be halved.
412 If it's set to 3, the outgoing response rate will be one-third,
413 and so on. If you set rrl-slip to 10, traffic is reduced to
414 1/10th. Ratelimit options rrl-ratelimit, rrl-size and
415 rrl-whitelist-ratelimit are updated when nsd-control reconfig is
416 done (also the zone-specific ratelimit options are updated).
417
418 rrl-slip: <numpackets>
419 This option controls the number of packets discarded before we
420 send back a SLIP response (a response with "truncated" bit set
421 to one). 0 disables the sending of SLIP packets, 1 means every
422 query will get a SLIP response. Default is 2, cuts traffic in
423 half and legit users have a fair chance to get a +TC response.
424
425 rrl-ipv4-prefix-length: <subnet>
426 IPv4 prefix length. Addresses are grouped by netblock. Default
427 24.
428
429 rrl-ipv6-prefix-length: <subnet>
430 IPv6 prefix length. Addresses are grouped by netblock. Default
431 64.
432
433 rrl-whitelist-ratelimit: <qps>
434 The max qps for query sorts for a source, which have been
435 whitelisted. Default on (with a suggested 2000 qps). With the
436 rrl-whitelist option you can set specific queries to receive
437 this qps limit instead of the normal limit. With the value 0
438 the rate is unlimited.
439
440 answer-cookie: <yes or no>
441 Enable to answer to requests containig DNS Cookies as specified
442 in RFC7873. Default is no.
443
444 cookie-secret: <128 bit hex string>
445 Servers in an anycast deployment need to be able to verify
446 each other's DNS Server Cookies. For this they need to share
447 the secret used to construct and verify the DNS Cookies. De‐
448 fault is a 128 bits random secret generated at startup time.
449 This option is ignored if a cookie-secret-file is present. In
450 that case the secrets from that file are used in DNS Cookie cal‐
451 culations.
452
453 cookie-secret-file: <filename>
454 File from which the secrets are read used in DNS Cookie calcula‐
455 tions. When this file exists, the secrets in this file are used
456 and the secret specified by the cookie-secret option is ignored.
457 Default is /etc/nsd/nsd_cookiesecrets.txt
458
459 The content of this file must be manipulated with the
460 add_cookie_secret, drop_cookie_secret and activate_cookie_secret
461 commands to the nsd-control(8) tool. Please see that manpage how
462 to perform a safe cookie secret rollover.
463
464 tls-service-key: <filename>
465 If enabled, the server provides TLS service on TCP sockets with
466 the TLS service port number. The port number (853) is config‐
467 ured with tls-port. To turn it on, create an interface: option
468 line in config with @port appended to the IP-address. This cre‐
469 ates the extra socket on which the DNS over TLS service is pro‐
470 vided.
471
472 The file is the private key for the TLS session. The public cer‐
473 tificate is in the tls-service-pem file. Default is "", turned
474 off. Requires a restart (a reload is not enough) if changed, be‐
475 cause the private key is read while root permissions are held
476 and before chroot (if any).
477
478 tls-service-pem: <filename>
479 The public key certificate pem file for the tls service. Default
480 is "", turned off.
481
482 tls-service-ocsp: <filename>
483 The ocsp pem file for the tls service, for OCSP stapling. De‐
484 fault is "", turned off. An external process prepares and up‐
485 dates the OCSP stapling data. Like this,
486 openssl ocsp -no_nonce \
487 -respout /path/to/ocsp.pem \
488 -CAfile /path/to/ca_and_any_intermediate.pem \
489 -issuer /path/to/direct_issuer.pem \
490 -cert /path/to/cert.pem \
491 -url "$( openssl x509 -noout -text -in /path/to/cert.pem |
492 grep 'OCSP - URI:' | cut -d: -f2,3 )"
493
494 tls-port: <number>
495 The port number on which to provide TCP TLS service, default is
496 853, only interfaces configured with that port number as @number
497 get DNS over TLS service.
498
499 tls-cert-bundle: <filename>
500 If null or "", the default verify locations are used. Set it to
501 the certificate bundle file, for example "/etc/pki/tls/certs/ca-
502 bundle.crt". These certificates are used for authenticating
503 Transfer over TLS (XoT) connections.
504
505 Remote Control
506 The remote-control: clause is used to set options for using the
507 nsd-control(8) tool to give commands to the running NSD server. It is
508 disabled by default, and listens for localhost by default. It uses TLS
509 over TCP where the server and client authenticate to each other with
510 self-signed certificates. The self-signed certificates can be gener‐
511 ated with the nsd-control-setup tool. The key files are read by NSD
512 before the chroot and before dropping user permissions, so they can be
513 outside the chroot and readable by the superuser only.
514
515 control-enable: <yes or no>
516 Enable remote control, default is no.
517
518 control-interface: <ip4 or ip6 | interface name | absolute path>
519 NSD will bind to the listed addresses to service control re‐
520 quests (on TCP). Can be given multiple times to bind multiple
521 ip-addresses. Use 0.0.0.0 and ::0 to service the wildcard in‐
522 terface. If none are given NSD listens to the localhost
523 127.0.0.1 and ::1 interfaces for control, if control is enabled
524 with control-enable.
525
526 If an interface name is used instead of ip4 or ip6, the list of
527 IP addresses associated with that interface is picked up and
528 used at server start.
529
530 With an absolute path, a unix local named pipe is used for con‐
531 trol. The file is created with user and group that is config‐
532 ured and access bits are set to allow members of the group ac‐
533 cess. Further access can be controlled by setting permissions
534 on the directory containing the control socket file. The key
535 and cert files are not used when control is via the named pipe,
536 because access control is via file and directory permission.
537
538 control-port: <number>
539 The port number for remote control service. 8952 by default.
540
541 server-key-file: <filename>
542 Path to the server private key, by default
543 /etc/nsd/nsd_server.key. This file is generated by the nsd-con‐
544 trol-setup utility. This file is used by the nsd server, but
545 not by nsd-control.
546
547 server-cert-file: <filename>
548 Path to the server self signed certificate, by default
549 /etc/nsd/nsd_server.pem. This file is generated by the nsd-con‐
550 trol-setup utility. This file is used by the nsd server, and
551 also by nsd-control.
552
553 control-key-file: <filename>
554 Path to the control client private key, by default
555 /etc/nsd/nsd_control.key. This file is generated by the
556 nsd-control-setup utility. This file is used by nsd-control.
557
558 control-cert-file: <filename>
559 Path to the control client certificate, by default
560 /etc/nsd/nsd_control.pem. This certificate has to be signed
561 with the server certificate. This file is generated by the
562 nsd-control-setup utility. This file is used by nsd-control.
563
564 Pattern Options
565 The pattern: clause is used to denote a set of options to apply to some
566 zones. The same zone options as for a zone are allowed.
567
568 name: <string>
569 The name of the pattern. This is a (case sensitive) string.
570 The pattern names that start with "_implicit_" are used inter‐
571 nally for zones that have no pattern (they are defined in
572 nsd.conf directly).
573
574 include-pattern: <pattern-name>
575 The options from the given pattern are included at this point in
576 this pattern. The referenced pattern must be defined above this
577 one.
578
579 <zone option>: <value>
580 The zone options such as zonefile, allow-query, allow-notify,
581 request-xfr, allow-axfr-fallback, notify, notify-retry, pro‐
582 vide-xfr, zonestats, and outgoing-interface can be given. They
583 are applied to the patterns and zones that include this pattern.
584
585 Zone Options
586 For every zone the options need to be specified in one zone: clause.
587 The access control list elements can be given multiple times to add
588 multiple servers. These elements need to be added explicitly.
589
590 For zones that are configured in the nsd.conf config file their set‐
591 tings are hardcoded (in an implicit pattern for themselves only) and
592 they cannot be deleted via delzone, but remove them from the config
593 file and repattern.
594
595 name: <string>
596 The name of the zone. This is the domain name of the apex of the
597 zone. May end with a '.' (in FQDN notation). For example "exam‐
598 ple.com", "sub.example.net.". This attribute must be present in
599 each zone.
600
601 zonefile: <filename>
602 The file containing the zone information. If this attribute is
603 present it is used to read and write the zone contents. If the
604 attribute is absent it prevents writing out of the zone.
605
606 The string is processed so that one string can be used (in a
607 pattern) for a lot of different zones. If the label or charac‐
608 ter does not exist the percent-character is replaced with a pe‐
609 riod for output (i.e. for the third character in a two letter
610 domain name).
611
612 %s is replaced with the zone name.
613
614 %1 is replaced with the first character of the zone name.
615
616 %2 is replaced with the second character of the zone name.
617
618 %3 is replaced with the third character of the zone name.
619
620 %z is replaced with the toplevel domain name of the zone.
621
622 %y is replaced with the next label under the toplevel domain.
623
624 %x is replaced with the next-next label under the toplevel do‐
625 main.
626
627 allow-query: <ip-spec> <key-name | NOKEY | BLOCKED>
628 Access control list. When at least one allow-query option is
629 specified, then the in the allow-query options specified ad‐
630 dresses are are allowed to query the server for the zone.
631 Queries from unlisted or specifically BLOCKED addresses are dis‐
632 carded. If NOKEY is given no TSIG signature is required.
633 BLOCKED supersedes other entries, other entries are scanned for
634 a match in the order of the statements. Without allow-query op‐
635 tions, queries are allowed from any IP address without TSIG key
636 (which is the default).
637
638 The ip-spec is either a plain IP address (IPv4 or IPv6), or can
639 be a subnet of the form 1.2.3.4/24, or masked like
640 1.2.3.4&255.255.255.0 or a range of the form 1.2.3.4-1.2.3.25.
641 Note the ip-spec ranges do not use spaces around the /, &, @ and
642 - symbols.
643
644 allow-notify: <ip-spec> <key-name | NOKEY | BLOCKED>
645 Access control list. The listed (primary) address is allowed to
646 send notifies to this (secondary) server. Notifies from unlisted
647 or specifically BLOCKED addresses are discarded. If NOKEY is
648 given no TSIG signature is required. BLOCKED supersedes other
649 entries, other entries are scanned for a match in the order of
650 the statements.
651
652 The ip-spec is either a plain IP address (IPv4 or IPv6), or can
653 be a subnet of the form 1.2.3.4/24, or masked like
654 1.2.3.4&255.255.255.0 or a range of the form 1.2.3.4-1.2.3.25.
655 A port number can be added using a suffix of @number, for exam‐
656 ple 1.2.3.4@5300 or 1.2.3.4/24@5300 for port 5300. Note the
657 ip-spec ranges do not use spaces around the /, &, @ and - sym‐
658 bols.
659
660 request-xfr: [AXFR|UDP] <ip-address> <key-name | NOKEY> [tls-auth-name]
661 Access control list. The listed address (the master) is queried
662 for AXFR/IXFR on update. A port number can be added using a suf‐
663 fix of @number, for example 1.2.3.4@5300. The specified key is
664 used during AXFR/IXFR. If tls-auth-name is included, the speci‐
665 fied tls-auth clause will be used to perform authenticated XFR-
666 over-TLS.
667
668 If the AXFR option is given, the server will not be contacted
669 with IXFR queries but only AXFR requests will be made to the
670 server. This allows an NSD secondary to have a master server
671 that runs NSD. If the AXFR option is left out then both IXFR and
672 AXFR requests are made to the master server.
673
674 If the UDP option is given, the secondary will use UDP to trans‐
675 mit the IXFR requests. You should deploy TSIG when allowing UDP
676 transport, to authenticate notifies and zone transfers. Other‐
677 wise, NSD is more vulnerable for Kaminsky-style attacks. If the
678 UDP option is left out then IXFR will be transmitted using TCP.
679
680 If a tls-auth-name is given then TLS (by default on port 853)
681 will be used for all zone transfers for the zone. If authentica‐
682 tion of the master based on the specified tls-auth authentica‐
683 tion information fails, the XFR request will not be sent. Sup‐
684 port for TLS 1.3 is required for XFR-over-TLS.
685
686 allow-axfr-fallback: <yes or no>
687 This option should be accompanied by request-xfr. It (dis)allows
688 NSD (as secondary) to fallback to AXFR if the primary name
689 server does not support IXFR. Default is yes.
690
691 size-limit-xfr: <number>
692 This option should be accompanied by request-xfr. It specifies
693 XFR temporary file size limit. It can be used to stop very
694 large zone retrieval, that could otherwise use up a lot of mem‐
695 ory and disk space. If this option is 0, unlimited. Default
696 value is 0.
697
698 notify: <ip-address> <key-name | NOKEY>
699 Access control list. The listed address (a secondary) is noti‐
700 fied of updates to this zone. A port number can be added using a
701 suffix of @number, for example 1.2.3.4@5300. The specified key
702 is used to sign the notify. Only on secondary configurations
703 will NSD be able to detect zone updates (as it gets notified it‐
704 self, or refreshes after a time).
705
706 notify-retry: <number>
707 This option should be accompanied by notify. It sets the number
708 of retries when sending notifies.
709
710 provide-xfr: <ip-spec> <key-name | NOKEY | BLOCKED>
711 Access control list. The listed address (a secondary) is allowed
712 to request AXFR from this server. Zone data will be provided to
713 the address. The specified key is used during AXFR. For unlisted
714 or BLOCKED addresses no data is provided, requests are dis‐
715 carded. BLOCKED supersedes other entries, other entries are
716 scanned for a match in the order of the statements. NSD pro‐
717 vides AXFR for its secondaries, but IXFR is not implemented
718 (IXFR is implemented for request-xfr, but not for provide-xfr).
719
720 The ip-spec is either a plain IP address (IPv4 or IPv6), or can
721 be a subnet of the form 1.2.3.4/24, or masked like
722 1.2.3.4&255.255.255.0 or a range of the form 1.2.3.4-1.2.3.25.
723 A port number can be added using a suffix of @number, for exam‐
724 ple 1.2.3.4@5300 or 1.2.3.4/24@5300 for port 5300. Note the
725 ip-spec ranges do not use spaces around the /, &, @ and - sym‐
726 bols.
727
728 outgoing-interface: <ip-address>
729 Access control list. The listed address is used to request
730 AXFR|IXFR (in case of a secondary) or used to send notifies (in
731 case of a primary).
732
733 The ip-address is a plain IP address (IPv4 or IPv6). A port
734 number can be added using a suffix of @number, for example
735 1.2.3.4@5300.
736
737 max-refresh-time: <seconds>
738 Limit refresh time for secondary zones. This is the timer which
739 checks to see if the zone has to be refetched when it expires.
740 Normally the value from the SOA record is used, but this option
741 restricts that value.
742
743 min-refresh-time: <seconds>
744 Limit refresh time for secondary zones.
745
746 max-retry-time: <seconds>
747 Limit retry time for secondary zones. This is the timer which
748 retries after a failed fetch attempt for the zone. Normally the
749 value from the SOA record is used, followed by an exponential
750 backoff, but this option restricts that value.
751
752 min-retry-time: <seconds>
753 Limit retry time for secondary zones.
754
755 min-expire-time: <seconds or refresh+retry+1>
756 Limit expire time for secondary zones. The value can be ex‐
757 pressed either by a number of seconds, or the string "re‐
758 fresh+retry+1". With the latter the expire time will be lower
759 bound to the refresh plus the retry value from the SOA record,
760 plus 1. The refresh and retry values will be subject to the
761 bounds configured with max-refresh-time, min-refresh-time,
762 max-retry-time and min-retry-time if given.
763
764 zonestats: <name>
765 When compiled with --enable-zone-stats NSD can collect statis‐
766 tics per zone. This name gives the group where statistics are
767 added to. The groups are output from nsd-control stats and
768 stats_noreset. Default is "". You can use "%s" to use the name
769 of the zone to track its statistics. If not compiled in, the
770 option can be given but is ignored.
771
772 include-pattern: <pattern-name>
773 The options from the given pattern are included at this point.
774 The referenced pattern must be defined above this zone.
775
776 rrl-whitelist: <rrltype>
777 This option causes queries of this rrltype to be whitelisted,
778 for this zone. They receive the whitelist-ratelimit. You can
779 give multiple lines, each enables a new rrltype to be
780 whitelisted for the zone. Default has none whitelisted. The rrl‐
781 type is the query classification that the NSD RRL employs to
782 make different types not interfere with one another. The types
783 are logged in the loglines when a subnet is blocked (in ver‐
784 bosity 2). The RRL classification types are: nxdomain, error,
785 referral, any, rrsig, wildcard, nodata, dnskey, positive, all.
786
787 multi-master-check: <yes or no>
788 Default no. If enabled, checks all masters for the last ver‐
789 sion. It uses the higher version of all the configured masters.
790 Useful if you have multiple masters that have different version
791 numbers served.
792
793 Key Declarations
794 The key: clause establishes a key for use in access control lists. It
795 has the following attributes.
796
797 name: <string>
798 The key name. Used to refer to this key in the access control
799 list. The key name has to be correct for tsig to work. This is
800 because the key name is output on the wire.
801
802 algorithm: <string>
803 Authentication algorithm for this key. Such as hmac-md5,
804 hmac-sha1, hmac-sha224, hmac-sha256, hmac-sha384 and
805 hmac-sha512. Can also be abbreviated as 'sha1', 'sha256'. De‐
806 fault is sha256. Algorithms are only available when they were
807 compiled in (available in the crypto library).
808
809 secret: <base64 blob>
810 The base64 encoded shared secret. It is possible to put the se‐
811 cret: declaration (and base64 blob) into a different file, and
812 then to include: that file. In this way the key secret and the
813 rest of the configuration file, which may have different secu‐
814 rity policies, can be split apart. The content of the secret is
815 the agreed base64 secret content. To make it up, enter a pass‐
816 word (its length must be a multiple of 4 characters, A-Za-z0-9),
817 or use dev-random output through a base64 encode filter.
818
819 TLS Auth Declarations
820 The tls-auth: clause establishes authentication attributes to use when
821 authenticating the far end of an outgoing TLS connection used in access
822 control lists for XFR-over-TLS. It has the following attributes.
823
824 name: <string>
825 The tls-auth name. Used to refer to this TLS authentication in‐
826 formation in the access control list.
827
828 auth-domain-name: <string>
829 The authentication domain name as defined in RFC8310.
830
831 client-cert: <file name of clientcert.pem>
832 If you want to use mutual TLS authentication, this is where the
833 client certificates can be configured that NSD uses to connect
834 to the upstream server to download the zone. The client public
835 key pem cert file can be configured here. Also configure a pri‐
836 vate key with client-key.
837
838 client-key: <file name of clientkey.key>
839 If you want to use mutual TLS authentication, the private key
840 file can be configured here for the client authentication.
841
842 client-key-pw: <string>
843 If the client-key file uses a password to decrypt the key before
844 it can be used, then the password can be specified here as a
845 string. It is possible to include other config files with the
846 include: option, and this can be used to move that sensitive
847 data to another file, if you wish.
848
849 DNSTAP Logging Options
850 DNSTAP support, when compiled in, is enabled in the dnstap: section.
851 This starts a collector process that writes the log information to the
852 destination.
853
854 dnstap-enable: <yes or no>
855 If dnstap is enabled. Default no. If yes, it connects to the
856 dnstap server and if any of the dnstap-log-..-messages options
857 is enabled it sends logs for those messages to the server.
858
859 dnstap-socket-path: <file name>
860 Sets the unix socket file name for connecting to the server that
861 is listening on that socket. Default is "/var/run/nsd-
862 dnstap.sock".
863
864 dnstap-send-identity: <yes or no>
865 If enabled, the server identity is included in the log messages.
866 Default is no.
867
868 dnstap-send-version: <yes or no>
869 If enabled, the server version if included in the log messages.
870 Default is no.
871
872 dnstap-identity: <string>
873 The identity to send with messages, if "" the hostname is used.
874 Default is "".
875
876 dnstap-version: <string>
877 The version to send with messages, if "" the package version is
878 used. Default is "".
879
880 dnstap-log-auth-query-messages: <yes or no>
881 Enable to log auth query messages. Default is no. These are
882 client queries to NSD.
883
884 dnstap-log-auth-response-messages: <yes or no>
885 Enable to log auth response messages. Default is no. These are
886 responses from NSD to clients.
887
889 BIND9 is a name server implementation with its own configuration file
890 format, named.conf(5). BIND9 types zones as 'Master' or 'Slave'.
891
892 Slave zones
893 For a slave zone, the master servers are listed. The master servers are
894 queried for zone data, and are listened to for update notifications.
895 In NSD these two properties need to be configured separately, by list‐
896 ing the master address in allow-notify and request-xfr statements.
897
898 In BIND9 you only need to provide allow-notify elements for any extra
899 sources of notifications (i.e. the operators), NSD needs to have al‐
900 low-notify for both masters and operators. BIND9 allows additional
901 transfer sources, in NSD you list those as request-xfr.
902
903 Here is an example of a slave zone in BIND9 syntax.
904
905 # Config file for example.org options {
906 dnssec-enable yes;
907 };
908
909 key tsig.example.org. {
910 algorithm hmac-md5;
911 secret "aaaaaabbbbbbccccccdddddd";
912 };
913
914 server 162.0.4.49 {
915 keys { tsig.example.org. ; };
916 };
917
918 zone "example.org" {
919 type slave;
920 file "secondary/example.org.signed";
921 masters { 162.0.4.49; };
922 };
923
924 For NSD, DNSSEC is enabled automatically for zones that are signed. The
925 dnssec-enable statement in the options clause is not needed. In NSD
926 keys are associated with an IP address in the access control list
927 statement, therefore the server{} statement is not needed. Below is the
928 same example in an NSD config file.
929
930 # Config file for example.org
931 key:
932 name: tsig.example.org.
933 algorithm: hmac-md5
934 secret: "aaaaaabbbbbbccccccdddddd"
935
936 zone:
937 name: "example.org"
938 zonefile: "secondary/example.org.signed"
939 # the master is allowed to notify and will provide zone data.
940 allow-notify: 162.0.4.49 NOKEY
941 request-xfr: 162.0.4.49 tsig.example.org.
942
943 Notice that the master is listed twice, once to allow it to send noti‐
944 fies to this slave server and once to tell the slave server where to
945 look for updates zone data. More allow-notify and request-xfr lines can
946 be added to specify more masters.
947
948 It is possible to specify extra allow-notify lines for addresses that
949 are also allowed to send notifications to this slave server.
950
951 Master zones
952 For a master zone in BIND9, the slave servers are listed. These slave
953 servers are sent notifications of updated and are allowed to request
954 transfer of the zone data. In NSD these two properties need to be con‐
955 figured separately.
956
957 Here is an example of a master zone in BIND9 syntax.
958
959 zone "example.nl" {
960 type master;
961 file "example.nl";
962 };
963
964 In NSD syntax this becomes:
965
966 zone:
967 name: "example.nl"
968 zonefile: "example.nl"
969 # allow anybody to request xfr.
970 provide-xfr: 0.0.0.0/0 NOKEY
971 provide-xfr: ::0/0 NOKEY
972
973 # to list a slave server you would in general give
974 # provide-xfr: 1.2.3.4 tsig-key.name.
975 # notify: 1.2.3.4 NOKEY
976
977 Other
978 NSD is an authoritative only DNS server. This means that it is meant as
979 a primary or secondary server for zones, providing DNS data to DNS re‐
980 solvers and caches. BIND9 can function as an authoritative DNS server,
981 the configuration options for that are compared with those for NSD in
982 this section. However, BIND9 can also function as a resolver or cache.
983 The configuration options that BIND9 has for the resolver or caching
984 thus have no equivalents for NSD.
985
987 "" default NSD database
988
989 /etc/nsd/nsd.conf
990 default NSD configuration file
991
993 nsd(8), nsd-checkconf(8), nsd-control(8)
994
996 NSD was written by NLnet Labs and RIPE NCC joint team. Please see CRED‐
997 ITS file in the distribution for further details.
998
1000 nsd.conf is parsed by a primitive parser, error messages may not be to
1001 the point.
1002
1003
1004
1005NLnet Labs Dec 9, 2021 nsd.conf(5)