Hosts DNS VPN区别

转与知乎:http://www.zhihu.com/question/22261479

DNS,Host和VPN三者到底是什么关系?

问题
上个月买了一台极路由,然后从淘宝上买了VPN设置到了路由器里。模式为PPTP。根据店主提供的教程,我把电脑的Hosts文件清空,DNS改为Google的8.8.8.8后,墙对我来说仿若不存在了。可是好景不长,从昨天起谷歌就开始或者无法打开,或者打开缓慢,把DNS切换为国内的以后,国内网站打开非常快,但谷歌就无法打开了。再把DNS切换为OpenDNS,依旧是谷歌打开缓慢或者无法打开。然后我又在Hosts列表里加了谷歌的Host,现在暂时解决了能正常使用谷歌的需求,但YouTube等等还是不能正常使用。所以我想问:VPN, Hosts和DNS三者是什么关系?我已经有了VPN应该如何设置后两者?

解答:
我提炼下你的问题。

DNS是什麽?
DNS(Domain Name System),域名系统。用来把机器名字转换成IP地址。
网络终端都有一个唯一的IP地址用于通信,就好象我们每个人都有住址用来收信。
IPv4长这样:192.168.1.1,255.255.255.255
IPv6长这样:2001:0DB8:02de:0000:0000:0000:0000:0e13
机器很喜欢这样的格式,换成二进制非常容易处理。但是让你每次上网都要在浏览器上输入这么一长串东西,你是不是很抓狂?所以我们需要Domain(域名)也就是机器名字来指代某个主机的IP地址。

举例,谷歌搜索的域名也就是机器名字是www.google.com。域名从右往左看。com是商业公司的顶级域名,google是谷歌公司的二级域名,www是谷歌搜索的三级域名。就好象你写地址也要写个中国上海市静安区。谷歌公司不止搜索这一个网站,它可以定义N个三级域名用来命名不同的网站主机,因为它拥有google.com这个二级域名。

但是机器不认识这些字母,所以我们把机器名google.com输入浏览器之后,需要DNS(域名系统)来把google.com转换成谷歌搜索的IP地址。

具体的实现很复杂。简单来说,全球有很多域名服务器,用来存储从域名到IP地址的映射。我们每台终端,无论手机还是电脑,在联网的时候都会配置一个DNS地址,就是DNS服务器的IP地址。你填的那个8.8.8.8就是google公司设立的DNS服务器。在上网的时候电脑会去向这些DNS服务器查询域名对应的IP。

Hosts是干什么用的?
在互联网的早期,网络只有几台电脑。人们用hosts文件记录机器名字到IP的映射,后来网络的规模越来越大。你想想全球有多少网络终端连在万维网上?hosts文件记录映射已经不可行了,所以发明了DNS,域名系统。但是hosts文件仍然保留在操作系统中,hosts文件的优先级高于DNS查询。操作系统首先会在hosts文件中找域名对应的IP地址,没有找到它才会去问DNS服务器。

VPN是什麽?
VPN(Virtual Private Network),虚拟专用网。VPN的本意是在公用网络上建立专用网络。设想你是一名公安民警,你出差在外住酒店,需要到公安内部网络查询某些资料。但是酒店的网络是公有网络,数据传输途中要经过酒店的路由,ISP的路由。中途任何有技术的人都可以看到你跟内部网络之间的明文通信。这时候需要在你和公安内部网络建立一条加密的专用信道。发送数据的时候加密,接收数据的时候解密,加解密的方式事先设定好。这样第三方看到加密过后的数据也无法理解其中的含义。

当然,天朝国情多奇葩。我们的ZF发明了伟大的GFW,于此对应我们伟大的程序员发明了用VPN科学上谷歌的方法。如果你明文请求Google主机,GFW会直接重置连接。但是你在国外有个VPN代理服务器,代理服务器帮你请求Google;再把Google的响应用加密的方式转发给你。因为你跟VPN代理之间是加密传输,GFW不知道你访问的是Google,它不可能把所有发到国外的请求都重置掉,所以成功突破封锁。

为什么你把DNS服务器改为8.8.8.8之后能够FQ?
国内的DNS服务器记录的是错误的映射,会www.google.com指向错误IP。你请求www.google.com自然会没有结果。你把DNS服务器改为google自家的8.8.8.8,得到正确的IP地址,就能够FQ了。
为什么好景不长就悲剧了?
因为领导发现最近FQ的人有点多,得加大点FQ副本难度,于是Boss使出技能——DNS劫持。你向8.8.8.8查询IP的时候,由于DNS是明文通信,受GFW控制的国内路由器看到Google的域名会直接抢答错误答案。由于DNS协议是先到先得,你又得不到正确的IP地址。有个项目叫ChinaDNS,是加密的DNS查询,可以破除DNS劫持。
为什么添加了Hosts文件又好了?
因为Hosts文件优先级高于DNS查询。所以操作系统从Hosts文件直接得到了正确答案。你在hosts文件中只配置了Google的IP映射,自然访问不了Youtube。

如果你觉得你把所有国外敏感网站的IP都写到hosts中就一定过副本的话,那就Naive了。GFW能直接封掉IP,能检测到关键字之后直接TCP重置,或者直接重置它看不懂的疑似FQ连接(这个最无语)。等等等等,只有你想不到,没有它做不到。具体请看goo.gl/q2FXVC。所以我们能FQ的难度,要看GFW目前调的档。它档调低了,我们改个DNS就能翻;它档调高点,我们就要多折腾一点。

猜你喜欢

转载自blog.csdn.net/zoozyy/article/details/78628629