不使用nscd进行缓存的DNS查询


10

我正在尝试使用nscd(名称服务缓存守护程序)在本地缓存DNS,因此我可以停止使用Bind来做到这一点。我已经启动它了,ntpd似乎试图使用它。但是主机的其他一切似乎都忽略了它。例如,如果我确实挖过apache.org 3次,它们都不会命中缓存。我正在查看nscd -g用于确定是否已使用的缓存统计信息。我还调高了调试日志级别,以查看是否可以看到它命中,而查询甚至都没有命中nscd。

nsswitch.conf

# 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

nscd.conf

#
# /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

resolv.conf

# Generated by dhcpcd from eth0
nameserver 127.0.0.1
domain westell.com
nameserver 192.168.1.1
nameserver 208.67.222.222
nameserver 208.67.220.220

作为附带说明,我正在使用Arch Linux。

注意:这已经被移动了两次,我从来没有想过为什么除了dig之外的应用程序都无法访问nscd缓存,浏览器,IM,IRC,所有这些都应该存在,但是它们并没有


您不必为ncsd重新启动计算机,可以刷新它或重新启动服务,对我有用。

Answers:


14

您缺少缓存命中的原因是,dig直接查询DNS。您可以尝试查看缓存是否可与以下getent命令一起使用:

getent hosts host.example.com

运行单独的缓存DNS是一个好主意,但是如果可能的话,您应该考虑在网络级别运行它。如果每个主机分别缓存数据,它们仍将对同一主机运行多个查询。单个缓存可解决此问题。

Nscd本身是NSS功能的缓存守护程序。因此,重点与本地缓存名称服务器有所不同。因此,如果您只想缓存名称服务器,请使用nscd以外的其他名称。相反,如果您希望在普通DNS系统之外缓存共享用户名和主机数据之类的内容,请使用nscd。

为了记录在案,我已经非常喜欢powerdns解析器(pdns-resolver)。


但是除了dig之外的其他东西不应该在使用吗?这是一个桌面系统。我知道某些软件(例如我的软件包管理器)没有实现自己的缓存。
xenoterracide

同样,在我的ISP之外,这是网络上唯一的计算机;)由于连接速度很慢,我只是想避免延迟。
xenoterracide

2
其他软件的确应该访问nscd缓存。只需确保在启动nscd之后重新启动软件即可。

我重新启动了系统。...似乎仅尝试使用nscd的软件是ntp。
xenoterracide 2010年

3

您缺少nscd.conf中的主机配置。我以我的为例:

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

这会破坏一些东西。以下信息来自Debian软件包:

  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
  http://sourceware.org/bugzilla/show_bug.cgi?id=4428.

 -- Pierre Habouzit <madcoder@debian.org>  Sat, 28 Apr 2007 11:10:56 +0200

2
实际上我确实有这个,您只需要滚动问题中的文件即可。
xenoterracide

2

我对nscd不太了解,除了它经常导致DNS查找麻烦,而我总是将其禁用(至少是主机查找的一部分)。Nscd允许您设置生存时间值,并且我知道DNS希望“拥有”这些值并使所有解析程序都尊重它们。如果不遵守DNS中的TTL,您可能会得到奇怪的结果。我的建议是不要使用nscd来缓存DNS。您的本地计算机上似乎已经有一个正在运行的缓存名称服务器,因此无需两次缓存DNS查找。


我希望禁用它,尽管并不重要(我的盒子是如此强大,缓存绑定的权重不是问题)。现在这只是学习新知识的一部分。无法使其正常工作有点烦人。
xenoterracide

1

nscd对于所有内容(不仅仅是DNS)确实是不可靠的。除非您出于某些原因迫切需要它,否则最好避免这样做。如果要在本地缓存DNS,则应使用专用的DNS缓存守护程序(这是一个好主意!)。

我最喜欢的两个是djbdns的dnsmasqdnscache


要使用nscd,您首先需要了解它的工作原理,它是系统缓存系统,而不是普通的dns缓存守护程序
higuita

1

如果地狱中有DNS缓存,则由nscd提供。别。采用。它。

只是有所不同:pdnsd实际上是一个非常不错的替代品。或unscd(默认情况下,至少在openSUSE中使用)。


+1。对于小型网络NSCD或DNS服务器异常的地方,这是一个严重的PITA。这一定是我看到“新手”在我工作过的任何地方重新启动Linux和Solaris服务器的最常见原因之一。
Signal15 2014年

1
链接pdnsd已断开。也许这是一个不错的链接:members.home.nl/parombouts/pdnsd
Ehtesh Choudhury 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.