温馨提示:本文篇幅略长,请先收藏再阅读。可能你已经学会了“翻墙”,但是了解“翻墙”背后的原理对你提高网络安全意识,防止被中共政权监控等等十分重要。本文旨在用简单通俗的语言、形象的举例来使得对互联网不同的新手小白们深刻的理解晦涩难懂的计算机网络知识。希望你能享受阅读的快乐!
世界上只有个位数的国家存在大规模网络封锁,除了局域网的朝鲜,就是中国和伊朗了,其中以中国政府建立的网络防火墙“防火长城”(GFW)最为著名。
“防火长城”不同于一般意义上的防火墙,防火墙主要用来保护其下的电脑或服务器等设备,起到阻断黑客攻击、防止非法访问等作用。然而,中共的“防火长城”则被用来隔绝中国政府不希望其网民知道的信息。“防火长城”阻断了中国网民与世界互联网的联系,世界网民广泛使用的Google、Youtube、Twitter(X)、Whatsapp、Telegram等在中国无法使用。
如图所示,一个正常的电脑是可以直接访问国际互联网的。但是在中国,由于“防火长城”阻断了连接,这就使得中国网民无法成功连接到部分国际互联网。
防火墙的工作原理是什么?
DNS污染
你一定听过IP地址这个概念,但是在互联网上,你却不记得任何一个互联网厂商的IP地址。相反,你记得baidu.com、taobao.com、google.com,而这些就是域名。但是访问互联网本质还是需要依靠IP地址,所以这就需要一个“翻译软件”,而这个“翻译软件”就是域名解析服务器(DNS)。
如果我们“贿赂”这个“翻译软件”,也就是让DNS提供错误的IP地址,这样不就能达到阻断访问的目的了吗?是的,“防火长城”正在使用这一招,这就是DNS污染,也叫DNS投毒。
可以看到,www.google.com被解析到看似是随机的IP地址,这不仅阻止了www.google.com的访问,而且给其他“被随机到”的服务器造成了致命的垃圾访问请求,因为用户每次访问www.google.com都会请求其服务器。
DNS抢答
你一定有这样的疑惑,如果将DNS服务器修改为境外的服务器不就可以了吗?我不使用境内的不可靠的服务器来“翻译”,而使用境外可靠的“翻译”,这个问题不就解决了吗?
如果你使用境外的DNS服务器来完成域名解析操作,“防火长城”会赶在境外DNS服务器返回结果之前伪装成境外DNS服务器提前返回一个错误的结果。由于DNS解析是明文,不加密的,所以可以轻松被伪造,而浏览器只会采纳第一个结果并忽略后面的结果。“防火长城”的路由位置显然比境外的DNS服务器近,所以它的结果总是最先到达,就好像老师叫你回答问题,有一个学习成绩好的同学提前作答了,这叫做DNS抢答。
IP封锁
这点很好理解,就是把IP封掉了,你就无法访问了。然而很多互联网厂商都有大量的IP,比如Google,如果某一个Google服务器的IP被封锁,我只需要找到能访问的Google IP,并把www.google.com解析到这个正确的IP上就可以访问了。而计算机的hosts文件就很好提供了修改域名解析的途径。
hosts文件
实际上,浏览器在向DNS服务器请求“翻译”结果(IP地址)时,会先查看计算机本地的一个名字叫做hosts的文件中有没有对应的“翻译”结果(IP地址)。hosts文件在Windows系统上位于C:\Windows\System32\drivers\etc\hosts,藏得很深,当你打开它,它里面的结构如下:
以“#”开头的行计算机将会忽略掉它,它被成为注释。注释是通常写给人类阅读的,用于辅助说明代码的具体用途等等。在这个hosts文件中,我添加了一条记录,左边142.250.189.174是Google的IP地址,右边www.google.com是Google的域名。这样www.google.com就被“翻译”为142.250.189.174了。
如果hosts文件中有对应的记录,浏览器就不会向DNS服务器发送请求,所以修改hosts文件是一个可以绕过“防火长城”的办法。早些年,互联网上经常有热心网友整理出所谓的“Google hosts文件”等等就是这个原理。
为什么前些年热门的修改hosts文件绕过网络封锁的办法到如今却无人使用了呢?是因为“防火长城”已经升级了,它不仅仅通过封锁IP的方式来阻断访问,还通过一种叫做SNI阻断的办法来阻止。
SNI阻断
互联网上最常见的访问协议就是http协议了。当你访问百度时你会输入http://www.baidu.com,而http://就是代表使用的是http协议。http协议和DNS解析一样是明文的,可以轻松的被篡改,也就是说,如果你访问的网址是http://(而不是https://),你与其通信的所有内容都可以被从你到该目标服务器中间的任何一个设备拦截并记录,这其实会造成很大的隐私问题。早些年可以使用Google的时候,有些网友发现一旦在Google上搜索敏感词,如八九六四、法轮功等等就会被阻断,而当时互联网几乎都是采用的http协议,所以对于“防火长城”而言,做到这一点并不困难。
而如今互联网上大部分的访问协议为https协议,以百度为例,其URL链接通常为https://www.baidu.com。而带了s的http协议因为其加密的原因就很难被中间商破解篡改。因为其加密的特性,你与目标服务器之间通信的内容中间商无法识别,“防火长城”也就无法通过屏蔽敏感词的办法来阻断某些访问请求。
但https协议并不会加密域名,也就是www.google.com这个域名是不会被加密的,所以这就给“防火长城”一个很好的机会,“防火长城”通过识别www.google.com域名,就阻断你的这次访问请求,由于www.google.com域名在通信握手环节被叫做SNI,所以这个阻断被称为SNI阻断。
所以,即使你找到未被封锁的Google IP也是不行的,因为你当你访问Google时,“防火长城”通过SNI知道你要访问Google,它就会阻断本次访问请求。同时,聪明的“防火长城”还会将你访问Google时提供的IP地址记录下来并将其屏蔽,来进一步增强阻断效果,你可以把这个过程叫做一个简单的机器学习。
如何突破网络封锁?
到目前为止,突破网络封锁的唯一办法是让境外的一台服务器帮你去访问被封锁的网站(比如Google),再将访问结果转交给境内的计算机。VPN、Shadowsocks、V2Ray等等代理软件的原理都是这样的。你需要在境外建立一个服务器,然后用境内的计算机连接到刚建立的境外服务器,让境外的服务器帮助你访问Google。在“防火长城”的视角里,它认为你是在访问境外的一台普通服务器而不是Google,从而绕过网络封锁。你在境外建立的那台服务器被称为代理服务器,因为它代理了你的真实访问请求。
为什么VPN目前不常用了?甚至Shadowsocks也变得没有以前那么好用。这些问题的原因是什么?目前中国网民普遍使用V2Ray等等新一代“翻墙”软件,它们还会有什么问题?要解答这些问题,你需要查看我下一篇的文章获取真相的第二步:“翻墙”软件有哪些?它们有什么区别?。