GFW对境外网站的干扰主要是通过这两种手段,DNS劫持与污染,(当然不可能只是这两种,不然通过修改hosts就能科学上网了)这两种手段本质上是不同的,本文简单从技术层面分析一下,没有别的意思。
先说一下DNS劫持,电脑主机在发出某些敏感域名dns解析请求的时候,正常情况下是由负责解析改域名的DNS服务商解析,但是由于GFW的原因,在某个还没到达DNS服务商的节点上,GFW拦截了通向正常DNS服务器的数据,接管了解析请求,篡改DNS服务器上的数据,给电脑主机返回了一个错误的地址,DNS服务商没有接收到请求,所以也不会返回数据,这时候电脑不能正常解析到地址也就无法访问网站。下面看下实验:
使用Wireshark抓包,我们只抓DNS包,然后开始抓包,在Bash中执行:
#dig @114.114.114.114 www.twitter.com
然后看下Wireshark抓的包:
可以看出返回的ip是一个虚假的ip,查询一下,是阿塞拜疆的一个ip,很显然是假的。
这时候会有人提出一个建议,更换主机的dns服务器为Google的或者Opendns的,这种方式也是无法科学上网的,这就涉及到第二个名词:
DNS污染:当GFW在某个节点发现请求了敏感域名和境外dns的时候,会抢先于境外dns返回一个数据给用户主机,毋庸置疑,肯定是身处境内的GFW服务器更快,而且DNS使用的基本上是UDP协议。还是实验一下:
使用Wireshark抓包,使用境外DNS服务器,只抓DNS包,然后开始抓包,在Bash中执行:
#dig @8.8.8.8 www.youtube.com
然后看下抓包情况:
可以看到8.8.8.8一共返回了3组数据,很明显前两个是GFW伪装8.8.8.8返回的数据,那两个ip一个在阿塞拜疆一个在韩国,DNS收到第一个返回数据就不再管后面的了,DNS污染成功。