原文链接
原作者:Haolin Zhang

前言

本文将会简单的谈一谈互联网的本质,中国网关和钻过它的方法。

在我们进入这些内容之前,先让我们学习一些必要的网络知识。

名词介绍

下文用最浅显的形式讲述了一些名词,有显著错误!!

如想深入了解,请查阅网络工程相关资料。

  • 局域网(LAN):

简单来说,局域网就是指小范围的网络,由家庭/企业完全控制且是私有的。最常见的局域网有:家庭网络,企业内部网络。典型案例:使用共享打印机,用手机观看在电脑上的视频。

  • 举个例子,你把局域网想成你们的班级,五十多号人,每个人都可以轻松的看到双方。

注意个情况,比如说你认识隔壁班的赵二,但你在你们班看不见她,那么你就无法与其书信。

  • 互联网(Internet):

我们生活中能访问到的网络设备的集合。

简单的例子来说明:互联网中包括:同学、老师、作业,等等你能在学校直接接触到的人/物。

  • 广域网(WAN):

    简单来说,就是距离跨度远的网络,由ISP提供。

    Internet $\in$ WAN !!!

    那么WAN中除了Internet还有什么呢?还有生活中访问不到的网络,比如企业跨地区的网络,金融专线,政府线路等等。

    • 简单的例子来说明:广域网中包括:校长,年级主任,同学,老师,作业
  • IP地址:

    简单来说,IP地址用于描述某个设备在网络中的位置,用于与其他网络设备通信。

    • 举个简单的例子,假如你是一位肤白貌美的漂亮的妹子,你名张三,有一位帅气的小哥叫$Haooolin$,你有两个闺蜜一位名李六,一位名刘七。这些名字扮演了IP地址的作用。
  • 数据包:
    在这篇文章中,我们可以把数据包想象成小纸条(物理层面的纸)
    你的数据(你小纸条上承载的内容)叫做数据
  • TCP/IP协议:

    简单的来说,TCP/IP协议通过IP来判断某个设备在网络中的位置,如果IP正确,则把数据包递给目标主机。

    其数据包的结构可以超级简单的看成:IP地址+数据包

    这个协议有个特性,就是严格遵守发包顺序

    • 举个例子来理解一下:比如说,你们班要求三个人坐成一排,其顺序是

$$ 你(张三)\qquad 刘七\qquad Haooolin $$

你非常喜欢$Haooolin$,你想要给他发送一些小纸条,表达你对他的喜爱之情,你的小纸条保证这样子一个结构:$Dear\ Haooolin,\ bula\ bula\ bula$。由于在上课期间,你只能让刘七这个工具人闺蜜帮你递纸条。刘七做事十分的执着,如果事件1做不成,她会反复做事件1直到成功。

2020年3月4日,上午你给$Haooolin$写了一张小纸条A,让刘七给他。可是沉迷于数学的$Haooolin$高冷的拒绝了。你下午又给$Haooolin$写了一张小纸条B,让刘七给他。正好是美术课,$Haooolin$正在疯狂的写作业,他又高冷的拒绝了。到了二天早上,你又给$Haooolin$写了一张纸条C,让刘七给他。由于是无聊的生物课,$Haooolin$欣然地接受了一张,你猜猜他收到是哪一封张?

答案是小纸条A。

> 真实网络中,数据包不会停留这么久,最久不过五秒钟。
  • UDP协议:

    简单的来说,UDP协议也使用IP来判断某个设备在网络中的位置,与TCP不同的是,UDP不遵守发包的顺序。

    其数据包的结构也可以超级简单的看成:IP地址+数据包

    • 举个例子:2020年3月6日下午,刘七被她男朋友甩了,嫌她做事过于执着。所以刘七变成了个“实事求是”的女生。她不再追求顺序,而开始过分的追求效率。

    2020年3月6日,上午你给$Haooolin$写了一张小纸条D,让刘七给他。可是沉迷于化学的$Haooolin$高冷的拒绝了,刘七痛骂:“该死的两个情侣狗,看我把你们的小纸条撕了”。你下午又给$Haooolin$写了一张小纸条E,让刘七给他。正好是音乐课,$Haooolin$正在疯狂的写作业,他又高冷的拒绝了,刘七突然站起来大叫:“你tmd的到底要不要,不要老娘我就撕了”,$Haooolin$还是继续写着作业。到了二天早上,你又给$Haooolin$写了一张纸条F,让刘七给他。由于是无聊的生物课,$Haooolin$欣然地接受了一张,你猜猜他收到是哪一封张?

  答案是小纸条F
  • 网络服务提供商(ISP):

