Nov 5, 2009

深入理解GFW:路由扩散技术

GFW的重要工作方式之一是在网络层的针对IP的封锁。事实上,GFW采用的是一种比传统的访问控制列表(Access Control List,ACL)高效得多的控制访问方式——路由扩散技术。分析这种新的技术之前先看看传统的技术,并介绍几个概念。

访问控制列表(ACL)

ACL可以工作在网络的二层(链路层)或是三层(网络层),以工作在三层的ACL为例,基本原理如下:想在某个路由器上用ACL控制(比如说是切断)对某个IP地址的访问,那么只要把这个IP地址通过配置加入到ACL中,并且针对这个IP地址规定一个控制动作,比如说最简单的丢弃。当有报文经过这个路由器的时候,在转发报文之前首先对ACL进行匹配,若这个报文的目的IP地址存在于ACL中,那么根据之前ACL中针对该IP地址定义的控制动作进行操作,比如丢弃掉这个报文。这样通过ACL就可以切断对于这个IP的访问。ACL同样也可以针对报文的源地址进行控制。如果ACL工作在二层的话,那么ACL控制的对象就从三层的IP地址变成二层的MAC地址。从ACL的工作原理可以看出来,ACL是在正常报文转发的流程中插入了一个匹配ACL的操作,这肯定会影响到报文转发的效率,如果需要控制的IP地址比较多,则ACL列表会更长,匹配ACL的时间也更长,那么报文的转发效率会更低,这对于一些骨干路由器来讲是不可忍受的。

路由协议与路由重分发

而GFW的网络管控方法是利用了OSPF等路由协议的路由重分发redistribution)功能,可以说是“歪用”了这个本来是正常的功能。

动态路由协议

说路由重分发之前先简单介绍下动态路由协议。正常情况下路由器上各种路由协议如OSPF、IS-IS、BGP等,各自计算并维护自己的路由表,所有的协议生成的路由条目最终汇总到一个路由管理模块。对于某一个目的IP地址,各种路由协议都可以计算出一条路由。但是具体报文转发的时候使用哪个协议计算出来的路由,则由路由管理模块根据一定的算法和原则进行选择,最终选择出来一条路由,作为实际使用的路由条目。

静态路由

相对于由动态路由协议计算出来的动态路由条目,还有一种路由不是由路由协议计算出来的,而是由管理员手工配置下去的,这就是所谓的静态路由。这种路由条目优先级最高,存在静态路由的情况下路由管理模块会优先选择静态路由,而不是路由协议计算出来的动态路由。

路由重分发

刚才说到正常情况下各个路由协议是只维护自己的路由。但是在某些情况下比如有两个AS(自治系统),AS内使用的都是OSPF协议,而AS之间的OSPF不能互通,那么两个AS之间的路由也就无法互通。为了让两个AS之间互通,那么要在两个AS之间运行一个域间路由协议BGP,通过配置,使得两个AS内由OSPF计算出来的路由,能通过BGP在两者之间重分发。BGP会把两个AS内部的路由互相通告给对方AS,两个AS就实现了路由互通。这种情况就是通过BGP协议重分发OSPF协议的路由条目。

另外一种情况,管理员在某个路由器上配置了一条静态路由,但是这条静态路由只能在这台路由器上起作用。如果也想让它在其他的路由器上起作用,最笨的办法是在每个路由器上都手动配置一条静态路由,这很麻烦。更好的方式是让OSPF或是IS-IS等动态路由协议来重分发这条静态路由,这样通过动态路由协议就把这条静态路由重分发到了其他路由器上,省去了逐个路由器手工配置的麻烦。

GFW路由扩散技术的工作原理

前面说了是“歪用”,正常的情况下静态路由是由管理员根据网络拓扑或是基于其他目的而给出的一条路由,这条路由最起码要是正确的,可以引导路由器把报文转发到正确的目的地。而GFW的路由扩散技术中使用的静态路由其实是一条错误的路由,而且是有意配置错误的。其目的就是为了把本来是发往某个IP地址的报文统统引导到一个“黑洞服务器”上,而不是把它们转发到正确目的地。这个黑洞服务器上可以什么也不做,这样报文就被无声无息地丢掉了。更多地,可以在服务器上对这些报文进行分析和统计,获取更多的信息,甚至可以做一个虚假的回应。

