前期回顾
上节我们主要讲解了BGP通告原则与路由处理
BGP选路问题
IGP协议中,rip是通过跳数,ospf和ISIS是通过开销值,
那在BGP中如何进行选路呢?
BGP环路问题
如何进行防环是每个协议都要考虑的问题
BGP路由属性
大致可以分为公认属性和可选属性
1、公认属性:所有运行BGP协议的路由器都能理解的属性
*公认必遵:大家都知道并且必须满足,BGP的Update报文消息中必须包含的属性
Origin(起源属性)
AS Path
Next hop
*公认任意:大家都知道,但是需不需要可以根据需求自由选择,不必存在于Update报文中。
Local Pref
Atomic aggregate
2、可选属性:厂家开发的某些满足特殊需求的属性,但是并不是所有路由器都理解的属性,私有属性。
*可选过渡:BGP虽然不能识别该属性,但是我可以把它接受并传递下去发布给其他的邻居
Aggregator
Community
*可选非过渡:BGP可以忽略包含该属性的消息并且不向它的邻居发布。
MED
Next hop特点
默认情况下传给EBGP邻居的BGP路由的下一跳设置为自身向这个EBGP邻居发送BGP报文的源地址。
默认情况下从EBGP邻居得到的BGP路由再传给IBGP邻居时,此BGP路由的下一跳默认不变,可以使用peer next-hop-local修改下一跳。
默认情况下凡是自己产生的BGP路由在传给任何BGP邻居时,总是把此路由的下一跳设置为向BGP邻居发送BGP报文的源地址
练习:以下如果都用环回口建立邻居关系,最后答案是多少?
1.1.1.1
2.2.2.2
3.3.3.3
同AS传递下一跳不变,不同AS之间传递下一跳需要改变。
Origin起源属性
Origin属性定义路径信息的来源,标记一条路由是怎么成为BGP路由的。
我们可以看到BGP路由表中出现Ogn列,就代表起源属性
BGP路由的起源属性有三种:
1、i:表明BGP路由是由network命令发布的
2、?:imconplete,不完全的,表明BGP路由是由import-route发布的
3、e :表明BGP路由时从EGP协议引入的BGP协议目前已经全面退出网络了,但是我们可以通过路由策略将路由的起源属性进行修改为e,一般起源属性是一种选路属性,可以用于BGP路径的选路,通过修改起源属性可以控制BGP路径 。
三种属性的优先级:i>e>?
我们在R1上引入以下路由,
[R1]ip route-static 192.168.1.0 24 NULL 0
[R1]bgp 1
[R1-bgp]import-route static
AS_PATH
功能:
1、选路,经过AS数量少的路径最优
2、在AS之间实现BGP路由防环,从EBGP邻居得到路由时,检查该路由的AS_PATH属性,如果AS_PATH属性中携带该路由自身的AS号,则丢弃该路由。
3、当BGP路由传递给EBGP邻居时,会将自己的AS号添加到ASpath的最前边。
当BGP路由传递给IBGP邻居时,不会添加自己的AS号。
4、AS_PATH可以被修改,华为在EBGP和IBGP邻居之间都可以被修改,思科只能在EBGP之间进行修改
ps:AS内部是怎么进行防环的呢?
IBGP的水平分割:通过IBGP获得的最优路由不会发布给其他的IBGP邻居
我们继续在R1上进行如下配置
[R1]route-policy aspath permit node 10
[R1-route-policy]apply as-path 234 additive
[R1-route-policy]q
[R1]bgp 1
[R1-bgp]peer 10.1.12.2 route-policy aspath export
[R1-bgp]q
我们在R1配置了一条234的AS path
现在抓包看一下,
使用命令将BGP路由手动触发更新
<R1>refresh bgp all export
发现这条路由里已经添加了234的AS_PATH
此时R2的路由都不接受R1传递的1.1.1.1了
<R2>terminal monitor
<R2>terminal debugging
我们开启R2的debug模式
然后在R1上进行BGp刷新
<R1>refresh bgp all export
<R2>
Aug 8 2021 14:21:12.212.1-08:00 R2 RM/6/RMDEBUG:
BGP.Public: 10.1.12.1 MSG ignored : Looping in ASPATH value,
while recv UPDATE .#这条消息被忽略,因为有looping环路
Aug 8 2021 14:21:12.312.3-08:00 R2 RM/6/RMDEBUG:
BGP.Public: Recv UPDATE from 10.1.12.1 with following destinations :
Update message length : 58
MP_reach : AFI/SAFI 1/1
Origin : Incomplete
AS Path : 1 234
Next Hop : 10.1.12.1
MED : 0
BGP.Public: Recv UPDATE(Withdraw) MSG from 10.1.12.1 with following destination
s :
192.168.1.0/24,
这表示路由器接收到了192.168.1.0路由来自10.1.12.1,它的AS path是 1 234
我们在R2上进行如下命令,表示如果收到10.1.12.1发送来的EBG路由,携带AS号也接收
[R2-bgp]peer 10.1.12.1 allow-as-loop
此时我们在查看BGP路由表
总结:BGP公认必遵的三个属性的必要性,下一跳是一定要存在的,BGP不进行路由计算,只是被动的接受路由指令。起源属性是定义路径信息的来源,标记一条路由是如何成为BGP路由的,AS_PATH是EBGP路由防止环路的关键,也必须存在。
Local Preference(本地优先级属性)
该属性是属于公认任意的,local preference属性仅在IBGP邻居之间有效,不通告给其他AS,它表明路由器的 BGP优先级,用于判断流量离开AS时的最佳路由。默认值是100,越大越优先。
我们把之前对AS_PATH做的策略去掉
[R1]undo route-policy aspath
[R1-bgp]undo peer 10.1.12.2 route-policy aspath export
此时R1只是引入了一条192.168.1.0的静态路由,并发布BGP路由表中
在R5上,我们也做同样的操作
[R5]ip route-static 192.168.1.0 24 NULL 0
[R5]bgp 5
[R5-bgp]import-route static
此时我们来模拟,AS234访问192.168.1.0的路由会有两条路可以走,AS1和AS5
,它 们访问R3的路由优先级都是一样的
但是我们查看R3的路由表,目前R3中192.168.1.0选路是通过R2走的,我们现在想改为通过R5,R4走,
[R4]bgp 234
[R4-bgp]default local-preference 200
与此同时,R2也会收到R4传递的v路由,它此时会把之前通过R1得到的路由丢弃,但是此时并不会继续向R3进行路由转发,因为是IBGP邻居传递给他的路由,我们知道,通过IBGP邻居得到的路由不会继续转发给其他BGP邻居,进行IBGP之间的防环。
实验:
我们在之前的实验基础上再各自添加一条192.168.2.0 24的路由实现192.168.1.0通过R2访问,192.168.2.0通过R4访问,达到BGP通过公认任意属性选路的效果。
先把R4的路由优先级取消,恢复默认
[R4-bgp]undo default local-preference
R2
[R2]ip ip-prefix 1 permit 192.168.1.0 24
[R2-route-policy]if-match ip-prefix 1
[R2-route-policy]apply local-preference 200
[R2]route-policy local permit node 20
[R2]bgp 234
[R2-bgp]peer 10.1.12.1 route-policy local import
R4
[R4]ip ip-prefix 1 permit 192.168.2.0 24
[R4]route-policy local permit node 10
[R4-route-policy]if-match ip-prefix 1
[R4-route-policy]apply local-preference 200
[R4-route-policy]q
[R4]route-policy local permit node 20
[R4-route-policy]q
[R4]bgp 234
[R4-bgp]peer 10.1.45.5 route-policy local import
我们从R3查看
验证通过~!
MED(BGP的多出口鉴别器)
属于可选属性中的可选非传递属性,也称BGP的开销,越小越优先,属性仅在相邻的两个AS之间传递,收到此属性的AS不会再将其通告给任何其他第三方AS,用于判断流量进入AS时的最佳路由。
华为设备通告MED属性的规则
1、本地始发的路由MED值传递给所有邻居。
我们继续在R2上进行实验
[R2]ip route-static 172.168.2.0 24 NULL 0
[R2-bgp]import-route static med 999
查看
2、从EBGP邻居得到的路由的MED不会传递给EBGP邻居,影响邻居AS的选路。
(和第一条综合起来,就是MED只会影响始发路由器相关的AS邻居,不会影响第三方。
3、从EBGP邻居得到的路由的MED可以传递给IBGP协议
我们从R1将之前的引入静态路由设置MED‘为888,在R4上依然能够看到。
4、从IBGP邻居得到的路由传递给EBGP邻居不携带MED
5、从联盟EBGP邻居或者联盟内始发的路由的MED值在整个联盟中保持传递
MED值在IBGP或者EBGP包括成员EBGP in和out方向都是可以修改的