BGP基础 BGP前瞻 AS OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不断增长,IGP已无法管理大规模网络,AS的概念由此诞生。
AS指的是同一个组织管理下,使用统一选路策略的设备集合。
不同AS通过AS号区分,AS号存在16Bbit、32bit两种表示方式,IANA负责AS号的分发。私有AS号:64512-65534。
当不同AS之间需要进行通信时,在AS之间应使用何种路由协议进行路由的传递?
使用IGP传递路由 AS之间需要直连链路,或通过VPN协议构造逻辑直连(例如GRE Tunnel)进行邻居建立。
AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。
整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。
使用BGP传递路由 为此在AS直接按专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:
BGP基于TCP,只要能够建立TCP连接即可建立BGP。
只传递路由信息,不会暴露AS内的拓扑信息。
触发式更新,而不是进行周期性更新。而OSPF会1800s泛洪一次LSA,IS-IS会900s泛洪一次LSP。
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能够承载大批量的路由前缀,可在大规模网络中应用。
BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。
每条BGP路由都携带多种路径属性(Path attribute),BGP可以通过这些路径属性控制路径选择,而不像IS-IS、OSPF只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式。
对等体关系
与OSPF、IS-IS等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。
BGP存在两种对等体关系类型:EBGP及IBGP:
EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件:1.两个路由器所属AS不同(即AS号不同)。2.在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。
对等体关系建立 先启动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。
BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体。
TCP连接源地址
缺省情况下,BGP使用报文出接口作为TCP连接的本地接口。
在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。
在部署EBGP对等体关系是,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题。
一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建立IBGP邻居关系,那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于冗余链路的存在,R1与R3之间的IP连通性起始并没有DOWN(仍然可以通过R4到达彼此)。
配置邻居建立
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
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
此时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
基于环回口,新增AR4路由器验证冗余性。
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 [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 [AR1]bgp 100 [AR1-bgp]peer 2.2.2.2 as-number 100 [AR1-bgp]peer 2.2.2.2 connect-interface lo0 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]shutdown [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)。
报文格式 报文头格式 BGP五种报文都拥有相同的报文头,格式如下图所示,主要字段解释:
Marker:16Byte,用于标明BGP报文边界,所有bit均为“1”.
Length:2Byte,BGP报文总长度(包括报文头在内),以Byte为单位。
Type:1Byte,BGP报文的类型。其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh报文。
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路由器。
Update Update报文用于在对等体之间传递路由信息,可以用于发布、撤销路由。
一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(Network Layer Reachable Information,网络层可达信息)中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
报文格式如下图所示,主要字段解释如下:
Withdrawn routes:不可达路由的列表。
Path attributes:与NLRI相关的所有路径属性列表,每个路径属性有一个TLV(Type-Length-Vaule)三元组构成。
NLRI:可达路由的前缀和前缀长度二元组。
Notification 当BGP检测到错误状态(对等体建立时、建立之后都可能发生),就会像对等体发送Notification,告知对端错误原因,之后BGP连接将会中断。
Error Code、Error subcode:差错码、差错子码,用于告知对端具体的错误类型。
Data:用于辅助描述详细的错误内容,长度并不固定。
Keepalive BGP路由器收到对端发送给的Keepalive报文,将对等体状态置为已建立,同时后续定期发送Keepalive报文用于保持连接。
Keepalive报文格式只包含报文头,没有附加其他任何字段。
Route-refresh Route-refresh报文用来要求对等体重新发送指定地址族的路由信息,一般为本段修改了相关路由策略之后让对方重新发送Update报文,本段执行新的路由策略重新计算BGP路由。
相关字段内容:
AFI:Address Family Identifier,地址族标识,如IPv4。
Res:保留,8个bit必须置0。
SAFI:Subsequent Address Family Identifier,子地址族标识。
状态机
状态机详解
协议表项 对等体表
BGP路由表
在设备上通过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注入路由的方式有两种:
与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由。
Network注入路由
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注入路由
Network方式注入路由虽然是精确注入,但是只能一条条配置逐条注入IP路由表中的路由,如果注入的路由条目很多配置命令将会非常复杂,为此可以使用import-route方式,将直连路由、静态路由、OSPF路由、IS-IS路由 等协议的路由注入到BGP路由表中。
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注入指定的聚合路由。
取消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路由表中同时存在以下两个标志的路由为最优、有效:
*:代表有效。
>:代表最优。
通告原则二 通告原则二:从EBGP对等体获取的路由,会发布给所有对等体。
R2从EBGP对等体获取的BGP路由,会发布给所有EBGP、IBGP对等体。
通告原则三 通告原则三:从IBGP对等体获取的BGP路由,不会再发送给其他IBGP对等体。
该条原则也被称为“IBGP水平分割”。
以下图为例,如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体:
R2将一条路由传递给了IBGP对等体R3。
R3收到路由之后传递给IBGP对等体R1。
R1继续传递给IBGP对等体R2。
路由环路就此形成。
但是环路解决后又会有新的问题,如下图所示,当BGP路由器R2间路由传递给BGP路由器R1时,由于第三条原则限制,R1无法将BGP路由传递给R3,R3将无法学习到路由。
为解决该问题可以采用AS内IBGP全互联的方式,即:R2、R3之间建立非直连的IBGP对等体关系,以此让BGP路由器R2将路由传递给BGP路由器R3。
通告原则四 通告原则四:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(如OSPF,IS-IS等或静态路由)学习到这条路由,该条规则也被称为BGP同步原则。
如下图所示:
BGP路由器R4上存在一条路由10.0.4.0/24,R4将其传递给了R2。
R2将路由传递给非直连IBGP对等体R3。
R3将路由传递给R5。
之后R5向10.0.4.4发起访问。
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将报文丢弃。
BGP的基本配置
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的通信为例。
BGP路径属性与路由反射器 路径属性 当一条BGP路由都拥有多个路径属性。
当路由器将BGP路由通告给它们的对等体时,一并被通告的还有路由所携带的各个路径属性。
BGP的路径属性将影响路由优选。
路径属性分类
公认属性是所有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不会发生改变。
AS_Path防止环路 R1从R4收到BGP路由更新中AS_Path属性数值为:400 300 200 100,存在本身AS号,不接受该路由,从而防止了路由环路的产生。
AS_Path影响路由优选 AS_Path的重要作用之一便是影响BGP路由的优选,在途中,R5同时从R2及R4学习到去往10.0.1.0/24网段的BGP路由,在其它条件相同的情况下,R5会优选R2通告的路由,因为该条路由的AS_Path属性值较短,也即AS号的个数更少。
AS_Path类型
修改AS_Path 使用Route-Policy修改BGP路由的AS_Path属性时,可以使用以下三种方式。
选路实验
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 [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 [AR5-route-policy]apply as-path 100 100 additive [AR5-route-policy]quit [AR5]bgp 300 [AR5-bgp]peer 35.1.1.3 route-policy as-path import [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。
修改Origin属性
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 [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 [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 [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? [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连接源地址。
路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变。
如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段,那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体。
修改Next_Hop属性 使用peer next-hop-local命令可以在设置想IBGP对等体(组)通告路由时,把下一跳属性设置为自身的TCP连接源地址。
公认任意 Local_Preference Local_Preference即本地优先级属性,可以用于告诉AS中的路由器,哪条路径是离开本AS的首选路径。
Local——Preference属性值越大则BGP路由越优。缺省的Local_Preference值为100。
该属性只能被传递给IBGP对等体,而不能传递给EBGP对等体。
注意事项 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(团体)属性可选为过渡属性,是一种路由标记,用于简化路由策略的执行。
可以将某些路由分配以恶个特定的Community属性值,之后即可以基于Community值而不是网络前缀/掩码信息来匹配路由并执行相应的策略了。
Community属性值长度为32bit,也就是4Byte,可使用两种形式呈现:
十进制整数格式。
AA:NN格式,其中AA表示AS号,NN是自定义的编号。
RFC1997(BGP Communities Attribute)定义了几个公认的Community属性值,如下图所示。
实验 实验目的:在AS 200内部能够传递1.1.1.1的路由,但是不能够传递给AS 300。
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 [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 [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 [AR2]bgp 200 [AR2-bgp]peer 3.3.3.3 advertise-community [AR2-bgp]peer 4.4.4.4 advertise-community [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 [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 [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 [AR5]dis bgp routing-table [AR5]
可选非过渡 MED
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的默认操作
如果路由器通告IGP学习到一条路由,并通过network或import-route的方式将路由引入BGP,产生的BGP路由的MED值继承路由在IGP的metric,如上图中如果R2通过OSPF学习到了10.0.1.0/24路由,并且该路由在R2的全局路由表中OSPF Cost=100,那么当R2将路由network进BGP后,产生的BGP路由的MED值为100。
如果路由器将本地直连、静态路由通过network或import-route的方式引入BGP,那么这条BGP路由的MED为0,因为直连、静态路由cost为0。
如果路由器通过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-route及aggregate命令产生的路由传递给R3时,路由携带的MED为999。
路由聚合 Atomic_Aggregate及Aggregator Atomic_Aggregate(原子聚合):属于公认任意属性,告知邻居此路由是已经聚合完成的,不能再次做聚合。
Aggregator(聚合者):属于可选过渡属性,告知邻居此聚合路由是谁生成的,由哪个AS发送过来的。
查看聚合之后的路由 在BGP路由详细信息中可与看到Aggregator属性记录了聚合设备的AS号、Router ID,同时通过Atomic-Aggregate属性标明该路由为聚合路由。
本地首选值 Preferred-Value介绍
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路由为最优。
路由反射器 中转AS中的IBGP问题
由于水平分割的原因,为了保证中转AS 200所有的路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联。然而实现IBGP全互联存在诸多短板:
路由器需要维护大量的TCP和BGP连接,尤其在路由器数量较多的时候。
AS内BGP网络的可扩展性较差。
为此可以采用路由反射器技术。
路由反射器角色 引入路由反射器之后存在两种角色:
RR(Route Reflector):路由反射器
Client:RR 客户端
RR会将学习的路由反射出去,从而使得IBGP路由在AS内传播无需建立IBGP全互联。
将一台BGP路由器知道哪个为RR的同时,还需要指定其Client。至于Client本身无需做任何配置,它并不知晓网络中存在RR。
路由反射规则 RR在接收BGP路由时:
如果路由反射器从自己的非客户对等体学习到一条IBGP路由,则它会将路由反射给所有客户但不会反射给其他非客户对等体。
如果路由反射器从自己的客户学习到一条IBGP路由,则它会将路由反射给所有非客户,以及除了该客户之外的其他所有客户。
如果路由学习自EBGP对等体,则发送给所有客户、非客户IBGP对等体。
反射规则示例
RR场景下的路由防环
RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:
Originator_ID
Cluster_List
Originator_ID、Cluster_List属性都属于非过渡属性。
Originator_ID
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认为该条路由存在环路,因此将忽略该条路由的更新。
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,判断存在环路,从而忽略该路由更新。
实验
接口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-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
BGP路由优选 路由优选规则 当到达同一个目的网段存在多条路由时,BGP通告如下的次序进行路由优选,在此之前会丢弃下一跳不可达的路由: