I'm trying to use nscd (Nameservices Cache Daemon) to cache DNS locally so I can stop using Bind to do it. I've gotten it started and ntpd seems to attempt to use it. But everything else for hosts seems to ignore it. e.g if I do dig apache.org 3 times none of them will hit the cache. I'm viewing the cache stats using nscd -g to determine whether it's been used. I've also turned the debug log level up to see if I can see it hitting and the queries don't even hit nscd.


# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files

publickey: files

hosts: cache files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

netgroup: files
# End /etc/nsswitch.confenter code here


# /etc/nscd.conf
# An example Name Service Cache config file.  This file is needed by nscd.
# Legal entries are:
#       logfile                 <file>
#       debug-level             <level>
#       threads                 <initial #threads to use>
#       max-threads             <maximum #threads to use>
#       server-user             <user to run server as instead of root>
#               server-user is ignored if nscd is started with -S parameters
#       stat-user               <user who is allowed to request statistics>
#       reload-count            unlimited|<number>
#       paranoia                <yes|no>
#       restart-interval        <time in seconds>
#       enable-cache            <service> <yes|no>
#       positive-time-to-live   <service> <time in seconds>
#       negative-time-to-live   <service> <time in seconds>
#       suggested-size          <service> <prime number>
#       check-files             <service> <yes|no>
#       persistent              <service> <yes|no>
#       shared                  <service> <yes|no>
#       max-db-size             <service> <number bytes>
#       auto-propagate          <service> <yes|no>
# Currently supported cache names (services): passwd, group, hosts, services

    logfile                 /var/log/nscd.log
    threads                 4
    max-threads             32
    server-user             nobody
#   stat-user               somebody
    debug-level             9
#   reload-count            5
    paranoia                no
#   restart-interval        3600

    enable-cache            passwd          yes
    positive-time-to-live   passwd          600
    negative-time-to-live   passwd          20
    suggested-size          passwd          211
    check-files             passwd          yes
    persistent              passwd          yes
    shared                  passwd          yes
    max-db-size             passwd          33554432
    auto-propagate          passwd          yes

    enable-cache            group           yes
    positive-time-to-live   group           3600
    negative-time-to-live   group           60
    suggested-size          group           211
    check-files             group           yes
    persistent              group           yes
    shared                  group           yes
    max-db-size             group           33554432
    auto-propagate          group           yes

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           20
    suggested-size          hosts           211
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

    enable-cache            services        yes
    positive-time-to-live   services        28800
    negative-time-to-live   services        20
    suggested-size          services        211
    check-files             services        yes
    persistent              services        yes
    shared                  services        yes
    max-db-size             services        33554432


# Generated by dhcpcd from eth0
domain westell.com

as kind of a side note I'm using Arch Linux.

note: this has been moved twice, I've never figured out why apps, excluding dig, are not hitting the nscd cache, browsers, IM, IRC, all should have been, but they didn't

  • You don't have to reboot the machine for ncsd, you can flush it or restart the service, works for me. – user124266 Jul 21 '15 at 0:00

The reason why you are missing the cache hits is that dig queries the DNS directly. You can try and see whether the cache works with the getent command:

getent hosts host.example.com

Running a separate caching DNS is a good idea, but you should consider running it on the network level if possible. If each host cache the data separately they will still run multiple queries for the same hosts. Single cache works around this problem.

Nscd itself is a caching daemon for NSS functions. So the focus is a bit different than native caching nameservers. So if you just want a caching nameserver, use something else than nscd. If instead you wish to cache things like shared usernames and hostdata outside of the normal DNS system, go for nscd.

And for the record, I've grown quite fond of powerdns resolver (pdns-resolver).

| improve this answer | |
  • but shouldn't other stuff besides dig appear to be using it? this is a desktop system. I know that some of the software (like my package manager) doesn't implement its own cache. – xenoterracide Aug 2 '10 at 20:53
  • Also outside of my ISP this is the only computer on the network ;) I'm just trying to avoid latency since my connection is slow. – xenoterracide Aug 2 '10 at 20:55
  • 2
    Other software should indeed hit the nscd cache. Just make sure you restart the software after starting nscd. – Ressu Aug 4 '10 at 10:41
  • I rebooted the system.... only software to seemingly attempt to use nscd was ntp. – xenoterracide Aug 5 '10 at 4:01

You're missing the hosts configuration in nscd.conf. I'm posting mine as an example:

enable-cache            hosts           yes
positive-time-to-live   hosts           3600
negative-time-to-live   hosts           20
suggested-size          hosts           211
check-files             hosts           yes
persistent              hosts           yes
shared                  hosts           yes
max-db-size             hosts           33554432

This will break some things. The following information is from the Debian package:

  Since this release, hosts caching in nscd is off by default: for some of the
  libc calls (gethostby* calls) nscd does not respect the DNS TTLs.  It can
  lead to system lockups (e.g. if you are using pam-ldap and change the IP of
  your authentication server) hence is not considered safe.

  See debian bug #335476 and how upstream answered to that in

 -- Pierre Habouzit <madcoder@debian.org>  Sat, 28 Apr 2007 11:10:56 +0200
| improve this answer | |
  • 2
    actually I do have this you just have to scroll the file in the question. – xenoterracide May 6 '10 at 11:48

I don't know that much about nscd except that it so often caused trouble with DNS lookups that I always disabled it (or at least the host lookups part of it). Nscd lets you set the time-to-live values and I know DNS expects to "own" those values and have all resolvers honor them. You can end up with weird results if the TTLs in DNS aren't honored. My recommendation is not to use nscd for caching DNS. It looks like you already have a caching name server running on your local box, so no need to cache DNS lookups twice.

| improve this answer | |
  • I was hoping to disable it, although it doesn't really matter (my box is so powerful the weight of bind for caching isn't an issue). This is partially a matter now of just learning something new. Not being able to get it to work is a bit annoying. – xenoterracide Apr 10 '10 at 1:56

nscd is really unreliable for everything, not just DNS. It's well worth avoiding unless you desperately need it for some reason. You should use a purpose-made DNS caching daemon if you want to cache DNS locally (which is a good idea!).

Two of my favourites are dnsmasq and dnscache from djbdns.

| improve this answer | |
  • To use nscd, you need first to understand how it works, that it is a system cache system, not a plain dns cache daemon – higuita Mar 5 '18 at 19:51

If there is DNS caching in Hell, it is provided by nscd. Don't. Use. It.

Just to be different: pdnsd is actually a very nice replacement. Or unscd (used by default at least in openSUSE).

| improve this answer | |
  • +1 This. For small networks NSCD, or places with horrible DNS servers, this is a serious PITA. This has to be one of the most frequent reasons I see "newbies" rebooting Linux & Solaris servers any place I've worked. – Signal15 May 22 '14 at 13:57
  • 1
    link to pdnsd is down. Maybe this is a good link instead: members.home.nl/p.a.rombouts/pdnsd – Ehtesh Choudhury Jan 14 '15 at 18:14

I would like to add that when you have shared enabled your stats will not reflect correctly:

shared hosts yes


I did not see anyone else mention this and it took me quite some time to figure out why my hit rate kept showing as 0%

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.