acm-header
登录

ACM通信

实践

水龙头:企业部署SDN网络


水龙头:在企业中部署SDN,插图

来源:iStockPhoto.com

回到顶部

2008年出版的《OpenFlow:在校园网中实现创新》(OpenFlow: Enabling Innovation in Campus Networks)提出,网络(最初的校园网和企业网)可以更像灵活的软件,而不是僵化的基础设施,允许快速、安全地部署新的网络服务和bug修复。7

从那时起,许多人分享了他们在广域和数据中心网络中使用软件定义网络(SDN)和OpenFlow的经验,包括在谷歌。10本文将回到企业和校园网,介绍一种用于此类网络的开源SDN控制器:Faucet。“水龙头”控制器为交换机这一最基本的网络元素提供了“插入式”替换,它的创建是为了轻松地将SDN的好处带到今天典型的企业网络中。5

SDN通过硬件和软件的自动化测试实现了这种安全、快速的网络功能开发和部署,而无需耗时的人工实验室测试。正如这里所描述的,在网络运行时,只需几分之一秒就可以完成一个完整的控制平面升级。

网络安全是所有网络运营商和用户都关心的问题。对网络本身的零日攻击尤其令人担忧,因为它可以影响网络上所有用户和服务的安全。因此,网络运营商有一种快速响应的方法是至关重要的,既可以在攻击之前部署新的安全功能或缓解漏洞,也可以尽可能快地、完全地恢复正在遭受攻击的网络,风险尽可能小。SDN在非常低的水平上构建了这种改变和响应网络本身的能力,这是防火墙等外部安全设备无法达到的。

水龙头已经测试过了,它运行正常。它已经被部署在各种设置中,包括开放网络基金会(Open Networking Foundation),后者运行一个Faucet实例作为其办公网络。Faucet使用交换机硬件提供了高转发性能,同时允许运营商向他们的网络添加功能并快速部署它们,在许多情况下不需要更改(甚至重新启动)硬件。此外,它与邻近的非sdn网络设备互操作。

Faucet是基于OpenFlow 1.3标准构建的。8如果没有支持该标准的商用硬件,这是不可能的。许多供应商现在都发布了支持OpenFlow 1.3的硬件,特别是支持多流表和IPv6。为了尽量减少控制器中特定于供应商的逻辑,鼓励供应商以一致的方式支持OpenFlow 1.3标准中的关键特性。这减少了最初的开发和支持成本,简化了错误报告和自动化测试。

虽然SDN作为一种技术在不断发展,并变得更加可编程(例如,使用P4编程语言),但Faucet和OpenFlow 1.3硬件一起就足以实现今天的好处。本文详细描述了如何利用DevOps实践(“绿色推送”)6)快速开发和部署功能。它还描述了几个实际的部署场景,包括防火墙和网络功能虚拟化。

回到顶部

当今企业网络管理

许多企业网络由多层交换机组成,通常使用vlan将用户划分到不同的管理域(例如,销售与工程分离)。连接到这些开关的是各种各样的电器和设备9需要进行网络管理和安全策略的实施,有时需要复杂而脆弱的转发策略将其放入报文的路径中。非sdn交换机是不可编程的(根据定义),因此它们的转发和安全策略由每个供应商的专有配置语言定义。在某些情况下,外部系统(如入侵检测系统(IDS))可以对网络进行粗略更改,以实现动态安全策略(例如,如果IDS确定某个主机端口上的某个主机感染了恶意软件,则禁用该主机端口)。

今天的网络运营商负责管理和集成广泛的设备和设备,如果可用的设备不具备实现预期策略结果所需的必要特性,则可能难以实现特定的安全策略。使用不灵活的工具操作和维护一个安全的网络需要相当多的技能和努力,而且由于网络不能被编程,自动化的机会是有限的。当供应商要么不提供可编程性,要么只提供在特定供应商的设备上运行最好的专有自动化技术时,情况尤其如此。

回到顶部

在当今企业网络中部署水龙头

为了实现SDN的好处,你必须能够部署它。部署必须是简单的,并且理想情况下是增量式的。为了适应这些现实生活的需求,Faucet被设计来取代传统的非sdn交换机,一个对一个,如图所示图1在该网络中实现SDN的好处,而无需进行显著的基础设施更改。

