有关GFW,即通常所说的「墙」的一些事情

本文最后更新于:2022年10月2日 下午

这个算是一个比较敏感的话题,所以我先声明一下几点内容:在这篇文章里,我不会提及任何关于突破内容审查机制的关键词,不介绍、传播、扩散任何关于突破内容审查机制的工具。任何技术探究均在个人的局域网中完成,使用的信道均为国家网络运营商提供的合法有效的信道。

1987年,一封邮件从中国发往德国,标志着中国正式介入了国际互联网。内容是“Across the Great Wall we can reach every corner in the world!”——“穿越长城,我们可以到达世界的任何角落!”

然而在十几年后的今天,中国的互联网逐渐成为了“局域网”。

事先说明

这个算是一个比较敏感的话题,所以我先声明一下几点内容:在这篇文章里,我不会提及任何关于突破内容审查机制的关键词,不介绍、传播、扩散任何关于突破内容审查机制的工具。任何技术探究均在个人的局域网中完成,使用的信道均为国家网络运营商提供的合法有效的信道。

友情提示:GFW在2021年11月中国国家互联网信息办公室发布的《网络数据安全管理条例(征求意见稿)》中被称为跨境安全网关,用于阻断访问境外反动网站和有害信息、防止来自境外的网络攻击、管控跨境网络数据传输、防范侦查打击跨境网络犯罪。擅自使用、搭建国际信道涉嫌违法,并有因此而被逮捕的事例,请各位慎重行事。

GFW是什么

GFW:Great Firewall (of the People’s Republic of China),中国国家防火墙,也称长城防火墙,是中国政府在其互联网边界的审查系统,具体指监控和过滤互联网内容的软硬件系统,由软件和硬件共同组成,据2010年的相关推测,防火长城可能拥有数百台曙光4000L服务器。

形象的描述,在没有 GFW 的时代,访问互联网的方式如下

原始连接方式

GFW 出现之后,则变成了

GFW存在后的连接方式

如何做到的

由于中国的国际出口只有北京、上海等地,而所有的国际出口处都设有GFW,所以国内发往国外的数据信息必定会经过GFW的监管,没有可行方法绕过。

域名服务器缓存污染

实际上,在很早很早以前,人们需要通过输入IP地址来访问网站。IP地址全是一堆数字,中间夹杂着几个不明意义的点,实在是太难记了。于是后来人们就发明了域名这个东西(例如 cn.bing.com ),每个域名对应一个IP地址,所以现在人们只需要记住域名就可以访问网站了。

但是浏览器是怎么知道每个域名对应的什么网站的呢?于是就有了DNS服务器。浏览器在每次访问一个网址的时候,会先在本机的hosts文件中找对应的IP地址,如果没有找到的话,就会向上一级的DNS服务器发出请求来询问这个域名所对应的IP地址,如果这个DNS服务器也不知道的话,就会向更上一层的DNS服务器询问。世界上总共有十三台最高级的DNS服务器,而这些服务器全都属于西方国家,在中国只有几台备份。

有了域名纵然是个好事,但这就给了GFW”可乘之机“。

在上面我们提到过,由于根DNS服务器不在中国,所以中国无法从根本上通过修改DNS服务器来禁止访问某些网站。同时我们在最开始也提到过,所有发往境外的数据包必先经过GFW的审查,所以中国开始在GFW上动起了手脚。

你可能在访问某些网站时发现这个网站被浏览器提示为“不安全”,那时因为这个网站使用了HTTP协议,HTTP协议下,你和网站之间的通信是不加密的,意味着任何人都可以看到你和网站间干了什么。

而在十几年以前,世界上绝大多数的网站都是使用HTTP协议。于是GFW会检测你发往国外的数据包里是否含有敏感的信息,如果发现了就会拦截下来,并且给你指向一个错误的IP地址,而且域名查询通常基于的UDP协议是无连接不可靠的协议,查询者无法验证返回结果的正确性。你的电脑接收到了IP地址,开开心心地准备访问,却发现那个IP地址是根本无法打开你本来想要访问的网站的。并且由于DNS服务器会缓存来加快速度,所以这个域名对应的错误的IP地址就会被存储在DNS服务器中,从而导致其他想要访问这个网站的也被导向错误的IP地址。真像在河流的上游投毒导致整条河流都出现问题,投毒这个名词也因此而来。

TCP连接重置

GFW的手段当然不止上面这一种。

TCP重置用于重置连接。一般来说,例如服务器端在没有客户端请求的端口或者其它连接信息不符时,系统就会给客户端回复一个RESET通知消息,可见RESET功能本来用于应对例如服务器意外重启等情况。GFW由于在地理位置上更加靠近双方,所以可以在双方建立联系前给双方发送TCP连接重置,使双方认为对方停止了连接从而断开连接。

在2009年以前这个机制还不太成熟,那时的人们还能愉快地上Google,查Wikipedia(维基百科),学习西方先进科技。不时有好事者,会键入诸如「溜寺」之类这样的神奇词汇,于是区域范围内与Google失联数十分钟。每当到这个时候,周遭网民反映:「哦,谁又撞墙了!」但打壶开水,泡一杯面,还不等吃完,就又可以Google了。

那个时候的「墙」就好像霰弹枪,火力充足,但瞄不太准。一枪下去,打一大片,总是搞得「城门失火,殃及池鱼」。

域名服务器污染造成的相关事件

