xref: /netbsd-src/external/bsd/nsd/dist/doc/README (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
11.0 Introduction
21.1 ... Basic theory of operation
31.2 ... Quick build & install
42.0 Building nsd
52.1 ... Unpacking the source
62.2 ... Configuring NSD
72.3 ... Building
82.4 ... Installing
93.0 Running NSD
103.1 ... Logging
113.2 ... AXFR access
123.3 ... Using TSIG
133.4 ... Zone expiry of secondary zones
143.5 ... Diagnosing NSD log entries
153.6 ... Interfaces
163.7 ... Tuning
174.0 Support and Feedback
184.1 ... Your Support
19
20
211.0 Introduction
22
23This is NSD Name Server Daemon (NSD) version 4.3.5.
24
25The NLnet Labs Name Server Daemon (NSD) is an authoritative RFC compliant
26DNS nameserver. It was first conceived to allow for more genetic
27diversity for DNS server implementations used by the root-server system
28and it has been developed for operations in environments where speed,
29reliability, stability, and security are of high importance. NSD is
30currently used on root servers such as k.root-servers.net and is also in
31use by several top-level domain registries.
32
33NSD is a complete implementation of an authoritative DNS name server.
34For further information about what NSD is and what NSD is not please
35consult the REQUIREMENTS document which is a part of this distribution.
36
37If you are a BIND user (the named daemon) consult NSD_FOR_BIND_USERS.
38
39The source code is available for download from:
40
41         http://www.nlnetlabs.nl/downloads
42
43
441.1 Basic Theory of Operation
45
46NSD consists of two programs: the zone compiler 'zonec' and the name
47server 'nsd' itself. The name server works with an intermediate
48database prepared by the zone compiler from standard zone files.
49
50For NSD operation this means that zones have to be compiled by zonec
51before NSD can use them.
52
53All this can be controlled via rc.d (SIGTERM, SIGHUP) or nsd-control,
54and uses a simple configuration file 'nsd.conf'.
55
56
571.2 Quick build and install
58
59Step 1: Unpack the source with gtar -xzvf nsd-4.3.5.tar.gz
60
61Step 2: Create user nsd or any other unprivileged user of your
62        choice. In case of later make sure to use
63        --with-user=<username> while running configure.
64	You can also set "username: <name>" in the nsd.conf file later.
65	Install openssl and libevent.
66
67Step 3: ./configure
68
69Step 4: make all	(or simply 'make').
70
71Step 5: make install
72
73Step 6: Create and edit /etc/nsd/nsd.conf file possibly from
74        nsd.conf.sample template that comes with the distribution.
75	(installed by default at /etc/nsd/nsd.conf.sample)
76	Here you need to configure the zones you want to serve.
77	TSIG keys used for secure zone transfers must be included.
78	Also server parameters can be set, see nsd.conf(5) man page.
79
80	If you have a NSD 2 nsd.zones config file take a look at the
81	python script contrib/nsd.zones2nsd.conf, it will convert
82	zone and TSIG key settings for you.
83
84Step 7: Copy necessary master zone files into appropriate directories
85        under /etc/nsd/primary & /etc/nsd/secondary.
86
87Step 8: Run nsd-control start
88
89Step 9: Test the NSD with dig, drill or host.
90
91Step 10: If you're happy add a rc.d script to start into your OS boot up
92	 sequence. The format of the rc.d startup script depends on
93	 the platform.  Also stop it in the shutdown sequence.
94	 You can use SIGTERM to stop, or nsd-control stop.
95
96Step 11: If desired add 'nsd-control write' to your superuser crontab to
97         update the zone files with the content transferred from master
98	 servers periodically, such as once per day.
99
100         Got any problems or questions with the steps above? Read the
101         rest of this file.
102
103
104
1052.0 Building NSD
106
107
1082.1 Unpacking the source
109
110Use your favorite combination of tar and gnu zip to unpack the source,
111for example
112
113$ gtar -xzvf nsd-4.3.5.tar.gz
114
115will unpack the source into the ./nsd-4.3.5 directory...
116
117
1182.2 Configuring NSD
119
120NSD can be configured using GNU autoconf's configure script. In
121addition to standard configure options, one may use the following:
122
123  CC=compiler
124
125        Specify the C compiler.  The default is gcc or cc.  The
126        compiler must support ANSI C89.
127
128  CPPFLAGS=flags
129
130        Specify the C preprocessor flags.  Such as -I<includedir>.
131
132  CFLAGS=flags
133
134        Specify the C compiler flags.  These include code generation,
135        optimization, warning, and debugging flags.  These flags are
136        also passed to the linker.
137
138        The default for gcc is "-g -O2".
139
140  LD=linker
141
142        Specify the linker (defaults to the C compiler).
143
144  LDFLAGS=flags
145
146        Specify linker flags.
147
148  LIBS=libs
149
150        Specify additional libraries to link with.
151
152  --enable-root-server
153
154        Configure NSD as a root server. Unless this option is
155        specified, NSD will refuse to serve the ``.'' zone as a
156        misconfiguration safeguard.
157
158  --disable-ipv6
159
160        Disables IPv6 support in NSD.
161
162  --enable-checking
163
164        Enable some internal development checks.  Useful if you want
165        to modify NSD.  This option enables the standard C "assert" macro
166	and compiler warnings.
167
168	This will instruct NSD to be stricter when validating its input.
169	This could lead to a reduced service level.
170
171  --enable-bind8-stats
172
173        Enables BIND8-like statistics.
174
175  --enable-ratelimit
176
177	Enables ratelimiting, based on query name, type and source.
178
179   --enable-draft-rrtypes
180
181	Enables draft RRtypes.
182
183  --with-configdir=dir
184
185        Specified, NSD configuration directory, default /etc/nsd
186
187  --with-nsd_conf_file=path
188
189	Pathname to the NSD configuration file, default /etc/nsd/nsd.conf
190
191  --with-pidfile=path
192
193        Pathname to the NSD pidfile, default is platform specific,
194        mostly /var/run/nsd.pid
195
196  --with-dbfile=path
197
198        Pathname to the NSD database, default is /etc/nsd/nsd.db
199
200  --with-zonesdir=dir
201
202        NSD default location for master zone files, default /etc/nsd/
203
204  --with-user=username
205
206        User name or ID to answer the queries with, default is nsd
207
208  --with-facility=facility
209
210        Specify the syslog facility to use.  The default is
211        LOG_DAEMON.  See the syslog(3) manual page for the available
212        facilities.
213
214  --with-libevent=path
215
216  	Specity the location of the libevent library (or libev).
217	--with-libevent=no uses a builtin portable implementation (select()).
218
219  --with-ssl=path
220
221        Specify the location of the OpenSSL libraries.  OpenSSL 0.9.7
222        or higher is required for TSIG support.
223
224  --with-start_priority=number
225
226	Startup priority for NSD.
227
228  --with-kill_priority=number
229
230	Shutdown priority for NSD.
231
232  --with-tcp-timeout=number
233
234	Set the default TCP timeout (in seconds). Default 120 seconds.
235
236  --disable-nsec3
237
238  	Disable NSEC3 support. With NSEC3 support enabled, very large zones,
239	also non-nsec3 zones, use about 20% more memory.
240
241  --disable-minimal-responses
242
243  	Disable minimal responses. If disabled, responses are more likely
244	to get truncated, resulting in TCP fallback.  When enabled (by default)
245	NSD will leave out RRsets to make responses fit inside one datagram,
246	but for shorter responses the full normal response is carried.
247
248  --disable-largefile
249
250	Disable large file support (64 bit file lengths). Makes off_t
251	a 32bit length during compilation.
252
253
2542.3 Building
255
256Use ``make'' to create NSD and support tools.  If you get errors, try to
257use ``gmake'' (gnu version of make), especially on old systems. If so,
258do a `gmake realclean` first, to remove stuff that the make call messed up.
259
260
2612.4 Installing
262
263Become a superuser (if necessary) and type ``make install''
264
265This step should install four binaries
266
267nsd               - the daemon itself
268nsd-control-setup - a shell script that creates keys for nsd-control.
269nsd-control	      - program that connects over SSL to nsd and gives commands.
270nsd-checkconf	  - simple C program to check nsd.conf before use.
271
272Plus the manual pages and a sample configuration file.
273
274
2753.0 Running NSD
276
277Before running NSD you need to create a configuration file for it.
278The config file contains server settings, secret keys and zone settings.
279
280The server settings start with a line with the keyword 'server:'.
281In the server settings set 'database: <file>' with the filename of the name
282database that NSD will use. Set 'chroot: <dir>' to run nsd in a chroot-jail.
283Make sure the zone files, database file, xfrdfile, difffile and pidfile
284can be accessed from the chroot-jail.  Set 'username: <user>' to an
285unprivileged user, for security.
286
287For example:
288	# This is a sample configuration
289	server:
290		database: "/etc/nsd/nsd.db"
291		pidfile: "/etc/nsd/nsd.pid"
292		chroot: "/etc/nsd/"
293		username: nsd
294
295After the global server settings to need to make entries for the
296zones that you wish to serve. For each zone you need to list the zone
297name, the file name with the zone contents, and access control lists.
298
299	zone:
300		name:	"example.com"
301		zonefile: "example.com.zone"
302
303The zonefile needs to be filled with the correct zone information
304for master zones. For secondary zones an empty file will suffice,
305a zone transfer will be initiated to obtain the slave zone contents.
306
307Access control lists are needed for zone transfer and notifications.
308
309For a slave zone list the masters, by IP address. Below is an example
310of a slave zone with two master servers. If a master only supports AXFR
311transfers and not IXFR transfers (like NSD), specify the master as
312"request-xfr: AXFR <ip_address> <key>". By default, all zone transfer requests
313are made over TCP. If you want the IXFR request be transmitted over UDP, use
314"request-xfr: UDP <ip address> <key>".
315
316	zone:
317		name: "example.com"
318		zonefile: "example.com.zone"
319		allow-notify: 168.192.185.33 NOKEY
320		request-xfr: 168.192.185.33 NOKEY
321		allow-notify: 168.192.199.2 NOKEY
322		request-xfr: 168.192.199.2 NOKEY
323
324By default, a slave will fallback to AXFR requests if the master told us it does
325not support IXFR. You can configure the slave not to do AXFR fallback with:
326
327		allow-axfr-fallback: "no"
328
329For a master zone, list the slave servers, by IP address or subnet.
330Below is an example of a master zone with two slave servers.
331
332	zone:
333		name: "example.com"
334		zonefile: "example.com.zone"
335		notify: 168.192.133.75 NOKEY
336		provide-xfr: 168.192.133.75 NOKEY
337		notify: 168.192.5.44 NOKEY
338		provide-xfr: 168.192.5.44 NOKEY
339
340You also can set the outgoing interface for notifies and zone transfer requests
341to satisfy access control lists at the other end:
342
343		outgoing-interface: 168.192.5.69
344
345By default, NSD will retry a notify up to 5 times. You can override that
346value with:
347
348		notify-retry: 5
349
350Zone transfers can be secured with TSIG keys, replace NOKEY with
351the name of the tsig key to use. See section 3.3.
352
353Since NSD is written to be run on the root name servers, the config file
354can to contain something like:
355
356	zone:
357		name: "."
358		zonefile: "root.zone"
359		provide-xfr: 0.0.0.0/0 NOKEY # allow axfr for everyone.
360		provide-xfr: ::0/0 NOKEY
361
362You should only do that if you're intending to run a root server, NSD
363is not suited for running a . cache. Therefore if you choose to serve
364the .  zone you have to make sure that the complete root zone is
365timely and fully updated.
366
367To prevent misconfiguration, NSD configure has the --enable-root-server
368switch, that is by default disabled.
369
370In the config file, you can use patterns.  A pattern can have the
371same configuration statements that a zone can have.  And then you can
372include-pattern: <name-of-pattern> in a zone (or in another pattern)
373to apply those settings.  This can be used to organise the settings.
374
375The nsd-control tool is also controlled from the nsd.conf config file.
376It uses SSL encrypted transport to 127.0.0.1, and if you want to use it
377you have to setup the keys and also edit the config file.  You can leave
378the remote-control disabled (the secure default), or opt to turn it on:
379
380	# generate keys
381	nsd-control-setup
382
383	# edit nsd.conf to add this
384	remote-control:
385		control-enable: yes
386
387By default nsd-control is limited to localhost, as well as encrypted, but
388some people may want to remotely administer their nameserver.  What you
389then do is setup nsd-control to listen to the public IP address, with
390control-interface: <IP> after the control-enable statement.  Furthermore,
391you copy the key files /etc/nsd/nsd_server.pem /etc/nsd/nsd_control.*
392to a remote host on the internet; on that host you can run nsd-control
393with -c <special config file> which references same IP address
394control-interface and references the copies of the key files with
395server-cert-file, control-key-file and control-cert-file config lines
396after the control-enable statement.  The nsd-server authenticates the
397nsd-control client, and also the nsd-control client authenticates the
398nsd-server.
399
400When you are done with the configuration file, check the syntax using
401
402	nsd-checkconf <name of configfile>
403
404The zone files are read by the daemon, which builds 'nsd.db' with their
405contents.  You can start the daemon with
406
407	nsd
408	or with "nsd-control start" (which execs nsd again).
409	or with nsd -c <name of configfile>
410
411To check if the daemon is running look with ps, top, or if you enabled
412nsd-control,
413
414	nsd-control status
415
416To reload changed zone files after you edited them, without stopping
417the daemon, use this to check if files are modified:
418
419	kill -HUP `cat <name of nsd pidfile>`
420
421If you enabled nsd-control, you can reread with
422
423	nsd-control reload
424
425With nsd-control you can also reread the config file (new zones, ..)
426
427	nsd-control reconfig
428
429To restart the daemon
430
431	/etc/rc.d/nsd restart  # or your system(d) equivalent
432
433To shut it down (for example on the system shutdown) do
434
435	kill -TERM <pid of nsd>
436	or nsd-control stop
437
438NSD will automatically keep track of secondary zones and update them
439when needed. When primary zones are updated and reloaded notifications
440are sent to slave servers.
441
442The zone transfers are applied to nsd.db by the daemon.  To write changed
443contents of the zone files for slave zones to disk in the text-based zone
444file format, issue nsd-control write.
445
446NSD will send notifications to slave zones if a master zone is updated.
447NSD will check for updates at master servers periodically and transfer
448the updated zone by AXFR/IXFR and reload the new zone contents. If
449you wish exert manual control use nsd-control notify, transfer and
450force_transfer commands.  The transfer command will check for new versions
451of the secondary zones hosted by this NSD. The notify command will send
452notifications to the slave servers configured in 'notify:' statements.
453
454
4553.1 Logging
456
457NSD doesn't do any logging. We believe that logging is a separate task
458and has to be done independently from the core operation.
459
460This consciously is not part of nsd itself in order to keep nsd
461focused and minimize its complexity. It is better to leave logging and
462tracing to separate dedicated tools. dnsstat can also easily be
463configured and/or modified to suit local statistics requirements
464without any danger of affecting the name server itself. We have run
465dnsstat on the same machine as nsd, we would recommend using a
466multiprocessor if performance is an issue. Of course it can also run
467on a separate machine that has MAC layer access to the network of the
468server.
469
470The nsd-control tool can output some statistics, with nsd-control stats
471and nsd-control stats_noreset.  In contrib/nsd_munin_ there is a munin
472grapher plugin that uses it.  The output of nsd-control stats is easy
473to read (text only) with scripts.  The output values are documented on
474the nsd-control man page.
475
476The CAIDA dnsstat tool referenced is recommended to nsd operators as a
477means of keeping statistics and check on abnormal query loads.
478
479    http://www.caida.org/tools/utilities/dnsstat/dnsstat-3.5.1a.tar.gz
480
481Another tool is the dnstop, that displays DNS statistics on your network.
482
483    http://dns.measurement-factory.com/tools/dnstop/src/dnstop-20060517.tar.gz
484
485A sample invocation of dnsstat:
486
487/usr/local/Coral/bin/crl_dnsstat -D -Ci=60 -Cd=240 -C'filter dst 10.1.1.3'  -h -u if:fxp1
488
489A sample output of a slightly modified version:
490
491# dnsstat output version: 0.2 "dfk"
492
493# begin trace interval at 1025267664.859043, duration 15.000000
494# DNS messages: 74973 (4998.200000/s); DNS queries: 151983 (10132.200000/s)
495# print threshold: 30 messages/sec
496
497#src              op type  class queries    msgs      rd notes
498 208.18.162.10     - -     -         533     533       0
499 "                 0 MX    IN          6
500 "                 0 A     IN        264
501 "                 0 ANY   IN        263
502 209.11.18.248     - -     -         661     661       0
503 "                 0 A     IN        655
504 "                 0 MX    IN          6
505 210.117.65.137    - -     -         745     745       0
506 "                 0 A     IN        745
507 216.54.221.131    - -     -         477     477       0
508 "                 0 A     IN        477
509 193.97.205.80     - -     -         681     681       0
510 "                 0 A     IN          3
511 "                 0 ANY   IN        678
512 168.30.240.11     - -     -         685     685       0
513 "                 0 A     IN        405
514 "                 0 MX    IN        280
515 210.94.6.67       - -     -         742     742       0
516 "                 0 A     IN        742
517 63.66.68.237      - -     -        1375    1375       0
518 "                 0 A     IN       1375
519 168.30.240.12     - -     -         493     493       0
520 "                 0 A     IN        493
521 139.142.205.225   - -     -        5579    5579       0
522 "                 0 A     IN       3006
523 "                 0 MX    IN       2573
524 210.117.65.2      - -     -         700     700       0
525 "                 0 A     IN        700
526# end trace interval
527
528
5293.2 AXFR access
530
531The access list for AXFR should be set with provide-xfr:
532in the nsd config file. This is per zone. See nsd.conf(5).
533For example to grant zone 'example.com' AXFR right to localhost for
534IPv4 and IPv6, use the below config options.
535
536zone:
537	name: "example.com"
538	provide-xfr: 127.0.0.1 NOKEY
539	provide-xfr: ::1 NOKEY
540
541You can use dig @localhost example.com axfr to test this.
542
543
5443.3 Using TSIG
545
546NSD supports TSIG for any query to the server, for zone transfer
547and for notify sending and receiving.
548
549TSIG keys are based on shared secrets. These must be configured
550in the config file. To keep the secret in a separate file use
551include: "filename" to include that file.
552
553An example tsig key named sec1_key.
554
555	key:
556		name: "sec1_key"
557		algorithm: hmac-md5
558		secret: "6KM6qiKfwfEpamEq72HQdA=="
559
560This key can then be used for any query to the NSD server. NSD
561will check if the signature is valid, and if so, return a signed
562answer. Unsigned queries will be given unsigned replies.
563
564The key can be used to restrict the access control lists, for
565example to only allow zone transfer with the key, by listing
566the key name on the access control line.
567
568	# provides AXFR to the subnet when TSIG is used.
569	provide-xfr: 10.11.12.0/24 sec1_key
570	# allow only notifications that are signed
571	allow-notify: 192.168.0.0/16 sec1_key
572
573If the TSIG key name is used in notify or request-xfr lines,
574the key is used to sign the request/notification messages.
575
576
5773.4 Zone expiry of secondary zones
578
579NSD will keep track of the status of secondary zones, according to the
580timing values in the SOA record for the zone.  When the refresh time of a
581zone is reached, the serial number is checked and a zone transfer is
582started if the zone has changed.  Each master server is tried in turn.
583
584Master zones cannot expire.  They are always served.  Zones are master
585zones if they have no 'request-xfr:' statements in the config file.
586
587After the expire timeout (from the SOA record at the zone apex) is reached,
588the zone becomes expired. NSD will return SERVFAIL for expired zones,
589and will attempt to perform a zone transfer from any of the masters.
590After a zone transfer succeeds, or if the master indicates that the SOA
591serial number is still the same, the zone will be OK again.
592
593In contrast with e.g. BIND, the inception time for a slave zone is stored
594on disk (in the xfrdfile: "xfrd.state"), together with timeouts.  If a
595slave zone acquisition time is recent enough, this means that NSD can start
596serving a zone immediately on loading, without querying the master server.
597
598If your slave zone has expired, and no masters can be reached, but you
599still want NSD to serve the zone.  (i.e. ''My network is in shambles, but
600serve the zone dangit!'').  You can delete the file 'xfrd.state',
601but leave the zonefile for the zone intact.  Make sure to stop nsd before
602you delete the file, as NSD writes it on exit.  Upon loading NSD will treat
603the zonefile that you as operator have provided as recent and will serve
604the zone.  Even though NSD will start to serve the zone immediately,
605the zone will expire after the timeout is reached again.  NSD will also
606attempt to confirm that you have provided the correct data by polling
607the masters.  So when the master servers come back up, it will transfer
608the updated zone within <retry timeout from SOA> seconds.
609
610In general it is possible to provide zone files for both master and
611slave zones manually (say from email or rsync). Reload with SIGHUP
612or nsd-control reload to read the new zonefile contents into the name
613database.  When this is done the new zone will be served. For master
614zones, NSD will issue notifications to all configured 'notify:' targets.
615For slave zones the above happens; NSD attempts to validate the zone
616from the master (checking its SOA serial number).
617
618
6193.5 Diagnosing NSD log entries
620
621NSD will print log messages to the system log (or 'logfile:' configuration
622entry). Some of these messages are discussed below. These messages can
623get extra support if errors happen.
624
625- "Reload process <pid> failed with status <s>, continuing with old database"
626
627This log message indicates the reload process of NSD has failed for
628some reason.  The reason can be anything from a missing database file
629to internal errors.  If this happens often, please let us know, this
630error message can be caught in the code, and appropriate action could
631be taken.  We are as of yet not sure what action is appropriate, if any.
632
633- "snipping off trailing partial part of <ixfr.db>"
634
635Please let us know if, and how often, this happens.
636
637What happens is the file ixfr.db contains only part of expected data.
638The corruption is removed by snipping off the trailing part.
639
640- "memory recyclebin holds <num> bytes"
641
642This is printed for every reload. NSD allocates and deallocates memory
643to service IXFR updates. The recyclebin holds deallocated memory ready
644for future use. If the number grows too large, a restart resets it.
645
646- "xfrd: max number of tcp connections (32) reached."
647
648This line is printed when more than 32 zones need a zone transfer at the
649same time.  The value is a compile constant (xfrd-tcp.h), but if this
650happens often for you, we could make this a config option.  NSD will reuse
651existing TCP connections to the same master (determined by IP address)
652to transfer up to 64k zones from that master.  Thus this error should
653only happen with more than 32 masters or more than 64*32=2M zones that
654need to be updated at the same time.
655
656If this happens, more zones have to wait until a zone transfer completes
657(or is aborted) before they can have a zone transfer too. This waiting
658list has no size limit.
659
660- "error: <zone> NSEC3PARAM entry <num> has unknown hash algo <number>"
661
662This error means that the zone has NSEC3 chain(s) with hash algorithms
663that are not supported by this version of NSD, and thus cannot be served
664by NSD.  If there are also no NSECs or NSEC3 chain(s) with known hash
665algorithms, NSD will not be able to serve DNSSEC authenticated denials
666for the zone.
667
668
6693.6 Interfaces
670
671NSD will by default bind itself to the system default interface and
672service ip4 and if available also ip6. It is possible to service only ip4
673or ip6 using the -4, -6 commandline options, or the ip4-only and ip6-only
674config file options.
675
676The commandline option -a and config file option ip-address can be given
677to bind to specific interfaces.  Multiple interfaces can be specified.
678This is useful for two reasons:
679	o The specific interface bound will result in the OS bypassing
680	  routing tables for the interface selection.  This results in
681	  a small performance gain.  It is not the performance gain that
682	  is the problem, sometimes the routing tables can give the
683	  wrong answer, see the next point.
684	o The answer will be routed via the interface the query came from.
685	  This makes sure that the return address on the DNS replies is the
686	  same as the query was sent to.  Many resolvers require the source
687	  address of the replies to be correct.  The ip-address: option is
688	  easier than configuring the OS routing table to return the DNS
689	  replies via the correct interface.
690The above means that even for systems with multiple interfaces where you
691intend to provide DNS service to all interfaces, it is prudent to specify
692all the interfaces as ip-address config file options.
693
694With the config file option ip-transparent you can allow NSD to bind to
695non local addresses.
696
697
6983.7 Tuning
699
700NSD is performant by design and most users will have little need for tuning
701it. For setups that do require every ounce of performance, NSD offers a number
702of configuration options.
703
704
705cpu-affinity, server-<N>-cpu-affinity and xfrd-cpu-affinity
706
707Modern computer systems have many cores available. By default the operating
708system's scheduling-algorithm determines which core a given task is allocated
709to. Processors build up state, like keeping frequently accessed data in cache
710memory, for the task (process/thread) that it is currently running. Whenever,
711a task switches cores, performance is degraded because the core it switched
712to has yet to build up said state. The cpu-affinity configuration options can
713be used to bind NSD to one or more cores.
714
715cpu-affinity can be used to designate a set of cores onto which NSD processes
716are scheduled. server-<N>-cpu-affinity and xfrd-cpu-affinity can be used to
717designate a specific core to each individual process. This improves L1/L2
718cache hits and reduces pipeline stalls/flushes.
719
720For example, a name server configured to fork two NSD servers that must run on
721dedicated cores 0 and 2, while the transfer daemon (xfrd) must run on core 1,
722the configuration becomes.
723
724	server:
725		server-count: 2
726		cpu-affinity: 0 1 2
727		server-1-cpu-affinity: 0
728		server-2-cpu-affinity: 2
729		xfrd-cpu-affinity: 1
730
731
732ip-address: x.x.x.x  servers=<N>
733
734ip-address options can be configured per (set of) server(s). Sockets that are
735configured for a specific server are closed by other servers on startup. This
736improves select/poll performance and avoids waking up multiple servers when a
737packet comes in.
738
739
740ip-address: x.x.x.x  bindtodevice=yes
741ip-address: x.x.x.x  setfib=<N>
742
743The bindtodevice attribute on Linux and the setfib ip-address attribute on
744FreeBSD can be used to skip the interface selection process in the kernel. This
745improves performance, and ensures responses written to the socket are pushed
746out the same interface the corresponding query came in on when multiple
747interfaces are configured to listen on the same subnet.
748
749The aforementioned options all complement eachother and best performance is
750achieved by assigning a socket to a single server that runs on a dedicated
751core and line that up with a dedicated network interface. Network interface
752interrupts are best handled by a core not designated to any NSD servers.
753
754	server:
755		server-count: 3
756		cpu-affinity: 0 1 2 4
757		server-1-cpu-affinity: 0
758		server-2-cpu-affinity: 1
759		server-3-cpu-affinity: 2
760		xfrd-cpu-affinity: 4
761		ip-address: 1.2.3.11  servers=1 setfib=1 bindtodevice=yes
762		ip-address: 1.2.3.12  servers=2 setfib=2 bindtodevice=yes
763		ip-address: 1.2.3.13  servers=3 setfib=3 bindtodevice=yes
764
765The number of NSD servers to fork and which cores are best used depends
766entirely on the hardware. cpu-affinity options are supported on Linux and
767FreeBSD.
768
769
7704.0 Support and Feedback
771
772NLnet Labs is committed to support NSD and its other software products on
773a best effort basis, free of charge. This form of community support is
774offered through a mailing lists and the 'bugzilla' web interface.
775
776	http://www.nlnetlabs.nl/bugs/
777
778If for any reason NLnet Labs would stop community support of NSD such
779would be announced on our web pages at least two years in advance.
780
781The community mailing list nsd-users@nlnetlabs.nl can be used to discuss
782issues with other users of NSD. Subscribe here
783
784	http://lists.nlnetlabs.nl/mailman/listinfo/nsd-users
785
786NLnet Labs recognizes that in some corporate environments this commitment to
787community support is not sufficient and that support needs to be codified.
788We therefore offer paid support contracts that come in 3 varieties.
789
790More information about these support varieties can be found at
791	<url on support varieties on www.nlnetlabs.nl>
792
793Alternatively you can contact mailto:nsd-support@nlnetlabs.nl .
794
795Support goes two ways.  By acquiring one of the support contracts you
796also support NLnet Labs to continue to participate in the development
797of the Internet architecture. We do this through our participation in
798the (IETF) standards process and by developing and maintaining
799reference implementations of standards and tools to support operation
800and deployment of new and existing Internet technology.
801
802We are interested in our users and in the environment you use NSD. Please
803drop us a mail when you use NSD. Indicate in what kind of operation you
804deploy NSD and let us know what your positive and negative experiences are.
805http://www.nlnetlabs.nl/nsd  and  mailto:nsd-info@nlnetlabs.nl
806
807
8084.1 Your Support
809
810NLnet Labs offers all of its software products as open source, most are
811published under a BSD license. You can download them, not only from the
812NLnet Labs website but also through the various OS distributions for
813which NSD, ldns, and Unbound are packaged. We therefore have little idea
814who uses our software in production environments and have no direct ties
815with 'our customers'.
816
817Therefore, we ask you to contact us at users@NLnetLabs.nl and tell us
818whether you use one of our products in your production environment,
819what that environment looks like, and maybe even share some praise.
820We would like to refer to the fact that your organization is using our
821products. We will only do that if you explicitly allow us. In all other
822cases we will keep the information you share with us to ourselves.
823
824In addition to the moral support you can also support us
825financially. NLnet Labs is a recognized not-for-profit charity foundation
826that is chartered to develop open-source software and open-standards
827for the Internet. If you use our software to satisfaction please express
828that by giving us a donation. For small donations PayPal can be used. For
829larger and regular donations please contact us at users@NLnetLabs.nl. Also
830see http://www.nlnetlabs.nl/labs/contributors/.
831
832
833$Id: README,v 1.1.1.7 2021/03/15 18:38:58 christos Exp $
834