Faucet作为两个系统的一个单元部署:一个控制器主机(通常是运行Ubuntu Linux的主机,运行Faucet控制器应用程序)和一个OpenFlow交换机(例如,Allied Telesis x930系列交换机),它们是直接连接的。控制器接受一个配置文件,该文件描述哪些端口属于哪个VLAN(或者某个端口是否属于VLAN中继)。据报道,在最近的部署中,整个安装过程,包括创建配置文件(类似于非sdn交换机配置文件),只需要几分钟。


虽然SDN作为一种技术在继续发展,并变得更加可编程,但Faucet和OpenFlow 1.3硬件一起就足以实现今天的好处。


然而,止步于简单的部署不会实现有意义的好处。实际上,用一台控制器机器替换一个开关(注意一台控制器机器可以控制多个开关)而且开关占用更多的空间和电力。其好处在于控制器和控制软件都独立于交换机硬件,完全在网络运营商的控制范围内,而不是成为一个封闭的供应商提供的不能重新编程的设备。

控制器可以是众多的高可用性水龙头支持冗余的控制器和大或小的需要。Faucet使用树莓派作为控制器在一个站点的生产中运行,这是实用的,因为有了Faucet,交换机硬件进行转发,控制器不需要非常强大,因为它不需要转发流量,把这留给更高性能的交换机硬件。

回到顶部

把代码推到绿色的网络上

“绿色推进”指的是一种能够以自动化的方式创建和测试软件的理念,这样就可以很容易地检测到代码的“绿色”状态,并准备推出尽可能少的bug。6谷歌在最近的一本书中发布了一些部署和管理大型可靠软件系统的策略,站点可靠性工程。3.SDN有望将这些策略应用到网络软件中。

与此相一致的是,Faucet软件栈包括一个单元测试框架,2这样就可以通过单元测试开发新功能,并且测试可以在模拟(Mininet虚拟网络)和硬件交换机上运行。测试检测到“绿色”,操作人员可以“推动绿色”,并相信系统将按照测试结果工作。这就完成了特性级和系统级的测试——在开发阶段,甚至在部署甚至实验室测试之前,就可以捕获系统和集成问题。

例如,许多非sdn交换机将单播泛洪作为学习过程的一部分,4这样交换机就能发现哪些主机连接到哪些端口。学习的工作原理是这样的:主机发送一个目的不明的以太网数据包,交换机将该数据包发送到所有端口,希望目标主机能够响应。出于安全原因,这可能是不可取的,而且在许多非sdn交换机中,这种行为是硬编码的。

Faucet特性仅从ARP (Address Resolution Protocol)和邻居发现报文中实现交换机学习,从而避免了对单播报文的泛洪。该功能被实现,通过包括硬件和软件在内的单元测试进行测试,并推送到github上。在控制器机器上,操作员运行“git pull”,然后运行“service faucet restart”,完成了一个完整的控制器升级和重启。转发中断不到一秒。其他涉及到对控制器的更改的功能,甚至更有野心的功能,也可以以同样的方式部署。

图2,使用OpenFlow 1.3和多表实现了所有特性,实现了VLAN交换、IPv4和IPv6路由(静态和通过BGP路由协议)、访问控制列表(access control list)、端口镜像和基于策略的转发。交换机完成所有的转发工作,并且在交换机上不使用“混合”模式功能。混合模式是指交换机混合使用非可编程、非sdn本地处理和OpenFlow控制。Faucet不需要这样的开关-本地处理,根据我们的经验,混合模式通过引入本地和OpenFlow控制之间冲突的可能性,增加了复杂性并限制了可编程性。

一小部分流量被复制到控制器,这样控制器就可以知道哪些主机在哪些端口上,这样控制器本身就可以解析下一跳(如果配置了路由)。控制器通常是空闲的,除非添加主机或在端口之间移动主机(在这种情况下,控制器根据需要重新编程管道)。Faucet具有针对控制平面攻击的基本保护(例如,限制欺骗的以太网MAC地址)。因为管道完全由控制器编程,网络操作员可以通过改变控制器软件来随意改变转发行为。


水龙头有基本的防护控制平面攻击。因为管道完全由控制器编程,网络操作员可以通过改变控制器软件来随意改变转发行为。


