用PDNSD + Google DNS 获得高速正确的dns解析
摘dnsmasq那一篇的一段: 至于DNS在瓷器国被污染的这回事,不用多解释了,正确的DNS解析对于使用squid透明代理进行翻墙极为重要,因为在squid在收到http请求前,域名已经在客户端先解析了。
因为TCP方式的查询DNS,不能被GFW污染!
我们来做一个实验:
首先,用 udp方式查询google dns:
再强制用tcp方式查询google dns
看出差别了么, 用tcp方式得到的解析结果完全不同于udp方式的。可悲的是系统默认的dns访问都是用udp进行的。
本文要讲解如何利用pdnsd + google dns 做局域网高速并正确的dns解析。
上一篇讲了利用DnsMasq来搭建正确解析的DNS服务器,但是,你有没有发现,dnsmasq并没有起到加速的作用。。。 没过几分钟,dig一下试试,响应时间又特别长了,刚开始的0ms响应时间不见了,又回到几百个ms了,慢,卡又回来了。
为什么?
答案是DNS服务的TTL,下面举例:
注意到了么 twitter.com 后面跟了个数字30,这个数字的单位是秒,也就是说twitter.com域名的A记录再过30秒就过期了,30秒后你就必须再从twitter.com 的SOA(主域名解析服务器)去重新获得twitter.com的解析,dnsmasq发现过期后,就会向你境外的服务器,再去取一次DNS解析。注意, 这次解析的时间是几百毫秒。这就是为什么慢!!!
甚至国内ISP的CDN,也用了很低的TTL值,这就导致了用dnsmasq访问各种网站都极慢。
你不妨dig一下static.t.126.net,或者网易的 img cache什么的。
问题是ISP为什么要用这么低TTL值呢?
答案是负载均衡,CDN可以动态去调整每个服务器的访问量。
你应该猜到了,根据以上分析, 优化dns响应时间,有两个途径:
1. 降低访问远程DNS服务器的时间。
2. 提高TTL值。
途径一,可以通过访问google dns实现,google dns是目前我这里ping值最低的能正确解析域名的服务器。
途径二,用pdnsd实现。
为什么放弃dnsmasq,因为dnsmasq既不能用tcp方式访问远程dns服务器,又不能修改TTL。
任何一条理由,你都必须放弃dnsmasq.
pdnsd 配置如下
运行pdnsd,我们再试试dig twitter.com
看到了么 twitter.com后面的82504 这个数字,单位是秒,也就意味着一天之内都不用再去google dns查询了, pdnsd已经缓存了。
终于,我们期待的毫秒级的dns解析又回来了。
最后,以策万全,如果你有境外VPS,自己搭建域名解析服务器,以应对不知何时GFW干扰google dns tcp通信,是最佳的方式!
还是用 autossh 这个利器转发DNS数据包: 例如:
原文:http://bullshitlie.blogspot.com/2012/03/pdnsd-google-dns-dns.html
原来TTL和负载均衡有关系…..受教了,谢谢