BGP Flowspec — SDN黑马(第1部分)

介绍

在过去的几年中,网络行业已经将重点从提高速度和带宽提高到了对灵活性,可编程性以及软件定义能力的承诺。 OpenFlow是该运动的后代,成立已有7年之久(1.1版本于2011年发布),其根源可追溯到11年前的学术努力。 一方面,通过迫使供应商考虑可编程性,我为此付出了巨大的努力。 另一方面,该协议是(几乎)没有人解决的一个问题的解决方案:直接对TCAM进行编程。

本文是介绍我在实验室环境中完成的一些工作的第一部分,以解决使用“传统”联网技术难以解决的问题。 以下是有关用例的一些背景以及对行业前景的一些看法。 第二部分将详细介绍技术解决方案。

问题陈述

转发数据包主要与将数据包移近其目的地有关。 路由器将检查目标地址,尝试在目标表中查找匹配项,并将数据包发送到端口,该端口将使其更接近端点。 通常,通过优化某些属性,可以使用许多路由协议来处理构建和维护此过程中使用的表的任务,并弄清“ closer”的真正含义。 在痛苦的过去,我们使用了路由信息协议(RIP),该协议仅计算跳数。 开放式最短路径优先(OSPF)是一种链路状态协议,主要处理成本,其中考虑了带宽。 除其他事项外,边界网关协议(BGP)使用了到达目的地的自治系统的数量。

您不会注意到在该简短描述中何处将策略或业务需求列为路由协议用来构建转发表的内容。 所有路由协议都有某种可用于引导流量的调整旋钮。 BGP非常灵活-它具有本地优先级,多出口标识符(MED)和用于修改默认行为的社区; OSPF具有路径成本。 网络运营商使用这些选项将流量转向他们的意愿。 我发现,一旦开始修改这些参数,最终就不得不在整个网络中不断调整参数。 将路由器从自动驾驶仪上取下后,您将需要进行大量工作。

即使您可以扩展和管理这些更改,也仍然无法对流量进行细粒度的控制。 如果您降低了OSPF链路的路径成本,或者在BGP路由上将本地优先级设置为较高,则所有流量都将移动到该路径。 如果可以从源头分离流量,则可以使用类似MPLS流量工程的功能。 实施某些政策目标可能很困难或不可能。

我试图完成的任务(绕过防火墙)绕过特定的流量,这些流量将在下一篇文章中进行详细说明:1)我知道自己是受信任的,不需要防火墙检查; 2)可以从改进的性能中受益。 这种流量混合在骨干链路上成千上万的流中,并且很难轻易分离。

理想的解决方案(不是)

有一个提议可以被认为是网络控制和可编程性的圣杯:OpenFlow。 这项协议是斯坦福大学的“ Clean Slate”项目提出的。 要解决的问题是,在2006年拥有30多年网络经验,从头开始设计网络协议,体系结构和行为的情况下,我们将如何做? 结果是一种协议,使网络运营商可以前所未有地控制网络行为。 讨论OpenFlow的优缺点是几篇文章的主题。 总结一下,我对实现我们对网络的控制的乐观态度并未实现。 最终,实现OpenFlow所需的更改太大了。

然后,网络运营商将留有基于策略的路由(PBR),有时在瞻博网络环境中称为基于过滤的转发(FBF)。 使用访问列表(Cisco)或防火墙过滤器(Juniper),您可以基于第3层或第4层参数来识别特定流量。 现在事情变得有趣了:我可以在骨干链路上的混合流量中识别特定的流量,并覆盖通常应用于该流量的默认行为。 我们已经在特定的情况下使用了PBR,但是我一直觉得它没有扩展性(PBR本质上是一种单跳行为),难以记录,并且不容易实现自动化。 坦率地说,它总是像黑客一样,几乎就像我们在网络上失败了一样,需要使用PBR来传送解决方案。

但是,存在一个折衷方案-允许细粒度控制,基于标准协议的可伸缩,动态的,受多个供应商和平台支持的东西(但并非全部,这对于本文来说很重要)。 BGP Flowspec(RFC5575)是BGP的扩展,允许传播匹配/操作规则集。 有许多不同的匹配条件,包括源和目标前缀,协议以及第4层端口信息。

在第2部分中,我将简要介绍BGP Flowspec,并详细说明一个使用案例,该案例使用Junos中的虚拟化功能,以允许针对已知正常流量类型选择性地绕过防火墙。