BGP基础

BGP前瞻

AS

OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不断增长,IGP已无法管理大规模网络,AS的概念由此诞生。

AS指的是同一个组织管理下,使用统一选路策略的设备集合。

不同AS通过AS号区分,AS号存在16Bbit、32bit两种表示方式,IANA负责AS号的分发。私有AS号:64512-65534。

当不同AS之间需要进行通信时,在AS之间应使用何种路由协议进行路由的传递?

image-1

使用IGP传递路由

AS之间需要直连链路,或通过VPN协议构造逻辑直连(例如GRE Tunnel)进行邻居建立。

AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。

整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。

image-2

使用BGP传递路由

为此在AS直接按专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:

  • BGP基于TCP,只要能够建立TCP连接即可建立BGP。
  • 只传递路由信息,不会暴露AS内的拓扑信息。
  • 触发式更新,而不是进行周期性更新。而OSPF会1800s泛洪一次LSA,IS-IS会900s泛洪一次LSP。

image-3

BGP概述

BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议。

BGP的特点:

BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。

BGP能承载大批量的路由信息,能够支撑大规模网络。

BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。

BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。

BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。

特征

BGP使用TCP为传输层协议,TCP端口号179路由器之间的BGP会话基于TCP连接而建立。

运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。

两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表。

BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会周期性更新)。

BGP能够承载大批量的路由前缀,可在大规模网络中应用。

image-4

BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。

每条BGP路由都携带多种路径属性(Path attribute),BGP可以通过这些路径属性控制路径选择,而不像IS-IS、OSPF只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式。

image-5

对等体关系

  1. 与OSPF、IS-IS等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。
  2. BGP存在两种对等体关系类型:EBGP及IBGP:
  • EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件:1.两个路由器所属AS不同(即AS号不同)。2.在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
  • IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。

image-6

对等体关系建立

先启动BGP的一端先发起TCP连接,图中R1先启动BGP,R1使用随机端口向R2的179端口发起TCP连接,完成TCP连接的建立。

三次握手建立完成之后,R1、R2之间相互发送Open报文,携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。

其中Open报文中携带:

  • My Autonomous System:自身AS号。
  • Hold Time:用于协商后续Keepalive报文发送时间,默认是180s,可以自定义,当两端Hold Time时间不统一的情况下,会向下协商,以时间短的为准。
  • BGP Identifier:自身Router ID。

image-7

BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体。

image-8

TCP连接源地址

  • 缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。
  • 在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。
  • 在部署EBGP对等体关系是,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题。

image-9

一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建立IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于冗余链路的存在,R1与R3之间的IP连通性起始并没有DOWN(仍然可以通过R4到达彼此)。

配置邻居建立

image-10

R2和R3之间建立EBGP邻居关系,R1和R2之间建立IBGP邻居关系。

基本IP地址配置省略。

EBGP

AR2配置

1
2
3
4
5
6
7
8
9
#接口建立
[AR2]bgp 100
[AR2-bgp]peer 23.1.1.3 as-number 200
#环回口建立
[AR2]ip route-static 3.3.3.3 32 23.1.1.3
[AR2]bgp 100
[AR2-bgp]peer 3.3.3.3 as-number 200
[AR2-bgp]peer 3.3.3.3 connect-interface LoopBack 0(本端的环回口)
[AR2-bgp]peer 3.3.3.3 ebgp-max-hop 2 #指定EBGP的最大跳数

AR3配置

1
2
3
4
5
6
7
8
9
#接口建立
[AR3]bgp 200
[AR3-bgp]peer 23.1.1.2 as-number 100
#环回口建立
[AR3]ip route-static 2.2.2.2 32 23.1.1.2
[AR3]bgp 200
[AR3-bgp]peer 2.2.2.2 as-number 100
[AR3-bgp]peer 2.2.2.2 connect-interface LoopBack 0(本端的环回口)
[AR3-bgp]peer 2.2.2.2 ebgp-max-hop 2 #指定EBGP的最大跳数

image-11

此时Established状态为BGP邻居建立成功的状态。

IBGP

AR1

1
2
3
#基于接口
[AR1]bgp 100
[AR1-bgp]peer 12.1.1.2 as-number 100

AR2

1
2
3
#基于接口
[AR2]bgp 100
[AR2-bgp]peer 12.1.1.1 as-number 100

image-12

基于环回口,新增AR4路由器验证冗余性。

image-13

AR1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#使用OSPF确保路由器之间能够建立连接
[AR1]ospf
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]network 12.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]network 14.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]quit
[AR1-ospf-1]quit
#IBGP使用环回口建立
[AR1]bgp 100
[AR1-bgp]peer 2.2.2.2 as-number 100
[AR1-bgp]peer 2.2.2.2 connect-interface lo0
#断掉AR1-AR2的连接,查看AR1-AR2的BGP连接是否会中断
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]shutdown
#再次查看BGP的连接情况
[AR1]dis bgp peer

BGP local router ID : 12.1.1.1
Local AS number : 100
Total number of peers : 1 Peers in established state : 1

Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv

2.2.2.2 4 100 5 7 0 00:03:48 Established 0

AR2

1
2
3
4
5
6
7
8
9
10
11
[AR2]ospf	
[AR2]ospf
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]network 12.1.1.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]network 24.1.1.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]quit
[AR2-ospf-1]quit
[AR2]bgp 100
[AR2-bgp]peer 1.1.1.1 as-number 100
[AR2-bgp]peer 1.1.1.1 connect-interface lo0

AR4

1
2
3
4
5
6
7
[AR4]ospf
[AR4-ospf-1]area 0
[AR4-ospf-1-area-0.0.0.0]network 4.4.4.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]network 14.1.1.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]network 24.1.1.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]quit
[AR4-ospf-1]quit

证明即使AR1与AR2之间的连接断掉了,但是它们之间的BGP连接不会断掉,冗余路线是:AR1-AR4-AR2。

