IP黑洞:目前无解,但仅对部分服务黑洞,如谷歌系(谷歌、推特、YouTube等)
DNS污染:为域名返回一个假的IP。使用hosts文件强制指定域名对应ip或者使用加密的DNS(DoH、DNS 签名等)
HTTP劫持:因为流量不是加密的,GFW作为天然的中间人可以直接进行篡改(如:重定向到404页面、劫持到反诈页面等)。可以使用HTTPS连接规避,但你可能会遇到SNI阻断
SNI阻断:在客户端与服务器建立加密连接前,客户端会发送 Client Hello
报文,而这个报文是明文,并且一般都会携带 server_name
,GFW可以知道你要访问哪个网站,对不在白名单(如:discord.com)的域名进行阻断。因为 server_name
实际上是一个扩展,并不强制,你可以不发送它来规避SNI阻断
我们使用WireShark进行抓包
首先尝试访问 www.baidu.com
这是一个没有被GFW封锁的域名
我们先ping一下
得到ip: 2408:873d:22:18ac:0:ff:b021:1393
通过Hosts强制绑定
通过WireShark进行抓包,可以看到,客户端发送的 Client Hello
可以清晰地看到 Server Name
字段,并且也能正常收到 Server Hello
然后双方便开始通信
查看浏览器,网站正常访问
让我们试试访问 discord.com
我们先ping一下,可以发现,域名和解析到的IP均不通
此时我们尝试使用 itdog.cn
进行v4 ping,并且依次对解析出的域名进行ping
可见,第一个IP通
强制绑定Hosts,尝试抓包
Client Hello
后被GFW检测到Server Name
字段,然后GFW向客户端发送一个 RST
报文,即要求重置客户端连接。在客户端侧,则会收到 ERR_CONNECTION_RESET
即:连接已重置。用户无法访问网页。Server Name
报文
成功访问。在WireShark中并未发现 Server Name
字段
它通过魔改TCP数据包使得GFW无法检测,并且WireShark也无法抓取到Client Hello
报文,但是仍然能建立连接,即服务端发送Server Hello