当硬件开关启动时,它建立到控制器的OpenFlow连接。控制器提供初始管道,包括对VLAN标记和任何acl的期望(如果配置了的话),并添加“默认拒绝”规则(所有未知流量都显式丢弃)。当检测到新主机时,交换机将发送一份以太网头的副本给控制器,并(如果启用了单播泛洪功能)将其泛洪到同一VLAN内的所有其他端口,或者(如果禁用了单播泛洪功能)仅当报文是IPv6邻居发现或ARP报文时才泛洪。然后控制器对信息流进行编程,使来自该以太网源地址的未来数据包通过交换机转发。这些流定期超时,并在必要时由控制器刷新,这允许交换机节省资源。

回到顶部

CPN的作用和控制平面的安全

控制平面网络CPN (control plane network)通过专用端口连接控制平面机器和交换机。在许多部署中,这只是一根高质量的三英尺以太网线,在生产中观察到,它的可靠性并不低于CPU和非sdn交换机中数据平面之间的内部连接。事实上,如果三英尺长的电缆出现故障,可以很容易地更换。在大型部署中,一台控制器机器控制多个OpenFlow交换机,三英尺长的电缆可以被几根以太网电缆和一个高质量的非sdn交换机所取代。交换机和Faucet控制器之间的控制器连接可以通过证书或甚至macsec支持的接口来保护。(MACsec是IEEE 802.1AE MAC安全标准。)

许多交换机允许控制连接丢失的处理配置:“失败安全”(保持转发并使用当前编程的流,直到它们过期)或“失败独立”(本质上恢复为一个不可编程的交换机)。Faucet在所有流上实现过期时间,如果在可配置的时间段内没有控制器可以到达,这将导致转发停止,所以Faucet期望交换机处于“失败安全”模式。可以更换CPN(和交换机),如果在流量过期时间内完成,则在生产中已经完成,不会中断转发。(另一方面,在独立的非sdn交换机中更换后平面而不中断转发通常是不可能的。)

回到顶部

强大的控制者是机会

在非sdn交换机中,嵌入式CPU通常是功耗和成本最优化的。然而,对于Faucet,控制器可以是一个通用计算机,或者实际上是一个强大的服务器类计算机。这代表了一个使用控制器硬件作为开源网络协处理器或防火墙设备的替代方案的机会,水龙头开关有效地为强大的机器提供了许多额外的端口。

