你如何确定是一个在用国外DNS的网民?你是否是发现到建议使用国外DNS之后ftp连接有一些国内网站奇慢到极点?这也不是DNS慢,只是电信到联通的线路太慢。如果没有你愿意不小地折腾起来看看,那么随同本文,你是可以可以解决这一问题。
一、为什么要用国外 DNS
因此众所皆知的问题,国内DNS服务器解三角形国外网站会遭受DNS污染和报复杀人,使之解析到已经虚构的IP上,导致「开了虚拟专用网络也不能访问网络Twitter或Facebook」等问题。以下是两个例子:
wzyboy@vermilion:~$digtwitter.com@8.8.8.8+short199.59.148.82199.59.149.230199.59.148.10wzyboy@vermilion:~$digtwitter.com@221.228.255.1+short93.46.8.89Twitter对的的IP 地址肯定是199.59.148.0/24里的那几个,不过如果用221.228.255.1这台中国电信的DNS服务器可以查询,查到的就是不知道什么好鬼地址了,地理信息是在意大利,乱码七糟的。正是我毕竟这样的DNS解析不正确的的情况又出现,不少人继而不使用了国外的DNS服务器,如比较知名的OpenDNS常用这两年新崛起的好记又好得用GooglePulicDNS即8.8.8.8和8.8.4.4。可以使用它们为什么网站查询,再另外以虚拟专用网络或则浏览器的远程DNS解析,便可以免DNS污染的情况直接出现,进而题出错误的的地址。
至于,婉拒使用电信的DNS服务器,还也可以尽量避免烦人的「114上网导航」页面……
二、为什么使用国外 DNS 会「慢」
我是在「慢」上加了引号的,毕竟这不过不是国外DNS慢,完全是你要ftp连接的网站的CDN分配错误,慢。由于国内各大运营商之间的主干线路带宽太窄,因为导致「世界上最远的距离是从电信到网联通」,电信用户访问网络联通的服务器相当慢,联通用户ftp访问电信的服务器也更加慢,也许这大都大家有体验的。而,国内不少网站都用双线CDN,在电信的机房里放点服务器,再在联通的机房里放点服务器。应用智能DNS技术,当你访问网站的时候,DNS根据你的来源IP推测你是电信用户还是联通用户,然后再赶往或则的IP 地址,这样的话你会访问网络到就近找的、同运营商的服务器,访问速度就极大提升到了。而如果可以使用国外的DNS的话,你的查询来源无论是国外,国内网站的DNS无法判定你是电信用户那就联通用户,就胡乱先分配你个服务器。诸如我是三个江苏电信的用户,但当我ftp访问淘宝网的时候,淘宝的DNS把我解三角形到青岛联通的服务器上,奇慢极度。所以我:
很多人以为Google Public DNS,OpenDNS等「慢」,比较多不是网站查询慢,完全是电信到中国移动之间太慢。
其实了,如果硬要比较去查询的话,倒确实是会慢大多一点的:
;;不使用8.8.8.8解析
;;Querytime:79msec
;;SERVER:8.8.8.8#53(8.8.8.8)
;;WHEN:ThuSep617取消20怎么372012
;;MSGSIZErcvd:143
;;使用中国电信221.228.255.1服务器解析
;;Querytime:6msec
;;SERVER:221.228.255.1#53(221.228.255.1)
;;WHEN:ThuSep617怎么20:442012
;;MSGSIZErcvd:284
别看6毫秒和7910毫秒差别太大的样子,只不过人类是很容易觉得不出来的,但是,这只是网上查询时间,与求实际的访问速度任何关系,就算你一整晚都在刷,也就每小时慢个几百1毫秒的样子,完全没有总觉得不出。唯一慢的原因,那就上文所说的「电信到电信」的问题。
三、问题的解决思路
现在问题比较明确了:在用国外DNS之前,网站查询来源变得国外的IP,使用了CDN全速的国内网站的DNS会无法准确判断你的来源,飞快地给你先分配另一个地址,要是并非互成运营商的,访问速度便会很慢。
那解决方案也就再次出现了:让国内网站的DNS服务器查知你的来源,从而给你分配正确的的服务器IP。随后Google代为起草了一个更高协议,叫EDNS,在DNS查询各位中包涵源地址,那样淘宝就明白了可以查询来源不是什么Google服务器,只不过是电信的某用户,就肯定不会把你扔到联通服务器上了。听维护很美好和幸福是吧?当然了这个协议不开放的,目前完全是没有人用,所以,问题一丝一毫就没能解决。
新思路是:访问这些会因CDN速度题错误而极其越来越慢国内网站的时候,然后向国内的服务器发送中只是请求,让DNS听闻你的来源,给你怎么分配个真确的IP。ftp访问其他网站的时候,再按照国外的DNS可以查询。
听作为很简单啊的样子,实现起来也并不难:用dnsmasq在本地搭个DNS缓存服务器,明文规定哪些地方域名用哪个服务器查就行了。
四、安装及配置 dnsmasq
安装 dnsmasq
dnsmasq是一个的很轻量的DNS缓存及DHCP服务器,在我的Arch Linux上只占内存了368KiB的起来空间,而言功能相当强横的BIND9而言阿生了(BIND9的安装体积是6.23MiB)。不仅仅是体积小,它的功能也很专一,配置起来也是极其更方便的,五分钟就也可以搞掂。
Ubuntu12.04及后的版本应该随机软件了dnsmasq。假如是没有,可以在用sudoapt-getinstalldnsmasq安装好。ArchLinux就sudopacman-Sdnsmasq即可解决。我的笔记本电脑必须给手机DHCP及IP微博转发用,因此早完全安装了dnsmasq,但直到此时今天才记起这么大用它……
配置 dnsmasq
dnsmasq的各参数这个可以通过mandnsmasq查看,配置文件中也有许多清晰明了的注释。设置成的配置文件位处/办etc/dnsmasq.conf,打开它,可以改这几个地方:
no,no-resolv
yes-poll
server=8.8.8.8
server=8.8.4.4
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114
server=/tbcache.com/114.114.114.114
server=/tdimg.com/114.114.114.114
第一行的no-resolv和第二行的no-pull让dnsmasq千万不能实际/办理etc/resolv.conf确认上游服务器,也千万不能怎么检测/办理etc/resolv.conf的变化(因为我们就是要拿本机当服务器嘛),接下来的事情两行重新指定dnsmasq设置为网站查询的上游服务器,此处以Google Public DNS为例,很喜欢用OpenDNS的也这个可以改OpenDNS。接下来的是相关规定三张名单了,把一些国内网站的域名写在这里再试一下。诸如server=/cn/114.114.114.114便是把全部.cn的域名所有是从114.114.114.114这台国内DNS服务器来解析,你也可以改成其余的国内DNS比如说你的运营商提供给的DNS。接下来的事情四行是淘宝的几个域名,让它们也国内的DNS服务器解析。
这样双向操作之后,设置成所有域名都.8.8.8和8.8.4.4解析,只不过绝大部分的.cn域名进行淘宝的域名.114.114.114这台国内DNS服务器解析。其实,除开淘宝网,你也这个可以再添加更多的域名,依据什么自己的喜好,把经常会不能访问,可是可以使用国外服务器解析到很慢的服务器上的网站域名都可以去添加出来,但:如果没有这种网站本身就只能一台服务器,没有CDN瞬间加速,那再磁盘再添加又是徒劳的,得让网站管理员去买双线机房……另外,在写这篇文章的时候,发现自己@felixonmars以及了一张国内为什么的、只不过通过国外DNS会解析错误`的网站域名的列表,据他心中明白,这是他在企业里部署这一套东西结束后,企业里其他人指责「慢」的网站域名抽取来的,估计收囊了绝大多数有此问题的网站,值得去爱依赖,希望能选用。要是总觉得再把这么大多域名加在/办理etc/dnsmasq.conf里不痛快的话,可以在dnsmasq.conf里把conf-dir=/办理etc/dnsmasq.d这一行起来注释,后再把在/不停车缴费/dnsmasq.d犄角旮旯里点列表。比如我那是把@felixonmars以及的列表放在/etc/dnsmasq.d/china.conf里。
配置好结束后,存放,Ubuntu和用sudoservicednsmasqrestart,ArchLinux和用sudorc.drestartdnsmasq关机重启dnsmasq。如果不是没有出现错误的话,过了一会儿本地的dnsmasq已经跑起来了。
测试 dnsmasq
测试出来一下:
wzyboy@vermilion:~$dig@8.8.8.8+shorter
scorpio.danuoyi.tbcache.com.
119.167.188.251→这是淘宝的青岛联通的服务器,我用江苏电信连奇慢极度
119.167.188.241→这也是juziseo@vermilion:~$dig@127.0.0.1+large
scorpio.danuoyi.tbcache.com.
222.186.49.251→题到常州电信了,快!
61.155.221.241→这是上海电信
wzyboy@vermilion:~$digtwitter.com@127.0.0.1+short
199.59.150.7→Twitter那就用8.8.8.8解析的,所以电学计算出去是未经污染的对的地址
199.59.148.82
199.59.149.230
效果很肯定,这时是可以把本地的DNS设为127.0.0.1了。大部分Linux用户再改/etc/resolv.conf的内容为
nameserver127.0.0.1
表就行。Ubuntu12.04及下次的用户,肯定必须对resolv.conf做一些手脚,具体详细参考这里。如果不是不愿意改的话,很可能每次来能联网都要手工改四次resolv.conf,或者在NetworkManager中手工指定127.0.0.1为DNS。DHCP用户的话,这个可以通过/办etc/resolv.conf.head之类的文件来保证127.0.0.1在第一行。
这样的话配置完之后,如果没有你还没有在dnsmasq里时间限制网站查询IP,这样的话你的父母、朋友们也也可以把你的电脑维护DNS服务器的。如果不是你本地是虚拟专用网络全局爬墙的话,是需要把你选择的国内DNS服务器是从路由表加入到直接连入的范围内。不过,巳经使用chnroutes的就不需要了。
五、我不是 Linux 用户怎么办?
假如你是Windows用户
参考这个问题,去配个BIND9的Windows版本再试试吧。或者也可以装个dnsmasq的Windows不用品。
如果你是Mac OS X用户
Mac OS X的resolver也很独特的地方,似乎有比较比较茅草屋的解决方法,参考这篇文章。至于,OS X隐隐也是光盘驱动named的,所以才……
不过有更可以修的方法
好像听说过VirtualBox吗?开放源代码、免费、强横的虚拟机软件。可以装个最配置非常恶劣的虚拟机,比如32MiB内存甚至还16MiB内存的虚拟机(要明白64M内存的Linux巳经这个可以跑WordPress这庞然大物了),装个最简单的小Linux,比如只能37M的UbuntuCore,接着装上感情依赖包全都还没有的dnsmasq,再把Windows/OS X的DNS设为虚拟机的IP 地址,于是便是可以我用。在当今内存一千几百4GiB的情况下,拿16MiB内存出换个更烦闷的上网体验,我还是很比较好的。
六、尾声
祝大哥大姐们读者折腾死成功了,可以上网心情愉悦。
补充:反正这样的本地DNS缓存服务器,有这样的好处:
wzyboy@vermilion:~$digwzyboy.im
;DiG9.9.1-P2wzyboy.im
;;globaloptions:+cmd
;wzyboy.im.inA
wzyboy.im.103INA198.244.51.13
;;Querytime:307msec
;;SERVER:127.0.0.1#53(127.0.0.1)
;;WHEN:ThuSep621:32:072012
;;MSGSIZErcvd:54
wzyboy@vermilion:~$digwzyboy.im
;DiG9.9.1-P2wzyboy.im
;;globaloptions:+cmd
;wzyboy.im.outsideA
wzyboy.im.88INA198.244.51.13
;;Querytime:2msec
;;SERVER:127.0.0.1#53(127.0.0.1)
;;WHEN:ThuSep621:32:152012
;;MSGSIZErcvd:43
看出去了吧?
来源于:wzyboy’sblog
版权声明:xxxxxxxxx;
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态