关于GFW的探究
前言
本文章仅供用于学习研究,请勿用于不合规不合法用途,否则后果自负,与文章作者无关!!!
我最近搜索了一下GFW的工作原理,故写下这篇文章记录我对GFW的理解。
最新版Chrome已经移除了--host-rules标签,本文方法不再有效。
原理
目前,GFW主要通过三个方面进行屏蔽:IP黑洞、DNS污染、SNI阻断。
IP黑洞
假定google.com的IP是8.8.8.8,IP黑洞就是把所有8.8.8.8的流量指向0.0.0.0,这样就能起到屏蔽网站的作用。
DNS污染
机器只认识IP地址(例如8.8.8.8)而不认识google.com。DNS的作用就是把google.com转换成8.8.8.8。
那么,在你使用DNS(也就是通过google.com访问网站)的时候,把google.com指向0.0.0.0同样可以起到屏蔽作用。
SNI阻断
在现代的网页中已经广泛使用HTTPS,通信内容都会经过加密再发出。所以,GFW是无法通过查看网页具体内容来判断是不是google.com。
但是,为了节约开支,8.8.8.8这个服务器可能不仅存有google这个网站,可能还存储了bilibili这个网站(我瞎编的😂)。所以,浏览器通信的时候就要告诉服务器:我想访问google.com,这段信息就是SNI。最重要的是,SNI一般是不加密的。所以,GFW就可以通过匹配关键字来阻止你的访问。
骗过GFW
既然知道了原理,那就可以对症下药。
省流
使用别人成熟的项目
自己动手
分析
IP黑洞和DNS污染的原理其实很相近。找到一个没有被屏蔽的IP(7.7.7.7),然后告诉浏览器:你不用做DNS解析了,google.com就是7.7.7.7,你访问它就行。这样,我们就能规避IP黑洞和DNS污染。
如果很不幸,google.com的所有IP都被屏蔽,其实也有解决办法:中间人服务器。它的IP没有被屏蔽,我们假定它的IP是9.9.9.9吧。告诉浏览器:google.com就是9.9.9.9。9.9.9.9会帮我们访问8.8.8.8,然后将真正的网页传回给我们。这个过程中我们可没有私自建立信道,用的就是中国电信,因此没有法律风险。
对于SNI阻断,我们可以不向服务器发送“我想访问google.com”,发送“我想访问g.cn”。服务器还是知道你要访问google的,但是GFW匹配不到关键字了,那不就可以绕过监测了吗?或者更直接一点,发送“”,做谜语人,服务器你看着办吧。(如果服务器存了多个网页,这时候一般不会向我们发送任何数据😅)
要实现以上方法,要解决的问题就变成了:
我上哪去找中间人服务器?
我怎么修改SNI信息?
我怎么知道“g.cn”可以访问google?
解决
别急,这里就能解决上面的问题。
https://bulianglin.com/archives/snibypass.html

点击抓取数据后,会列出一大堆网站,你可以按需删减掉不用的网站。例如,如果你不需要images.prismic.io这个网站,把标红部分删除即可。

复制框选部分内容,然后在桌面新建文本文档,在里面粘贴。
1 | @echo off |
我来解释一下,第二行的意思是使用Edge浏览器,应该不会有人电脑没有Edge吧😂。
第三行msedge.exe后面的内容,就是我们刚刚复制的内容。但是经过本人尝试,系统貌似不认太长的命令,所以我移除了部分网站。
保存,修改文件后缀为.bat,双击运行。不出意外的话,浏览器就会自动打开,并且应该可以访问google。
细心的你会注意到,浏览器会提示网页不安全,这是由于我们修改了SNI信息,导致证书不匹配。我们还使用了中间人服务器,谁知道它是不是真的安全呢?谨慎起见,不建议在网页输入密码。