众所周知,BGP中的MED属性是一个公认、可选、非传递属性,用于判断进入自治系统的最佳路径。当一台运行BGP的路由器从另一自治系统得到前缀与掩码均相同、但下一跳不同的多条路由时,在其他优先级高于MED的条件均相同的情况下,MED值最小的路由将被优选。
然而,MED属性如何传递呢?
在解答这个问题之前,先引入一个问题:
如图所示,RT1与RT2在AS100,RT3在AS200。RT1与RT2为IBGP邻居,RT2与RT3为EBGP邻居。RT1向RT2发布一条MED值为100的路由192.168.1.0/24,RT3向RT2发布一条MED值为200的路由192.168.2.0/24。那么,在RT3上观察192.168.1.0/24,其MED值为多少?在RT1上观察192.168.2.0/24,其MED值又是多少?
给几个选择:A、无/无B、100/无C、无/200 D、100/200
MED传递套路分析
套路一、如果一台路由器给一条路由设置了MED属性,则会传递给所有邻居,不论该邻居是IBGP还是EBGP。如上图,RT1为192.168.1.0/24设置了MED值为100,RT3为192.168.2.0/24设置了MED值为200,它们都会传递给RT2。因此,在RT2上观察两条路由的MED值分别为100/200。
套路二、如果路由器没有设置MED属性,则在传递路由时是否携带MED属性取决于邻居关系。对于IBGP邻居,依然携带MED值;对于EBGP邻居,则不携带。如上图,RT2将192.168.2.0/24 传递给RT1时,由于与RT1是IBGP邻居,故携带MED属性,在RT1上观察该路由的MED值为200。RT2将192.168.1.0/24传递给RT3时,由于与RT3是EBGP邻居,故不携带MED属性,在RT3上观察该路由无MED值。
所以,正确答案是C。
一般情况下,MED属性用于自治系统之间多路径时的选路。如果我们在RT2上将192.168.1.0/24这条路由设置了MED属性,根据传递套路一,它将传递给RT3。
那么,是不是说一台路由器只要不设置MED,它在将路由传递给EBGP邻居时一定不会携带MED属性呢?
请看下图:
RT1、RT2、RT3在AS100,RT1与RT3之间没有物理连接;RT4在AS200,并与RT3建立EBGP邻居。RT1/RT2/RT3运行OSPF路由协议,使RT1与RT3通过Loopback口建立IBGP邻居。RT2没有运行BGP协议。在RT1上有一条直连路由192.168.1.0/24。假设AS100中两条链路在OSPF中开销均为10,那么:
问题1、如果RT1在OSPF进程中将192.168.1.0/24路由发布,并在RT3的BGP中通过Network命令将此路由变为BGP路由,在RT4观察此BGP路由的MED值是多少?
问题2、如果RT1没有在OSPF进程中发布192.168.1.0/24,而在BGP中发布此路由,那么在RT4上观察此路由的MED值又是多少?
套路三、如果路由器通过network或import命令注入到BGP中的路由是来自于IGP路由协议,那么BGP MED=IGP COST,并将MED值传递给EBGP邻居。所以,对于问题1,在RT4上观察192.168.1.0/24路由的MED值为20。
套路四、如果路由器通过network或import命令注入到BGP中的路由是来自于直连路由的,那么BGP MED=0。对于问题2,RT1在BGP中发布直连的192.168.1.0/24,则MED值为0,传递给RT3后的MED也为0。RT3传递给RT4时沿用套路二,在RT4上观察此路由无MED值。
对于套路四,在此场景下可以进行变化。
在RT3上配置一条路由策略如下:
[H3C]route-policy aa permit node 10
[H3C-route-policy-aa-10]apply cost-type internal
[H3C-route-policy-aa-10]quit
[H3C]
并在BGP中应用该策略:
[H3C]bgp 100
[H3C-bgp-default]address-family ipv4
[H3C-bgp-default-ipv4]peer RT4 route-policy aa export
此时,在RT4上观察该路由的MED值为20。