关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

用国外DNS造成国内访问延迟怎么办?

发布时间:2021-03-25 21:52:53

你是否是一个企业使用一些国外 DNS 的网民?你是否能够发现学生使用以及国外 DNS 之后进行访问某些国内旅游网站奇慢无比?这不是 DNS 慢,而是电信到联通的线路太慢。如果你愿意小小地折腾一下,那么我们跟随本文,你可以有效解决中国这一社会问题。

分析外国网站的国内 DNS

首先,为什么要使用外国DNS

由于众所周知的问题,分析外国网站的国内 DNS 服务器受到 DNS 的污染和毒害,导致诸如“打开 VPN 和无法访问 Twitter 或 Facebook“等问题。下面是一个例子:

WZYBOY@VERMILION: ~ twitter.com@8.8.8.8 short

199.59.148.82

199.59.149.230

199.59.148.10

Wzyball@ cinnabar: ~ $digtwitter.com@221.228.255.1+Short

93.46.8.89

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 等等“慢” ,主要不是因为调查速度慢,而是因为电信和连接之间的速度太慢。

当然,如果坚持比较查询,会慢一点:

使用8.8.8.8解析www.google.com需要79毫秒

;; Query time: 79 msec

;;服务器: 8.8.8.8#53 (8.8.8.8)

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

;; MSG SIZE rcvd: 143

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

;; Query time: 6 msec

;;服务器:221.228.255.1/53(221.228.255.1)

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

;; MSG SIZE rcvd: 284

别看6毫秒和79毫秒的区别,但是人类很难感受到。而且只是查询时间,和实际访问速度无关。即使你一整天都在刷www.google.com,它每小时也会慢几百毫秒,你根本感觉不到。慢的真正原因是上面说的“电信到联通”的问题。

三、问题的解决思路

现在社会问题进行明确了:使用一些国外 DNS 之后,查询数据来源变成国外的 IP,使用了 CDN 加速的国内企业网站的 DNS 会无法通过判断你的来源,胡乱给你分配作为一个公司地址,如果我们不是同一个运营商的,访问中国速度便会很慢。

然后有一个解决方案:让国内网站的DNS服务器知道您的来源,并为您分配正确的服务器IP。

新的想法是,在访问由于 CDN 加速分辨率错误而速度极慢的国内站点时,直接向国内服务器发送请求,让 DNS 知道您来自哪里,并向您分配正确的 IP。访问其他网站时,通过国外的 DNS 查询。

这听起来很简单,而且不难实现:使用 dnsmasq 在本地设置 DNS 缓存服务器,指定要检查哪个服务器的域名。

安装和配置 dnsmasq

安装 dnsmasq

Dnsmasq是一个非常轻量级的DNS缓存和DHCP服务器,在我的Arch Linux上只占用368 KiB的磁盘空间,比功能极其强大的BIND9(BIND9的安装量为6.23 MiB)小很多。不仅体积小,而且功能也很具体,配置也很方便,五分钟就能搞定。

Ubuntu 12.04 及之后的版本我们应该自带了 dnsmasq。如果企业没有,可以通过使用 sudo apt-get install dnsmasq 安装。Arch Linux 直接 sudo pacman -S dnsmasq 即可。我的笔记本或者电脑需要给学生手机 DHCP 及 IP 转发用,因此中国早就安装了 dnsmasq,但是我国直到自己今天才想起一个这么设计用它……

配置 dnsmasq

Dnsmasq的参数可以通过man dnsmasq查看,配置文件中有很多清晰的注释。

no-resolv

no-poll

server=8.8.8.8

server=8.8.4.4

server=/cn/114.114.114.114

Server / Taobao .com / 114.114.114

server=/taobaocdn.com/114.114.114.114

Server = tbcache.com/114.114.114.114

The server is tdimg.com/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.8.4.4进行解析,但.cn域名和淘宝域名均通过国内DNS服务器114.114.114.114进行解析。

