收藏本站|设为首页

您现在的位置: 首页 > 新闻中心 > 建站经验 > 详细内容

使用国外DNS造成国内网站访谒慢的解决体例

2012-09-11 10:47 来源: 卓杰科技 www.zhuojie.cc [ ]

五、我不是 Linux 用户怎么办?

即可。Ubuntu 12.04 及往后的用户,可能需要对 resolv.conf 做一些四肢行为,具体参考这里。如不美观不愿意改的话,可能每次联网都要手工改一次 resolv.conf,或者在 NetworkManager 中手工指定 127.0.0.1 为 DNS。DHCP 用户的话,可以经由过程 /etc/resolv.conf.head 之类的文件来保证 127.0.0.1 在第一行。

你是否是一个使用国外 DNS 的中国网平易近?你是否发现使用国外 DNS 之后访谒某些国内网站奇慢无比?这不是 DNS 慢,而是电信到联通的线路太慢。如不美观你愿意小小地折腾一下,那么跟年夜本文,你可以解决这一问题。

一、为什么要用国外 DNS

因为众所周知的问题,国内 DNS 处事器解析国外网站会遭到 DNS 污染和投毒,使之解析到完全虚构的 IP 上,造成「开了 VPN 也没法访谒 Twitter 或 Facebook」等问题。以下是一个例子: 

参考这个问题,去配个 BIND9 的 Windows 版本试试吧。或者可以装个 dnsmasq 的 Windows 庖代品。

199.59.148.82

199.59.148.10

;; 使用 8.8.8.8 解析 www.zhuojie.cc 耗时 79 毫秒

wzyboy@vermilion:~$ dig wzyboy.im

我是在「慢」上加了引号的,因为这其实不是国外 DNS 慢,而是你要访谒的网站的 CDN 分配错误,慢。因为国内各年夜运营商之间的主干线路带宽太窄,所以导致「最远的距离是年夜电信到网联通」,电信用户访谒联通的处事器很是慢,联通用户访谒电信的处事器也很是慢,相信这都是巨匠有体验的。是以,国内不少网站都用了双线 CDN,在电信的机房里放点处事器,再在联通的机房里放点处事器。运用智能 DNS 手艺,当你访谒网站的时辰,DNS 按照你的来历 IP 判定你是电信用户仍是联通用户,然后再返回响应的 IP 地址,这样你会访谒到就近的、同运营商的处事器,访谒速度就年夜年夜晋升了。而如不美观使用国外的 DNS 的话,你的发芽来历来自国外,国内网站的 DNS 无法判定你是电信用户仍是联通用户,就胡乱分配你一个处事器。好比我是一个江苏电信的用户,但当我访谒淘宝网的时辰,淘宝的 DNS 把我解析到青岛联通的处事器上,奇慢无比。所以:

wzyboy@vermilion:~$ dig twitter.com @221.228.255.1 +short

当然了,如不美观硬要斗劲发芽的话,倒也是会慢很少一点的: 

 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 上网导航」页面……

良多人认为 Google Public DNS, OpenDNS 等「慢」,首要不是发芽慢,而是电信到联通之间太慢。

;; Query time: 79 msec

;; MSG SIZE rcvd: 143

;; 使用中国电信 221.228.255.1 处事器解析 www.google.com 耗时 6 毫秒

;; SERVER: 221.228.255.1#53(221.228.255.1)

;; WHEN: Thu Sep 6 17:20:44 2012

别看 6 毫秒和 79 毫秒分歧很年夜的样子,可是人类是很难感受出来的,而且,这只是发芽时刻,与现实的访谒速度无关,就算你一成天都在刷 www.google.com,也就每小时慢个几百毫秒的样子,根柢感受不出来。真正慢的原因,仍是上文所说的「电信到联通」的问题。

wzyboy@vermilion:~$ dig twitter.com @8.8.8.8 +short