2010年3月,一名智利域名注册商的技术人员发现向位于国的根服务器查询http://facebook.comhttp://youtube.comhttp://twitter.com等域名时的回复不正常。中国根服务器运营商Netnod于是暂时切断了其与网际网络的连接。安全专家认为这与Netnod(工作人员)无关,而是ZF修改某处网络时造成的污染导致Z国的根服务器被关。同年3月,Google位于北京中关村的办公室楼下堆满了鲜花,网友以这种方式纪念因「遭受Z国黑客攻击」和「网络审查」而决定退出中Z国大 市场的Google。

2012年11月9日下午3点半开始,防火长城对Google的泛域名*.http://google.com进行了大规模的污染,所有以.http://google.com结尾的域名均遭到污染而解析错误不能正常存取,其中甚至包括不存在的域名,而Google为各国客制化的域名也遭到不同程度的污染(因为Google通过使用CNAME记录来平衡存取的流量,CNAME记录大多亦为.http://google.com结尾),但Google拥有的其它域名如.http://googleusercontent.com等则不受影响。

2014年1月21日下午三点半,中国网际网络顶级域名解析不正常,出错网站解析到的IP是65.49.2.178,这个IP位于美国加利福尼亚州费利蒙市Hurricane Electric公司,被Dynamic Internet Technology(即自由门的开发公司)租用于翻墙软件连接节点。有研究人员认为这是因为防火长城的工作人员操作失误。

2015年1月2日起,污染方式升级,不再是解析到固定的无效位址(例如环回位址,全零位址即0.0.0.0等),而是随机地指向境外的非保留IP位址。刚开始只是对YouTube视频域名(*.http://googlevideo.com)进行处理,之后逐渐扩大到大多数被污染的域名。这导致了境外服务器遭受来自中国的DDoS攻击,部分网站因此封锁中国IP。

2016年3月29日起,防火长城针对Google升级了污染方式。在一开始升级过后,所有包含google,gmail等关键词的域名查询均被污染,导致很多使用者一时间完全无法正常使用Gmail服务。之后,防火长城对规则进行了调整。其中,对于*.http://google.com域名污染主域名(http://google.com,不包括www)及部分服务域名(http://drive.google.comhttp://plus.google.com等),而针对地区域名则选择性地污染泛域名(*.http://google.com.hk,*.http://google.ru等),其他地区的域名则不受影响(*.http://google.us等)

应对的方法

修改Hosts文件

Hosts 文件是一个储存计算机网络中各节点信息的文件,负责将主机名映射到相应的IP地址,通常用于补充或取代网络中DNS的功能。和DNS不同的是,用户可以直接对 Hosts 文件进行控制。

Hosts 文件的原本目的是提高解析的效率。在进行 DNS 请求以前,系统先检查自己的 Hosts 文件中是否有地址映射关系,由于 Hosts 的请求级别比DNS高,当 Hosts 文件里面有对应的IP地址时,客户端就会直接访问那个IP地址,而不必通过 DNS。各操作系统的 Hosts 文件各有不同,网络上有很多相关资料,在此不赘述。

所以,将 Google、Twitter、Facebook 之类的IP放入 Hosts 文件,就可以不受 GFW 的 DNS 污染干扰。但由于 GFW 的IP地址封锁,大多数情况下,该方法很难有效。

使用ipv6访问网站

ipv6的数量极多,从而大大地增加了GFW封锁IP地址的难度。但现在ipv6尚未普及,且GFW开始对ipv6亦有相应的措施,此方法只在很早以前的一小段时间内有效。

发展

过了几年后,人们终于开始意识到了隐私的重要性,于是HTTPS(HTTP over TLS)协议横空出世。TLS会在用户和网站之间建立联系的过程中进行“三次握手”来建立端到端加密,从而使得第三方无法探测到两者之间发送了什么内容。

DNS污染重出江湖

但是,即使内容加密了,而用户对DNS根服务器的请求信息却依旧是明文的,仍然可以使用DNS污染的方法使得用户无法访问到想要访问的网站。

应对的方法

DoH(DNS over HTTPS)可以将DNS以加密的方式传输,从而消除DNS污染的可能性,在绝大多数浏览器中均有支持。

DoT(DNS over TLS)也可以将DNS以加密的方式传输,但是几乎无主流浏览器支持。

SNI闯大祸

这时有人可能就要问了:“诶,你上面不是说可以通过修改 Hosts 文件和使用DoH、DoT来规避DNS污染的吗,为什么大伙都没发现这个好方法呢?”这时就要引出另一个东西了——SNI。

在TLS的握手信息中并没有携带我们要访问的目标地址,这样会导致一个问题,如果一台服务器有多个主机,且每个主机的域名不一样,使用了不一样的证书,该和哪台主机进行通信?和HTTP协议用来解决服务器多域名的方案类似:HTTP 在请求中会发送一个字段来指定要访问的域名。而TLS 的做法会在和网站的第一次握手中会告诉网站我要访问哪个服务器,这个消息就被称为SNI。

SNI是不加密的,所以GFW可以通过判断你发送的SNI来确认你访问的网站是否为违禁网站,如果是的话则使用类似TCP连接重置的方法来阻断连接。

应对的方法

ESNI或者ECH

ESNI或ECH可以将SNI的消息加密发送从而使得GFW无法通过检测SNI来屏蔽网站,在2018年左右可用。但是后来GFW一刀切,将所有的ESNI或ECH的连接全部阻断,使得只能使用明文传递SNI,从而阻断了这一方法的可行性。

可以预见的是,在不久的将来,GFW与各类新兴技术的博弈不会停止。愿中国早日取消GFW,与国际社会真正接轨。


有关GFW,即通常所说的「墙」的一些事情
https://vincentule.github.io/2022/10/02/有关GFW,即通常所说的「墙」的一些事情/
作者
Vincentule
发布于
2022年10月2日
许可协议