BGP的基本功能配置与管理
一个基本的BGP网络,仅需配置BGP的一些基本功能。同时,BGP基本功能的配置也是组建BGP网络的基础,是能够使用BGP其他功能的前提。在配置BGP的基本功能之前,也需要先配置接口的IP地址,使相邻节点的网络层可达。
因为BGP中可以把一些需要配置相同属性的对等体配置为一个对等体组(一般是仅在比较大,存在较多BGP设备的网络中使用对等体组进行配置),同时又有EBGP对等体组和IBGP对等体组之分,所以在BGP基本功能的配置上,要有所区分。BGP基本功能所包括的配置任务如下表(要注意配置顺序)。
一、启动BGP进程
BGP是一种用于域间的动态路由协议。当BGP设备各接口连接的都是位于同一AS中的设备时,其运行的是IBGP,当设备至少有一个接口连接的是其他AS中的设备时,其运行的是EBGP。但每台BGP设备只能运行于一个AS内,即只能指定一个本地AS号。同时,BGP是单进程路由协议,所以它本身没有进程号,只是用所处的AS号来进行标识。
BGP进程的配置其实就是为设备指定所处AS,配置用于在BGP网络中唯一标识设备的路由器ID的过程。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
router-id ipv4-address
二、配置BGP对等体
BGP中“对等体”就是类似于RIP、OSPF和IS-IS中的邻居,但是BGP的对等体不一定就是直连的设备,所以在BGP中需要手动指定对等体,且需要在对等体双方分别配置。
配置BGP对等体时,如果指定的对等体所属的AS编号与本地AS编号相同,表示配置IBGP对等体;如果指定对等体所属的AS编号与本地AS编号不同,表示配置EBGP对等体。为了增强BGP连接的稳定性,推荐使用路由可达的Loopback接口地址建立BGP连接。
BGP对等体可以一个个单独配置,如果有大量对等体的属性配置相同,可采用BGP对等体组配置方式。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
peer ipv4-address as-number {as-number-plain | as-number-dot} 创建BGP对等体。
peer ipv4-address connect-interface interface-type interface-number [ipv4-source-address] 指定BGP对等体之间建立TCP连接会话的源接口和源地址。
peer ipv4-address ebgp-max-hop [hop-count] 指定建立EBGP连接(不能是IBGP连接)允许的最大跳数,以允许BGP与非直连网络上的设备建立EBGP对等体连接。最大跳数为1,表示建立的是直连EBGP连接,则不能与非直连网络上的设备建立EBGP对等体连接。当BGP使用Loopback口建立EBGP对等体时,必须指定本参数>=2,否则邻居无法建立。
peer ipv4-address description description-text 配置对等体的描述信息
ipv4-family multicast 使能BGP的IPv4组播地址族,并进入BGP的IPv4组播地址族视图。仅当在IPv4组播网络中配置BGP对等体才需要配置。
peer ipv4-address enable 为BGP对等体使能MP-BGP功能,使之成为MP-BGP对等体(具体使能的是哪种对等体,要视本命令是在哪个地址族视图下配置的)。仅当需要在非BGP-IPv4单播地址族下建立BGP对等体时才需要配置本步骤,因为BGP-IPv4单播地址族下的对等体功能是缺省使能的。
三、配置BGP对等体组
在大型网络中,对等体数目众多,对于那些存在相同配置的BGP对等体可以通过一次性配置将它们加入一个BGP对等体组进行批量配置。但对等体组中的成员可以配置不同的路由接收策略,也可以配置不同的路由发布策略。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
group group-name [external | internal] 创建对等体组。如果BGP对等体组内的对等体在某属性配置上与其所加入的对等体组上的相同属性配置不一致,则当在恢复该对等体上对应属性配置时,该对等体会从对其所加入的对等体组上继承对应属性配置。
peer group-name as-number {as-number-plain | as-number-dot} 配置EBGP对等体组的AS号,如果是IBGP对等体组则不用配置本步骤。要求所有对等体组成员都处于同一个AS中。
peer ipv4-address group group-name 向对等体组中加入对等体,但如果是向EBGP对等体组中加入EBGP对等体,则需先配置好各个EBGP对等体,再配置本步骤;如果是向IBGP对等体组中加入IBGP对等体,可直接进行本步骤。
peer group-name connect-interface interface-type interface-number [ipv4-source-address] 指定本地设备与BGP对等体组中的对等体成员之间建立TCP连接会话的源接口和源IP地址。配置本命令后,本地设备与所有对等体组成员之间的TCP连接会话使用相同的源接口和源IP地址。
peer group-name ebgp-max-hop [hop-count] 指定本地设备与BGP对等体组中的对等体成员建立EBGP连接(不能是IBGP连接)时所允许的最大跳数,以允许BGP与非直连网络上的设备建立EBGP对等体连接。
peer group-name description description-text 配置对等体组的描述信息
ipv4-family multicast 使能BGP的IPv4组播地址族,并进入BGP的IPv4组播地址族视图。仅当在IPv4组播网络中配置BGP对等体才需要配置。
peer group-name enable
四、配置BGP引入路由
BGP协议本身不发现路由,因此需要将位于本地设备IP路由表中的其他路由(如IGP路由等)引入到BGP路由表中,从而将这些路由在AS之内或AS之间通过BGP协议传播。
BGP引入路由时支持Import和Network两种方式:
①Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
②Network方式是逐条将IP路由表中已经存在的路由(可能是静态路由、直连路由,也可能是RIP、OSPF、IS-IS路由)引入到BGP路由表中,比Import方式更精确。
在network路由引入方式中,如果在本地设备IP路由表中存在多条不同协议发现的到达同一目的网段的路由,则最终引入BGP路由表的将是他们之中最优的那条。对于不同协议发现的路由,它们是通过外部优先级的值进行比较的,优先级值越小,优先级越高。
通过import方式引入路由
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
ipv4-family {unicast | multicast} 进入要引入路由的对应的IP地址族视图。缺省进入BGP-IPv4单播地址族视图。
import-route protocol [process-id] [med med | route-policy route-policy-name] * 配置BGP引入其他协议的路由(但不包括各种缺省路由)。
default-route imported
通过network方式引入路由
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
ipv4-family {unicast | multicast} 进入要引入路由的对应的IP地址族视图。缺省进入BGP-IPv4单播地址族视图。
network ipv4-address [mask | mask-length] [route-policy route-policy-name]
五、BGP基本功能管理
①display bgp peer [verbose]:查看所有BGP对等体的信息。
②display bgp peer ipv4-address {log-info | verbose}:查看指定BGP对等体信息。
③display bgp routing-table [ipv4-address [mask | mask-length]]:查看指定或所有BGP路由信息。
④display bgp group [group-name]:查看指定或所有对等体组信息。
⑤display bgp multicast peer [ [peer-address] verbose ]:查看指定或所有MBGP对等体的信息。
⑥display bgp multicast group [group-name]:查看指定或所有MBGP对等体组的信息
⑦display bgp multicast network:查看MBGP发布的路由信息。
⑧display bgp multicast routing-table [ip-address [mask-length[longer-prefixes] | mask [longer-prefixes]]]:查看指定或所有MBGP路由表信息。
六、BGP基本功能配置示例
如上图拓扑,需要在所有Router间运行BGP协议(如果没有在系统视图下全局配置路由器ID的话,需要专门在BGP视图下为设备配置由BGP路由使用的路由器ID),其中RouterA、RouterB之间建立EBGP连接,RouterB、RouterC和RouterD之间建立IBGP全连接。
1、基本配置思路
需要在各路由器上启动BGP进程,然后根据要求在各路由器上配置EBGP或IBGP对等体,引入必要的路由即可。
配置RouterB、RouterC和RouterD之间的IBGP连接。注意,每个对等体连接均需要在双方设备上分别配置,且IBGP对等体中,双方处于同一个AS中。本例没有配置Loopback接口,也没有在系统视图下全局配置路由器ID,所以需要在BGP视图下手动配置各路由器ID,设B、C、D的路由器ID分别为2.2.2.2、3.3.3.3、4.4.4.4,IBGP连接的源接口和源IP地址均缺省采用设备的物理接口和物理接口IP地址。
配置RouterA与RouterB之间的EBGP连接,也需要在双方分别配置,此处采用缺省的物理接口和物理接口IP地址作为EBGP连接源接口和源IP地址。RouterA的路由器ID设为1.1.1.1。
配置好BGP对等体后,可通过display bgp peer查看各个设备上的BGP对等体的连接状态。
通过RB查看bgp路由,发现是空的。
配置RouterA发布与EBGP对等体之间的非直连路由8.0.0.0/8。注意,这里要在对应的地址视图下进行配置,因为如果是在BGP视图下发布,将在多种地址族下生效。
从以上路由表信息可看出,RouterA上的8.0.0.0/8路由的下一跳为0.0.0.0,因为这条路由是本地设备上通告的,没有经过下一跳,而RouterB和RouterC上的8.0.0.0/8路由的下一跳均为200.1.1.2,那是因为在EBGP对等体之间的EBGP路由发布时,下一跳将为发送路由器的出接口IP地址,在IBGP对等体之间的EBGP路由发布时,下一跳不变。而IBGP对等体之间进行IBGP路由发布时只能进行单跳通告,收到IBGP路由的设备不再通告给它自己的对等体。
在路由表最后一列的“Path/Ogn”用来表示路由的AS路径和路由源类型,因为8.0.0.0/8路由是通过network通告的,所以显示为i,代表IGP类型。
⑤为了解决RouterC和RouterD可以到达8.0.0.0/8路由的下一跳200.1.1.2,只须在它们共同连接的RouterB上使BGP协议引入直连路由即可。
此时在RouterA的BGP路由表除了有原来自己通告的8.0.0.0/8路由表项外,还有RouterB引入的三条直连路由。
在RouterC的BGP路由表中也可见到RouterB所引入的三条直连路由。另外原来的8.0.0.0/8路由变为有效、可达了(前面有一个*号)
抓包分析:
BGP是应用层报文,封装在TCP报文中,需要先进行TCP连接,通过上面的抓包,可以看到一开始是TCP连接,三次握手过程,建立TCP连接后,发送Open报文,开始建立BGP对等体连接。对等体连接建立后,是Keepalive报文,用于保持BGP连接,后面还有Update报文,用于对等体之间交换路由信息。
关于OPEN报文:
主要看Optional Parameter,这是一个TLV格式的单元:
此值为 BGP 可选参数列表,每一个可选参数是一个 TLV 格式的单元(RFC3392)。
Parm. Type:占 1 个字节(无符号位),为可选参数类型。我们现在的实现中,只在 type 值为 2 时有意义,表示携带的参数为协商能力。看上面的抓包信息,其Parameter Type:Capability(2)值为2,表示协商能力。
Parm. Length: 占 1 个字节(无符号位),为 Parameter Value 的长度。上面此值为14.
Parameter. Value:根据 Parm.Type 的不同值填写不同的参数内容,在 Parm.Type 为 2 表示协 商能力时,Parameter.Value 是表示所支持的各种协商能力的列表,列表中的每一个单元是如 下的一个 TLV 三元组:(实际上可以叫做CLV,第一个字段是Code)
Capability Code:所支持的能力编号,占 1 个字节。Code 为 1 时,表示支持的地址族 能力;Code 为 2 时,表示支持 REFRESH 能力。
Capability Length:表示 Capability Value 的长度,占 1 个字节。
Capability Value:根据 Code 值的不同其内容与长度也不同。
Capability Code 为 1:
Capability Value 值是一个 TLV 三元组,共占 4 个字节:
AFI:地址族标识(Address Family Identifier),占 2 个字节,能力所支持地址族标识 信息,用以和 SAFI 一同确定网络层协议和 IP 地址间的关系,编码方式与多协议扩展中 的规定相同。其值按照 RFC1700 中 ADDRESS FAMILY NUMBERS 的定义;
Res: 保留位,占 1 个字节,发送者应将其设置为零,在接受的时候忽略;
SAFI:子地址族标识(Address Family Identifier),占 1 个字节,能力所支持的子地 址族标识信息,用以和 AFI 一同确定网络层协议和 IP 地址间的关系,编码方式与多协 议扩展中的规定相同。其值按照 RFC1700 中 ADDRESS FAMILY NUMBERS 的定义。
Capability Code 为 2(RFC2918)
表示支持路由刷新能力,即 Route Refresh Capability。此能力的 code 为 2,length 为零,无 value 部分。
需要说明的是,只有在能力协商中使能了支持 Route Refresh Capability,路由器才能处理 REFRESH 报文。我们的实现是默认情况下,支持 IPv4 单播能力与路由刷新能力,其他能力需要另外设定。
这是一个TLV里套TLV的格式。
关于Keepalive报文:
非常简单,没有什么具体内容,只是通用报头中Type为4
Update报文:
对于Path Attribute,BGP 路径属性 TLV 格式
其中,Attr.TYPE 占 2 个字节(无符号位),包括 1 字节的 Flags(无符号位)和 1 字节的 Type Code(无符号位)。其中Attr.TYPE的结构如下:
看上面抓包的图,实际上是Flags、T、L、V的结构,只不过是将Flags和T合并看做一个Type。
Attr.Flags:占 1 个字节(8 个 bit),表示属性的标记,其每个 bit 位的意义如下显示:
O: Optional bit, 属性的可选性。决定属性是否为必携带属性。是可选属性(optional)设为1,公认属性(well-known)设为零。
T: Transitive bit 属性的可传递性。对于可选属性,是可传递的设为 1,非可传递的设为 0。对于公认属性必须设为 1。
P: Partial bit 属性的局部性。对于可传递的可选属性是局部的设为 1,是完全的设为零。对于非可传递的的可选属性和公认属性,必须设为零。
E: Extended Length bit 决定该属性的长度的字段(即 Attr. Length)是否需要扩展。不需要扩展则设为零,Attr. Length 占 1 个字节;需要扩展则设为 1,Attr. Length 占 2 个字节。
U: Unused bits 低 4 位没有使用,发送时必须全部设为零,并且在接收时被忽略。
Attr.Type Code:占 1 个字节(无符号位),表示属性的类型号。设置如下表 2。
Attr.Value:根据不同属性的类型填写不同内容
路由属性的类型号列表 | |
属性类型 | 属性值 |
1:Origin | IGP |
EGP | |
Incomplete | |
2:As_Path | AS_SET |
AS_SEQUENCE | |
AS_CONFED_SET | |
AS_CONFED_SEQUENCE | |
3:Next_Hop | 下一跳的 IP 地址 |
4:Multi_Exit_Disc | MED 用于判断流量进入 AS 时的最佳路由 |
5:Local_Pref | Local_Pref 用于判断流量离开 AS 时的最佳路由 |
6:Atomic_Aggregate | BGP Speaker 选择聚合后的路由,而非具体的路由 |
7:Aggregator | 发起聚合的路由器 ID 和 AS 号 |
8:Community | 团体属性 |
9:Originator_ID | 反射路由发起者的 Router ID |
10:Cluster_List | 反射路由经过的反射器列表 |
14:MP_REACH_NLRI | 多协议可达 NLRI |
15:MP_UNREACH_NLRI | 多协议不可达 NLRI |
16:Extended Communtities | 扩展团体属性 |
|
|
NLRI(Network Layer Reachability Information):包含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length, the prefix of the reachable route)组成,其编码填写方法与 Withdrawn Routes 的填写方法相同。
另一个Update包
RC和RD之间没有Update报文
七、MBGP基本功能配置示例
如上图拓扑,接收者(Receiver)通过组播方式接收视频点播信息,接收者与组播源(Source)位于不同的AS中,现需要在两个AS之间传输组播路由信息。
1、基本配置思路
本例是一个组播BGP路由配置示例,且跨越两个AS,主要有两个方面的配置:一是配置组播BGP路由,二是配置IP组播功能。在组播路由方面,AS200内部可采用OSPF路由(当然也可以是其他路由协议)来实现AS内部IBGP对等体间的路由互通,然后在两个AS的边界路由器配置EBGP对等体连接,实现AS间的组播网络连接。配置任务如下:
①配置各路由器IP地址以及AS200内B、C、D之间通过OSPF协议实现网络互通。
②配置两个AS中各路由器的MBGP对等体,建立AS内、AS间的组播路由。
③配置各路由器在MBGP视图下要引入的路由。
④使能各路由器的组播功能。
⑤在各AS内部配置PIM-SM基本功能,在主机侧接口上使能IGMP功能。
⑥在两个AS的PIM域间相连的接口上配置BSR服务边界。
⑦在两个AS的PIM域间边界路由器上配置MSDP对等体,实现传输域间组播源信息。
AS200内三台路由器上运行OSPF协议。注意,RouterB的GE0/0/0接口上运行的不是OSPF协议,而是EBGP协议。因为没有划分区域,所以所有设备在骨干区域0中。
注意,RB上的OSPF没有宣告G0/0/0上的10.1.1.0网络,因为这个端口运行的是EBGP协议。
RIP、OSPF和IS-IS协议中的network命令其实就是用来指定哪个接口上要运行对应的路由协议,然后以对应路由协议向邻居通告这些接口上所连接网络的路由信息。
在各路由器上使能MBGP协议,配置MBGP对等体。
配置MBGP对等体前必须先在BGP视图下创建BGP对等体,然后在BGP-IPv4组播地址族下使能与BGP对等体交换组播路由信息的功能。因为创建BGP对等体后缺省只是使能BGP-IPv4单播地址族下与BGP对等体的路由信息交换功能,所以其他地址族的该功能使能必须手动配置。
在各路由器上配置要引入的路由,包括在BGP视图下引入的路由,用于IPv4单播通信(当然,如果不需要进行IPv4单播通信也可不配置)的路由以及在IPv4组播地址族下引入的路由,用于组播通信。
RouterA上的配置,因为RouterA与RouterB之间建立的是EBGP连接,所以必须要在组播地址族下引入RouterA上的直连路由,以便向RouterB通告其连接的直连路由,然后由RouterB在AS200内部通告,使得AS200中的所有设备可以访问到RouterA上连接的网络。
RouterB上的配置,因为RouterB与RouterA之间建立的是EBGP连接,所以必须要在组播地址族下同时引入它的直连路由以及AS200内部的OSPF路由,以便向RouterA通告其直连路由和所学习到的OSPF路由,实现RouterA可以访问到AS200中所有设备的目的。因为直连路由的优先级高于OSPF路由,如果仅引入OSPF路由,则直连网段部分仍然无法实现互通。
RouterC和RouterD上的路由引入配置与RouterB上的配置有些区别,因为它们上面均只需要在AS200内部进行组播通信,无需与外界进行IPv4单播OSPF通信,所以无需在BGP-IPv4单播地址族下引入OSPF路由,仅需在组播地址族下引入。但直连路由必须同时在BGP-IPv4单播地址族和组播地址族下分别引入,同样是因为直连路由的优先级高于OSPF路由。
使能各路由器及其相连接口的组播功能。同时,要在RouterC连接接收者主机的GE0/0/2接口上使能IGMP功能。
在两个PIM域中分别配置BSR和RP。BSR位于PIM域边界,通常是把BSR与RP配置成一样。
在AS100和AS200这两个PIM域中配置域间相连接口为各自PIM域的BSR服务边界。
配置MSDP对等体
因为PIM域间是通过MSDP服务进行连接的,所以在PIM域间的边界设备上要分别使能MSDP功能,并且要分别配置MSDP对等体。对等体就是对端接口的IP地址。
配置好以上内容后,可通过使用display bgp multicast peer 查看两个PIM域边界路由器之间MBGP对等体的关系。使用display msdp brief查看路由器之间MSDP对等体建立情况
进行组播测试
BGP路由选路和负载分担配置与管理
BGP具有很多路由属性(如BGP协议优先级、下一跳属性、本地优先级属性、AS路径属性、MED属性、团体属性等),这些属性有可能影响BGP的最终选路结果。配置任务如下:
①配置BGP协议优先级
②配置Next_Hop属性
③配置BGP路由首选值
④配置本机缺省Local_Pref属性
⑤配置AS_Path属性
⑥配置MED属性
⑦配置BGP团体属性
⑧配置BGP负载分担。
一、配置BGP协议优先级
由于路由器上可能同时运行多个路由协议,就存在各个路由协议之间路由信息共享和路由路径选择的问题。系统为每一种路由协议设置一个缺省的内、外部优先级。在不同协议发现同一条路由时,优先级高的路由将被优选。
BGP协议的外部优先级包括了EBGP优先级、IBGP优先级和本地优先级。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
ipv4-family {unicast | multicast} 进入要配置BGP协议优先级的对应IP地址族视图。BGP路由在不同的地址族下可分配不同的协议优先级。
preference {external internal local | route-policy route-policy-name}
二、配置Next_Hop属性
BGP在Next_Hop属性中规定,当ASBR(连接BGP路由器的肯定是ASBR)将从EBGP对等体学习到的路由转发给本AS内其他IBGP对等体时,默认不修改下一跳。这样,在IBGP对等体收到该路由后,会发现下一跳不可达(因为其下一跳不是直连设备的接口IP地址),于是将该路由设为非活跃路由,不通过该路由指导流量转发。
如果希望IBGP邻居通过该路由指导流量转发,可以在ASBR上配置向IBGP对等体(组)转发路由时,将自身出接口IP地址作为下一跳。这样IBGP对等体在收到ASBR从EBGP邻居学来的路由后发现下一跳可达,于是将路由设为活跃路由。
当BGP路由发生变化时,BGP需要对非直连的下一跳重新进行迭代。如果不对迭代后的路由进行任何限制,则BGP可能会将下一跳迭代到一个错误的转发路径上。此时可配置BGP按路由策略迭代下一跳。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
ipv4-family {unicast | multicast} 进入要配置BGP Next_Hop属性的对应IP地址族视图。BGP路由在不同的地址族下可分配不同的Next_Hop属性。
peer {ipv4-address | group-name} next-hop-local 配置IBGP设备向IBGP对等体(组)发布来自EBGP对等体的路由时,把下一跳地址设为自身的IP地址。缺省不修改。
nexthop recursive-lookup route-policy route-policy-name 配置BGP按路由策略对从IBGP对等体收到的路由进行下一跳迭代。对于从直连EBGP对等体收到的路由,本命令不起作用。
peer {group-name | ipv4-address} next-hop-invariable
三、配置BGP路由首选值
协议首选值(PrefVal)是华为设备的私有属性,仅在本地路由器上有效。当BGP路由表中存在到达相同目的地址的多条路由时,将优先选择协议首选值高的路由(而不是其他属性值,因为首选属性值是最优先进行比较的)。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
ipv4-family {unicast | multicast} 进入要配置BGP 路由信息首选值的对应IP地址族视图。BGP路由在不同的地址族下可分配不同的BGP路由信息首先值。
peer {ipv4-address | group-name} preferred-value value 为从指定对等体学来的所有路由配置首先值。但在为对等体分配首先值之前必须先配置BGP对等体。
四、配置本机缺省Local_Pref属性
Local_Pref(本地优先级)属性用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到到达外部AS的目的地址相同,但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。但Local_Pref属性仅在IBGP对等体之间交换和比较,不通告给其他AS。它表明的是BGP路由器的优先级,而不是路由的优先级。
另外Local_Pref属性是在PrefVal属性比较之后,所以仅当多条相同目的地址路由具有相同PrefVal属性值后才按Local_Pref属性值进行比较。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图。
ipv4-family {unicast | multicast} 进入要配置Local_Pref属性的对应IP地址族视图。BGP路由在不同的地址族下可分配不同的Local_Pref属性。
default local-preference local-preference
五、配置AS_Path属性
AS_Path(AS路径)属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。配置不同的AS_Path属性功能,可以实现灵活的路由选路。在配置AS_Path属性时,考虑以下几个方面:
①通常情况下,将AS_Path属性内的AS_Path数量作为BGP选路条件,路径越长,优先级越低。当不需要AS_Path属性作为选路条件时,可以配置不将AS_Path属性作为选路条件。
②通常情况下,BGP通过AS号检测路由环路,即路由中的AS路径中包括本地AS号的路由不再接收。但在Hub and Spoke组网方式下,为保证路由能够正确传递,从Hub-CE发布私网路由到Spoke-CE途中经过的相关BGP对等体需要配置允许AS_Path中AS号重复一次的路由通过。
③公有AS号可以直接在Internet上使用,私有AS号直接发布到Internet上可能造成环路现象。为了解决上述情况,可以在把路由发布到Internet前,配置发送EBGP更新报文时,AS_Path属性中仅携带公有AS编号。
④在重构AS_Path或聚合生成新路由时,可以对AS_Path中的AS号最大个数予以限制。配置AS_Path属性中AS号的最大个数后,接收路由时会检查AS_Path属性中的AS号是否超限,如果超限则丢弃路由。
⑤常规情况下,一个设备只支持一个BGP进程,即只支持一个AS号。但是在某些特殊情况下,例如网络由于迁移而更换AS号的时候,为了保证网络切换的顺利进行,可以为指定对等体设置一个伪AS号。
⑥BGP会检查EBGP对等体发来的更新消息中AS_Path列表的第一个AS号,确认第一个AS号必须是该EBGP对等体所在的AS。否则,该更新信息被拒绝,EBGP连接中断。如果不需要BGP检查EBGP对等体发来的更新消息中AS_Path列表的第一个AS号,可以去使能此功能。
system-view
route-policy route-policy-name {deny | permit } node node 创建路由策略的节点,并进入路由策略视图
配置路由策略匹配规则,只有满足匹配规则的路由才会改变AS_Path属性。
apply as-path {as-number-plain | as-number-dot} &<1-10> {additive | overwrite} 设置BGP路由的AS_Path属性。
quit
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图
ipv4-family {unicast | multicast} 进入要配置AS_Path属性的对应IP地址族视图。BGP路由在不同的地址族下可分配不同的AS_Path属性。
peer {ipv4-address | group-name} route-policy route-policy-name export 通过策略路由对向对等体(组)发布的路由配置指定AS_Path属性。
peer {ipv4-address | group-name} route-policy route-policy-name import 通过策略路由对向对等体(组)接收的路由配置指定AS_Path属性。
import-route protocol [process-id] route-policy route-policy-name 通过路由策略对在BGP路由器上以import方式引入的路由配置指定的AS_Path属性。
network ipv4-address [mask | mask-length] route-policy route-policy-name 通过路由策略对在BGP路由器上以Network方式静态引入的路由配置指定的AS_Path属性。
bestroute as-path-ignore 配置BGP在选择最优路由时忽略AS路径属性。
peer {group-name |ipv4-address} allow-as-loop [number] 配置允许在从对等体(组)接收的路由的AS_Path列表中本地AS编号重复出现,number配置重复的次数。
peer {group-name |ipv4-address} public-as-only 配置向对等体(组)发送BGP更新报文时AS_Path属性不携带私有AS号,仅携带公有AS号。有两种情况,配置本命令也不会删除私有AS号:路由的AS_Path中含有对端的AS号时,如果删除私有AS号,可能会造成路由环路;AS_Path中同时含有公有AS和私有AS。表名路由已经经过了公网,如果删除私有AS,可能造成转发错误。
quit
as-path-limit as-path-limit-num 配置AS_Path属性中AS号的最大个数。
peer {group-name |ipv4-address} fake-as {as-number-plain | as-number-dot} 配置指定EBGP对等体采用伪AS编号与本端建立连接。
undo check-first-as 取消检查EBGP对等体发来的更新消息中AS_Path属性的第一个AS号。
六、配置MED属性
MED属性相当于IGP使用的度量值(Metrics),它用于判断流量进入AS时的最佳路由。当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其他条件相同的情况下,将优先选择MED值较小者作为进入EBGP对等体所有AS的最优路由。
system-view
route-policy route-policy-name {deny | permit } node node 创建路由策略的节点,并进入路由策略视图
配置路由策略匹配规则,只有满足匹配规则的路由才会改变MED属性。
apply cost [+ | -] cost 在路由策略中配置改变路由的开销值(在BGP中就是MED属性值)的动作。
quit
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图
ipv4-family {unicast | multicast} 进入要配置MED属性的对应IP地址族视图。BGP路由在不同的地址族下可分配不同的MED属性。
default med med 配置本地BGP路由的缺省MED值(本地所有没有专门配置MED属性值的BGP路由具有相同的MED属性值)。MED值仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。
bestroute med-none-as-maximum 配置BGP在选择最优路由时,如果路由属性中没有MED属性值,则把MED属性值按最大值来处理。
compare-different-as-med 配置允许比较来自不同自治系统中的邻居的路由的MED值。
deterministic-med 使能BGP deterministic-med功能,使在路由选路时优先比较AS_Path最左边的AS号(也就是离本地设备最近一个AS)相同的路由。
bestroute med-confederation 配置BGP在选择最优路由时,仅在联盟内比较MED属性值。
peer {ipv4-address | group-name} route-policy route-policy-name export 通过策略路由对向对等体(组)发布的路由配置指定MED属性。
peer {ipv4-address | group-name} route-policy route-policy-name import 通过策略路由对向对等体(组)接收的路由配置指定MED属性。
import-route protocol [process-id] route-policy route-policy-name 通过路由策略对在BGP路由器上以import方式引入的路由配置指定的MED属性。
network ipv4-address [mask | mask-length] route-policy route-policy-name
七、配置BGP团体属性
团体属性可在BGP对等体之间传播,且不受AS的限制。利用团体属性可以使多个AS中的一组BGP设备共享相同的策略,从而简化路由策略的应用并降低维护管理的难度。BGP设备可以在发布路由时,新增或改变路由的团体属性。由团体属性延伸的扩展团体属性是针对特定业务的扩展,目前仅支持在VPN中应用Route-Target属性。
system-view
route-policy route-policy-name {deny | permit } node node 创建路由策略的节点,并进入路由策略视图
配置路由策略匹配规则,只有满足匹配规则的路由才会改变团体属性。
apply community {community-number | aa:nn | internet | no-advertise | no-export | no-export-subconfed} &<1-32> [additive] 配置BGP路由信息的团体属性。
apply extcommunity {rt {as-number:nn | 4as-number:nn| ipv4-address:nn}} &<1-16> [additive] 配置BGP扩展团体属性(Route-Target)。
quit
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图
ipv4-family {unicast | multicast} 进入要配置团体属性的对应IP地址族视图。BGP路由在不同的地址族下可分配不同的团体属性。
peer {ipv4-address | group-name} route-policy route-policy-name export 通过策略路由对向对等体(组)发布的路由配置指定团体属性。
peer {ipv4-address | group-name} route-policy route-policy-name import 通过策略路由对向对等体(组)接收的路由配置指定团体属性。
import-route protocol [process-id] route-policy route-policy-name 通过路由策略对在BGP路由器上以import方式引入的路由配置指定的团体属性。
network ipv4-address [mask | mask-length] route-policy route-policy-name 通过路由策略对在BGP路由器上以Network方式静态引入的路由配置指定的团体属性。
peer {ipv4-address | group-name} advertise-community 配置允许将团体属性传给对等体或对等体组。
peer {ipv4-address | group-name | ipv6-address} advertise-ext-community 配置允许将扩展团体属性传给对等体或对等体组。
apply community命令有多种应用方式。现假设原BGP路由的团体名为30,在符合路由策略过滤条件的情况下,替换或追加AS规则如下:
①如果配置了apply community100命令,则团体名更改为100
②如果配置了apply community100 150命令,则团体名更改为100或150,即BGP路由属于两个团体。
③如果配置了apply community100 150 additive命令,则团体名更改为30、100或150,即BGP路由属于三个团体。
示例:配置名为setcommunity的路由策略,匹配AS-path-filter为8的路由,更改其团体属性为no-export。
<Huawei>system-view
[Huawei]route-policy setcommunity permit node 16
[Huawei-route-policy]if-match as-path-filter 8
[Huawei-route-policy]apply community no-export
示例:将100:2、1.1.1.1:22、100.100:100这三个扩展团体属性值添加到BGP的VPN Route-Target扩展团体属性中
<Huawei>system-view
[Huawei]route-policy policy permit node 10
[Huawei-route-policy]apply extcommunity rt100:2 rt 1.1.1.1:22 rt 100.100:100 additive
八、配置BGP负载分担
在大型网络中,到达同一目的地通常会存在多条有效路由,但是BGP只将最优路由发布给对等体,这一特点往往造成很多流量负载不均衡的情况。通过配置BGP负载分担,可以使流量负载均衡。
一般情况下,只有在“BGP协议的选路规则”中所描述的前8个属性完全相同,且AS_Path属性也相同时,BGP路由之间才能互相等价,实现BGP的负载分担。具体条件:
①原始下一跳(也就是路由到达设备前的下一跳)不相同。
②首选值(PrefVal)相同
③本地优先级(Local_Pref)相同
④都是聚合路由,或者都不是聚合路由。
⑤Origin类型(IGP、EGP、Incomplete)相同。
⑥MED值相同。
⑦都是EBGP路由或都是IBGP路由。
⑧AS内部IGP的Metric相同。
⑨AS_Path属性完全相同。
以上路由负载分担的规则也可以通过配置来改变,如忽略路由AS_Path属性值的比较、忽略IGP Metric的比较,但需要确保不会引起环路。
如果实现了BGP负载分担,则无论是否配置了peer {group-name | ipv4-address} next-hop-local命令,在向IBGP对等体组发布路由时都先将下一跳地址改变为自身出接口IP地址。
BGP负载分担的配置主要有两个方面:一是配置允许实施负载分担的最大等价路由条数;二是配置在进行负载分担时是否比较AS_Path属性。
system-view
bgp {as-number-plain | as-number-dot} 启动BGP,进入BGP视图
ipv4-family {unicast | multicast} 进入要配置BGP负载分担的对应IP地址族视图。BGP路由在不同的地址族下可分别配置不同的负载分担配置。
maximum load-balancing [ebgp | ibgp] number 设置形成负载分担的等价路由的最大条数。
load-balancing as-path-ignore 设置路由在形成负载分担时不比较路由的AS-path属性。
九、BGP路由选路和负载分担管理
①display bgp paths [as-regular-expression]:查看BGP的AS路径信息。
②display bgp Routing-table different-origin-as:查看源AS不一致(目的地址相同)的路由。
③display bgp routing-table regular-expression as-regular-expression:查看匹配AS正则表达式的路由信息。
④display bgp routing-table [network [{mask | mask-length} [longer-prefixes]]]:查看BGP路由表中的信息。
⑤display bgp routing-table community [community-number | aa:nn]&<1-29> [internet | no-advertise | no-export |no-export-subcpnfed]*[whole-match]:查看指定BGP团体的路由信息。
⑥display bgp routing-table community-filter {{community-filter-name |basic-community-filter-number}[whole-match] | advanced-community-filter-number}:查看匹配指定BGP团系属性过滤器的路由。
⑦display bgp multicast routing-table [ip-address [mask-length [longer-prefixes] | mask[longer-prefixes]]]:查看MBGP路由表的路由信息。
⑧display bgp multicast routing-tablestatistics:查看MBGP路由表的统计信息。
十、通过MED属性控制路由选择的配置示例
如上拓扑,所有路由器都配置BGP,RouterA在AS65008中,RouterB和RouterC在AS 65009中。RouterA与RouterB、RouterC之间运行EBGP,RouterB和RouterC之间运行IBGP。要求从AS 65008到AS65009的流量优先通过RouterC到达。
1、基本配置思路
只需在配置好基本的BGP功能,建立各处的EBGP或者IBGP对等体连接后,再把RouterB的MED属性调大(RouterC的MED属性采用缺省的最小值0)即可。
配置各路由器的BGP基本功能。包括配置各自的对等体连接,并需要在RouterB和RouterC上引入它们之间的直连路由9.1.1.0/24(主要用于后面的BGP路由表验证)。因为没有配置Loopback接口,所以需要明确配置各路由器的RouterID。A、B、C的路由器ID分别设置为1.1.1.1、2.2.2.2、3.3.3.3。
到目的地址9.1.1.0/24有两条有效路由,其中下一跳为200.1.1.1的路由是最优路由,通告到了RouterB和RouterC,来自RouterC的非最优路由没有被通告。
通过策略配置RouterB发送给RouterA的MED值为100,使它的优先级降低,而RouterC仍采用缺省的最低MED值0(优先级最高)。本例仅需为发给EBGP对等体RouterA的路由改变MED属性值,所以需要用到路由策略。
由于下一跳为200.1.1.1(RouterB)的路由MED值为100,而下一跳为200.1.2.1的MED值为0,所以BGP优先选择来自RouterC的MED值较小的路由,并通告到了B和C,来自B的非最优路由没有被通告。
十一、BGP团体配置示例
如上拓扑,RouterB分别与RouterA、RouterC之间建立EBGP连接,要求AS10发布到AS20中的路由不再被AS20向其他AS发布。
1、基本配置思路
只需先配置好各路由器的BGP基本功能,然后在RouterA上利用路由策略定义发往对等体RouterB的路由带有No_Export团体属性,就可实现AS10发布到AS20中的路由不再被AS20向其他AS发布。
配置各路由器的BGP基本功能。包括配置各自的对等体连接,并需要在RouterA上引入它的直连路由9.1.1.0/24(主要用于BGP路由表验证)。A、B、C的路由器ID分别设为:1.1.1.1、2.2.2.2、3.3.3.3。
通过display bgp routing-table 9.1.1.0在RouterB上的BGP路由表中查看路由9.1.1.0/24详细信息。可看到RouterB把收到的BGP路由发布给了位于AS30的RouterC,通过display bgp routing-table查看RouterC的BGP路由表,可发现RouterC已从RouterB学习到了目的地址为9.1.1.0/24的路由。
在RouterA上通过路由策略配置BGP团体属性,使RouterA发布给RouterB的BGP路由不再被RouterB发布给其他AS。
此时在RouterB上通过display bgp routing-table9.1.1.0查看BGP路邮报,可看到9.1.1.0/24这条路由携带的团体属性,并且RouterB没有把9.1.1.0/24这条路由发布给其他区域的对等体。
在RC上已经没有9.1.1.0路由了。
看抓包数据:
发送的UPdate包携带了community属性。
因为接收了community属性为no-export,那么之前的路径要删除,上图就是删除9.1.1.0路径的Update包,携带有Withdrawn Route项。
十二、BGP负载分担配置示例
如上拓扑,所有路由器都配置BGP,现要求充分利用网络资源,减少RouterA到目的地址8.1.1.0/24网络拥塞。
1、基本配置思路
先配置好各路由器的BGP基本功能,然后在RouterA上配置负载分担功能,使从RouterA发送的流量可以经过RouterB和RouterC两条路径到达RouterD,实现对网络资源的充分利用。
配置各路由器的BGP基本功能。包括配置各自的对等体连接,并需要在RouterD上引入它的直连路由8.1.1.0/24。A、B、C、D的路由器ID分别设为1.1.1.1、2.2.2.2、3.3.3.3、4.4.4.4。
执行display bgp routing-table 8.1.1.0 24:
RouterA到8.1.1.0/24有两条有效路由,其中下一跳为200.1.1.2的路由是最优路由(因为B的RouterID小一些)。
在RouterA上配置负载分担,允许两条等价路由。