此刻问题明晰了:使用国外 DNS 之后,发芽来历酿成国外的 IP,使用了 CDN 加速的国内网站的 DNS 会无法判定你的来历,胡乱给你分配一个地址,如不美观不是统一个运营商的,访谒速度便会很慢。

那解决方案也就呈现了:让国内网站的 DNS 处事器知晓你的来历,年夜而给你分拍正确的处事器 IP。于是 Google 起草了一个专有和谈,叫 EDNS,在 DNS 发芽请求中包含源地址,这样淘宝就知道发芽来历不是 Google 处事器,而是电信的某用户,就不会把你扔到联通处事器上了 。听起来很夸姣是吧?不外这个和谈不开放,今朝几乎没有人用,所以,问题涓滴没有解决。

新思绪是:访谒那些会因 CDN 加速解析错误而极其迟缓国内网站的时辰,直接向国内的处事器发送请求,让 DNS 知晓你的来历,给你分配个正确的 IP。访谒其他网站的时辰,再经由过程国外的 DNS 发芽。

测试 dnsmasq

四、安装及设置装备摆设 dnsmasq

安装 dnsmasq

dnsmasq 是一个很是轻量的 DNS 缓存及 DHCP 处事器,在我的 Arch Linux 上只占用了 368 KiB 的磁盘空间,对比功能极其强年夜的 BIND9 来说小多了(BIND9 的安装体积是 6.23 MiB)。不光是体积小,它的功能也很专一,设置装备摆设起来也是十分便利的,五分钟就可以搞定。

设置装备摆设 dnsmasq

dnsmasq 的各参数可以经由过程 man dnsmasq 查看,设置装备摆设文件中也有良多清楚了然的注释。默认的设置装备摆设文件位于 /etc/dnsmasq.conf,打开它,可以更改这际啦所: 

;; MSG SIZE rcvd: 54

server=8.8.4.4

server=/taobao.com/114.114.114.114

199.59.149.230

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 处事器解析。

wzyboy@vermilion:~$ dig www.taobao.com @8.8.8.8 +short

scorpio.danuoyi.tbcache.com.

119.167.195.251 → 这是淘宝的青岛联通的处事器,我用江苏电信连奇慢无比

119.167.195.241 → 这也是青岛联通

wzyboy@vermilion:~$ dig www.taobao.com @127.0.0.1 +short

www.gslb.taobao.com.danuoyi.tbcache.com.

no-resolv

二、为什么使用国外 DNS 会「慢」

测试一下: 

三、问题的解决思绪

scorpio.danuoyi.tbcache.com.

222.186.49.251 → 解析到常州电信了,快!

61.155.221.241 → 这是上海电信

wzyboy@vermilion:~$ dig twitter.com @127.0.0.1 +short

199.59.150.7 → Twitter 仍是用 8.8.8.8 解析的,所以解析出来是未经污染的正确地址

199.59.148.82

no-poll

效不美观很较着,这时可以把当地的 DNS 设为 127.0.0.1 了。年夜部门 Linux 用户直接更改 /etc/resolv.conf 的内容为

nameserver 127.0.0.1

www.gslb.taobao.com.danuoyi.tbcache.com.

这样设置装备摆设完之后,如不美观你没有在 dnsmasq 里限制发芽 IP,那么你的家人、伴侣们也是可以把你的电脑作为 DNS 处事器的。如不美观你当地是 VPN 全局翻墙的话,需要把钠揭捉择的国内 DNS 处事器经由过程路由表插手直连典型围内。当然,已经使用 chnroutes 的就不需要了。

六、尾声

;; Query time: 307 msec

如不美观你是 Windows 用户

如不美观你是 Mac OS X 用户

Mac OS X 的 resolver 斗劲怪异,似乎有斗劲简陋的解决体例,参考这篇文章。此外,OS X 似乎也是自带 named 的,所以……

;; Query time: 6 msec

填补:其拭魅这样当地 DNS 缓存处事器,还有这样的益处: 

