如果您正在运行大型IP网络,则将需要边界网关协议(BGP),但不需要快速收敛的协议即可实现基于IP的现代服务。您需要知道在何处以及如何部署BGP,以及何时获得帮助。
考虑到边界网关协议(BGP)的相对复杂性,在急于直接在网络中实现它之前考虑各种设计方面就不足为奇了。如果没有其他问题,那么好的设计和周密的计划可以为您节省一些紧张的故障排除会话。
在本文中,我将尝试为您提供一些通用的指导原则,在设计BGP网络时应遵循这些指导原则。但是,请不要忘记,经验仅来自实践。设计最初的几个BGP网络时,您应该从供应商或合格的专业服务组织内部获得专家帮助。
使用公共自治系统号
BGP使用自治系统(AS)编号来跟踪流量必须经过的网络才能到达最终目的地。在公共Internet上可见的AS编号必须是全球唯一的,并由各个Internet注册表进行分配。如果要提供公共Internet服务,则必须具有公共AS号。如果您急于需要BGP提供其他基于IP的服务(例如,基于MPLS VPN的第3层VPN服务),则可以使用RFC 1930(AS 64512至AS 65535)中指定的专用AS号。如果您想提供公共Internet服务,那么您可能会面临具有挑战性的迁移方案。
将BGP与其他路由协议结合使用
BGP被设计为一种健壮的,保守的路由协议,能够携带成千上万的IP前缀。它绝不是实现现代基于IP的服务(例如,IP语音或三重播放服务)所需的快速融合协议。您应该始终在现代,快速收敛的内部路由协议(IGP)之上使用BGP ,例如OSPF或IS-IS。在这样的设计中,IGP提供了通过网络核心的最佳路径,而BGP在这些路径上提供了边缘到边缘的路由。
在LOOPBACK接口之间运行内部BGP
BGP使用TCP作为可靠的传输方式,在手动配置的BGP对等体之间交换路由信息(在BGP中没有发现邻居)。TCP始终绑定到一对本地和远程IP地址。如果其中任何一个无法访问,即使路由器仍在运行,TCP会话以及因此的BGP路由也会中断。
因此,内部BGP会话(网络中路由器之间的BGP会话)应始终在回送接口之间运行,以确保TCP会话只要在BGP邻居之间至少存在一条路径(即使通过达到邻居可能会更改)。
外部BGP邻居通常直接连接(您的BGP路由器直接连接到客户或对等伙伴的BGP路由器)。因此,外部BGP会话通常在分配给物理接口的相邻IP地址之间运行。
在整个网络中运行BGP
从历史上看,一些服务提供商试图避免在整个网络中运行BGP,以减少路由器的内存需求和CPU利用率,它们依赖于巧妙的设计,一旦网络开始发展,这些设计就不可避免地变得过于复杂。最好接受一个事实,那就是在严肃的服务提供商网络中BGP是不可避免的,并从一开始就为它设计整个网络。
显然,您不需要在网络中的每个路由器上运行BGP。例如,拨号服务器或DSL集中器可以依靠网络核心提供的默认路由,但是连接企业客户的边缘路由器可能已经需要BGP来满足多宿主客户的需求。
静态配置团体属性
如果要提供公共Internet服务,则必须将通过各种Internet注册表分配给您的公共IP地址空间发布到BGP中。有时,工程师会尝试通过从IGP到BGP 的路由重新分配以及在BGP中进行后续路由聚合的复杂过程来实现此目标。宣传在几个关键BGP路由器上分配的确切前缀要容易得多。
当您决定将Internet客户的路由与核心路由分开(强烈建议)并在BGP中携带客户IP前缀时,可以从IGP(或从边缘路由器上的静态路由)重新分配它们,但可以使用以下标记:已知的NO_EXPORT社区可防止其传播到相邻的自治系统中。
注意:在MPLS VPN环境中运行BGP时,将应用不同的规则,其中BGP与客户的IGP之间的双向重新分配非常普遍。
不要在网络中更改BGP属性
如果网络中的所有路由器都具有一致的网络视图,则任何路由协议(包括BGP)都可以达到最佳效果。为了确保网络中路由的一致性,请不要在发送给IBGP邻居的更新上更改任何BGP属性(大多数路由器供应商都允许您这样做)。另一方面,可以在以下位置更改BGP属性:
将外部子网重新分配到您的IGP中
BGP携带的每个IP前缀都有一个下一跳属性,用于指定下一跳BGP路由器的IP地址。IGP的工作是找出通往下一跳的最佳路径。
缺省情况下,BGP会发布从外部邻居(例如,从对等伙伴)收到的IP前缀,其下一跳属性指向外部对等方的IP地址。此属性使您可以实现针对已出于冗余目的而部署了多个路由器的Internet交换点(IXP)的完美负载共享。但是,BGP 通告为下一跳的外部IP地址必须可访问;您应该将它们重新分配到您的IGP中。否则可能会导致有趣的故障排除练习。
注意:如果尚未部署与同一IXP连接的多个路由器,则还可以使用另一种设计,即边缘BGP路由器将下一跳属性重置为指向其自己的环回地址。
使用BGP路由反射器
根据BGP循环避免规则,从内部BGP对等体收到的IP前缀不应发布给另一个内部对等体。因此,自治系统中的每个使用BGP的路由器都应与网络中的所有其他使用BGP的路由器建立BGP会话。显然,这种方案在大型服务提供商网络中的开销是巨大的,并且几年前已经开发了使内部BGP可扩展的工具。
有两种可扩展内部BGP的方法:BGP路由反射器和BGP联盟。邦联很少使用。大多数设计使用BGP路由反射器。
BGP路由反射器(RR)是一种BGP路由器,允许在内部BGP邻居之间传播IP前缀(其他BGP属性用于检测环路)。路径反射器可以按层次连接。例如,区域路由反射器可能是核心路由反射器的客户。层次结构不应包含太多级别,因为每个级别都会在BGP收敛过程中引入额外的延迟。
您可以将常规路由器用作客户端数量少的BGP路由反射器。在大型网络中,核心路由反射器应为不会转发大量流量的专用设备。
例如,将您的存在点连接到网络核心的分布层路由器可以充当POP中BGP路由器的BGP RR。然后,核心路由反射器将是专用框,用于将BGP路由分配给所有核心层和分布层路由器。
使用对等模板
大多数路由器供应商都允许您配置大量选项,以控制针对单个BGP邻居或每个邻居的入站/出站过滤策略的BGP行为。在具有大量BGP邻居的环境中保持这些设置一致是管理的噩梦。如果使用配置可伸缩性工具(通常称为对等组和对等模板),则可以轻松避免这种情况。
摘要
尽管BGP是一个复杂的路由协议,但是您可以基于众所周知的最佳实践和设计准则来设计可靠的大规模BGP网络,其中包括: