GFW探测记录

因为很多原因,GFW 起步与我国互联网萌芽时期(1998 年左右),用于政治目的和保护青少年健康,审查手段比较多,目前主要针对以下几点进行外网过滤:

  1. DNS污染
  2. IP封锁(目前来看不涉及 IPv6)
  3. 端口封锁
  4. 无状态TCP协议连接重置
  5. TLS握手证书干扰

DNS污染

DNS(基于udp/ip,端口53)污染会将目的url的 DNS 解析到错误的 ip 地址,比如说:google.co.uk 在 2017 年 7 月的 ip 为 216.58.213.99。而使用 114 的 DNS 服务器(比如:114.114.114.119),google.co.uk 将被解析到 93.46.8.89(属于意大利,参见:https://www.boip.net/ipv4/93.46.8.89)。

无论哪个环节的问题,有一点可以肯定,即存在 DNS 报文的劫持。比如我们改用 Google DNS 之一 “8.8.8.8” 请求 google.co.uk,在大陆网络内仍然只能得到错误结果,而国外网络则不然。

为了解决这个问题,可以到 https://github.com/googlehosts/hosts 查看较新的hosts配置。修改 hosts 后,可以不用经过 DNS 服务器,直接使用 hosts 配置文件解析域名。比如目前中文维基的 DNS 即为:

198.35.26.96 zh.wikipedia.org     #中文维基百科
198.35.26.96 zh.m.wikipedia.org   #中文维基百科移动版
198.35.26.96 zh-yue.wikipedia.org #粤文维基百科
198.35.26.96 wuu.wikipedia.org    #吴语维基百科
198.35.26.96 zh.wikinews.org      #中文维基新闻

被污染的还有 DuckDuckGo.comW3Schools.com 等,这些可以通过修改 hosts 文件而修复。而 Google 等不仅被 DNS 污染,其真实 IP 还被屏蔽了,所以很多时候,修改 hosts 往往没有效果。

IP封锁

火长城会将 Google 等网站最新的 IP 加入黑名单,一旦出网路由检测到有计算机访问这些黑名单 IP,路由会有多种手段阻止连接,比如丢弃其数据包,对于 HTTPS 连接,GFW 还可能向双方发送非法证书,阻断连接建立,详见下文。

例如,经笔者测试,在 2017 年 7 月,不借助 VPN 或是代理,直接访问 google.co.uk 的 ip 216.58.213.99,将会得到 timeout。显然这个 IP 已经被 GFW 出网路由屏蔽,而借助 VPN/代理 可以通过 216.58.213.99 访问 google uk。

由于 IPv4 数量级较 IPv6 小很多,GFW 有能力屏蔽。对于 IPv6,GFW 并没有技术能力对其完全屏蔽,所以天朝倾向于不对大众普及,只有少数网络,诸如教育网,科研网络有普及。

端口封锁

原理:防火长城配合上文中封锁的 IP 地址,依据路由扩散技术封锁的方法进一步精确到端口,从而使发往特定 IP 地址上特定端口的数据包全部被丢弃而达到封锁目的,使该IP地址上服务器的部分功能无法在中国大陆境内正常使用。

经常会被防火长城封锁的端口(来源:中文维基百科):

  1. SSH:TCP/22;
  2. HTTP:TCP/80;
  3. HTTPS:TCP/443;
  4. PPTP-VPN:TCP/1723;
  5. L2TP-VPN:UDP/1701;
  6. IPSec-VPN:UDP/500、UDP/4500;
  7. OpenVPN:TCP or UDP/1194;
  8. Squid Cache:TCP/3128;
  9. 在中国移动、中国联通等部分ISP的手机IP段。

无状态 TCP 协议连接重置

防火长城会监控特定 IP 地址的所有数据包,若发现匹配的黑名单动作(例如 TLS 加密连接的握手),其会直接在 TCP 连接握手的第二步(TCP 在完成连接前有三次握手),即 SYN-ACK 之后伪装成对方,向连接两端的计算机发送 RST 数据包(RESET)重置连接,使用户无法正常连接至服务器。

从 2015 年初开始,RST 重置已被实时动态黑洞路由取代。(参见:http://www.chinagfw.org/2015/01/gfw.html

TLS 握手证书干扰

在连接握手时,因为身份认证证书信息(即服务器的公钥)是明文传输的,防火长城会阻断特定证书的加密连接,方法和无状态 TCP 连接重置一样,都是先发现匹配的黑名单证书,要么重置连接,要么丢弃数据包,进而打断与特定IP地址之间的 TLS 握手,让用户和国外服务器无法建立加密连接

下面内容摘自中文维基

Tor 项目的研究人员则发现防火长城会对各种基于 TLS 加密技术的连接进行刺探,刺探的类型有两种:

  1. “垃圾二进制探针”,即用随机的二进制数据刺探加密连接,任何从中国大陆境内访问境外的 443 端口的连接都会在几乎实时的情况下被刺探,目的是在用户创建加密连接前嗅探出他们可能所使用的反审查工具,暗示近线路速率深度包检测技术让防火长城具备了过滤端口的能力。
  2. 针对 Tor,当中国的一个 Tor客户端与境外的网桥中继创建连接时,探针会以 15 分钟周期尝试与 Tor 进行 SSL 协商和重协商,但目的不是创建 TCP 连接。

切断 OpenVPN 的连接,防火长城会针对 OpenVPN 服务器回送证书完成握手创建有效加密连接时干扰连接,在使用 TCP 协议模式时握手会被连接重置,而使用 UDP 协议时含有服务器认证证书的数据包会被故意丢弃,使 OpenVPN 无法创建有效加密连接而连接失败。

GFW 还有其他手段,比如 TCP 协议关键字阻断,但是这种方法基本上被淘汰了。因为截至 2017 年,HTTPS 已经普及,像 Google、Facebook 等网站早就用上了 HTTPS 协议,所以针对 HTTPS 协议,GFW 主要是阻断其 TSL 明文握手时期的数据传输。

一个例子是访问 Twitter:

上例中,使用 Firefox 访问 Twitter,其 TLS 握手被阻断,得到错误的 SSL 证书。

解决方案

目前的解决方案有如下几种:

  1. HTTP 代理(其实这是一个通称,泛指HTTP、SSL、FTP、SOCKS V4、SOCKS V5等代理);
  2. VPN(Virtual Private Network,虚拟专用网络,以 OpenVPN 为代表。不过目前天朝封锁了 OpenVPN,传统 VPN 基本不用了,取而代之的是 SovksV5);
  3. SocksV5(例如 SSH、ShadowSocks(国内大佬 Clowwindy 开发)、赛风等,属于广义上的 HTTP 代理);
  4. 使用 Tor 匿名网络,但国内速度不够理想;
  5. 使用 IPv6 网络,可以访问 Google、Facebook 的 IPv6 服务。

关于 ShadowSockes(维基百科

shadowsocks 是一種基於 Socks5 代理方式的網路資料加密傳輸套件,並採用 Apache 许可证、GPL、MIT 許可證等多種自由軟體許可協定開放原始碼。shadowsocks 分为服务器端和客户端,在使用之前,需要先将服务器端部署到服务器上面,然后通过客户端连接并建立本地代理。目前套件使用 Python、C、C++、C#、Go、Rust 等程式語言开发。

在中国大陆,本工具也被广泛用于突破防火长城(GFW),以浏览被封锁、遮蔽或干扰的内容。2015年8月22日,Shadowsocks 原作者 Clowwindy 稱受到了中国政府的压力,宣布停止维护此计划(项目)并移除其个人页面所存储的源代码。因为移除之前就有大量的复制副本,所以事實上并未停止维护,而是轉由其他贡献者們持續维护中

备注:

  1. 一般在重要会议期间,各大 VPN 就会陷入瘫痪,很多翻墙手段都会被屏蔽。
  2. 参照维基百科,较早时候,GFW 的总吞吐量约为 512Gbps,(512 Gbps = 64 GigaBytes / Second),不过截至 2015 年底,互联网出网带宽已达 4600Gbps,目前 GFW 的吞吐量至少 1000Gbps 以上。

参考:

  1. 维基百科 – GFW
  2. Wikipedia – GFW
  3. 维基百科 – 代理自动配置
  4. 维基百科 – Shadowsocks
  5. https://pac.itzmx.com/(全自动代理脚本 PAC 网站,DNS 可能已被污染,错误指向 Google 等网站)

作者: YanWen

Web 开发者

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s