Twitter 正确的 IP 地址应该是 199.59.148.0/24 里的那几个,但是如果用 221.228.255.1 这台中国电信的 DNS 服务器查询,查到的就是不知道什么鬼地址了,地理信息是在意大利,乱七八糟的。正是因为这样的 DNS 解析不正确的情况出现,不少人转而使用了国外的 DNS 服务器,如老牌的 OpenDNS 以及这几年新崛起的好记又好用的 Google Pulic DNS 即 8.8.8.8 和 8.8.4.4。使用它们进行查询,再配合以 VPN 或者浏览器的远程 DNS 解析,便可避免 DNS 污染的情况出现,从而解析出正确的地址。
此外,拒绝使用电信的 DNS 服务器,还可以避免烦人的「114 上网导航」页面…… 二、为什么使用国外 DNS 会「慢」
我是在「慢」上加了引号的,因为这其实不是国外 DNS 慢,而是你要访问的网站的 CDN 分配错误,慢。由于国内各大运营商之间的主干线路带宽太窄,所以导致「最远的距离是从电信到网联通」,电信用户访问联通的服务器非常慢,联通用户访问电信的服务器也非常慢,相信这都是大家有体验的。因此,国内不少网站都用了双线 CDN,在电信的机房里放点服务器,再在联通的机房里放点服务器。运用智能 DNS 技术,当你访问网站的时候,DNS 根据你的来源 IP 判断你是电信用户还是联通用户,然后再返回相应的 IP 地址,这样你会访问到就近的、同运营商的服务器,访问速度就大大提升了。而如果使用国外的 DNS 的话,你的查询来源来自国外,国内网站的 DNS 无法判断你是电信用户还是联通用户,就胡乱分配你一个服务器。比如我是一个江苏电信的用户,但当我访问淘宝网的时候,淘宝的 DNS 把我解析到青岛联通的服务器上,奇慢无比。所以: 很多人认为 Google Public DNS, OpenDNS 等「慢」,主要不是查询慢,而是电信到联通之间太慢。
当然了,如果硬要比较查询的话,倒也是会慢很少一点的:
效果很明显,这时可以把本地的 DNS 设为 127.0.0.1 了。大部分 Linux 用户直接更改 /etc/resolv.conf 的内容为
nameserver 127.0.0.1
即可。Ubuntu 12.04 及以后的用户,可能需要对 resolv.conf 做一些手脚,具体参考这里。如果不愿意改的话,可能每次联网都要手工改一次 resolv.conf,或者在 NetworkManager 中手工指定 127.0.0.1 为 DNS。DHCP 用户的话,可以通过 /etc/resolv.conf.head 之类的文件来保证 127.0.0.1 在第一行。
这样配置完之后,如果你没有在 dnsmasq 里限定查询 IP,那么你的家人、朋友们也是可以把你的电脑作为 DNS 服务器的。如果你本地是 VPN 全局翻墙的话,需要把你选择的国内 DNS 服务器通过路由表加入直连的范围内。当然,已经使用 chnroutes 的就不需要了。 五、我不是 Linux 用户怎么办? 如果你是 Windows 用户
参考这个问题,去配个 BIND9 的 Windows 版本试试吧。或者可以装个 dnsmasq 的 Windows 代替品。 如果你是 Mac OS X 用户
Mac OS X 的 resolver 比较独特,似乎有比较简陋的解决方法,参考这篇文章。另外,OS X 似乎也是自带 named 的,所以…… 其实还有更通用的方法
听说过 VirtualBox 吗?开源、免费、强大的虚拟机软件。可以装个最配置非常低下的虚拟机,比如 32 MiB 内存甚至 16 MiB 内存的虚拟机(要知道 64M 内存的 Linux 已经可以跑 WordPress 这庞然大物了),装个最简单的小 Linux,比如只有 37M 的 Ubuntu Core,然后装上依赖包几乎没有的 dnsmasq,再把 Windows / OS X 的 DNS 设为虚拟机的 IP 地址,于是便可以用了。在当今内存动辄 4 GiB 的情况下,拿 16MiB 内存出来换个更舒畅的上网体验,还是很不错的。 六、尾声
祝各位读者折腾成功,上网愉悦。
补充:其实这样本地 DNS 缓存服务器,还有这样的好处: