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