报文及状态机

报文类型

BGP存在5种类型的报文,不同类型的报文拥有相同的头部(header)。

image-14

image-15

报文格式

报文头格式

BGP五种报文都拥有相同的报文头,格式如下图所示,主要字段解释:

Marker:16Byte,用于标明BGP报文边界,所有bit均为“1”.

Length:2Byte,BGP报文总长度(包括报文头在内),以Byte为单位。

Type:1Byte,BGP报文的类型。其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh报文。

image-16

Open

Open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系,报文格式如左侧所示,主要字段解释如下:

  • Version:BGP的版本号,对于BGP 4来说,其值为4。
  • My AS(autonomous system):本地AS号,通过比较两端的AS号可以判断对端是否和本端处于相同AS。
  • Hold Time:保持时间,在建立对等体关系时两端要协商Hold Time,并保持一致,如果在这个时间内未收到对端发来的Keepalive报文和Update报文,则认为BGP连接中断。
  • BGP Identifier:BGP标识符,以IP地址的形式表示,用来识别BGP路由器。

image-17

Update

Update报文用于在对等体之间传递路由信息,可以用于发布、撤销路由。

一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(Network Layer Reachable Information,网络层可达信息)中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。

报文格式如下图所示,主要字段解释如下:

  • Withdrawn routes:不可达路由的列表。
  • Path attributes:与NLRI相关的所有路径属性列表,每个路径属性有一个TLV(Type-Length-Vaule)三元组构成。
  • NLRI:可达路由的前缀和前缀长度二元组。

image-18

Notification

当BGP检测到错误状态(对等体建立时、建立之后都可能发生),就会像对等体发送Notification,告知对端错误原因,之后BGP连接将会中断。

Error Code、Error subcode:差错码、差错子码,用于告知对端具体的错误类型。

Data:用于辅助描述详细的错误内容,长度并不固定。

image-19

Keepalive

BGP路由器收到对端发送给的Keepalive报文,将对等体状态置为已建立,同时后续定期发送Keepalive报文用于保持连接。

Keepalive报文格式只包含报文头,没有附加其他任何字段。

image-20

Route-refresh

Route-refresh报文用来要求对等体重新发送指定地址族的路由信息,一般为本段修改了相关路由策略之后让对方重新发送Update报文,本段执行新的路由策略重新计算BGP路由。

相关字段内容:

AFI:Address Family Identifier,地址族标识,如IPv4。

Res:保留,8个bit必须置0。

SAFI:Subsequent Address Family Identifier,子地址族标识。

image-21

状态机

image-22

状态机详解

image-23

image-24

协议表项

对等体表

image-25

BGP路由表

image-26

在设备上通过display bgp routing-table查看BGP路由表:

Network:路由的目的网络地址以及网络掩码。

NextHop:下一跳地址。

入宫想要查看某条路由更加详细的信息,可以通过display bgp routing-table ipv4-address {mask|mask-length}查看,该命令会将匹配的BGP路由信息详细展示。

BGO路由生成

路由生成

不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。

BGP注入路由的方式有两种:

  • Network
  • import-route

与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由。

image-27

Network注入路由

image-28

image-29

AR1创建虚拟路由用于路由导入,并通过OSPF宣告给整个区域

1
2
3
4
5
6
7
8
9
10
11
[AR1]int l01
[AR1-LoopBack1]ip add 10.1.1.1 32
[AR1-LoopBack1]int lo2
[AR1-LoopBack2]ip add 10.1.1.2 32
[AR1-LoopBack2]quit
[AR1]ospf
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 10.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]network 10.1.1.2 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]quit
[AR1-ospf-1]quit

AR2注入路由,查看bgp路由表可以看到路由最前面有一个*>,代表有效最优路由,*有效,>最优。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[AR2]bgp 100
[AR2-bgp]network 10.1.1.1 32
[AR2-bgp]network 10.1.1.2 32
[AR2-bgp]dis bgp routing-table

BGP Local router ID is 12.1.1.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 10.1.1.1/32 0.0.0.0 1 0 i
*> 10.1.1.2/32 0.0.0.0 1 0 i

AR3查看bgp路由表即可看到AR2导入bgp的路由条目。

1
2
3
4
5
6
7
8
9
10
11
12
13
[AR3]dis bgp routing-table 

BGP Local router ID is 23.1.1.3
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 10.1.1.1/32 2.2.2.2 1 0 100i
*> 10.1.1.2/32 2.2.2.2 1 0 100i

import-route注入路由

image-30

Network方式注入路由虽然是精确注入,但是只能一条条配置逐条注入IP路由表中的路由,如果注入的路由条目很多配置命令将会非常复杂,为此可以使用import-route方式,将直连路由、静态路由、OSPF路由、IS-IS路由等协议的路由注入到BGP路由表中。

image-29

AR2路由注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[AR2]bgp 100
[AR2-bgp]import-route ospf ?
INTEGER<1-65535> Specify a process id
[AR2-bgp]import-route ospf 1
[AR2-bgp]dis bgp rou

BGP Local router ID is 12.1.1.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 8
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.1/32 0.0.0.0 1 0 ?
*> 2.2.2.2/32 0.0.0.0 0 0 ?
*> 4.4.4.4/32 0.0.0.0 1 0 ?
*> 10.1.1.1/32 0.0.0.0 1 0 ?
*> 10.1.1.2/32 0.0.0.0 1 0 ?
*> 12.1.1.0/24 0.0.0.0 0 0 ?
*> 14.1.1.0/24 0.0.0.0 2 0 ?
*> 24.1.1.0/24 0.0.0.0 0 0 ?

聚合路由

与众多IGP协议相同,BGP同样支持路由的手工聚合,在BGP配置视图中使用aggregate命令可以执行BGP路由手工聚合,在BGP已经学习到相应的明细路由情况下,设备会向BGP注入指定的聚合路由。

