我的 BIND9 目前运行良好,但是有没有办法设置缓存名称的过期时间/日期?如果可以,该怎么做?
提前谢谢大家
答案1
每个 DNS 记录已经包含生存时间(TTL)值,指定可以缓存的秒数,以及SOA
该区域的记录包含负面结果的 TTL。
每当从非区域权威服务器的 DNS 转发结果时,TTL 就会减少结果已被缓存的时间。
例如,当我解决google.de
:
google.de. 300 IN A 216.58.205.227
如果我十秒后再做一次:
google.de. 290 IN A 216.58.205.227
该记录的原始 TTL 很可能是 300,并且我的提供商的 DNS 在我第一次询问后对其进行了缓存,并在第二次迭代时将缓存的结果返回给我。
因此,生命周期是按记录进行跟踪的。
当您运行自己的 DNS 服务器时,它有两种方式来解析名称:使用转发器或进行分层查找。
当您使用转发器时,您的服务器只需查询另一台缓存服务器,如果另一台服务器已有该记录的副本,则将获得具有缩短 TTL 的缓存结果。无法知道该缓存条目的年龄,只能知道它何时到期。
当您自己进行递归查找时,几乎可以保证获得最新的结果,但代价是必须对途中的每个路径组件进行查找。如果您的链接的往返时间很长(GPRS 或卫星链接),则应用程序的原始请求很可能会在您的服务器有机会获取结果之前超时。
max-cache-ttl
无论哪种情况,您都可以使用 BIND 中的和设置来限制服务器上缓存记录的 TTL max-ncache-ttl
。
在转发器设置中,这不会有太大帮助,因为它所做的就是让您的服务器再次查询转发器,如果转发器仍然有效,它将使用缓存值进行回复。
在递归设置中,这将缩短服务器缓存结果的时间 — 但缓存所有级别的所有结果。因此,在超时过后,它将重新执行完整的递归查询。
通常,DNS 管理员会非常小心地为记录设置足够的 TTL,例如,我将在用于查找家庭网络的记录上使用 60 秒,而我的服务器的 TTL 为一天。当我计划移动服务器时,我会在前一天将其 TTL 缩短为一小时,并在我前往数据中心前缩短为五分钟,这样您就可以从缓存中获得合理的 TTL。事后猜测我只会降低您的性能,因为您的 DNS 会不必要地刷新条目。如果某些记录经常过期,那是对方的配置问题,而不是您这边的问题。
总结:你可以,但你不应该。
答案2
过期时间称为“TTL”或生存时间。您通常在配置文件中设置此变量,/etc/bind/db.local
或者在您使用的任何配置文件中设置。
TTL 以秒为单位,因此请将其设置为较低的值,例如 60x60 = 3600(一小时)
sudo -e /etc/bind/db.local
设置 ttl:
$TTL 3600
并重新启动绑定。
有关详细信息,请参阅:
和
https://help.ubuntu.com/10.04/serverguide/dns-configuration.html