
Estoy intentando usar nscd (Nameservices Cache Daemon) para almacenar en caché DNS localmente para poder dejar de usar Bind para hacerlo. Lo inicié y ntpd parece intentar usarlo. Pero todo lo demás para los anfitriones parece ignorarlo. por ejemplo, si busco en apache.org 3 veces, ninguna de ellas accederá al caché. Estoy viendo las estadísticas de caché usando nscd -g
para determinar si se ha usado. También subí el nivel del registro de depuración para ver si puedo verlo y las consultas ni siquiera llegan a 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
resolver.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
Como nota al margen, estoy usando Arch Linux.
nota: esto se ha movido dos veces, nunca he descubierto por qué las aplicaciones, excluyendo dig, no acceden a la caché nscd, navegadores, mensajería instantánea, IRC, todas deberían haberlo hecho, pero no lo hicieron
Respuesta1
La razón por la que faltan los resultados de la caché es que dig consulta el DNS directamente. Puedes intentar ver si el caché funciona con el getent
comando:
getent hosts host.example.com
Ejecutar un DNS de caché separado es una buena idea, pero debería considerar ejecutarlo a nivel de red si es posible. Si cada host almacena en caché los datos por separado, seguirán ejecutando múltiples consultas para los mismos hosts. La caché única soluciona este problema.
Nscd en sí es un demonio de almacenamiento en caché para funciones NSS. Entonces, el enfoque es un poco diferente al de los servidores de nombres de almacenamiento en caché nativos. Entonces, si solo desea un servidor de nombres de almacenamiento en caché, use algo más que nscd. Si, en cambio, desea almacenar en caché elementos como nombres de usuario compartidos y datos de host fuera del sistema DNS normal, elija nscd.
Y para que conste, me he encariñado bastante con el solucionador powerdns (pdns-resolver).
Respuesta2
Le falta la configuración de hosts en nscd.conf. Estoy publicando el mío como ejemplo:
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
Esto romperá algunas cosas. La siguiente información es del paquete 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
Respuesta3
No sé mucho sobre nscd, excepto que a menudo causaba problemas con las búsquedas de DNS que siempre lo deshabilitaba (o al menos parte de las búsquedas de host). Nscd le permite establecer los valores de tiempo de vida y sé que DNS espera "poseer" esos valores y que todos los solucionadores los respeten. Puede terminar con resultados extraños si no se respetan los TTL en DNS. Mi recomendación es no utilizar nscd para almacenar en caché DNS. Parece que ya tiene un servidor de nombres de caché ejecutándose en su caja local, por lo que no es necesario almacenar en caché las búsquedas de DNS dos veces.
Respuesta4
Si hay almacenamiento en caché de DNS en Hell, lo proporciona nscd. No. Usar. Él.
Sólo para ser diferente:pdnsdes en realidad un muy buen reemplazo. O unscd (usado por defecto al menos en openSUSE).