image-31

image-29

取消AR1的环回口路由在OSPF中的宣告

1
2
3
4
[AR1]ospf 
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]undo network 10.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]undo network 10.1.1.2 0.0.0.0

AR1手工聚合BGP路由需要先将三个路由条目导入进BGP路由表中,然后才能做聚合,另外聚合的命令参数detail-suppressed是不对明细的路由进行展示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[AR1]bgp 100
[AR1-bgp]network 10.1.1.1 32
[AR1-bgp]network 10.1.1.2 32
[AR1-bgp]network 10.1.1.3 32
[AR1-bgp]dis bgp rou

BGP Local router ID is 12.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 10.1.1.1/32 0.0.0.0 0 0 i
*> 10.1.1.2/32 0.0.0.0 0 0 i
*> 10.1.1.3/32 0.0.0.0 0 0 i
[AR1-bgp]aggregate 10.1.1.0 30 detail-suppressed
[AR1-bgp]dis bgp rou

BGP Local router ID is 12.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 10.1.1.0/30 127.0.0.1 0 i
s> 10.1.1.1/32 0.0.0.0 0 0 i
s> 10.1.1.2/32 0.0.0.0 0 0 i
s> 10.1.1.3/32 0.0.0.0 0 0 i

在AR2中查看BGP路由表

1
2
3
4
5
6
7
8
9
10
11
12
[AR2]dis bgp rou

BGP Local router ID is 12.1.1.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn

*>i 10.1.1.0/30 1.1.1.1 100 0 i

此时你会对BGP路由器之间的通信进行测试,但是发现它们之间的通信存在问题,两个BGP路由表中的路由不能进行通信,这个问题会在下文中进行解释。

通告原则

BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体。

BGP通告遵循以下原则:

  • 只发布最优路由。
  • 从EBGP对等体获取的路由会发布给所有对等体。
  • IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
  • BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(如OSPF,IS-IS等或静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。

通告原则一

通告原则一:只发布最优且有效(即下一跳地址可达)路由。

通过display bgp routing-table命令可以查看BGP路由表。

在BGP路由表中同时存在以下两个标志的路由为最优、有效:

*:代表有效。

>:代表最优。

image-32

通告原则二

通告原则二:从EBGP对等体获取的路由,会发布给所有对等体。

R2从EBGP对等体获取的BGP路由,会发布给所有EBGP、IBGP对等体。

image-33

通告原则三

通告原则三:从IBGP对等体获取的BGP路由,不会再发送给其他IBGP对等体。

该条原则也被称为“IBGP水平分割”。

以下图为例,如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体:

  • R2将一条路由传递给了IBGP对等体R3。
  • R3收到路由之后传递给IBGP对等体R1。
  • R1继续传递给IBGP对等体R2。
  • 路由环路就此形成。

image-34

但是环路解决后又会有新的问题,如下图所示,当BGP路由器R2间路由传递给BGP路由器R1时,由于第三条原则限制,R1无法将BGP路由传递给R3,R3将无法学习到路由。

为解决该问题可以采用AS内IBGP全互联的方式,即:R2、R3之间建立非直连的IBGP对等体关系,以此让BGP路由器R2将路由传递给BGP路由器R3。

image-35

通告原则四

通告原则四:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(如OSPF,IS-IS等或静态路由)学习到这条路由,该条规则也被称为BGP同步原则。

如下图所示:

  1. BGP路由器R4上存在一条路由10.0.4.0/24,R4将其传递给了R2。
  2. R2将路由传递给非直连IBGP对等体R3。
  3. R3将路由传递给R5。
  4. 之后R5向10.0.4.4发起访问。

image-36

R5访问10.0.4.4:

R5查找路由表,将报文发送给R3。

R3收到报文后查找路由表,匹配到一条BGP路由,其下一跳为R2,但是R2为非直连下一跳,需要进行路由迭代,通告IGP学习到的路由迭代出下一跳为R1。R3将报文发送给R1。

R1收到报文后查找路由表,因为R1并非BGP路由器,未与R2建立IBGP对等体关系,因此R1上并无BGP路由10.0.4.0/24,路由查找失败,R1将报文丢弃。

image-37

BGP的基本配置

image-38

AR1与AR5建立EBGP连接

AR1

1
2
[AR1]bgp 200
[AR1-bgp]peer 15.1.1.5 as-number 100

AR5

1
2
3
4
5
6
7
8
9
10
11
[AR5]bgp 100
[AR5-bgp]peer 15.1.1.1 as-number 200
[AR5-bgp]dis bgp peer

BGP local router ID : 5.5.5.5
Local AS number : 100
Total number of peers : 1 Peers in established state : 1

Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv

15.1.1.1 4 200 2 2 0 00:00:05 Established 0

AR4与AR6建立EBGP连接

AR4

1
2
3
4
5
[AR4]ip route-static 6.6.6.6 32 46.1.1.6
[AR4]bgp 200
[AR4-bgp]peer 6.6.6.6 as-number 300
[AR4-bgp]peer 6.6.6.6 ebgp-max-hop 2
[AR4-bgp]peer 6.6.6.6 connect-interface lo0

AR6

1
2
3
4
5
[AR6]ip route-static 4.4.4.4 32 46.1.1.4
[AR6]bgp 300
[AR6-bgp]peer 4.4.4.4 as-number 200
[AR6-bgp]peer 4.4.4.4 connect-interface lo0
[AR6-bgp]peer 4.4.4.4 ebgp-max-hop 2

AS200内部全互联

AR5

1
2
3
4
5
6
[AR5]int lo1
[AR5-LoopBack1]ip add 50.1.1.1 32
[AR5-LoopBack1]quit
[AR5]bgp 100
[AR5-bgp]network 50.1.1.1 32
[AR5-bgp]quit

AR6

1
2
3
4
5
6
[AR6]int lo1
[AR6-LoopBack1]ip add 60.1.1.1 32
[AR6-LoopBack1]quit
[AR6]bgp 300
[AR6-bgp]network 60.1.1.1 32
[AR6-bgp]quit

AR1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[AR1]ospf
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]network 12.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]network 13.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]quit
[AR1-ospf-1]quit
[AR1]bgp 200
[AR1-bgp]peer 2.2.2.2 as-number 200
[AR1-bgp]peer 2.2.2.2 connect-interface lo0
[AR1-bgp]peer 2.2.2.2 next-hop-local
[AR1-bgp]peer 3.3.3.3 as-number 200
[AR1-bgp]peer 3.3.3.3 connect-interface lo0
[AR1-bgp]peer 3.3.3.3 next-hop-local
[AR1-bgp]peer 4.4.4.4 as-number 200
[AR1-bgp]peer 4.4.4.4 connect-interface lo0
[AR1-bgp]peer 4.4.4.4 next-hop-local