就是你网络的运营商,如中国电信,中国联通,和傻逼CC宽带。

  • 网关(Gateway ):(此处指非NAT网关)

    如果当前局域网内没有该IP地址,那么我们就需要通过网关,连接到下一个网去寻找这个IP地址。既然网关同时存在于两个网络,所以拥有两个IP。同时网关具控制数据包的功能:数据包放行/不放行。数据通信的过程,如图所示:

    192.168.10.0/24: 表示局域网的IP从192.168.10.1~192.168.10.255

    192.168.1.0/24 同理

    去程
    回程

    • 举个简单的例子来解释一下:
      2020年的9月份分班考试之后,你选的文,$Haooolin$选择的理,你们到了不同的班级(不同的LAN),你仍然像给他写小纸条表示对他无尽的爱意,你发现你的好闺蜜李六也学理且和$Haooolin$在一个班级,你便拜托她传递这个纸条。而李六扮演了网关的位置。

    网关是互联网中较为麻烦的网络设备,因为他横跨了两个网络,同时要承载这两个网络中的数据连接。

  • 路由(Routing):

    这里的路由不是指我们家里用的路由器,而是指数据在网络上传递的过程。随着网络的规模不断增加,数据包的传递时间有可能会越来越长,我们就引入了路由器来加速这一过程。路由器会告诉数据包从哪里到哪里的最短路,进而实现高速的网络连接。

    简单的来说,ISP可以看成是若干个路由器的集合。

    • 举个简单的例子来解释一下:
      现在你的小纸条的路由是:你->李六->$Haooolin$

    有一天,李六由于成绩太好,被中科院青少班录取了,你只能重新找一条给$Haooolin$小纸条的方法,于是乎小纸条的路由变成了:你->路人甲->路人乙->...->路人亥->$Haooolin$。你的小纸条穿过了整个年级才到达$Haooolin$的手上,你觉得这样子消耗的时间实在是太多了。有一天,刘七告诉你路人甲其实认识$Haooolin$且关系还不错。于是乎,你的小纸条路由变成了:你->路人甲->$Haooolin$。你非常满意现在的情况。

    在这个故事中,刘七扮演了路由器的作用,路人N扮演了网关的作用。

路由器是互联网中最麻烦的网络设备之一,因为他需要检测并计算数据包的最优路线,并使用可持久化的数据结构维护一个路由表。

  • DNS(域名解析服务):

    上面说过,IP可以用于表示设备在网络中的位置,那为什么我访问百度的时候,输入的是baidu.com这样的域名而不是220.181.38.150这类型的IP地址呢?在这其中,DNS起了作用。你的浏览器访问baidu.com这样子时,会向DNS询问它对应的IP地址,然后浏览器再去那个IP地址请求网页。

    • 举个简单的例子:当你问一个名为校园百事通的同学:“这个学校里最帅的人叫什么?”,这个百事通同学会回答你$Haooolin$

    在这个例子中,这个百事通同学是DNS,$最帅的人$是域名,$Haooolin$是IP地址。

  • 网页:
    在本文中,你可以把网页想象成一种遵守特定格式的数据包
    你可以称呼其为HTTP协议,一般来说HTTP协议使用TCP协议传输。
  • SSL证书:

简单来说,你是否注意过,这两年你访问的网页都是https开头的而不是http开头的。https开头的网页表示网页内容被加密了,用于描述加密方法的文件(钥匙)叫做SSL证书。每一个SSL证书对应一个特定域名。

