路径属性
BGP路径属性概念: 1.任何一条BGP路由都存在多个属性。 2.BGP路由在传递时,会携带多个属性。 3.路径属性可以用于选路、防环。
BGP路径属性的类型
- 公认必遵:每一个BGP设备都必须识别该属性,且能传递该属性。
origin:起源属性,作用:选路。
分为三类: I:从IGP学到路由。 E:从EGP学到路由。 ?:通过引入学到路由。 优选:I > E > ?
起源属性:
[AR1]route-policy origin permit node 10
[AR1-route-policy]apply origin ?
egp Remote EGP
igp Local IGP
incomplete Unknown heritage
AR1将200.1.1.1/32通过OSPF通告给AR2,AR2可以使用BGP将该路由通告回AR1: 上图红框内的i表示起源属性,即该路由是AR2通过IGP(OSPF)学习来的。 上图黄框内的i表示该路由是通过IBGP对等体收到的。 只有从IBGP学来的才会显示。 修改起源属性:
[AR2]route-policy origin permit node 10
[AR2-route-policy]apply origin egp 200
在BGP中通告200.1.1.1/32的路由时执行origin的策略:
[AR2-bgp]network 200.1.1.1 255.255.255.255 route-policy origin
查看BGP路由表: ::: tip 起源属性的参数只能通过策略来更改。 传递过程中,除非管理员手工修改,否则不会发生变化。 :::
- as-path:AS路径属性,作用:选路、防环。
- 1.防环:如果收到路由携带的AS编号和自身所在的AS相同,则认为环路,丢弃该路由。*
- 2.选路:当收到多个ASBR传递来相同的路由,可以通过AS编号长度进行比较,优选AS-path短的。*
::: tip as-path就是设备所在AS的编号,ASBR设备在发送BGP路由时,会携带本AS的编号,每经过一个AS,都会由ASBR设备添加上本身的AS编号,AS编号在起源属性前面,从右往左依次添加。
建立EBGP邻居的设备就是ASBR。 ::: AR2引入静态:
[AR2]ip route-static 192.168.1.0 24 NULL 0
[AR2-bgp]import-route static
做策略修改as-path:
[AR2]route-policy as permit node 10
[AR2-route-policy]apply as-path 300 400 500 ?
additive 原有AS号的基础上增加AS号
overwrite 覆盖原有AS号重新添加AS号
[AR2-route-policy]apply as-path 300 400 additive
[AR2-bgp]import-route static route-policy as
- next-hop:下一跳属性,作用:保证路由最优。
::: tip EBGP接收到的路由传递给IBGP的设备,路由下一跳默认不变(都是EBGP对等体的接口)。 需要使用next-hop local命令将下一跳变为更新源地址。下一跳必须是路由可达的,否则BGP路由不会携带 *> 成为最优路由。
- IBGP接收到的路由传递给EBGP对等体,路由下一跳都是EBGP对等体的接口。* :::
- 公认任意:每一个BGP设备都必须识别该属性,可以不传递该属性。
- local preference:本地优先级,作用:选路。
对等体收到的会显示:本地优先级是一个本地概念,对ASBR设备有效。 本地优先级,每条路由都会存在,默认值是100,自身产生的路由不显示(值也是100):
- 选路时优先级值越大越优先。*
- local preference本质上就是改变自身AS内设备选择AS出口的设备。*
- Atomic_aggregate:原子聚合,作用表明了该路由为聚合路由。
原子聚合是聚合后路由的属性,本质上是一种告警信息,和下一面聚合者的属性关联使用。
- 可选过渡:每一个BGP设备都可以识别或不识别该属性,但能传递该属性。
aggregate:聚合者,作用:表明了做聚合路由的设备位置和设备。
分为聚合者(执行汇总的AS)和聚合者ID(AS内的哪台设备做了汇总)。
community:团体属性,作用:打标记。
要求每一条路由携带团体属性(需要手工配置)。 团体属性传递时,需要每一个传递属性的邻居之间都要存在对应的能力(手工指定)。
::: warning community和route tag的区别:1个路由只能匹配一个route tag,1个路由可以匹配多个团体属性值。 即假设3条路由1.0、2.0、3.0,
1.0的路由使用route tag值100匹配,使用community时可以用1:1、1:2、1:3匹配1.0。 2.0的路由使用route tag值200匹配,使用community时可以用1:2、1:3匹配2.0。 3.0的路由使用route tag值300匹配,使用community时可以用1:3匹配3.0。 如上,可以使用团体属性值1.3一次匹配三条路由。 :::
团体属性分类:
1.公认团体属性:
internet:默认团体属性,可以传递给所有对等体(IBGP或EBGP)。
no-advertise:不传递给任何BGP对等体。
no-export:只传递给IBGP对等体,不传递给EBGP对等体。
no-export-subconfed :只传递给联盟内IBGP对等体,不会传递给联盟AS外。
2.自定义团体属性:
ip community-filter:通过自定义团体属性做路由过滤。
实验验证公认团体属性: AR2原BGP路由表:
[AR1]route-policy community permit node 10
[AR1-route-policy]apply community no-advertise 不通告给任何人
[AR1-bgp]network 200.1.1.1 32 route-policy community
如上,配置团体属性为no-advertise后,AR2不再可以接收到AR1通告的200.1.1.1路由。
如果配置的团体属性是no-export,应该只能传递给IBGP,不能传到EBGP,但实际上EBGP邻居可以收到,原因是团体属性传递时,需要手工指定每一个传递属性的对等体之间存在的对应能力:
[AR1-bgp]peer 200.1.1.1 advertise-community 向指定对等体通告团体属性
::: warning BGP传递路由时,如果携带了团体属性,每一段都要指定团体属性的通告。 ::: 还可以在发送或接收时对团体属性做修改:
[AR2]route-policy community permit node 10
[AR2-route-policy]apply community 100:100 团体属性改为100:100
[AR2-bgp]peer 1.1.1.1 route-policy community import
针对对等体1.1.1.1发来的路由做route-policy对团体属性做更改
AR2后面的设备再接收该路由时,如果需要保留更改过的团体属性,需要在出方向做配置:
[AR2-bgp]peer 10.1.23.3 route-policy community export
[AR2-bgp]peer 10.1.23.3 advertise-community
实验验证自定义团体属性: 上述拓扑做配置后AR2可以收到两条BGP路由: 要使得AR4只接收200.1.1.1的路由,需要把100.3.3.3的路由过滤掉。 需要使用团体属性过滤匹配对应路由:
[AR2]ip community-filter 100 permit 1:1 设置高级过滤允许携带1:1的团体属性的路由通过
[AR2]ip community-filter 101 deny 3:3 设置高级过滤拒绝携带3:3的团体属性的路由通过
[AR2-route-policy]if-match community-filter 100 101
[AR2-route-policy]apply origin incomplete 将AR4中BGP路由表显示的起源属性由i改为?
[AR2-bgp]peer 10.1.24.4 route-policy community export AR2向AR4通告发出时执行策略
如上操作是使用团体属性匹配了两条路由,匹配上的话将起源属性修改为?: 团体属性过滤和ACL过滤等本质相同,只是匹配的内容不同。 ::: tip 当有大量路由从AR1和AR3传来时,可以在AR1和AR3上做团体属性,在AR2上做策略匹配特定放行的路由,匹配特定过滤的路由。 :::
- 可选非过渡:每一个BGP设备都可以识别或不识别该属性,可以不传递该属性。
MED:多出口鉴别器,作用:BGP路由的开销,选路。
1.BGP路由开销默认为0(自身引入或产生的路由),如果是引入IGP的路由,则会将IGP路由的开销当作MED。 2.管理员可以手工给路由配置MED。 3.MED值只能在两个AS之间传递,不能传递给第三个AS(不确定的属性)。
::: tip 选路主要针对于对端AS内的设备,访问本端AS的出口。 可以通过修改本地的MED值影响对端AS选路。 MED值越小越优先。 ::: ::: warning 本地优先级LocPrf是本端AS选路去对端AS。 MED值控制对端AS选路来本端AS。 :::
实验: BGP默认开销为0:
[AR1]route-policy MED permit node 10
[AR1-route-policy]apply cost 100
[AR1-bgp]peer 2.2.2.2 route-policy MED export
由于在AR2做了community的策略,如果不携带MED值,相当于将MED值删除出通告,即AR4收到的不携带MED,即默认为0。 AR2的G0/0/0抓包: AR2的G0/0/2抓包: ::: tip 上述原因是AR2在community策略中只写了起源属性的更改,如果需要将MED值等也进行传递,需要在community策略中添加cost值等。(即对等体需要什么样的属性,就要在策略中指定传递) ::: 将AR2的MED属性传递给AR4后,在AR5上没有看到MED值: 即MED值只能在两个AS之间传递,传入其他AS时MED值恢复默认值,不会影响路由。
- originid:起源者ID,即设备的RID,存在于路由反射器中。
- 簇列表:
路由反射器
在AS内存在大量的设备,如果使用BGP传递路由,由于IBGP水平分割,则需要建立全互联的BGP对等体关系(需要TCP的连接),会导致设备建立的连接数量过多,影响设备转发性能,且BGP网络的可扩展性较差。 引入路由反射器后,可以将路由通过路由反射器反射给没有建立BGP对等体关系的设备,打破了IBGP水平分割规则。
拓扑中AR1通告100.1.1.1/32,AR5可以学到,AR4由于IBGP水平分割无法学到。
[AR5-bgp]peer 1.1.1.1 reflect-client
[AR5-bgp]peer 4.4.4.4 reflect-client
AR5上执行路由反射器配置后,AR4可以学习到AR1通告的路由: 上图中,下一跳保持原有(AR5)的下一跳不变。
反射器场景:
反射器主要针对IBGP对等体。EBGP中不生效。 设备类型:
- 反射器:指定反射客户端的设备,成为反射器。如上图的AR5。
- 客户端:被反射器指定的设备,成为客户端(客户端无感知)。如上图的AR1、AR4。
- 非客户端:既不是反射器也不是客户端,无变化。
路由传递规则:
客户端学到的路由可以反射给非客户端;非客户端学到的路由可以反射给客户端。 非客户端和非客户端之间的路由不能经过反射器反射(普通IBGP对等体关系,水平分割)。
防环
反射器RR可以将IBGP邻居学到的路由传递给IBGP邻居,打破了AS内水平分割的防环机制,就需要存在新的防环规则来实现AS内的防环。 上述拓扑如果AR1和AR4建立了对等体关系,就可能出现环路。
查询向指定BGP设备通告的路由信息:
<AR1>dis bgp rou peer 5.5.5.5 advertised-routes
反射器自带的防环规则:
- 反射簇内防环:
通过反射器设置起源者ID属性,指明路由归属的设备。 起源者ID属性由第一台反射器设置,后续反射器不会设置。 每台设备在接收路由时都需要查看起源者ID字段,如果字段值和自身的RID相同,则认为发生环路,不接受该路由。 查看AR5向AR4反射路由时的起源者ID: 查看AR4从AR5学习到的路由的起源者ID:
- 反射簇间防环: 上述拓扑中,环路可能出现在AR3、AR4、AR5之间,检查起源者ID就无法判断环路。为保证观测到的路径是AR5-AR4-AR3-AR5,需要在AR5上做策略拒绝向AR3发送路由,然后在AR4、AR3上做反射器向对方传递路由。
反射簇间防环是为了避免反射器之间传递路由引发的环路。 通过反射器设置簇列表属性,指明反射路由的设备。 每一台反射器在反射路由时,都需要在簇列表中添加自身的簇ID(RID)。 每一台反射器在接收路由时,都需要查看簇列表字段。如果簇列表字段中存在和自身RID相同的簇ID,则认为发生环路,不接收该路由。
::: warning 起源者属性和自身簇ID都是在发出时加上。 :::
反射器的使用场景:
直连场景:RR设备部署在数据转发的链路上,适用于中小型网络部署。
旁挂场景:RR设备部署在非数据转发的链路,适用于中大型网络部署。 上述拓扑中,AR1发送数据到AR3、AR4,走实际链路不经过AR5,AR5是旁挂式的反射器,只传递路由。
分级RR:每一台RR都是上级RR的客户端,又是下级RR的反射器。主要用于具有路由规划的中大型网络,如层级组网。
同级RR:每一台RR负责连接一段区域设备,RR间部署全互联。主要用于具有路由规划的中大型网络,如广域互联。
RR的备份: 为了增加网络的可靠性,防止单点故障,需要配置两台相同的反射器,要求两台反射器的RID都相等。