AR2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[AR2]ospf
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 12.1.1.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]network 24.1.1.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]quit
[AR2-ospf-1]quit
[AR2]bgp 200
[AR2-bgp]peer 1.1.1.1 as-number 200
[AR2-bgp]peer 1.1.1.1 connect-interface lo0
[AR2-bgp]peer 1.1.1.1 next-hop-local
[AR2-bgp]peer 3.3.3.3 as-number 200
[AR2-bgp]peer 3.3.3.3 connect-interface lo0
[AR2-bgp]peer 3.3.3.3 next-hop-local
[AR2-bgp]peer 4.4.4.4 as-number 200
[AR2-bgp]peer 4.4.4.4 connect-interface lo0
[AR2-bgp]peer 4.4.4.4 next-hop-local

AR3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[AR3]ospf 
[AR3-ospf-1]area 0
[AR3-ospf-1-area-0.0.0.0]network 13.1.1.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]network 34.1.1.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]qui
[AR3-ospf-1]quit
[AR3]bgp 200
[AR3-bgp]peer 1.1.1.1 as-number 200
[AR3-bgp]peer 1.1.1.1 connect-interface lo0
[AR3-bgp]peer 1.1.1.1 next-hop-local
[AR3-bgp]peer 2.2.2.2 as-number 200
[AR3-bgp]peer 2.2.2.2 connect-interface lo0
[AR3-bgp]peer 2.2.2.2 next-hop-local
[AR3-bgp]peer 4.4.4.4 as-number 200
[AR3-bgp]peer 4.4.4.4 connect-interface lo0
[AR3-bgp]peer 4.4.4.4 next-hop-local

AR4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[AR4]ospf 
[AR4-ospf-1]area 0
[AR4-ospf-1-area-0.0.0.0]network 24.1.1.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]network 34.1.1.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]network 4.4.4.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]qui
[AR4-ospf-1]quit
[AR4]bgp 200
[AR4-bgp]peer 1.1.1.1 as-number 200
[AR4-bgp]peer 1.1.1.1 connect-interface lo0
[AR4-bgp]peer 1.1.1.1 next-hop-local
[AR4]bgp 200
[AR4-bgp]peer 1.1.1.1 as-number 200
[AR4-bgp]peer 1.1.1.1 connect-interface lo0
[AR4-bgp]peer 1.1.1.1 next-hop-local
[AR4-bgp]peer 2.2.2.2 as-number 200
[AR4-bgp]peer 2.2.2.2 connect-interface lo0
[AR4-bgp]peer 2.2.2.2 next-hop-local
[AR4-bgp]peer 3.3.3.3 as-number 200
[AR4-bgp]peer 3.3.3.3 connect-interface lo0
[AR4-bgp]peer 3.3.3.3 next-hop-local

不同AS之间的路由通信,以AR5的50.1.1.1和AR6的60.1.1.1的通信为例。

image-39

BGP路径属性与路由反射器

路径属性

当一条BGP路由都拥有多个路径属性。

当路由器将BGP路由通告给它们的对等体时,一并被通告的还有路由所携带的各个路径属性。

BGP的路径属性将影响路由优选。

image-40

路径属性分类

image-41

公认属性是所有BGP路由器都必须能够识别的属性。公认属性可以分为两类:

  • 公认必遵(Well-know Mandatory):必须包括在每个Update消息里。
  • 公认任意(Well-know Discretionary):可能包括在某个Update消息里。

可选属性不需要都被BGP路由器所识别,可选属性可以分为两类:

  • 可选过渡(Optional Transitive):BGP设备不识别此类属性依然会接收该类属性并通告给其他对等体。
  • 可选非过渡(Optional Non-transitive):BGP设备不识别此类属性会忽略该属性,且不会通告给其他对等体。

公认必遵属性

AS_Path

该属性为公认必遵属性,是前往目标网络的路由经过的AS号列表;

作用:确保路由在EBGP对等体之间传递无环,另外也作为路由优选的衡量标准之一;

路由在被通告给EBGP对等体时,路由器会在该路由的AS_Path中追加上本地的AS号;路由被通告给IBGP对等体时,AS_Path不会发生改变。

image-42

AS_Path防止环路

R1从R4收到BGP路由更新中AS_Path属性数值为:400 300 200 100,存在本身AS号,不接受该路由,从而防止了路由环路的产生。

image-43

AS_Path影响路由优选

AS_Path的重要作用之一便是影响BGP路由的优选,在途中,R5同时从R2及R4学习到去往10.0.1.0/24网段的BGP路由,在其它条件相同的情况下,R5会优选R2通告的路由,因为该条路由的AS_Path属性值较短,也即AS号的个数更少。

image-44

AS_Path类型

image-45

修改AS_Path

使用Route-Policy修改BGP路由的AS_Path属性时,可以使用以下三种方式。

