
Я пытаюсь использовать nscd (Nameservices Cache Daemon) для локального кэширования 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, все должны были попасть, но этого не произошло
решение1
Причина, по которой вы пропускаете попадания в кэш, заключается в том, что dig напрямую запрашивает DNS. Вы можете попробовать и проверить, работает ли кэш, с помощью getent
команды:
getent hosts host.example.com
Запуск отдельного кэширующего DNS — хорошая идея, но вам следует рассмотреть возможность запуска его на сетевом уровне, если это возможно. Если каждый хост кэширует данные отдельно, они все равно будут выполнять несколько запросов для тех же хостов. Единый кэш решает эту проблему.
Nscd сам по себе является демоном кэширования для функций NSS. Поэтому фокус немного отличается от собственных кэширующих серверов имен. Так что если вам нужен просто кэширующий сервер имен, используйте что-то другое, а не nscd. Если вместо этого вы хотите кэшировать такие вещи, как общие имена пользователей и данные хостов вне обычной системы DNS, используйте nscd.
И, кстати, мне очень понравился преобразователь PowerDNS (pdns-resolver).
решение2
У вас отсутствует конфигурация хостов в 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 <[email protected]> Sat, 28 Apr 2007 11:10:56 +0200
решение3
Я не так уж много знаю о nscd, за исключением того, что он так часто вызывал проблемы с поиском DNS, что я всегда отключал его (или, по крайней мере, часть поиска хостов). Nscd позволяет вам устанавливать значения времени жизни, и я знаю, что DNS ожидает, что эти значения будут «владеть» ими и все резолверы будут их учитывать. Вы можете получить странные результаты, если TTL в DNS не будут учитываться. Я рекомендую не использовать nscd для кэширования DNS. Похоже, у вас уже есть кэширующий сервер имен, работающий на локальном компьютере, поэтому нет необходимости кэшировать поиск DNS дважды.
решение4
Если в аду есть кэширование DNS, то оно предоставлено nscd. Не. Используйте. его.
Просто чтобы отличаться:пднсдна самом деле очень хорошая замена. Или unscd (используется по умолчанию, по крайней мере, в openSUSE).