2013年1月12日星期六

人为网络故障的新方式

  笔者在《如何区分国内上网环境中不同的人为网络故障》中曾经介绍过人为网络故障的多种方式,但近阶段又发现出现了新型的人为网络故障,此文将为大家进行介绍这种新型的人为网络故障。

  事情的起因是在前几天公司在海外的服务器工作不正常,国内用户访问该服务器上的网站要么只显示一个标题,然后一直处于加载之中,要么就是无法连接到服务器。经过自己的试验,发现一旦访问了服务器的网站(或者连接了服务器的SSH),五分钟之内便无法和服务器进行通讯,五分钟之内PING全部超时,过了五分钟后恢复。而且经常是网页传输到一半就无法和服务器进行通讯了,所以出现了有时候网站要么只显示一个标题,然后一直处于加载之中,有时候无法连接到服务器的情况。如果五分钟后再次访问服务器上的网站,则此现象就再次重复出现。

  为此,为了诊断故障原因,在无法访问服务器的五分钟内,关闭了服务器的iptables并使用了路由跟踪工具,结果如下:

人为网络故障的新方式

  从路由跟踪的结果发现,最后一跳是74.117.63.66,查询IP所在的地理位置显示此IP所在地为美国,经过《如何区分国内上网环境中不同的人为网络故障》文中介绍的方式判断,似乎问题出在美国的网络部分。为此,和美国服务器提供商进行了联系,同时提供了路由跟踪结果。不过,提供商那里经过检查并没有设置过任何屏蔽IP的机制(包括根据访问后屏蔽五分钟的机制),需要排查国内自己本地网络的问题。

  经过思考,猜想是否有可能是防火墙进行了反向屏蔽:如果网络数据包中的源IP为国内,目标IP在国外,则放行;如果网络数据包中的源IP为国外五分钟内临时被屏蔽的IP,目标IP为国内,防火墙则丢弃该数据包。如果是这样,也就能解释通为什么最后一跳是在美国,但却是防火墙的屏蔽。因为国内发往国外的数据包永远被放行,所以海外服务器可以收到数据包,而在前13跳中返回数据包的IP地址都不在防火墙的黑名单之内,所以TTL超时的数据包仍旧可以发回国内的IP地址(路由跟踪工具的原理就是每次TTL加一,每次经过路由器则TTL减一,如果减到零那么路由器会发送TTL超时的数据包给源IP)。最后一跳之后由于海外的IP地址被屏蔽,则数据包无法送达国内的IP地址。这么解释就可以解释得通为什么最后一跳在美国,但却是防火墙的屏蔽了。

  但猜测归猜测,证据在哪里呢?

  为此,使用了其他代理工具连接上服务器的SSH,在被临时屏蔽的五分钟内反向路由追踪国内无法访问网站的IP地址,结果如下:

人为网络故障的新方式

  从反向路由追踪结果看,最后一跳是202.97.33.101,地理位置查询该IP属于“上海市 电信骨干网”,从而验证了猜测。而反向追踪的第一跳74.117.63.66又正好是正向路由追踪中的最后一跳,又再次验证了猜想中的正向路由追踪中的最后一跳之后的IP地址(也就是服务器的IP地址)被屏蔽的情况。至此,问题已经明确。

  之后,又再次在五分钟临时被屏蔽的时间内反向追踪了上海的其他IP地址,显示可以正常访问,并不影响服务器访问国内的网站,只有国内的IP地址首先对国外被屏蔽的IP地址发起通讯才能触发被五分钟临时屏蔽:

人为网络故障的新方式

  而《如何区分国内上网环境中不同的人为网络故障》中介绍的通过国内IP路由跟踪国外IP进行判断是国内人为的网络故障还是海外的网络故障在一些情况中将不再适用。

  来源:投稿,作者:DavidSky,作者E-mail:lehui99 (at ) gmail.com