其实还有更通用的体例

;; WHEN: Thu Sep 6 17:20:37 2012

这样分流操作之后,默认所有域名都经由过程 8.8.8.8 和 8.8.4.4 解析,可是所有的 .cn 域名以及淘宝的域名经由过程 114.114.114.114 这台国内 DNS 处事器解析。当然,除了淘宝网,你也可以添加更多的域名,按照自己的快乐喜爱,把经常访谒,可是使用国外处事器解析到很慢的处事器上的网站域名都可以添加进去,不外:如不美观这个网站自己就只能一台处事器,没有 CDN 加速,那再怎么添加也是无济于事的,得让网站打点员去买双线机房……此外,在写这篇文章的时辰,发现 @felixonmars 维护了一张国内常用的、可是经由过程国外 DNS 会解析错误的网站域名的列表,据他所说,这是他在公司里部署这一套工具之后,公司里其他人报怨「慢」的网站域名收集来的,应该囊括了绝年夜年夜都有此问题的网站,值得依靠,接待选用。如不美观感受直接把这么多域名加在 /etc/dnsmasq.conf 里不爽的话,可以在 dnsmasq.conf 里把 conf-dir=/etc/dnsmasq.d 这一行打消注释,然后把在 /etc/dnsmasq.d 里弄点列表。好比我就是把 @felixonmars 维护的列表放在 /etc/dnsmasq.d/china.conf 里。

祝列位读者折腾成功,上网愉悦。

;< <> > DiG 9.9.1-P2 < <> > wzyboy.im

;; global options: +cmd

;wzyboy.im. IN A

wzyboy.im. 103 IN A 198.244.51.13

;; MSG SIZE rcvd: 284

93.46.8.89

;; SERVER: 8.8.8.8#53(8.8.8.8)

设置装备摆设好之后,保留,Ubuntu 可用 sudo service dnsmasq restart,Arch Linux 可用 sudo rc.d restart dnsmasq 重启 dnsmasq。如不美观没有错误的话,这时当地的 dnsmasq 已经跑起来了。

;; SERVER: 127.0.0.1#53(127.0.0.1)

听起来很简单的样子,实现起来也不难:用 dnsmasq 在当地搭个 DNS 缓存处事器,划定哪些域名用哪个处事器查就好了。

;; WHEN: Thu Sep 6 21:32:07 2012

wzyboy@vermilion:~$ dig wzyboy.im

;; global options: +cmd

风闻过 VirtualBox 吗?开源、免费、强年夜的虚拟机软件。可以装个最设置装备摆设很是低下的虚拟机,好比 32 MiB 内存甚至 16 MiB 内存的虚拟机(要知道 64M 内存的 Linux 已经可以跑 WordPress 这庞然年夜物了),装个最简单的小 Linux,好比只有 37M 的 Ubuntu Core,然后装上依靠包几乎没有的 dnsmasq,再把 Windows / OS X 的 DNS 设为虚拟机的 IP 地址,于是便可以用了。在当今内存动辄 4 GiB 的情形下,拿 16MiB 内存出来换个更愉快的上网体验,仍是很不错的。

;wzyboy.im. IN A

wzyboy.im. 95 IN A 198.244.51.13

;; Query time: 2 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;< <> > DiG 9.9.1-P2< <> > wzyboy.im

;; WHEN: Thu Sep 6 21:32:15 2012

Ubuntu 12.04 及之后的版本应该自带了 dnsmasq。如不美观没有,可以使用 sudo apt-get install dnsmasq 安装。Arch Linux 直接 sudo pacman -S dnsmasq 即可。我的标识表记标帜本电脑需要给手机 DHCP 及 IP 转发用,是以早就安装了 dnsmasq,可是直到今天才想起这媚暌姑它……

199.59.149.230

server=8.8.8.8

;; MSG SIZE rcvd: 43

 看出来了吧?