评价

有了这种新的方法,以前配置在ACL里的每条IP地址就可以转换成一条故意配置错误的静态路由信息。这条静态路由信息会把相应的IP报文引导到黑洞服务器上,通过动态路由协议的路由重分发功能,这些错误的路由信息可以发布到整个网络。这样对于路由器来讲现在只是在根据这条路由条目做一个常规报文转发动作,无需再进行ACL匹配,与以前的老方法相比,大大提高了报文的转发效率。而路由器的这个常规转发动作,却是把报文转发到了黑洞路由器上,这样既提高了效率,又达到了控制报文之目的,手段更为高明。

这种技术在正常的网络运营当中是不会采用的,错误的路由信息会扰乱网络。正常的网络运营和管控体系的需求差别很大,管控体系需要屏蔽的IP地址会越来越多。正常的网络运营中的ACL条目一般是固定的,变动不大、数量少,不会对转发造成太大的影响。而这种技术直接频繁修改骨干路由表,一旦出现问题,将会造成骨干网络故障。

所以说GFW是歪用了路由扩散技术,正常情况下没有那个运营商会把一条错误的路由信息到处扩散,这完全是歪脑筋。或者相对于正常的网络运营来说,GFW对路由扩散技术的应用是一种小聪明的做法。正常的路由协议功能被滥用至此,而且非常之实用与高效,兲朝在这方面真是人才济济。

测量

GFW动态路由系统概括起来就是:人工配置(c)样本路由器(sr)的静态路由(r),向各ISP的出入口路由器(or)扩散此路由(r),将特定网络流量转到黑洞服务器(fs)进行记录。因此可以进行测量的项目有:

  • (r)被封锁的IP列表:可以通过协作报告机制收集用户报告,也可通过扫描著名站点获得;(传言:GFW动态路由系统的容量是几十万条规则)
  • (or)受到GFW影响的ISP出入口路由器:通过在广域多ISP内的节点协作traceroute可以测得;
  • (or)-(c)从关键词生效到动态路由生效的延迟:通过建立蜜罐并提交给GFW然后观察其响应;
  • (fs)黑洞服务器的健壮性:用伪源噪音流量对黑洞服务器进行填充,观测其响应。

参考文献

刘刚, 云晓春, 方滨兴, 胡铭曾. "一种基于路由扩散的大规模网络控管方法". 通信学报, 24(10): 159-164. 2003.

李蕾, 乔佩利, 陈训逊. "一种IP访问控制技术的实现". 信息技术, (6). 2001.

9 comments:

  1. 不得不说这个思路很强,比DNS污染还要恶劣一些,
    没有具体细想,但我觉得这个方法似乎连IPv6都可以涵盖进去,天。。。黑暗不到头

    ReplyDelete
  2. 可否提供文末的两篇论文的下载?网上的都是要收费的。

    ReplyDelete
  3. https://docs.google.com/fileview?id=0B8acX7-GnTTYYzhjMWM0YmMtODYyMy00YzBiLTkyM2QtNDFlODBhNjk3N2Nj&hl=zh_CN

    https://docs.google.com/fileview?id=0B8acX7-GnTTYMWZmNjUwYTgtYjMxOS00YjRlLWE1MDYtZmEwNWRiZGY3MDAx&hl=zh_CN

    ReplyDelete
  4. 原来是查acl表,现在改查路由表,换汤不换药而已。这种方法主要应用还是解决acl表的扩散和自动生效。

    ReplyDelete
  5. 在模拟器上用5台3640搞出来了。
    配置的基本命令我已经实现出来了。。。不过忘记保存了。。。 copy run start。。。。气死了。。。
    我是用rip到ospf的重发布实现的。
    一个linux 主机弄rip 然后一个cisco 建立一个asbr 就可以了
    直接填到 null0口就可以了。。。。。
    http://docs.google.com/View?id=djckht2_580hrz2gbcg topology

    ReplyDelete
  6. https://docs.google.com/View?id=djckht2_582gfqxgnft

    ReplyDelete
  7. 刚看到这个 不由得想问一句 如果有了ip黑名单和dns污染 关键字审核之类的

    为何还要这个路由扩散技术 不是重复功能了么

    ReplyDelete
    Replies
    1. 路由扩散技术就是用来实现ip黑名单的

      Delete