image-46

选路实验

image-48

IP地址以及OSPF配置此处省略。

AR1

1
2
3
4
5
[AR1]bgp 100
[AR1-bgp]peer 2.2.2.2 as-number 100
[AR1-bgp]peer 2.2.2.2 connect-interface lo0
[AR1-bgp]peer 3.3.3.3 as-number 100
[AR1-bgp]peer 3.3.3.3 connect-interface lo0

AR2

1
2
3
4
5
6
7
8
9
[AR2]bgp 100
[AR2-bgp]peer 1.1.1.1 as-number 100
[AR2-bgp]peer 1.1.1.1 connect-interface lo0
[AR2-bgp]peer 1.1.1.1 next-hop-local
[AR2-bgp]peer 3.3.3.3 as-number 100
[AR2-bgp]peer 3.3.3.3 connect-interface lo0
[AR2-bgp]peer 3.3.3.3 next-hop-local
[AR2-bgp]peer 24.1.1.4 as
[AR2-bgp]peer 24.1.1.4 as-number 200

AR3

1
2
3
4
5
6
7
8
[AR3]bgp 100
[AR3-bgp]peer 1.1.1.1 as-number 100
[AR3-bgp]peer 1.1.1.1 connect-interface lo0
[AR3-bgp]peer 1.1.1.1 next-hop-local
[AR3-bgp]peer 2.2.2.2 as-number 100
[AR3-bgp]peer 2.2.2.2 connect-interface lo0
[AR3-bgp]peer 2.2.2.2 next-hop-local
[AR3-bgp]peer 35.1.1.5 as-number 300

AR4

1
2
3
[AR4]bgp 200
[AR4-bgp]peer 24.1.1.2 as-number 100
[AR4-bgp]peer 45.1.1.5 as-number 300

AR5

1
2
3
[AR5]bgp 300
[AR5-bgp]peer 45.1.1.4 as-number 200
[AR5-bgp]peer 35.1.1.3 as-number 100

在AR1上新建一个环回口,IP地址为100.100.100.100/32,并将路由传递给AR5。

1
2
3
4
5
[AR1]int lo100
[AR1-LoopBack100]ip add 100.100.100.100 32
[AR1-LoopBack100]quit
[AR1]bgp 100
[AR1-bgp]network 100.100.100.100 32

查看AR5的BGP路由信息可以看到两条通往AR5的BGP路由。

1
2
3
4
5
6
7
8
9
10
11
12
13
[AR5]dis bgp rou

BGP Local router ID is 45.1.1.5
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 100.100.100.100/32 35.1.1.3 0 100i
* 45.1.1.4 0 200 100i

修改AS-Path属性,将下一跳为45.1.1.4的路由作为最优路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#需用用到基本ACL进行路由匹配
[AR5]acl 2000
[AR5-acl-basic-2000]rule permit source 100.100.100.100 0
[AR5-acl-basic-2000]quit
#通过路由策略修改路由属性
[AR5]route-policy as-path permit node 10
Info: New Sequence of this List.
[AR5-route-policy]if-match acl 2000 #匹配ACL的路由
[AR5-route-policy]apply as-path 100 100 additive #添加AS-Path 100 100
[AR5-route-policy]quit
#调用路由策略
[AR5]bgp 300
[AR5-bgp]peer 35.1.1.3 route-policy as-path import
#再次查看BGP路由信息,可以发现下一跳为45.1.1.4的路由已经作为最优路由并且下一跳为35.1.1.3的路由的as-path属性已经修改成功。
[AR5-bgp]dis bgp rou

BGP Local router ID is 45.1.1.5
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 100.100.100.100/32 45.1.1.4 0 200 100i
* 35.1.1.3 0 100 100 100i

Origin

该属性为公认必遵属性,它标识了BGP路由的起源。根据路由被引入BGP的方式不同,存在三种类型的Origin。

当去往同一个目的地存在多条不同Origin属性的路由时,在其他条件都相同的情况下,BGP将按Origin的下顺序优选路由:IGP>EGP>Incomplete。

image-47

修改Origin属性

image-49

IP地址配置以及OSPF配置省略。

AR1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[AR1]bgp 100
[AR1-bgp]peer 12.1.1.2 as-number 200
[AR1-bgp]peer 13.1.1.3 as-number 200
#通过network宣告BGP路由,起源属性就是“i”。
[AR1-bgp]network 1.1.1.1 32
[AR1-bgp]dis bgp routing-table

BGP Local router ID is 12.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.1/32 0.0.0.0 0 0 i
#通过路由引入的方式引入BGP路由中,起源属性就为“?”
[AR1-bgp]import-route direct
[AR1-bgp]dis bgp routing-table

BGP Local router ID is 12.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 7
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 1.1.1.1/32 0.0.0.0 0 0 ?
*> 12.1.1.0/24 0.0.0.0 0 0 ?
*> 12.1.1.1/32 0.0.0.0 0 0 ?
*> 13.1.1.0/24 0.0.0.0 0 0 ?
*> 13.1.1.1/32 0.0.0.0 0 0 ?
*> 127.0.0.0 0.0.0.0 0 0 ?
*> 127.0.0.1/32 0.0.0.0 0 0 ?

AR2

1
2
3
4
5
[AR2]bgp 200
[AR2-bgp]peer 3.3.3.3 as-number 200
[AR2-bgp]peer 3.3.3.3 connect-interface lo0
[AR2-bgp]peer 3.3.3.3 next-hop-local
[AR2-bgp]peer 12.1.1.1 as-number 100

AR3

1
2
3
4
5
[AR3]bgp 200
[AR3-bgp]peer 2.2.2.2 as-number 200
[AR3-bgp]peer 2.2.2.2 connect-interface lo0
[AR3-bgp]peer 2.2.2.2 next-hop-local
[AR3-bgp]peer 13.1.1.1 as-number 100