配置好之后,保存,Ubuntu 可用 sudo service dnsmasq restart,Arch Linux 可用 sudo rc.d restart dnsmasq 重启 dnsmasq。如果我们没有一个错误问题的话,这时中国本地的 dnsmasq 已经跑起来了。

测试 dnsmasq

测试一下:

Wzyboy @ scarlet: ~ $ dig www.taobao.com @ 8.8.8.8+short

Www.gslb.taobao. COM danuoyi.tbcache. com.

scorpio.danuoyi.tbcache.com。

119.167.195.251 → 这是一个淘宝的青岛中国联通的服务器,我用江苏大学电信连奇慢无比

119.167.195.241→这也是青岛联通

Wzyball@ cinnabar: ~ $digwww.taobao.com@127.0.0.1+Short

Www.gslb.taobao. COM danuoyi.tbcache. com.

scorpio.danuoyi.tbcache.com。

222.186.49.251→解析常州电信,快!

61.155.221.241 → 这是中国上海国际电信

WZYBOY@VERMILION: ~ Dig twitter.com@localhost

199.59.150.7 → Twitter 仍用 8.8.8.8 来解析, 所以解析是无可争议的正确地址

199.59.148.82

199.59.149.230

其结果是,您现在可以将本地 dns 设置为 localhost。大多数 linux 用户更改/etc/resolv。直接。内容

nameserver 127.0.0.1

就是这样。Ubuntu 12.04及以后版本的用户可能需要解析 v. conf 来做一些特定的引用。如果你不愿意改变它,你可能不得不手动更改它每次你连接到网络。Dns,或在网络管理器中手动指定 localhost 为 dns。对于 dhcp 用户,可以使用/etc/resolv。自信。确保本地主机在第一线。

这样配置后,如果不限制dnsmasq中的查询IP,那么家人朋友也可以把你的电脑作为DNS服务器使用。如果你的本地VPN越墙了,你需要通过路由表把你选择的国内DNS服务器加入到直连范围。当然,那些已经用过chnroutes的就没必要了。

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

如果您是Windows用户

请参阅此问题,并尝试使用带有 BIND9 的 Windows 版本。或者您可以安装一个窗口替换为dnsmasq。

如果你是苹果OS X的用户,

Mac os x 的解析器是独一无二的,而且似乎有一个相当粗糙的解决方案,请参阅这篇文章。另外,os x 似乎有一个名字。.

其实还有更通用的方法

听说过VirtualBox吗?开源、免费、功能强大的虚拟机软件。你可以安装一个配置最低的虚拟机,比如32 MiB内存甚至16 MiB内存的虚拟机(你要知道64 MB内存的Linux已经可以运行WordPress了),安装最简单的小Linux,比如只有37M的Ubuntu Core,然后安装几乎没有依赖包的dnsmasq,然后把Windows/OS X的DNS设置为虚拟机的IP地址,就可以使用了。在今天4 GiB的内存情况下,使用16MiB的内存来获得更舒适的互联网体验是很好的。

六、尾声

祝各位学生读者折腾成功,上网可以愉悦。

添加:事实上,此本地DNS缓存服务器还具有以下优点:

wzyboy@vermilion: -$digging wzyboy.im

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

;; global options: +cmd

;wzyboy.im. IN A

wzyboy.im. 103 IN A 198.244.51.13

;; Query time: 307 msec

;;服务器: 127.0.0.1#53 (127.0.0.1)

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

;; MSG SIZE rcvd: 54

wzyboy@vermilion: -$digging wzyboy.im

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

;; global options: +cmd

;wzyboy.im. IN A

wzyboy.im. 95 IN A 198.244.51.13

;; Query time: 2 msec

;;服务器: 127.0.0.1#53 (127.0.0.1)

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

;; MSG SIZE rcvd: 43

看出来了吧?



/template/Home/Zkeys/PC/Static