在第一作者自己的部署1控制器机器还运行Ubuntu的ufw(简单防火墙)包,它实现NAT(网络地址转换)和防火墙;兄弟(https://www.bro.org/),这是一个IDS(入侵检测系统);以及Internet软件联盟的dhcpd(动态主机配置协议守护进程)来动态分配地址。所有三个vlan都连接到控制器机器上的一个专用端口。在“Faucet”的主机端口上设置acl,防止主机在每个VLAN内欺骗控制器的IP地址(防止代理ARP攻击)。Faucet ACL是跨层操作的,因此一个ACL表项可以匹配,例如以太网类型,以及IP地址和MAC地址。

更复杂的配置是可能的;例如,可以通过控制器的trunk端口,为每个VLAN分配一个Linux容器,并为每个交换机端口运行一个单独的iptables链。这实现了完全的隔离和基于端口的完全安全策略定制,而不需要对交换机进行任何更改。

Faucet与当前常见的网络管理实践不同,因为它不实现简单网络管理协议(SNMP)。相反,Faucet控制器将统计数据(字节、数据包、从每个端口进出的数据)推送到外部系统。水龙头支持InfluxDB (https://influxdata.com/),这是一个开放源码的时间序列数据库。将Faucet与开源可视化系统Grafana (http://grafana.org/),就可以构造仪表板并对当前和历史数据运行查询,如图3.Faucet还可以生成统计数据的JSON (JavaScript对象表示法)日志,可以将其翻译并输入到另一个系统中。

向北的API。SDN社区一直在争论控制器外部的业务、安全或其他应用程序应该使用哪些api来控制控制器(例如,要求控制器对网络上给定用户的流量进行优先级排序)。Faucet没有“一个真正的”北向API,因为不需要通用API。操作员可以在Faucet之上开发一个应用程序,该应用程序向Faucet交付一个新的配置文件,并要求Faucet应用它(例如,更改用户VLAN)。或者,运营商可以直接修改控制器代码,以添加所需的功能,或者添加一些其他API,以方便运营商的需求(例如,集成Bro IDS)。

回到顶部

与其他SDN控制器项目的关系

SDN社区有几个控制器项目。两个著名的是ODL (OpenDaylight,https://www.opendaylight.org/)和ONOS(开放网络操作系统,http://onosproject.org/).这两个控制器都有很多雄心壮志,并且已经成为技术的示范者。然而,由于SDN在更广泛的行业中的运营经验仍处于早期阶段,在当今的网络与ODL和ONOS的目标网络之间提供低风险的增量迁移路径是很重要的。Faucet可以提供一个这样的路径,并帮助告知正在进行的新网络抽象和编程框架的设计。此外,今天的网络运营商社区传统上不编写自己的软件。虽然DevOps可能是许多服务运营商的主流,但它不是网络运营商的主流,重要的是让这种实践的好处直接与他们相关。

回到顶部

结论

由于缺乏可供当今网络运营商社区使用的软件,SDN的好处一直难以实现。尽管Faucet仍然是一个非常简单的系统,但它对运营商来说已经足够有用了,他们可能会采取下一步迁移到SDN,使他们能够采用和享受Faucet提供的快速特性开发、部署和测试的具体好处。

下载水龙头。Faucet的开发源代码可以在这里找到https://github.com/REANNZ/faucet,或可在此下载https://pypi.python.org/pypi/ryu-faucet/(包括Docker映像)方便安装。

ACM队列的q戳相关文章
queue.acm.org

SDN之路
Nick Feamster等人。
http://queue.acm.org/detail.cfm?id=2560327

OpenFlow:一个全新的网络理念
托马斯·a·利蒙切利
http://queue.acm.org/detail.cfm?id=2305856

专门打造的全球网络:谷歌向SDN的转移
http://queue.acm.org/detail.cfm?id=2856460

回到顶部

参考文献

1.Bailey, J. NFV/防火墙卸载与水龙头。水龙头SDN, 2016;http://faucet-sdn.blogspot.co.nz/2016/05/nfvfirewall-offload-with-faucet.html

2.单元测试框架。水龙头SDN, 2016;http://faucet-sdn.blogspot.co.nz/2016/06/unittesting-hardware.html

3.拜尔,B.,琼斯,C.,皮托夫,J.和墨菲,N.R,编。站点可靠性工程。奥莱利媒体,2016年。

4.思科。交换校园网的单播泛滥,2016;http://www.cisco.com/c/en/us/support/docs/switches/catalyst-6000-series-switches/23563-143.html

5.水龙头;https://github.com/REANNZ/faucet

6.Klein, d.v., Betser, D.M.和Monroe, M.G.使“推动绿色”成为现实:维护生产服务所涉及的问题和行动。谷歌研究,2014;http://research.google.com/pubs/pub42576.html

7.McKeown, N.等。OpenFlow:促进校园网的创新。ACM SIGCOMM计算机通信评论, 2(2008), 6974。

8.开放网络基金会。OpenFlow开关规范,版本。1.3.3, 2013;https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.3.3.pdf

9.Sherry J.和Ratnasamy, S.企业中间盒部署的调查。技术报告UCB/EECS-2012-24。加州大学伯克利分校;http://www.eecs.berkeley.edu/Pubs/TechRpts/2012/EECS-2012-24.pdf

10.揭开谷歌网络基础设施的帷幕。谷歌研究博客,2015;http://googleresearch.blogspot.com/2015/08/pulling-back-curtain-on-googles-network.html

回到顶部

作者

乔什·贝利我是谷歌的软件工程师,过去11年一直从事网络管理和研究项目。他在新西兰惠灵顿工作。

斯蒂芬•斯图尔特在过去的13年里,他一直在位于加州山景城的谷歌担任杰出的软件工程师。

回到顶部

数据

F1图1。非SDN和水龙头SDN的比较。

F2图2。水龙头都是OpenFlow管道。

F3图3。使用Faucet和Grafana构造仪表板并运行查询。

回到顶部


版权由所有者/作者持有。

数字图书馆是由计算机协会出版的。版权所有©2017 ACM, Inc.


没有找到条目

Baidu
map