我已经在公司中配置了许多服务器与 NSCD 配合使用,以便对主机进行本地缓存,并降低本地 DNS 服务器的流量并在可能时返回更快的 DNS 响应。
我已经nscd
像这样配置并且仅将其用于缓存主机:
logfile /var/log/nscd.log
debug-level 9
server-user nscd
paranoia no
enable-cache hosts yes
#positive-time-to-live hosts 3600
positive-time-to-live hosts 86400
negative-time-to-live hosts 20
suggested-size hosts 211
check-files hosts yes
persistent hosts yes
shared hosts yes
#max-db-size hosts 67108864
max-db-size hosts 536870912
您可以看到我已将 Positive-TTL 配置为 24 小时。
我的问题是,使用的是哪个 TTL?是在此处配置的 TTL 还是在 DNS 中为每个域配置的 TTL?
我猜测较短的 TTL 会发生,但我可能错了,您能就此事解释一下吗?
答案1
需要注意的是,它nscd
充当了解析器系统的缓存,并非专门用于 DNS 查找,而是用于所有名称查找方式。
因此,nscd
在处理 DNS TTL 方面一直存在问题。
版本nscd
2004-09-15 之前的glibc无法正确处理 DNS TTL。
当这个问题解决后,glibcnscd
仍然只处理 DNS TTL如果应用程序调用getaddrinfo
;如果应用程序调用过时的gethostbyname
功能,DNS TTL值仍会被忽略。
据我了解,glibc 维护者最终屈服于 glibc 2.8(2008)并使所有名称查找方法的行为保持一致。无论查找如何启动,当前版本都应使用 DNS TTL。
也可以看看:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=335476
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=669304
https://sourceware.org/ml/libc-alpha/2008-04/msg00050.html
https://sourceware.org/bugzilla/show_bug.cgi?id=4428
http://udrepper.livejournal.com/16362.html