前言——关于虚拟路由
SDN,抑或是OpenFlow,能否为路由市场开辟一个新的时代?以OpenvSwitch为代表的开源软件交换机,已经推动SDN界发展了一段路程,但是,开源的、基于软件的路由器或路由方案却显得很少。为此,本文介绍了三种比较成体系的虚拟路由方案,并对其中一款做一个架构简述。本文所介绍的虚拟路由方案主要是:OpenContrail,Vyatta,RouteFlow。
OpenContrail
OpenContrail包含OpenContrail控制器和OpenContrail虚拟路由。
OpenContrail控制器是一个逻辑上集中但是物理上分布的SDN控制器,为虚拟网络提供管理,控制和分析功能。
OpenContrail vRouter是一个分布式的路由服务,运行在虚拟服务器的hypervisor上,将网络从一个数据中心的网络的物理路由器和交换机扩展成一个虚拟的基于虚拟服务器主机之间通讯的overlay网络。
在OpenContrail中,虚拟路由器和hypervisor紧密结合,借助MPLS over GRE/UDP或VXLAN实现Overlay网络。penContrail的跨数据中心虚拟化是借助MPLS L3 VPN或者EVPN实现的,这种技术比较成熟可靠。OpenContrail虚拟路由器从概念上和现在vSwitch非常接近,但是它提供路由以及更高层的服务(使用vRouter替代vSwitch)。
OpenContrail架构:
可以看到其中包含的分布式的控制器和vRouter。OpenContrail提供了完善的东西南北向接口。北向接口提供的REST接口能被供应商使用,或是集成至OpenStack之类的系统(ONOS也提供了类似功能的北向接口);南向接口主要是用于虚拟或物理网络环境的通讯;东西向接口可以与其他控制器通讯。在OpenContrail中使用了多种协议,如BGP、XMPP、Netconf等,在图中可以看到它们的用途。
实际上,控制器包含三个组件,可以部署在不同物理节点上的组件:配置节点、控制节点和分析节点。
配置节点:作为中介,在上层应用和下层基础间提供转换,即利用底层基础实现上层应用的功能。
控制节点:主要负责网络的信息同步,确保环境中的信息一致。
分析节点:提供的功能有点类似于统计分析,把收集回来的系统数据进行分析并进行展示。关于虚拟路由功能:
虚拟路由器是一个用户空间进程,在Linux中运行,是一个本地的,轻量控制平面。并且每个虚拟路由器都会连接至少两个控制节点,提供了路由的冗余。
虚拟路由器主要依靠XMPP接受来自控制节点上的配置状态,并实现这些配置状态,同时兼顾事件和日志等汇报工作。
关于XMPP:
XMPP基于XML,原叫Jabber,OpenContrail系统使用XMPP作为一个计算节点和控制节点之间的通用信息总线。
RouteFlow:
RouteFlow是由巴西CPQD公司开发的一套虚拟IP路由服务。目前的网络设备大多是专有软件运行在专有硬件上,价格高昂,难以被编程,一定程度上限制了创新。RouteFlow的开发动机就是在开源路由工具的基础上,结合开放api,在商用硬件上实现一个性能良好的,可定制的开放路由方案。
与传统的路由架构比较:
现有方案:
Routeflow方案:
可以看到,控制逻辑位于控制器,分离数据平面与控制平面。这样一来,硬件架构就可以进一步简化。
#p#
系统组成:
架构图:
一套完整的Routeflow包含以下几个主要组件:RF-Controller,RF-Server,RF-Slave
系统的关键特性:
1.分离的数据平面与控制平面
2.松耦合的架构
3.不变的路由协议堆栈
4.容易扩展为多控制器
5.支持多种虚拟化技术
6.支持多种交换机
RF-Controller:
这是一个基于Openflow控制器的应用,为Openflow API扮演一个proxy的角色,同时与Openflow datapath相互作用,与RF-Server协同工作,接收flow相关的命令并通过OVS为VM传送数据。
RF-Server:
它作为Routeflow的核心,它负责的工作主要有管理VM,配置虚拟环境(virtual environment),接收来自RF-Controller的事件(如packet-in),使VM与Openflow交换机关联起来决定VM的数据包的传输,请求在Openflow交换机中安装或修改一个flow。
RF-Slave:
它作为daemon在基于Linux的VM中运行,还负责把VM注册到RF-server并配置VM,通过Linux netlink事件监听ARP与IP表的更新,把路由更新(routing updates)转换为flow规则,把ARP entry转换为flow规则,它还可以发送flow updates至RF-Server。
它主要配置接口,启用、关闭路由引擎,执行对接口配置和ARP或路由表的清理。
Routeflow所依赖的一些软件:
Quagga:
Quagga是由一个日本开发团队编写的一个以GNU版权方式发布的软件。该项目自1996年运作至今。
借助Quagga可以实现一台功能完备的路由器。Quagga能够同时支持RIPv1、RIPv2、RIPng、OSPFv2、OSPFv3、BGP-4和 BGP-4+等诸多TCP/IP协议。Quagga的特性主要有:模块化设计:它使用了模块化的架构,一种协议对应一个模块。
运行速度快:基于模块化的架构,速度很快。
可靠性高:可以在工作期间进行故障诊断和修复。
支持Ipv6:Quagga不仅支持Ipv4,还支持Ipv6。
容易上手:Quagga的配置方式和Cisco的IOS几乎完全相同。
#p#
MongoDB:
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
特点:高性能、易部署、易使用,存储数据非常方便。
主要功能特性有:
面向集合存储在Routeflow中提供基本的路由功能。
无模式
动态查询
支持索引
支持复制和故障恢复
使用BSON格式储存数据
能自动处理碎片,以支持云计算层次的扩展性
支持Python,Java等多种语言的绑定
在Routeflow中主要为RF-Serve储存数据。
Vyatta:
Vyatta公司在2002年提供了开源版本的虚拟路由,后来博科收购了Vyatta虚拟路由,后来更是推出了Vyatta控制器,野心不小,目的是能控制所有博科的硬件设备和符合ODL标准的相关硬件。目前Vyatta的相关资料并不多,但是博科提供了Vyatta 5400的60天免费试用。
但是,出现了一个社区版fork,叫VyOS。VyOS支持的平台从KVM、XEN、VMware、Hyper-V到VirtualBox。支持IPv4和IPv6 BGP,OSPFv2及OSPFv3(尚不完全),RIP等。
结语:
目前市面上可供选择的虚拟路由方案并不多,只有像Juniper收购的OpenContrail,Brocade的Vyatta。所属Juniper的OpenContrail,的确在整体上都是非常给力的,但是Juniper似乎没有好好地维护开源版的文档及软件源,部署有相当大的困难。
Brocade的Vyatta只有60天的试用,始终不是最好的研究对象,但生产环境可以考虑下。也可以考虑使用下由社区主导的VyOS。只剩CPQD的RouteFlow比较适合研究,但是要应用到生产环境就得花点功夫,文档并不多。
在如今的虚拟路由市场,竞争并不健康,在传统网络硬件供应商的割据下,并不利于学术研究。本文在介绍其他两种方案的同时对Routeflow的架构做了大体的介绍,希望本文能对各位研究者有所帮助。