通过修改1.1.1.1通过3.3.3.3的路由到R2的起源属性影响路由优选。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[AR2]acl 2000
[AR2-acl-basic-2000]rule permit source 1.1.1.1 0
[AR2-acl-basic-2000]quit
[AR2]route-policy origin permit node 10
Info: New Sequence of this List.
[AR2-route-policy]if-match acl 2000
[AR2-route-policy]apply origin igp
[AR2-route-policy]quit
[AR2]bgp 200
[AR2-bgp]peer 3.3.3.3 route-policy origin import
#再次查看BGP路由表,可以看到1.1.1.1通过3.3.3.3的路由到R2的起源属性已经成为最优路径。
[AR2-bgp]dis bgp rou

BGP Local router ID is 23.1.1.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn

*>i 1.1.1.1/32 3.3.3.3 0 100 0 100i
* 12.1.1.1 0 0 100?
12.1.1.0/24 12.1.1.1 0 0 100?
*> 13.1.1.0/24 12.1.1.1 0 0 100?
#虽然可以看到1.1.1.1通过3.3.3.3的路由到R2的起源属性成为最优路径,但是存在一个问题,原本的12.1.1.1下一跳地址是3.3.3.3的路由条目消失了,这是因为路由策略默认是deny的,之前的路由策略值允许了一个匹配到acl的规则,如果想保存原本的路由条目,可以再到路由策略中进行配置,设置一个允许的路由策略但不用配置,此策略针对未匹配node 10的流量的时候,所有的路由流量都可以被放行。
[AR2]route-policy origin permit node 20
Info: New Sequence of this List.
[AR2-route-policy]quit
[AR2]dis bgp rou

BGP Local router ID is 23.1.1.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 5
Network NextHop MED LocPrf PrefVal Path/Ogn

*>i 1.1.1.1/32 3.3.3.3 0 100 0 100i
* 12.1.1.1 0 0 100?
*>i 12.1.1.0/24 3.3.3.3 0 100 0 100?
12.1.1.1 0 0 100?
*> 13.1.1.0/24 12.1.1.1 0 0 100?

Next_Hop

该属性是一个公认必遵属性,用于指定到达目标网络的下一跳地址。

当路由器学习到BGP路由后,需对BGP路由的Next_Hop属性进行检查,该属性值(IP地址)必须在本地路由可达,如果不可达,则这条BGP路由不可用。

在不同场景中,设备对BGP路由的缺省Next_Hop属性值的设置规则如下:

  • BGP路由器在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • BGP路由器将本地始发路由发布给IBGP对等体时,会把该路由的信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • 路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变。
  • 如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段,那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体。
Next_Hop的缺省操作

路由器将BGP路由通告给自己的EBGP对等体时,将该路由的Next_Hop设置为自己的TCP连接源地址。

image-50

路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变。

image-51

如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段,那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体。

image-52

修改Next_Hop属性

使用peer next-hop-local命令可以在设置想IBGP对等体(组)通告路由时,把下一跳属性设置为自身的TCP连接源地址。

image-53

公认任意

Local_Preference

Local_Preference即本地优先级属性,可以用于告诉AS中的路由器,哪条路径是离开本AS的首选路径。

Local——Preference属性值越大则BGP路由越优。缺省的Local_Preference值为100。

该属性只能被传递给IBGP对等体,而不能传递给EBGP对等体。

image-54

注意事项

Local_Preference属性只能在IBGP对等体间传递(除非了做了策略否则Local_Preference值在IBGP对等体间传递过程中不会丢失),而不能在EBGP对等体间传递,如果在EBGP对等体间收到的路由的路径属性中携带了Local_Preference,则会进行错误处理。

但是可以在AS边界路由器上使用Import防线的给策略来修改Local_Preference属性值。也就是在收到路由之后,在本地为路由赋予Local_Preference。

使用bgp default local-preference命令修改缺省Local_Preference值,该值缺省为100。

路由器在向其EBGP对等体发送路由更新时,不能携带Local_Preference属性,但是对方接收路由之后,会在本地为这条路由赋一个缺省Local_Preference值(100),然后再将路由传递给自己的IBGP对等体。

本地使用network命令以及import-route命令引入的路由,Local_Preference为缺省值100,并能在AS内向其他IBGP对等体传递,传递过程中除非受路由策略影响,否则Local_Preference不变。

可选过渡

Community技术背景

image-55

标记

image-56

Community属性

Community(团体)属性可选为过渡属性,是一种路由标记,用于简化路由策略的执行。

可以将某些路由分配以恶个特定的Community属性值,之后即可以基于Community值而不是网络前缀/掩码信息来匹配路由并执行相应的策略了。

image-57

Community属性格式

Community属性值长度为32bit,也就是4Byte,可使用两种形式呈现:

十进制整数格式。

AA:NN格式,其中AA表示AS号,NN是自定义的编号。

image-58

公认Community属性

RFC1997(BGP Communities Attribute)定义了几个公认的Community属性值,如下图所示。

image-59

实验

实验目的:在AS 200内部能够传递1.1.1.1的路由,但是不能够传递给AS 300。

IP地址与OSPF配置省略。

image-60

AR1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[AR1]bgp 100
[AR1-bgp]peer 12.1.1.2 as-number 200
[AR1-bgp]quit
#做路由策略方便打标签时匹配
[AR1]acl 2000
[AR1-acl-basic-2000]rule permit source 1.1.1.1 0.0.0.0
[AR1-acl-basic-2000]quit
[AR1]route-policy com permit node 10
Info: New Sequence of this List.
[AR1-route-policy]if-match acl 2000
[AR1-route-policy]apply community no-export
[AR1-route-policy]quit
[AR1]rout
[AR1]route-policy com permit node 20
Info: New Sequence of this List.
[AR1-route-policy]quit
#bgp调用路由策略并给对等体打上标签
[AR1]bgp 100
[AR1-bgp]network 1.1.1.1 32
[AR1-bgp]peer 12.1.1.2 route-policy com export
[AR1-bgp]peer 12.1.1.2 advertise-community
[AR1-bgp]quit