SSL证书仅能用于加密HTTP协议

  • 举个简单的例子:有一天你想和$Haooolin$约会,你不想要让其他人知道想约会的时间和地点,所以你需要把你的小纸条加密一下。由于你想要$Haooolin$知道怎么解密,所以你需要使用一个你们两个都知道的第三方的加密方法,这个第三方的加密方法叫做SSL加密。为了让$Haooolin$在第三方的加密机构中找到解密方法,你用$大长腿$来称呼自己,作为钥匙的口令。$Haooolin$拿到信之后,就跑去第三方的加密机构喊:"大长腿,大长腿,大长腿",然后他就能得到这个解读的方法,读懂你给他写的信。如果他喊其它的,得到的密钥就不能开启这封信。

    在这之中,你的加密算法叫SSL加密,“大长腿”就是你的域名。
    

那么让我们开始吧

互联网的本质

互联网是什么?上面简单的概括,生活中能访问到的网络设备的集合,究竟是什么意思呢?

简单的来说,从物理层面上来讲,互联网就是无数个局域网通过ISP的几十亿个路由器和网关连接起来的庞大的人类工程奇迹

这句话是错的!!!千万记住,但为了方便理解,我们还是这样说吧。

互联网的本质

我们把菱形看成路由器/网关,长方形看成其他网络设备,如电脑(服务器),手机等等。

左上角的局域网,既可以是你家,也可以是马化腾的腾讯云。

右上角的局域网,既可以是你的手机热点,也可以是马云的阿里云。

人类通过逐渐的把信息放置到这个奇迹里面,构成了今天的信息社会。

举个简单的例子:

  1. 你想要访问百度,那么你先通过电脑里预设的DNS的IP地址比如223.5.5.5(阿里公众DNS)询问baidu.com的IP地址是多少
  2. 数据包慢慢的在网络飘来飘去,最终你得到了百度的IP,比如220.181.38.148
  3. 知道地址后,你的浏览器会向这个地址发送一个数据包,数据的内容是220.181.38.148 我想要baidu.com的网页
  4. 数据包飘呀飘,飘到了220.181.38.148
  5. baidu那边收到了这个数据包后,会向你的IP发送张三,给你baidu.com的网页数据包
  6. 数据包飘呀飘,飘到了你的电脑上
  7. 你的电脑解析数据包,你就看到了baidu.com

简单的来说,这就是你使用网页的过程

这个过程省略了非常多非常多的步骤,如想了解请自行阅读课本

像你在淘宝上面购物呀,QQ聊天呀,差不多都是这样子繁琐的过程。
即便繁琐,但是在计算机的加持下,一切都是可能的。

中国网关

别名“GWF”,“墙”

在谈论其判断方法和技术实现之前,不如让我们先谈论谈论它的意义

意义

  1. 阻拦境外网络攻击

常见的DoS攻击非常容易就可以实现,只需要一个IP地址和一个能运行C语言的机器就可以。国外有非常多的给匿名用户提供云服务的运营商,只要有钱就给机器和IP的(国内的云服务商要求实名认证!!所以国内网络环境比较安全)。利用这样的资源,非常容易组成DDoS攻击,造成网络设备的瘫痪。试想每天阿里,腾讯,既要承受来自国内的DDoS攻击,同时也要接下境外相当于国内几十万倍的DDoS攻击,怕是活不过几天,Google和Facebook就能轻松撬开中国市场的大门。让中国制造/创造在起步阶段就被扼杀了。

  1. 维护国家安全

  1. 预防网络诈骗,网络赌博

  1. 增加国民自豪感

  1. 增加政府不透明度

  1. 其他

实现方法

基本上是利用中国局域网与外国局域网之间的那个网关。

不妨把上面网关图的左边的想成国内,右边的想成国外。如果网关不想让数据过,那么左边的设备永远看不到右边,反之亦然。

