mp-bgp在设计的时候为什么不能通过rd来区分不同的实例(vrf)?对端pe1收到pe2的路由时,查看vpnv4的前缀不就是rd了吗?把rd定义成vrf的id,不就可以省略掉rt的吗?设计者是如何考虑的?为什么要设计成现在的样子(通过rd来区分传递出去的路由,通过rt来区分不同的实例vrf.


运营商的PE(运营商边界)路由器,与客户的CE(客户边界)路由器对连,并建立BGP邻居关系,通过address-family ipv4 与CE交换 ipv4 路由,这些路由通常为私有路由,32位长度。

PE将客户路由放在哪里呢?

放在该客户专用VIP包房里,包房的名字叫VRF1,客户的路由条目依然是32位的原始模样,比如10.1.1.0/24,假设该PE的名字是PE1。

PE1如何将10.1.1.0/24告诉其它的PEn?

构思是这样的,每一个PE与路由反射器RR建立iBGP邻居关系,RR相当于谣言散播中心,从某一台PE听到的谣言(路由)会无条件散播给其它所有PEn。

通过以上学习、交换、散播的步骤,所有PE将同步用户的路由,通俗地说,就是每个PE都学习到10.1.1.0/24这条路由。

问题来了,PE1 上有成百上千的VIP客户,客户们都使用10.1.1.0/24的路由,本地可以使用VIP包间将他们隔离,但是在传输给RR的路上如何区分这一个个10.1.1.0/24?

很好办,只要让客户的10.1.1.0穿上不同颜色的马甲(RD),马甲的长度为64位,附著在客户路由上,披上马甲的10.1.1.0长度为96位,有一个全新的名字,VPNv4。

由于马甲RD在运营商范围内是唯一的、不会冲突,所以VPNv4路由条目是全局唯一:

12641:1000.10.1.1.0

这样就可以保证在传输过程中不会互相混淆。

但是,还需要将客户的马甲上印刷一个logo(export Route Target)每一个客户logo是唯一的。

PE们从RR处(谣言集散中心)一股脑把所有的VPNv4路由学习到本地,需要将不同的客户的路由放在专属的VIP包间。问题来了,是根据马甲颜色还是客户的logo来分配VIP包间呢?

客户logo,这样最合理。因为有的客户比较叼,为了自己的便利,经常提出需求,希望自己可以使用多个颜色的马甲,有同学会很好奇,为何有如此变态需求?

客户的路由10.1.1.0/24,如果在本地被PE1、PE2分发给RR,如果披上不同颜色(RD),就会呈现为2条不同的VPNv4路由,其他PEn就会有2条路由,一旦其中一条路由消失,立马可以切换到备用路由。

如果只使用一个颜色的RD,RR只会反射一条最佳路由,其他PEn只会有一条路由,一旦路由消失,需要RR检测到路由消失(延迟大),然后再把原来的次优路由反射到PEn,这种收敛速度明显要慢很多。

PEn们将特定logo VPNv4路由放入本地的VIP包间,其实潜台词是满足(import Route Target)才会进入包间,对吗?

马甲还有用吗?

没有用了,需要脱掉马甲,变成其原始的样子:10.1.1.0/24,又成为了IPv4路由。

问题又来了,VRF完全隔离不同客户,客户间如果希望可以交换一些路由条目,如何做到?

只需要在定义VRF包间时,通过「import Route Target」准许别的客户logo也进入自己的VIP包间不就可以了吗?

对方也允许贵司的logo 进入他们的VIP包间,这样双向的路由交换完毕,就可以通信了。

问题的关键

RD和客户不是一一对应关系,一个客户可能有多个RD。

RT是公司logo,和公司是一一对应关系。

欢迎来公众号看更多文章:https://mp.weixin.qq.com/s/47KHsTCiol4srlW0FKYYeg


要分两部分来看.第一,vpnv4路由传播部分,需要一个标识来区分不同客户的相同前缀.如果用RT行不行呢?不行,因为RT是属性,携带不同RT的路由优选后还是只剩一条,只能加上RD形成不同的NLRI条目;第二,客户路由导入部分,需要一个标识来表示vrf对路由的"喜好",通过路由策略形成各种vpn拓扑,那么这个标识必须能灵活的添加,移除,乃至添加多个,符合这个要求没有比BGP路由属性更合适的了.


推荐阅读:
查看原文 >>
相关文章