AR2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[AR2]bgp 200
[AR2-bgp]peer 12.1.1.1 as-number 100
[AR2-bgp]quit
[AR2]ospf
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 23.1.1.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]quit
[AR2-ospf-1]quit
[AR2]bgp 200
[AR2-bgp]peer 3.3.3.3 as-number 200
[AR2-bgp]peer 3.3.3.3 connect-interface lo0
[AR2-bgp]peer 3.3.3.3 next-hop-local
[AR2-bgp]peer 4.4.4.4 as-number 200
[AR2-bgp]peer 4.4.4.4 connect-interface lo0
[AR2-bgp]peer 4.4.4.4 next-hop-local
[AR2-bgp]quit
#给R2的IBGP对等体打上标签,这样就不会将1.1.1.1的路由传递到AS 300内,只会在AS 200内传递
[AR2]bgp 200
[AR2-bgp]peer 3.3.3.3 advertise-community
[AR2-bgp]peer 4.4.4.4 advertise-community
#查看BGP路由表的团队属性
[AR2-bgp]dis bgp rou com

BGP Local router ID is 12.1.1.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Community

*> 1.1.1.1/32 12.1.1.1 0 0 no-export

AR3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[AR3]ospf 
[AR3-ospf-1]area 0
[AR3-ospf-1-area-0.0.0.0]network 23.1.1.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]network 34.1.1.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]quit
[AR3-ospf-1]quit
[AR3]bgp 200
[AR3-bgp]peer 4.4.4.4 as-number 200
[AR3-bgp]peer 4.4.4.4 connect-interface lo0
[AR3-bgp]peer 2.2.2.2 as-number 200
[AR3-bgp]peer 2.2.2.2 connect-interface lo0
[AR3-bgp]quit
#查看BGP路由表的团队属性
[AR3]dis bgp rou com

BGP Local router ID is 23.1.1.3
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Community

*>i 1.1.1.1/32 2.2.2.2 0 100 0 no-export

AR4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[AR4]bgp 200
[AR4-bgp]peer 45.1.1.5 as-number 300
[AR4-bgp]quit
[AR4]ospf
[AR4-ospf-1]area 0
[AR4-ospf-1-area-0.0.0.0]network 4.4.4.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]network 34.1.1.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]quit
[AR4-ospf-1]quit
[AR4]bgp 200
[AR4-bgp]peer 2.2.2.2 as-number 200
[AR4-bgp]peer 2.2.2.2 connect-interface lo0
[AR4-bgp]peer 2.2.2.2 next-hop-local
[AR4-bgp]peer 3.3.3.3 as-number 200
[AR4-bgp]peer 3.3.3.3 connect-interface lo0
[AR4-bgp]peer 3.3.3.3 next-hop-local
[AR4-bgp]quit
#查看BGP路由表的团队属性
[AR4]dis bgp rou com

BGP Local router ID is 34.1.1.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Community

*>i 1.1.1.1/32 2.2.2.2 0 100 0 no-export

AR5

1
2
3
4
5
6
[AR5]bgp 300
[AR5-bgp]peer 45.1.1.4 as-number 200
[AR5-bgp]quit
#查看1.1.1.1的路由是否未被传递到AS 300内部。
[AR5]dis bgp routing-table
[AR5]

image-61

可选非过渡

MED

image-62

MED(Multi-Exit Discriminator,多出口鉴别器)是可选非过渡属性,是一种度量值,用于向外部对等体指出进入本AS的首选路径,即当进入本AS的入口有多个时,AS可以使用MED动态地影响其他AS选择进入地路径。

MED属性值越小则BGP路由越优。

MED主要用于在AS之间影响BGP地选路。MED被传递给EBGP对等体后,对等体在其AS内传递路由时,携带该MED值,但将路由再次传递给其EBGP对等体时,缺省不会携带MED属性。

注意事项

缺省情况下,路由器值比较来自同一相邻AS的BGP路由的MED值,也就是说如果去往同一个目的地的两条路由来自不同的相邻AS,则部进行MED值的比较。

一台BGP路由器将路由通告给EBGP对等体时,是否携带MED属性,需要根据以下条件进行判断(不对EBGP对等体使用策略的情况下):

如果该BGP路由是本地始发(本地通告network或imprt-route命令引入)的,则缺省携带MED属性发送给EBGP对等体。

如果该BGP路由从BGP对等体学习到,那么该路由传递给EBGP对等体是缺省不会携带MED属性。

在IBGP对等体之间传递路由时,MED值会被保留并传递,除非部署了策略,否则MED值在传递过程中不会发生改变也不会丢失。

MED的默认操作

image-63

如果路由器通告IGP学习到一条路由,并通过networkimport-route的方式将路由引入BGP,产生的BGP路由的MED值继承路由在IGP的metric,如上图中如果R2通过OSPF学习到了10.0.1.0/24路由,并且该路由在R2的全局路由表中OSPF Cost=100,那么当R2将路由network进BGP后,产生的BGP路由的MED值为100。

如果路由器将本地直连、静态路由通过networkimport-route的方式引入BGP,那么这条BGP路由的MED为0,因为直连、静态路由cost为0。

image-64

如果路由器通过BGP学习到其他对等体传递过来的路由,那么将路由更新给自己的EBGP对等体时默认是不会携带MED的。这就是所谓的“MED不会跨AS传递”。例如上图中R3从R2学习到一条携带了MED属性的BGP路由,则它将该路由通告给R4时,缺省是不会携带MED属性的。

