BGP 路由服务器概述
互联网交换点 (IXP) 提出了独特的 BGP 会话扩展挑战。与用于在单个自治系统内扩展内部 BGP (IBGP) 会话的 BGP 路由反射器不同,IXP 将多个独立的服务提供商互连,每个服务提供商都运行自己的自治系统。
交换的参与者通常希望与许多其他参与者交换可访问性信息。在每对参与者之间建立单独的外部 BGP (EBGP) 会话不能很好地扩展,因为每个新参与者都需要更改所有现有参与者的配置。
RFC 7947 中定义的 BGP 路由服务器解决了这一可扩展性问题。路由服务器允许 IXP 参与方建立到路由服务器的单个 EBGP 会话,而不是维护多个双边 EBGP 会话。路由服务器从参与方接收路由,应用策略,并有选择地将路由播发给其他参与方,而不充当转发路径中的中转路由器。
尽管 BGP 路由服务器提供类似于 BGP 路由反射器的功能,但其设计目的是在交换点(而不是自治系统内的 IBGP 会话)扩展 EBGP 对等。
BGP 路由服务器相当于 EBGP 路由反射器,可简化网络中所需的直接点对点 EBGP 会话的数量。EBGP 路由服务器在BGP属性传播方面是透明的,因此,如果路由来自直接连接的 EBGP 对等方,则从路由服务器接收的路由会携带一组BGP属性(NEXT_HOP、AS_PATH、MULTI_EXIT_DISC、AIGP 和社区)。
与 IBGP 路由反射器一样,EBGP 路由服务器使用路由服务器功能连接到 EBGP 对等方之间直接转发路径之外的网络。这种连接可以通过直接物理链路,或通过第 2 层网络(如 VPLS、LAN 或 EVPN),或通过提供对等方环路地址可达性的点对点 EBGP 链路 IP 交换矩阵(常见于数据中心网络)。
BGP 协议经过增强,可提供路由服务器功能,并具有 RFC 7947 中所述的以下功能:
NEXT_HOP、AS_PATH、MULTI_EXIT_DISC、AIGP 和社区的属性透明度。
每个客户端的策略控制和多个路由服务器 RIB,以缓解路径隐藏。
BGP 路由服务器可编程性
Junos OS 中的 BGP 可编程性利用路由服务器功能实现路由注入和播发行为的外部控制。 JET bgp_route_service.proto API 的 Junos BGP 已得到增强,可支持路由服务器功能,包括以下功能:
对 EBGP 路由服务器进行编程
将路由注入路由服务器特定于路由的信息库 (RIB)
-
通过特定于客户端的 RIB 选择性地将路由通告特定客户端组
API 包含一个对等类型属性,用于将路由识别为源自 EBGP 或 IBGP 对等方,从而允许应用控制路由如何在路由服务器框架内处理和分发路由。
路由服务器功能通常与地址族无关,但某些特定的 BGP 属性支持可能特定于地址族(例如,AIGP 仅支持标记的单播地址族)。所有 EBGP 地址族都支持路由服务器功能。
BGP 属性透明度
路由服务器的 EBGP 属性透明度 [RFC7947] 是通过修改常规BGP路由传播来支持的,这样在传播路由时,不会去除或修改传递属性或非传递属性。
对正常 EBGP 行为的更改由 CLI 配置控制 route-server-client 。 route-server-client [] 层级的edit protocols bgp group group-name CLI 配置可实现路由服务器 BGP 属性透明度行为。
路由服务器为单跃点 EBGP 和多跃点配置提供属性透明度。因此,该
route-server-client配置隐式包含单跃点和多跃点会话的功能no-nexthop-change。对于多跃点 BGP 会话,必须配置关键字multihop。可以在
route-server-client[edit protocol bgp] 层次结构的协议、组或邻接方级别进行配置。仅当组类型为 external时,该
route-server-client配置才适用。为组配置 internal 时route-server-client,在尝试提交时会发出配置错误。配置
route-server-client没有参数。常规 BGP 权限适用于配置
route-server-client。
根据属性透明度独立处理属性。即使路由服务器无法在未经修改的情况下发送下一跃点,其他属性也会以适用于这些属性的方式透明发送。
以下是配置示例 route-server-client :
[edit]
protocols {
bgp {
group R0 {
type external;
route-server-client;
family inet {
unicast;
}
peer-as 100;
neighbor 10.0.0.1;
}
}
}
下一跳跃
除非通过策略显式配置,否则不得通过强加下一跃点自身或以其他方式修改下一跃点来修改下一跃点属性。路由服务器必须根据 RFC 4271 的第三方下一跃点规则传播 BGP 下一跃点。
下一跃点行为是为以下路由服务器方案指定的:
在 LAN 和 WAN 互连的情况下,当路由服务器通过共享的 LAN 和 WAN 子网连接到客户端对等方时,路由服务器会播发收到的第三方下一跃点,而无需按照 RFC 4271 中定义进行修改。
在数据中心多跳互连的情况下,当路由服务器通过多跳互连连接到客户端对等方时,必须配置 EBGP 多跳,并且 CLI 配置的
no-nexthop-change行为由配置隐式施加route-server-client。路由服务器根据 RFC 4271 中定义的可选第三方行为,不加修改地播发收到的第三方下一跃点。在其他情况下,例如路由服务器和客户端对等方之间的点对点单跃点连接,常规下一跃点播发过程用于防止播发可能被 BGP 对等方拒绝的下一跃点(例如,默认情况下,大多数 BGP 实现会拒绝非多点会话上的子网地址未覆盖的下一跃点地址。
AS 路径
不得通过前置路由服务器的本地 AS 编号来修改 AS 路径。为对等方配置 CLI 会 route-server-client 抑制在播发中前置本地 AS 编号。此外, show route advertising-protocol bgp peer CLI 命令将会针对是路由服务器客户端的对等方进行更改,以便本地 AS 不显示在播发的指标中。
其他属性
MULTI_EXIT_DISC属性(可选,非传递)必须在接收时传播。
所有社区属性,包括无播发、无导出和非传递扩展社区,都必须在接收时传播。
累积 IGP (AIGP) 属性(可选,非传递)必须在收到时进行传播。
注意:Junos OS 仅支持 BGP-LU 地址族(IPv4 和 IPv6)的 AIGP。
BGP 路由服务器客户端 RIB
路由服务器客户端特定 RIB 是 BGP Loc-RIB 的不同视图,对于与其他视图不同的同一目标,它可以包含不同的路由。路由服务器客户端通过其对等方组可以与一个特定于客户端的视图或共享的公共 RIB 相关联。
为了能够针对同一目标向不同的客户端通告不同的路由,从概念上讲,有必要允许在同一目标但在不同的客户端/组上下文中出现多个 BGP 路径选择实例。
为了实现通过按客户端/组路径选择实现灵活策略控制的高级要求,BGP路由服务器采用使用非转发路由实例(NFI)的方法对BGP管道进行多实例,包括BGP路径选择、Loc-RIB和策略。路由服务器配置为将路由服务器客户端分组到在单独的非转发路由实例中配置的 BGP 组内。这种方法利用了这样一个事实,即在路由实例中运行的 BGP 会进行路径选择,并且其 RIB 与在其他路由实例中运行的 BGP 是分开的。
示例
考虑一个包含三个参与方的 IXP 路由服务器:
-
客户端 A 首选最短 AS 路径
-
客户端 B 首选从特定对等方获知的路由
客户端 C 仅接受客户路由
为了支持这些要求:
-
路由服务器可创建单独的非转发路由实例
-
每个路由实例都包含一个或多个客户端的 BGP 组
-
每个实例应用自己的导入和导出策略
-
BGP 路径选择在每个实例中独立运行
因此,路由服务器可以向不同的客户端播发同一前缀的不同最佳路径,而无需在转发表中安装任何路由。
策略要求和注意事项
要在路由服务器客户端之间传播路由,系统会根据配置的策略在路由实例的 RIB 之间泄露路由。
为策略控制配置路由服务器包括以下注意事项:
应在同一主实例或路由实例中配置路由服务器客户端,以接收相同的 Loc-RIB 视图。
路由服务器客户端应在其自己的路由实例中进行配置,以接收完全唯一的 Loc-RIB 视图。
应在同一路由实例中的不同 BGP 对等体组中配置路由服务器客户端,以便在同一 Loc-RIB 视图上具有不同的导出策略。
默认情况下,要使路由服务器客户端特定的 RIB 视图从其他表接收所有路由,全网状策略
instance-any配置instance-import为 。当使用包含以下内容的instance-any策略进行配置instance-import时:instance-any可用于:policy-statement ... term ... frompolicy-statement ... frompolicy-statement ... term ... topolicy-statement ... to
instance-any没有参数。instance-any在策略中使用instance-importnot 有任何效果。
配置许多不同的路由实例和对等组会影响规模和性能。
[] 层级的
edit protocols bgp group neighborBGPforwarding-contextCLI 配置将 BGP 邻接方的路由实例拆分为配置实例和转发实例。BGPforwarding-contextCLI 配置还支持非转发实例,其中 BGP 对等方配置为route-server-client指定实例是能够转发主实例或非无转发类型的路由实例的任何实例。