2008 年发表的《OpenFlow:在校园网络中实现创新》一文提出了一个观点,即网络(最初是校园网和企业网)可以更像灵活的软件,而不是僵化的基础设施,从而可以快速安全地部署新的网络服务和错误修复。7
从那时起,许多人分享了他们在广域网和数据中心网络中使用 SDN(软件定义网络)和 OpenFlow 的经验,包括在 Google。10 本文回归企业网和校园网,介绍了一个用于此类网络的开源 SDN 控制器:Faucet。Faucet 控制器 为最基本的网络元素之一(交换机)提供了“即插即用”的替代方案,其创建目的是为了轻松地将 SDN 的优势带给当今典型的企业网络。5
SDN 通过硬件和软件的自动化测试,实现了网络功能的这种安全快速的开发和部署,无需耗时的手动实验室测试。正如本文所述,可以在网络运行的同时完成完整的控制平面升级,只需不到一秒的时间。
网络安全是所有网络运营商和用户都关心的问题。对网络本身发起的零日攻击尤其令人担忧,因为它会影响网络上所有用户和服务的安全。因此,至关重要的是,网络运营商必须能够快速响应,以便在攻击发生之前部署新的安全功能或缓解漏洞,并在网络遭受攻击时尽快且完全地恢复网络,并尽可能降低风险。SDN 将这种更改和响应能力构建到网络本身的最底层,这超出了防火墙等外部安全设备的范围。
Faucet 已经过测试,并且性能良好。它已部署在各种环境中,包括开放网络基金会(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 交换机配置文件)在内的整个安装过程仅需几分钟。
然而,仅停留在简单的部署上并不能实现有意义的效益。事实上,用一台控制器机器(请注意,一台控制器机器可以控制多台交换机)和一台交换机替换一台交换机需要更多的空间和电力。好处来自于控制器和控制软件都与交换机硬件分离,并且完全在网络运营商的控制之下,而不是无法重新编程的封闭式供应商提供的设备。
控制器可以有很多个以实现高可用性——Faucet 支持冗余控制器——并且可以根据需要进行大小调整。Faucet 在一个站点中使用 Raspberry Pi 作为控制器进行生产运行,这是可行的,因为使用 Faucet 时,交换机硬件负责转发——控制器不必非常强大,因为它不必转发流量,而是将其留给更高性能的交换机硬件。
“绿色推送”指的是一种能够以自动化方式创建和测试软件的理念,从而可以轻松检测代码的“绿色”状态——准备好推出,并尽可能少地包含错误。6 Google 在最近出版的《站点可靠性工程》3 一书中发布了其部署和管理大型可靠软件系统的一些策略。SDN 有望帮助将这些策略应用于网络软件。
为了与此保持一致,Faucet 软件堆栈包含一个单元测试框架2,以便可以使用单元测试开发新功能,并且可以针对模拟(Mininet 虚拟网络)和硬件交换机运行测试。测试检测“绿色”状态,运营商可以“绿色推送”,并确信系统将按测试的方式工作。这实现了功能级别和系统级别的测试——可以在开发时,甚至在部署或实验室测试之前,捕获系统和集成问题。
例如,许多非 SDN 交换机将单播洪泛作为学习过程的一部分来实现4,以便交换机可以发现哪些主机连接到哪些端口。学习的工作方式如下:主机发送一个以交换机未知目的地为目的地的以太网数据包,交换机将该数据包洪泛到所有端口,希望预期的目标主机能够响应。出于安全原因,这可能是不希望发生的,并且在许多非 SDN 交换机中,此行为是硬编码的。
Faucet 的一个功能专门从 ARP(地址解析协议)和邻居发现数据包实现交换机学习,从而使 Faucet 无需洪泛单播数据包。该功能已实现,并使用包含硬件和软件的单元测试进行了测试,并已推送到 github。在控制器机器上,运营商运行“git pull”然后运行“service faucet restart”,从而完成完整的控制器升级和重启。转发中断时间不到一秒。涉及控制器更改的其他功能,甚至更具雄心的功能,也可以以相同的方式部署。
如图 2 所示,Faucet 使用 OpenFlow 1.3 和多表来实现其所有功能,并且目前实现了 VLAN 交换、IPv4 和 IPv6 路由(静态路由和通过 BGP 路由协议)、ACL(访问控制列表)、端口镜像和基于策略的转发。交换机执行所有转发,并且交换机上未使用任何“混合”模式功能。混合模式是指交换机将不可编程的、非 SDN 的本地处理与 OpenFlow 控制混合使用。Faucet 不需要此类交换机本地处理,并且根据我们的经验,混合模式会增加复杂性,并通过引入本地控制和 OpenFlow 控制之间冲突的可能性来限制可编程性。
只有极少一部分流量被复制到控制器,以便控制器可以了解哪些主机位于哪些端口上,并且控制器本身可以解析下一跳(如果配置了路由)。除非添加主机或主机在端口之间移动(在这种情况下,控制器会适当地重新编程管道),否则控制器通常处于空闲状态。Faucet 具有针对控制平面攻击的基本保护(例如,限制欺骗的以太网 MAC 地址)。由于管道完全由控制器编程,因此网络运营商可以自由地通过更改控制器软件来任意更改转发行为。
当硬件交换机启动时,它会与控制器建立 OpenFlow 连接。控制器配置初始管道,包括对 VLAN 标记和任何已配置 ACL 的期望,并添加“默认拒绝”规则(所有未知流量都被显式丢弃)。当检测到新主机时,交换机将以太网报头的副本发送到控制器,并且(如果启用了单播洪泛)将其洪泛到同一 VLAN 上的所有其他端口,或者(如果禁用了单播洪泛)仅当数据包是 IPv6 邻居发现或 ARP 数据包时才洪泛。然后,控制器编程流,以使来自此以太网源地址的未来数据包由交换机转发。这些流会定期超时,并根据需要由控制器刷新,这允许交换机节省资源。
CPN(控制平面网络)在专用端口上连接控制器机器和交换机。在许多部署中,这只是一根高质量的三英尺以太网电缆,在生产环境中观察到,它的可靠性不低于非 SDN 交换机中 CPU 和数据平面之间的内部连接。实际上,如果这根三英尺长的电缆出现故障,可以很容易地更换它。在更大的部署中,一台控制器机器控制多台 OpenFlow 交换机,三英尺长的电缆可以替换为多根以太网电缆和一台高质量的非 SDN 交换机。交换机和 Faucet 控制器之间的控制器连接可以使用证书甚至支持 MACsec 的接口来保护。(MACsec 是 IEEE 802.1AE MAC 安全标准。)
许多交换机允许配置控制连接丢失时的处理方式:“故障安全”(保持转发并使用当前编程的流,直到它们过期)或“故障单机”(恢复为本质上是不可编程的交换机)。Faucet 在所有流上都实现了过期时间,这会导致如果在可配置的时间段内无法访问任何控制器,则转发停止,因此 Faucet 期望交换机处于“故障安全”模式。可以更换 CPN(和交换机),并且如果在流过期时间内完成,这已在生产环境中完成,而不会中断转发。(另一方面,通常不可能在不中断转发的情况下更换独立非 SDN 交换机中的背板。)
在非 SDN 交换机中,嵌入式 CPU 通常针对功耗和成本进行了优化。然而,使用 Faucet,控制器可以是通用计算机,甚至可以是强大的服务器级计算机。这代表了一个机会,可以将控制器机器硬件用作开源网络协处理器或防火墙设备的替代品——Faucet 交换机有效地为一台强大的机器提供了许多额外的端口。
在第一作者自己的部署1中,控制器机器还运行 Ubuntu 的 ufw(简易防火墙)软件包,该软件包实现了 NAT(网络地址转换)和防火墙功能;Bro (https://www.bro.org/),这是一个 IDS(入侵检测系统);以及 Internet 软件联盟的 dhcpd(动态主机配置协议守护进程)来动态分配地址。所有三个 VLAN 都中继到控制器机器上的专用端口。Faucet 在主机端口上具有 ACL,这可以防止主机欺骗每个 VLAN 中的控制器 IP 地址(因此代理 ARP 攻击是不可能的)。Faucet ACL 跨层操作,因此 ACL 条目可以匹配,例如,以太网类型,以及 IP 地址和 MAC 地址。
更复杂的配置是可能的;例如,可以通过控制器的中继端口为每个 VLAN 分配一个 Linux 容器,并为每个交换机端口运行一个单独的 iptables 链。这实现了完全隔离和完全的安全策略定制(以端口为单位),而无需对交换机进行任何更改。
Faucet 背离了当前常见的网络管理实践,因为它没有实现 SNMP(简单网络管理协议)。相反,Faucet 控制器将统计信息(来自每个端口的字节数、数据包数、输入和输出)推送到外部系统。Faucet 支持 InfluxDB (https://influxdb.org.cn/),这是一个开源时序数据库。将 Faucet 与开源可视化系统 Grafana (http://grafana.org/) 结合使用,可以构建仪表板并对当前和历史数据运行查询,如图 3 所示。Faucet 还可以生成统计信息的 JSON(JavaScript 对象表示法)日志,该日志可以被翻译并输入到另一个系统中。
SDN 社区继续就业务、安全或其他控制器外部的应用程序应使用的 API 进行辩论,以控制控制器(例如,要求控制器优先处理给定用户的网络流量)。Faucet 没有“唯一的”北向 API,因为不需要通用 API。运营商可以在 Faucet 之上开发一个应用程序,该应用程序向 Faucet 提供一个新的配置文件并要求 Faucet 应用它(例如,更改用户 VLAN)。或者,运营商可以直接修改控制器代码以添加所需的功能,或添加一些其他方便运营商需求的 API(例如,集成 Bro IDS)。
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 镜像)下载,以便于安装。
1. Bailey, J. 2016. 使用 Faucet 进行 NFV/防火墙卸载。Faucet SDN;http://faucet-sdn.blogspot.co.nz/2016/05/nfvfirewall-offload-with-faucet.html。
2. Bailey, J. 2016. 单元测试框架。Faucet SDN;http://faucet-sdn.blogspot.co.nz/2016/06/unittesting-hardware.html。
3. Beyer, B., Jones, C., Petoff, J., Murphy, N. R., eds. 2016. 站点可靠性工程。 O'Reilly Media。
4. Cisco. 2016. 交换园区网络中的单播洪泛;http://www.cisco.com/c/en/us/support/docs/switches/catalyst-6000-series-switches/23563-143.html。
5. Faucet;https://github.com/REANNZ/faucet。
6. Klein, D. V., Betser, D. M., Monroe, M. G. 2014. 使“绿色推送”成为现实:维护生产服务中涉及的问题和行动。Google 研究;http://research.google.com/pubs/pub42576.html。
7. McKeown, N., et al. 2008. OpenFlow:在校园网络中实现创新。 SIGCOMM 计算机通信评论 38(2): 69-74。
8. 开放网络基金会。2013. OpenFlow 交换机规范,版本 1.3.3;https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.3.3.pdf。
9. Sherry, J., Ratnasamy, S. 2012. 企业中间件部署调查。技术报告 UCB/EECS-2012-24。加州大学伯克利分校;http://www.eecs.berkeley.edu/Pubs/TechRpts/2012/EECS-2012-24.pdf。
10. Vahdat, A. 2015. 揭开 Google 网络基础设施的神秘面纱。Google 研究博客;http://googleresearch.blogspot.com/2015/08/pulling-back-curtain-on-googles-network.html。
SDN 之路
可编程网络的知识历史
Nick Feamster 等人
https://queue.org.cn/detail.cfm?id=2560327
OpenFlow:网络领域的一项激进的新理念
一种支持软件定义网络的开放标准
Thomas A. Limoncelli
https://queue.org.cn/detail.cfm?id=2305856
专用全球网络:Google 向 SDN 的迈进
与 Amin Vahdat、David Clark 和 Jennifer Rexford 的讨论
https://queue.org.cn/detail.cfm?id=2856460
Josh Bailey 是 Google 的一名员工软件工程师,在过去的 11 年中一直从事网络管理和研究项目。他常驻新西兰惠灵顿。
Stephen Stuart 是 Google 的一名杰出软件工程师,在过去的 13 年中一直工作于美国加利福尼亚州山景城。
版权 © 2016 归所有者/作者所有。出版权已许可给 。
最初发表于 Queue vol. 14, no. 5—
在 数字图书馆 中评论本文
David Collier-Brown - 关于带宽,你一窍不通
当您的员工或客户说他们的互联网性能很差时,带宽可能不是问题。一旦他们拥有 50 到 100 Mbps 范围内的带宽,问题就是延迟,即 ISP 的路由器处理其流量所需的时间。如果您是一家 ISP 并且所有客户都讨厌您,请振作起来。这现在是一个可以解决的问题,这要归功于一群敬业的人,他们找到了这个问题,消灭了它,然后在家用路由器中验证了他们的解决方案。
Geoffrey H. Cooper - 使用 FDO 和不受信任的安装程序模型进行设备入职
设备的自动入职是处理越来越多的正在安装的“边缘”和 IoT 设备的重要技术。设备的入职与大多数设备管理功能不同,因为设备的信任从工厂和供应链过渡到目标应用程序。为了通过自动入职来加快流程,供应链中的信任关系必须在设备中正式确定,以允许自动化过渡。
Brian Eaton, Jeff Stewart, Jon Tedesco, N. Cihan Tas - 通过关键路径追踪进行分布式延迟分析
低延迟是许多 Google 应用程序(如搜索)的重要特性,延迟分析工具在维持大规模低延迟方面发挥着关键作用。对于包括功能和数据不断演变的服务在内的复杂分布式系统,将总体延迟保持在最低限度是一项具有挑战性的任务。在大型真实世界的分布式系统中,现有的工具(如 RPC 遥测、CPU 性能分析和分布式追踪)对于理解整个系统的子组件很有价值,但在实践中不足以执行端到端延迟分析。
David Crawshaw - VPN 的一切都焕然一新
VPN(虚拟专用网络)已有 24 年的历史。这个概念是为与我们今天所知的互联网截然不同的互联网而创建的。随着互联网的增长和变化,VPN 用户和应用程序也在增长和变化。VPN 在 2000 年代的互联网中经历了尴尬的青春期,与其他广泛流行的抽象概念互动不良。在过去的十年中,互联网再次发生了变化,这个新的互联网为 VPN 提供了新的用途。一种全新的协议 WireGuard 的开发为构建这些新的 VPN 提供了技术基础。