[摘要] 使用了unbound做的DNS缓存,DNS的查询性能显著提高,比bind要强很多。但是由于它本身会cache住前面DNS查询结果,所以客户端如果使用了unbound的DNS的话,DNS生效时间需要注意下,很可能会有延迟,所以有必要对unbound DNS清理缓存。
如下是我的实际中遇到的情况,由于使用了cloudflare,作为CDN加速,将之前再阿里云上的NS记录修改到了cloudflare上,据说是需要24小时才能生效,不过看了几个主要DNS服务器,过期时间还是可以接受的。
试过了几个公网DNS,比如8.8.8.8,180.76.76.76,119.29.29.29 ,114等等都已经很快切换到了新的IP地址
#dig www.sudops.com @114.114.114.114 ;; QUESTION SECTION: ;www.sudops.com. IN A ;; ANSWER SECTION: www.sudops.com. 597 IN A xx.xx.xxx.xxx www.sudops.com. 597 IN A xx.xx.xxx.yyy
但是通过内网unbound的DNS查询,一直没有变过来(这里10.10.10.10是我内网的DNS服务器)
#dig www.sudops.com @10.10.10.10 ;; QUESTION SECTION: ;www.sudops.com. IN A ;; ANSWER SECTION: www.sudops.com. 597 IN A yy.yy.yyy.yyy
dump一下unbound的cache,发现确实有缓存,而且还剩下8w多秒。。
# unbound-control dump_cache|grep sudops.com sudops.com. 89981 IN NS dns16.hichina.com. sudops.com. 89981 IN NS dns15.hichina.com. www.sudops.com. 459 IN A xx.xx.xxx.xxx msg www.sudops.com. IN A 33152 1 159 0 1 1 2 www.sudops.com. IN A 0 sudops.com. IN NS 0
于是可以使用如下的命令来清理unbound的缓存:
# unbound-control flush A sudops.com. cache ok # unbound-control flush A www.sudops.com. cache ok # unbound-control flush_zone botoex.com ok removed 0 rrsets, 0 messages and 0 key entries # unbound-control flush www.sudops.com ok # unbound-control flush_type name www.sudops.com aaaa ok
再查询一下,已经没有缓存了
# unbound-control dump_cache|grep sudops
dig查询已经是解析到新的IP地址了。
#dig www.sudops.com @10.10.10.10 ;; QUESTION SECTION: ;www.sudops.com. IN A ;; ANSWER SECTION: www.sudops.com. 597 IN A xx.xx.xxx.xxx www.sudops.com. 597 IN A xx.xx.xxx.yyy
看看unbound现在的缓存结果:
# unbound-control dump_cache|grep sudops.com www.sudops.com. 32 IN A xx.xx.xxx.xxx www.sudops.com. 32 IN A xx.xx.xxx.yyy sudops.com. 27 IN A xx.xx.xxx.xxx sudops.com. 27 IN A xx.xx.xxx.yyy msg www.sudops.com. IN A 33152 1 32 0 1 0 0 www.sudops.com. IN A 0 msg sudops.com. IN A 33152 1 27 0 1 0 0 sudops.com. IN A 0
看来DNS缓存清理生效了,unbound这个轻量级的DNS使用起来还是非常方便的,DNS转发、DNS劫持(测试使用)等等都比较适合。