很多兄弟想看实验文章,今天就跨域MPLS VPN OptionC实验(带RR场景,VPNv4路由下一跳为RR)进行分析。
【实验基础命令可以在群里看手册自行配置,本次作为实验分析。根据实验拓扑配置进行现象分析】
实验拓扑:
第一步:
配置ISP 100和ISP 200的IGP/LDP/MPLS协议,R3和R4之间使能MPLS
第二步:
在PE(R1、R6)上配置VPN实例
第三步:
- 在PE-CE之间配置IGP并引入MP-BGP的VPN实例中
- R1和R6引入PE-CE的IGP到MP-BGP的VPN实例中
第四步:
- R1-R2、R2-R3、R3-R4、R4-R5、R5-R6配置IPv4-BGP邻居
- R3宣告10.1.1.1,并针对R2配置下一跳本地
- R4宣告10.1.6.6,并针对R5配置下一跳本地
- R2和R5为RR反射器
- R1和R6上查看BGP路由,都能学习到对端的环回口路由,并且在当前情况下,R1和R6的环回口通信完全依靠BGP,因为R1-R6之间所有的路由都有R1和R6的环回口路由信息
第五步:
- R1-R2和R5-R6建立MP-IBGP,R2和R5建立MP-EBGP
- 首先是R1-R2和R5-R6要建立MP-IBGP,由于R1-R2,R5-R6各自都有对端的环回口路由,所以可以直接建立MP-IBGP
- 接着是R2和R5建立MP-EBGP,但是R2和R5都没有对方的环回口路由,所以需要在R3上宣告R2的环回口路由到BGP,R4上宣告R5的环回口路由到BGP
- R2和R5既是IPv4-BGP的RR,也是VPNv4-BGP的RR,当前环境中AS内部只有一个PE,如果有多个PE则R2和R5必须是VPNv4-BGP的RR
- 在第三步的时候R1和R6已经将PE-CE的OSPF路由引入了MP-BGP对应的VPN实例内,但是虽然R1和R2建立了VPNv4-BGP邻居关系,由于R2没有配置VPN实例,导致无法接收VPN路由,所以在R2上要关闭RT过滤。R5上同理
- 如此,在R2和R5上就能收到关于PE-CE侧的VPN路由
在MP-BGP中,从EBGP邻居学习到的路由,传递给IBGP邻居时,下一跳会自动更改
第五步续:
测试R6-PE2与SiteA的CE(1.1.1.1)能否正常通信
假设此时R6-PE2收到来自SiteB的CE(2.2.2.1)的数据包后,查找目标IP地址是1.1.1.1,于是查找FIB表,发现去往1.1.1.0网段的Tunnel ID非0,于是为数据包打上私网内层标签1028(R5将VPNv4路由传递给R6时下一跳变为R5,所以R5在传递VPNv4路由给R6时为该路由重新分配私网内层标签1028)
接着R6-PE2递归查询去往VPNv4路由下一跳R5(10.1.5.5)的标签是3(由R5通过LDP协议为自己环回口分配标签3给R6,因为对于R5来讲,10.1.5.5就是R5自身的环回口,那么R6就是倒数第二跳),由于R6是倒数第二跳且去往VPNv4路由下一跳10.1.5.5的出标签为3,那么就是不打外层标签,直接将打了私网标签1028的数据发给下一跳R5
R5收到带标签1028的数据包,并且发现1028这个标签就是自己为1.1.1.0/24路由分配的。于是查找BGP路由表发现1.1.1.0/24这条VPNv4路由下一跳时10.1.2.2
由于下一跳R2(10.1.2.2)并不是R5的直连邻居,于是R5递归查找去往下一跳10.1.2.2的LSP,但是R5查找LFIB表没有学习到去往10.1.2.2的外层标签信息,接着查找BGP路由表也没有去往关于10.1.2.2的标签,于是直接将私网标签1028替换成1026传递给了去往10.1.2.2的下一跳R4(10.1.4.4)
结果就是数据包在SiteB访问SiteA的数据包在R4被丢包,因为无法识别私网标签,原因是在R4上并没有参与MP-BGP。此时就会出现有路由但是不通的情况
所以问题就是需要建立R2和R5这两个RR的外层LSP隧道,也就是还得采用IPv4-BGP分配标签
第六步:
R3和R4、R4和R5互相使能IPv4-BGP通告标签的能力,通过这种方式将关于R2环回口的LSP隧道延伸到R5,使得R5能够为10.1.2.2分配外层标签
关于R2会为自己环回口10.1.2.2通过LDP协议分配标签给R3,R3收到后通过LDP协议也为R2的环回口分配了标签1024,由于R3是倒数第二跳,所以出标签为3
但是在R4上没有关于R2环回口的标签,因为缺省LDP协议不会为IPv4-BGP的路由分配标签
解决办法:
在R3上配置针对R2的环回口路由在传递给IPv4-BGP邻居R4时分配标签
首先在R3上通过路由策略匹配R2的环回口为其应用标签
注意:
放行其他的路由信息
接着将其调用在R3的BGP进程视图下,针对IPv4-EBGP邻居R4,同时R3和R4互相针对对方使能分配标签路由的能力
那么在R4上就可以学习到由R3为其分配的关于10.1.2.2这条IPv4路由的标签信息
但是对于R4来讲,缺省也不会为R5分配关于IPv4-BGP路由的标签,所以R4和R5也要互相使能分配标签路由的能力,且由R4通过路由策略将10.1.2.2分配标签并传递给R5
那么在R5上就能学习到关于10.1.2.2的标签信息,由R4将关于10.1.2.2的IPv4-BGP路由传递给R5时为其分配
那么到这一步为止,数据包已经单向打通了,SiteB访问SiteA的数据能够到达S1-CE1
延续上面实验五续:
此时R5有了去往R2的外层标签,当收到R6传递给其带有1037的私网标签数据包时,R5通过对照VPNv4-BGP标签路由表将私网标签替换为1026(R2将VPNv4路由传递给R5时下一跳变为了R2,由于下一跳改变,所以需要更换私网内层标签)
与此同时,R5去往1.1.1.0/24这条VPNv4路由的下一跳为R2(10.1.2.2),于是迭代查找去往10.1.2.2路由的外层标签为1026,(该标签由R4通过IPv4-BGP分配给R5),最后R5给数据包打上内层标签1026,外层标签1026后传递给R4
R4收到带标签的报文后查找LFIB表进行标签替换,将外层标签1026替换为1026(由R3通过IPv4-BGP为10.1.2.2分配外层标签后传递给R4)
R3收到带标签的报文后查找LFIB表,发现去往10.1.2.2的LSP出标签为Null空,于是剥离外层1026标签并重新查找LFIB表,发现去往10.1.2.2的LSP出标签为3(针对R2环回口LSP来讲,R3是倒数第二跳),于是弹出外层标签
所以R3传递给R2的数据包只有内层标签1026
R2收到数据包查找LFIB表进行标签替换,将内层标签1026替换为1026(R1将VPNv4路由通过MP-BGP传递给R2,并且VPNv4路由的下一跳变为了R1,所以内层标签也要改变)并传递给R1
R1收到后根据内层标签判断出该报文属于哪个VPN实例以及下一跳,并去掉私网内层标签,将报文(普通IP报文)转发给S1-CE1
当S1-CE1给S2-CE2回包时,纯IP报文到达R1-PE1,R1收到后根据目的地查找FIB表,发现Tunnel ID非0,于是打上对应的私网标签1033
接着通过递归查询LFIB表去往VPNv4路由下一跳10.1.2.2这条LSP的标签信息为3,由于对于R2(10.1.2.2)的环回口来讲,R1是倒数第二跳,于是弹出标签,R1将携带私网标签1033的数据包传递给了R2
R2收到数据包后查找LFIB表,将私网内层标签1033替换为1026(R5通过MP-BGP将VPNv4路由传递给R2时下一跳变为了R5)
接着查询VPNv4-BGP路由表发现去往2.2.2.1的下一跳为10.1.5.5,但是R2与R5(10.1.5.5)不是直连邻居,于是递归查找去往10.1.5.5 的LSP没有找到,于是进行IP转发,将携带私网标签1026的数据包交给了R3
数据包到达R3,R3查找LFIB表由于没有无法识别私网内层标签,于是数据包被丢包
问题原因:
在于R2没有形成去往VPNv4路由下一跳R5(10.1.5.5)的标签,导致R2无法完成对VPNv4路由下一跳R5外层标签的封装
第七步:
建立R2去往VPNv4路由下一跳R5的LSP
- R3和R4也使能IPv4-BGP互相发送标签路由的能力,并由R4分配10.1.5.5的标签R3
- 由于R4通过LDP协议学习到了关于R5环回口10.1.5.5的路由标签,所以需要开启R4主动朝着IPv4-BGP邻居R3分配10.1.5.5的标签的能力
- R2和R3也使能IPv4-BGP互相发送标签路由的能力,并由R3分配10.1.5.5的标签R3
- R3通过IPv4-BGP学习到由R4通告的关于10.1.5.5路由的标签,在R3上开启主动朝着IPv4-BGP邻居R2分配10.1.5.5的标签的能力
- 那么就可以建立起来R2关于VPNv4路由下一跳10.1.5.5的LSP
继续延续实验五续的转发
- 此时R2收到带有私网标签1036的数据包后查找VPNv4-BGP标签路由表,由于此时VPNv4的路由下一跳变为了R5(101.5.5),所以私网内层标签也要变为由R5通告VPNv4路由的标签1038
- 接着通过递归查询IPv4-BGP标签路由表去往VPNv4路由下一跳10.1.5.5的标签信息,于是打上外层标签1027,并转发给下一跳R3
- R3收到数据包后查找IPv4-BGP标签路由表,将外层标签1027替换成1028转发给下一跳R4
- R4收到数据包后查找IPv4-BGP标签路由表,发现去往10.1.5.5路由的出标签为空,于是弹出外层标签1028
- 接着递归查询LFIB表发现去往10.1.5.5的出标签为3(R5通过LDP协议为自己的环回口分配标签给R4),由于R4是倒数第二跳,于是弹出外层标签,将携带私网标签1038的数据包转发给了R5
- R5收到带有内层标签1038的数据包后查找VPNv4-BGP标签转发表,由于此时在R5上看到去往VPNv4路由的下一跳为R6,于是将内层标签1038替换为1026(R6通过MP-BGP为VPNv4路由分配标签1026给R5)转发给R6
- R6收到后根据内层标签判断出该报文属于哪个VPN实例以及下一跳,并去掉私网内层标签,将报文(普通IP报文)转发给S2-CE2