1. 前言
最近不知道怎么回事在chrome浏览器怎么都打不开,等了半天一直在转圈,慢慢加载出来一个头bar
2 thousand years later...头像出来了。
,于是我又抱着侥幸的心理想着再等等吧,最后还是告诉我无法访问……心态崩了啊
看了一下,原因就是访问
github.com
时间过长,导致ERR_TIMED_OUT
。我真的是很无奈,我首先确定我的网络状态没问题,绝对不是龟速,别的网站还都挺好,就是百度有时候搜索个东西加载半天不给我结果,我估计又是DNS的问题。
1.1 域名系统
先学习一下DNS的概念,==域名系统==(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS是Internet上解决网上机器命名的一种系统。就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另外一台主机时,必须首先获知其地址,TCP/IP中的IP地址是由四段以“.”分开的数字组成,记起来总是不如名字那么方便,所以,就采用了域名系统来管理名字和IP的对应关系。[1]
简单来说就是你要访问一个网址github.com
,你在地址栏输入了https://github.com/
,回车,然后浏览器就想去打开他的主页,但是去哪找github它的IP地址呢,浏览器先去在你的本地找到hosts文件,看看你这个小记事本里面有没有备注一下,如果有,就直接拿来用,没有的话就得通过询问DNS服务器了,如果它找了半天也没找到,就会问另一个DNS,这样层层询问,造成的后果就变成用户的等待时间,最后可能变成超时。运气好,拿到github的IP,然后就可以访问这个IP地址,从而打开github主页,但是打开的速度又是另外一回事了,可能被DNS污染,有些网站就是无法访问不了。
2. 解决方法1[2]
通常大公司都不止一台服务器,为了负载均衡也会多加几台服务器,然后多台服务器共同提供域名解析服务。这样,如果我们不小心访问了逻辑上离我们比较远的服务器,那打开网页就很慢了。所以解决问题第一步,我们必须得找到比较快的服务器的IP地址。
2.1 查询
如果本机未配置DNS时,系统自动查询服务器,每次使用不同的DNS服务器返回的IP地址可能是不同的,所以多找几台DNS服务器去查询一下IP地址就好了。为了查IP地址,可以使用nslookup
命令,打开(Linux\Mac\Windows)命令行,输入:
nslookup github.com
返回结果:
上述结果的意思就是使用
public1.114dns.com
这个服务器对github.com
进行解析,查到的IP地址为13.250.177.223
。但是这个IP地址不太好,因为在请求的过程中出现了超时。
2.2 更换
2.2.1. 使用命令更换
还是在命令行中,如果我们要指定8.8.8.8
这个DNS服务器去查github.com
,就输入:
nslookup github.com 8.8.8.8
返回结果
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: github.com
Address: 13.229.188.59
给我的IP变为了13.228.188.59
了。可以继续更换熟知的DNS地址,反复进行查询,会得到许多不同的IP地址。
2.2.2 手动配置本机DNS[推荐]
这里提供一个配置DNS的方法,在电脑的设置
-网络&互联网
模块中,找到WLAN
或者以太网
下面的更改网络适配器
选项,选择对应的适配器选项,右键属性
推荐大家使用通用的114.114.114.114
服务器,把谷歌的8.8.8.8
作为备用。[3]
2.2.3 使用DNS Jumper
访问FileHorse-download-dns-jumper直接下载软件DNS Jumper
,【点击左边链接即可】。
这是对此软件的简介:
DNS Jumper将通过替换您的提供商提供的DNS来提高浏览速度或提高您的安全性。域名系统(DNS)是互联网上的一种协议,它可以将人类可以理解的网站名称(如sordum.org)转换成机器可以理解的地址(机器可读的“IP地址”),在某些情况下,您可以通过替换提供商提供的DNS来提高浏览速度或提高安全性,DNS Jumper是一个使用起来非常轻松的工具。
为什么要使用DNS Jumper:
- 它可以帮助访问被屏蔽的网站
- 它可以通过更改为更安全的DNS服务器来提高安全性
- 它可以通过选择家庭安全DNS服务器来阻止不适当的网站(例如成人资料),从而帮助保护您的孩子的安全。
- 它可以通过移动到更快的DNS服务器来加快浏览速度
- 可以手动更改DNS服务器,但DNSJumper大大简化了此过程
哈哈,看完是不是很激动,早知道有这么简单的工具,还给我上面讲balabala一大堆干嘛...
(小声bb:多讲点知识点又不亏,是吧!)
3. 解决办法2
3.1. 更改本地Hosts文件
我们可以把之前查询到的IP地址写在本地的Hosts文件中做映射,便于快速定位到目标地址。
当文件中没有某个网站对应的IP才会去请求DNS服务器,所以如果已经在本地配置好IP,则省去查询外部的DNS的过程。
在本地hosts文件里更新一下githuub.com
对应的比较好的IP地址,可以使用【最新】解决Github网页上图片显示失败的问题中的方法直接查找IP,也可以用上述命令行的方式通过DNS进行查找。
注意:Hosts文件中前面有#
代表注释掉本行,本行是不起作用的。
如果网站打开慢的话也可以通过更改DNS或者Hosts的方式进行优化,如果网站还是打不开,则可能是DNS被污染。
4. 【附加】DNS污染[4]
DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cachepoisoning)。
污染之后,经常导致上网的时候,原本干净整洁的网站,在角落和下面跳出奇形怪状的广告链接图片,如果你不小心触碰到,则会把你导入到别的网站去,可能导致被诈骗或者中毒。
其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。DNS污染则是发生在用户请求的第一步上,直接从协议上对用户的DNS请求进行干扰。
DNS污染症状:目前一些被禁止访问的网站很多就是通过DNS污染来实现的,例如YouTube、Facebook等。
4.1 如何解决?
对于DNS污染,个人用户很难单单靠设置解决,简单的方法可以通过修改Hosts文件,手动设置域名正确的IP地址。
但是,用户如果访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址,即使修改Hosts,也可能对某些网站无法访问!
补充
说了半天,可能还是有人跟我一样,github访问就是很慢,经常超时导致断开,偶尔还能进去,真是玄学。希望以后能够找到更好的方法,再来更新!
2020-05-28 我的一个同学近期遇到了github网页打不开的问题,来问我,我去帮他设置一下dns,过一会就好了!!包括MAC和Windows10系统
参考资料
-
百度百科:DNS ↩
-
微信:网页打不开的一个解决方法 ↩
-
知乎:【DNS哪个好】速度快 稳定? ↩
-
DNS污染 ↩