可以使用default med命令修改缺省的MED值,default med命令只对本设备上用import-route命令引入的路由和BGP的路由聚合生效。例如上图R2上配置default med 999,那么R2通过import-routeaggregate命令产生的路由传递给R3时,路由携带的MED为999。

路由聚合

Atomic_Aggregate及Aggregator

Atomic_Aggregate(原子聚合):属于公认任意属性,告知邻居此路由是已经聚合完成的,不能再次做聚合。

Aggregator(聚合者):属于可选过渡属性,告知邻居此聚合路由是谁生成的,由哪个AS发送过来的。

image-65

查看聚合之后的路由

在BGP路由详细信息中可与看到Aggregator属性记录了聚合设备的AS号、Router ID,同时通过Atomic-Aggregate属性标明该路由为聚合路由。

image-66

本地首选值

Preferred-Value介绍

image-67

Preferred-Value(协议首选值)是华为设备的特有属性,该属性仅在本地生效。当BGP路由表中存在到相同目的地的路由时,将优先选择Prefrred-Value值高的路由。

取值范围:0~65535;该值越大,则路由越优先。

Preffered-Value只能在路由器本地配置,而且只影响本设备的路由优选。该属性不会传递给任何BGP对等体。

BGP路由表中查看Preferred-Value

Preferred-Value为300的BGP路由优于Preferred-Value为0的路由,在BGP路由表中来自10.0.12.1的BGP路由为最优。

image-68

路由反射器

中转AS中的IBGP问题

image-69

由于水平分割的原因,为了保证中转AS 200所有的路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联。然而实现IBGP全互联存在诸多短板:

  • 路由器需要维护大量的TCP和BGP连接,尤其在路由器数量较多的时候。
  • AS内BGP网络的可扩展性较差。

为此可以采用路由反射器技术。

路由反射器角色

引入路由反射器之后存在两种角色:

  • RR(Route Reflector):路由反射器
  • Client:RR 客户端

RR会将学习的路由反射出去,从而使得IBGP路由在AS内传播无需建立IBGP全互联。

将一台BGP路由器知道哪个为RR的同时,还需要指定其Client。至于Client本身无需做任何配置,它并不知晓网络中存在RR。

image-30

路由反射规则

RR在接收BGP路由时:

如果路由反射器从自己的非客户对等体学习到一条IBGP路由,则它会将路由反射给所有客户但不会反射给其他非客户对等体。

如果路由反射器从自己的客户学习到一条IBGP路由,则它会将路由反射给所有非客户,以及除了该客户之外的其他所有客户。

如果路由学习自EBGP对等体,则发送给所有客户、非客户IBGP对等体。

反射规则示例

image-71

image-72

RR场景下的路由防环

image-73

RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:

  • Originator_ID
  • Cluster_List

Originator_ID、Cluster_List属性都属于非过渡属性。

Originator_ID

image-74

RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID,其值为本地AS中通告该路由的BGP路由Router ID。

若AS内存在多个RR,则Originator_ID属性由第一个RR创建,并且不被后续的RR所更改。

当BGP路由收到一条携带Originator_ID属性的IBGP路由,并且Originator_ID属性值与自身的Router ID相同,则它会忽略关于该条路由的更新。

路由反射簇(Cluster)

路由反射簇包括反射器RR及其Client。一个AS内允许存在uoge路由反射簇。

每一个簇都有唯一的簇ID(Cluster_ID,缺省时为RR的BGP Router ID)。

当一条路由被反射器反射后,该RR(该簇)的Cluster_ID就会被添加至路由的Cluster_list属性中。

当RR收到一条携带Cluster_list属性的BGP路由,且该属性中包含该簇的Cluster_ID时,RR认为该条路由存在环路,因此将忽略该条路由的更新。

image-75

Cluster_List

R2发送给R1的路由,经过R1反射给R3时除了添加Originator_ID之外还会添加Cluster_list:10.0.1.1。R3再次反射给R4时,Cluster_List值为:10.0.3.3 10.0.1.1,R4再次反射给R1时Cluster_List值为:10.0.4.4 10.0.3.3 10.0.1.1。

当R4将路由反射给R1时,R1发现Cluster_List包含了自身的Cluster_ID,判断存在环路,从而忽略该路由更新。

image-76

image-77

实验

image-78

接口IP地址及OSPF配置省略。

AR1

1
2
3
4
[AR1]bgp 100
[AR1-bgp]peer 12.1.1.2 as-number 200
[AR1-bgp]network 1.1.1.1 32
[AR1-bgp]quit

AR2

1
2
3
4
5
6
[AR2]bgp 200
[AR2-bgp]peer 12.1.1.1 as
[AR2-bgp]peer 12.1.1.1 as-number 100
[AR2-bgp]peer 3.3.3.3 as-number 200
[AR2-bgp]peer 3.3.3.3 connect-interface lo0
[AR2-bgp]peer 3.3.3.3 next-hop-local

AR3

1
2
3
4
5
6
7
[AR3]bgp 200
[AR3-bgp]peer 2.2.2.2 as-number 200
[AR3-bgp]peer 2.2.2.2 connect-interface lo0
[AR3-bgp]peer 4.4.4.4 as-number 200
[AR3-bgp]peer 4.4.4.4 connect-interface lo0
#设置AR3作为路由反射器,指定AR4为反射器客户端,等BGP路由更新后就可以看到AR4有1.1.1.1/32的路哟信息了。
[AR3-bgp]peer 4.4.4.4 reflect-client

AR4

1
2
3
[AR4]bgp 200
[AR4-bgp]peer 3.3.3.3 as-number 200
[AR4-bgp]peer 3.3.3.3 connect-interface lo0

image-79

BGP路由优选

路由优选规则

当到达同一个目的网段存在多条路由时,BGP通告如下的次序进行路由优选,在此之前会丢弃下一跳不可达的路由:

image-80