下面屏蔽方法中优先级越高的,数字越小。

  1. 基于IP的干扰

    如果国内想要访问Google的IP,并且这个IP是以及被网关记录过的,那么我国的网关就可以让其不通过,进而实现屏蔽。

    • 举个例子:你,张三,给$Haooolin$写信。目前信的路由是:你->刘七->路人甲->$Haooolin$。

       有一天路人甲被别人施了咒,忘记了$Haooolin$。当你的信到了路人甲时,他不知道该给谁,所以你的信就迷失在了学校里面。
      
  2. 基于旁路阻断

这些年SSL加密技术越来越火,但是却有个新的问题,SSL加密有一部分是必要公开的,公开的信息中包括加密的域名。就会导致网关可以查询加密信息中是否包括Google的域名,如果包括,则终止连接(即SNI审查)。

    • 举个例子:你还是再给$Haooolin$写信,目前信的路由是:你->刘七->老师A->$Haooolin$。有一天,老师觉得有点不对,怎么张三和$Haooolin$总有书信,是不是早恋?后来到处打听,老师发现这是真的。从此以后只要老师发现信件是由张三加密的,就直接拒绝,尽管老师并不知道这个内容。
    1. 基于DNS的干扰

    当国内的DNS服务商试图通过Google DNS获取国外的域名时,网关会拦截这条并将指向到中国政府版的Google DNS实现干扰

    • 举个例子:
      有一天,你问百事通A同学,最帅的人是谁?百事通A同学不知道,他跑去问了百事通B同学,百事通B同学不知道,边去问百事通C同学。可是百事通C同学被绑架了,他被迫说出了最帅的人是路人甲。然后层层消息回传,你最终得到最帅的人是路人甲,而不是你期待着的$Haooolin$
    1. 基于内容的干扰

    很久以前,我们使用HTTP协议,我们所有的消息都是公开的,网关都能看见。如果内容中包括了一些奇怪的关键字,那么网关就把这个数据链路中介掉。

    • 举个例子:你还是再给$Haooolin$写信,目前信的路由是:你->刘七->路人甲->$Haooolin$。有一天路人甲表示,请不要让我看到信中有我爱你这样的字样,否则他就要撕票。第二天你还是写了我爱你,然后路人甲把你的信撕了。

    绕过方法

    与上面的一一对应

    1. IP屏蔽:

      • 购买新的IP地址:

      举个例子理解一下,你为了继续和$Haooolin$写信,不惜改名换信,让别人/老师认为你是另一个人,进而绕过封锁。

      • 购买不经过不受中国网关管理的跨国专线:

      例子:当你非常有钱/有权的时候,你拥有几个给你打工的小弟/小妹,他们专门负责给你递信,进而绕过封锁。

    2. 旁路阻断:

      • 更换加密证书的域名:

      举个简单的例子,你的域名不叫大长腿了,改叫大美人了

      实际效果可以看看这个项目:

    3. DNS干扰的话,可以自己建立一个DNS实现

      例子的话:你自己找了个学弟/学妹,把他们调教成符合你要求的百事通

    4. 内容的干扰的话,把内容加密一下,网关就看不到了,会觉得数据也许是个正经数据,就放行了

      举个例子:把文章中的关键字修改一下。比如说把我爱你修改成你爱我就好

    上面的呢,是比较暴力的方法,针对性极强但不敢保证只做一个会有用。你说墙通过旁路阻断了一些去往Google的连接,你说它不会记录一下IP然后把这些IP也屏蔽了?

    所以常用的方法并不是以上的几种,而是使用一些VPN技术或者代理技术钻过网关的封锁。下面让我们来探讨一下这两种技术。

    代理(Proxy)

    概念

    用法律中的定义是经过授权后,某个人用另外一个人(路人A)的身份,做路人A的事情。

    这个也差不多那个意思,设备A使用设备B在网络中的位置,进行一些操作。如图所示:

    代理.jpg

    一般来说,代理有如下特点:

    1. 可以更换IP:谷歌看到的是设备B的IP访问的它,而不是设备A的访问的它
    2. 可以让数据更加隐秘:可以使用一些双端加密/解密算法,实现A到B的流量加密

    举个例子:

    你,张三,没钱没权,你没有专门递信的小弟,但你有个你完全信任的闺蜜刘七。你被诅咒了,诅咒无法与$Haooolin$直接书信,你于是让刘七代替你对$Haooolin$表达这份心意。然后刘七跟$Haooolin$说:“我喜欢你,大猪蹄子”,然后$Haooolin$看着更加肤白貌美的刘七,牵起了她的手。晚上,刘七告诉你,$Haooolin$喜欢。在这个故事中,刘七扮演了代理服务器(设备B),$Haooolin$只知道刘七喜欢他不知道你,因此你的隐私得到了保护。

    虽然理不是这个理,但emm执行起来差不多的,差不多的

    这项技术一般用于:

    1. 爬虫
    2. 翻墙

    请注意,这两个都不是什么正经合法行为

    实现技术

    HTTP/HTTPS代理

    这个技术,让设备B成为了中转站,把来自A的网页数据发给Google,进而实现设备A用设备B的IP访问谷歌。(设备B仅仅收到数据然后再次发送给谷歌,无其他操作)

    但是这项技术拿来绕开网关是完全没有用的,你的发给B的数据包完全等价于你发给Google的数据包,由于数据包的特征(IP/域名等等),网关是不会让你通过的。所以这项技术只能进行IP的切换。

    同时,这种代理只能支持转发HTTP/HTTPS协议,如果你想使用设备B进行FTP/SSH连接是不能的

    Socks代理

    Socks技术允许代理TCP/UDP协议,意味着你不仅仅可以代理网页应用,同时也可以使用SSH或者FTP服务了。

    但这个还是有个问题,socks的内容是未加密的,对于网关而言,你这就是数据包套了个简单的信封,可以随便拆卸的那种。那么稍微添加一下判断的方法,网关便可以检测你是不是在尝试访问谷歌。

    同时他是基于TCP协议的,正如上文所说,如果网络波动大的话,数据会直接断流。

    ShadowSocks

    如果你稍微会一点英文,你也能看懂这东西和Socks之间的PY关系。ShadowSocks把Socks的数据包加密一下,网关就看不出来了。网关不知道你要访问谷歌,当然可以放行啦。

    同时继承了Socks基于TCP协议的这个特性,如果网络波动大的话,数据会直接断流。

    模拟成网页

    不知道什么时候,网上有人说ShadowSocks不是很稳定,因为它的数据包看起来是无意义的TCP数据,会被封杀。网上于是乎就有大神开发出了用网页来承载你的数据包。

    你不需要知道网页和Socks之间的区别,你更不需要知道它们究竟是如何实现的,但你只需要知道,他们都能把你的数据包打包成其它的样子就够了。

    通过打包成网页的形式,并且将其用SSL证书加密,你的数据包看起来就无比的正常。只要你的网站和IP不在网关的黑名单中,那就不会有问题。同时网页仍然是基于TCP的协议,我们仍需要意识到,如果网络波动大的话,数据会直接丢失。

    这两年有两个支持把数据包模拟成网页代理的工具非常火:

    我个人建议使用Trojan,如果没有特殊需求的话。由于Trojan使用的加密方法非常,非常的简单,所以速度上有优势。但是V2Ray支持更多的协议,且不仅仅可作为代理,所以按需使用即可。

    基于UDP的代理工具

    在介绍TCP协议中,我们说到,如果网络环境波动大,就会导致数据包的堵塞。什么时候网络环境波动大呢?上网人多的时候,你可以类比为化学中的熵。为了解决数据包的堵塞,有些大神使用了UDP技术来解决TCP技术掉包严重的问题。利用UDP协议不追求包的先后顺序,网络不好时可以通过多发包的方法解决数据包在网络中堵塞的问题。

    举个例子:回到2020年3月6日,你每次均给$Haooolin$发十几封信,他绝对会感到厌烦因此打开一封信。只要他打开任意一封,你的目标就达成了。基于这样子的效果,我们就解决了$Haooolin$看不到信的问题。

    上面讲述的三种工具都有UDP的模式,故不在细说。

    优势

    1. 部署方式:可以在任意一台设备上部署,使用代理十分的简单,十分轻量化。
    2. 价格:无需购买更多硬件,只需要有两台电脑/手机等设备和两个IP即可实现。

    弊端

    1. 端口受限,违背了TCP/IP本身的点到点的特性:在这张图中,如果Google想自发的连接A设备是不行的,因为他并不知道A设备的IP地址,同时B设备会拒绝Google自发的连接,因为B设备并不是A设备。

    用人话来讲,就是$Haooolin$想要联系你时,他会去问刘七:”你是不是张三了?“,然后刘七说:”我不是“,于是乎$Haooolin$就联系不上你了。

    1. 部署方式:代理只能部署在电脑/手机等设备上,不能部署在交换机/路由器上,因此使用起来较为麻烦。

    软路由 = 路由器 + 电脑

    请不要杠来杠去的

    虚拟专用网络(VPN)

    在了解它的翻墙功能前,不妨让我们先了解一下这个东西的原本意图。

    上文中说到,刘七把你的梦中情人给抢走了。你现在想要抢回$Haooolin$,用最简单的方法,直接与他书信!可是你被诅咒了,要怎么办呢?

    这里我们把异地恋的定义拓展一下:

    只要不在一个班级的,就叫异地恋!!!

    你茅塞顿开,如果你在他们班级创造出一个虚拟的人物,通过书信的方法操纵这个虚拟的人物,让虚拟人物和$Haooolin$写信,不就等价于你与$Haooolin$书信了?

    概念

    差不多就是上面说的意思。

    当你买不起专线的时候,但又想让两台相隔遥远的设备在一个局域网中相见的话,就需要使用VPN技术。

    在使用VPN技术时,远端的设备将获得一个来自VPN服务端所在局域网的IP地址,远端设备使用该IP与VPN服务端所在局域网进行通信,通信时的数据完全加密。效果如图所示:

    VPN原理

    常用于:

    1. 企业
    2. 学校

    实现技术

    交换机/路由器/网关自带VPN

    像常见的华为呀,Cisco呀,都有这一项功能的

    • PPTP、L2TP和IPSec这三样基本协议
    • OpenVPN
    • Cisco独家的Anyconnect技术

    软件

    有类似$Zerotier$和$WireGuard $的软件

    本质上来说,上面的东西,都能够提供在远程访问内网资源的办法。

    优势

    1. 你可以直接访问远程局域网的资源,即$Haooolin$可以主动找到你
    2. 可以部署在交换机/路由器/网关上,减少维护难度
    3. 均有大型公司/大型技术论坛维护,性能和安全性更有保障

    劣势

    1. 麻烦,你多了一个IP,简单的来说,等价于你多了个网卡,不适合小白使用
    2. 有设备和网络要求

    IPSec不支持NAT网关转换后的连接等等

    1. 代码复杂度远高于代理的代码

    如何翻?

    很简单呀,连接好VPN后,将你的网关修改成VPN那边的网关就成功了。

    你的网络数据将会通过VPN客户端加密后,在VPN服务端解密,之后通过VPN服务端的局域网网关发送出去,进而绕过中国网关。

    回顾

    其实通过上面的两种方法,你也就差不多能get:只要你把你的数据包加密了,呢就差不多能通过中国的网关了,所以只要保持这个思想,穿透中国网关的方法非常非常的多。

    举个例子,下面这个项目使用ssh来实现代理。
    你的数据包通过ssh加密后,变成了ssh数据包(这里可以简单认为类似于网页数据包),只要你的IP没有被BAN,网关就会放行。

    SSH是一种加密的通讯协议,常用于远程操控计算机

    其他1

    为什么会BAN掉你的代理服务器?

    Well,很简单呀,因为你的流量太大了,发的包太多了。让网关误认为这是DDNS攻击,然后作为一名“素质极高”的网关,就会屏蔽掉这样子的数据流保护中国这边的网络安全。

    其他2

    如果你对上述的东西有非常强烈的好奇心,推荐系统的学习网络七层结构,你也自然能明白从模拟型号到套接字的一切,更不用说这简单的翻墙问题。

    Last modification:March 13th, 2020 at 06:33 pm