科学上网的方法有多种,我之前用的免费软件 Lantern 已经开始限流量了。经朋友指点,只要修改电脑中的 hosts 文件就可以访问 Google 了,为什么会这么神奇呢?先看看里面的是什么东西,Window 上的 hosts 文件在C:\Windows\System32\drivers\etc\hosts
这个地方。用文本编辑器打开:
可以看出里面都是一条条 IP 地址 + 域名的记录,用来进行 IP 地址的映射,当我们在浏览器上输入一个域名的时候,如百度:www.baidu.com
,浏览器会先在 这个 hosts 文件中根据域名找到对应的 IP 地址,然后访问目标主机。这个过程是不是很熟悉?对!这就是 DNS (域名解析系统)的工作方式了。
可以发现更熟悉的代表本地计算机的回环 IP 地址的映射127.0.0.1 localhost
都是在 hosts 文件中定义的。
接下来就发现了这几条关键的映射了:
|
|
这几条可以看出一个 IP 地址可以同时对应多个域名,这也就是为什么平时在地址栏上输入google.com
或www.google.com
都可以访问 google 了。而https://
是浏览器自动帮你加上去的。
平时我们访问不了 google 的原因是,google 的域名 在本机转化为 IP 地址后经过中国大陆的防火长城,被防火长城检测到与黑名单内的关键词匹配(如:Google、Facebook、twitter等都在黑名单内),然后就会伪装成目标域名的解析服务器返回虚假的查询结果。关键的是通常的域名查询没有任何认证机制,而且域名的查询一般是基于无连接不可靠的 UDP 协议,所以浏览器只能接受最先到达的格式正确结果,并把之后的所有结果丢弃。所以这也就访问不了啦,这种情况就是所谓的 DNS 缓存污染,也称为 DNS 缓存投毒(这个真形象…)
关于 DNS 缓存污染的定义我引用维基百科的解析:
是指一些刻意制造或无意中制造出来的域名服务器封包,把域名指往不正确的IP地址。一般来说,在互联网上都有可信赖的域名服务器,但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关域名的局域域名服务器的缓存受到污染,就会把域名内的电脑导引往错误的服务器或服务器的网址。
而黑客使用的DNS 缓存污染攻击
则是针对这些特性来进行的。试想一下,如果你的 DNS 缓存被污染了,并且输入一个你常用的域名会跳转到一个黑客指定的网站,而这个网站跟你平时访问的网站几乎一模一样(黑客仿造的),但是访问后会自动帮你下载木马插件。危害可想而知,甚至察觉不了。一般我们上网,都是使用互联网服务供应商提供的域名解析服务器,当用户经常访问一些网站的时候,服务器会将这些网站的域名缓存起来,方便用户下次访问。而黑客就可以专门攻击这些服务器就可以获得用户资料和控制用户的访问了。
扯远了,再来看看为什么这个 hosts 文件访问 google 的 IP 地址就不被防火墙拦截了呢?我查了一下,我这个访问 google 的 IP 地址是香港的,也就是说使用的是香港的代理 IP (Proxy IP)或者说代理服务器(Proxy Server)。那什么是代理 IP 和 代理服务器呢,我们平时访问一个网站,直接把请求信息通过一个 http 包发送到目标服务器上,然后目标服务器返回相应的信息回来。现在我们被墙了,我们不能直接访问目标主机,这就需要有一个可以访问目标主机的机器来帮我们。这就是代理服务器的使命了,我们通过代理 IP 来访问代理服务器,代理服务器帮我们访问我们访问不了的网站,并把相应的信息返回给我们,所以代理服务器必须安置在没有被墙的地方,如香港和台湾或者外国。
如此一来,hosts 的作用和其 IP 映射之类的问题已经明白了,下一篇继续深入分析 hosts 与 DNS 之间的复杂恋情(误!)