实验详解手工指定MPLS的LSP(Huawei设备)
MPLS+BGP产生的数据层面的路由黑洞详解
对于MPLS+BGP的组网中,需要将各个CE间的路由打通,这样在公网的内部就回出现两层的label;
说明:
1、R2 R4之间建立BGP-v4的邻居,R3不运行BGP进程
2、R2、R3、R4组成一个MPLS-domain
3、R1、R5分别作为独立的客户侧,其路由网段为172.16.1.0/24 172.16.5.0/24
4、CE与PE间采用静态引入的方式打通
路由配置
[R1]ip route-static 0.0.0.0 0.0.0.0 172.16.12.2
[R2]ip route-static -instance a 172.16.1.0 255.255.255.0
[R4]ip route-static -instance b 172.16.5.0 255.255.255.0
[R5]ip route-static 0.0.0.0 0.0.0.0 172.16.45.4
MPLS配置就是全局、接口使能mpls、mpls ldp即可 参考阅读的实验由配置上说明
-instance配置
[R2--instance-a]di th
[V200R003C00]
#
ip -instance a
ipv4-family
route-distinguisher 12:12
-target 15:15 export-extcommunity
-target 15:15 import-extcommunity
#
return
[R4--instance-b]di th
[V200R003C00]
#
ip -instance b
ipv4-family
route-distinguisher 45:45
-target 15:15 export-extcommunity
-target 15:15 import-extcommunity
#
return
BGP配置
[R2-bgp]di th
[V200R003C00]
#
bgp 234
undo default ipv4-unicast
peer 10.1.4.4 as-number 234
peer 10.1.4.4 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
undo peer 10.1.4.4 enable
#
ipv4-family v4
policy -target
peer 10.1.4.4 enable
#
ipv4-family -instance a
import-route direct
import-route static
#
return
[R4-bgp]di th
[V200R003C00]
#
bgp 234
peer 10.1.2.2 as-number 234
peer 10.1.2.2 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
undo peer 10.1.2.2 enable
#
ipv4-family v4
policy -target
peer 10.1.2.2 enable
#
ipv4-family -instance b
import-route direct
import-route static
#
return
R1的私网路由pingR5在R3的入接口处(S4/0/0)抓包,可以看到是双层的label
下面就对控制和数据层面分别分析路由和label的情况
1、私网路由,私网标签
R4将-instance b中的static引入到bgp中
BGP将RD+ipv4 组成一个96bit的v4路由,且带上export的-target45:45 BGP-v4为这条私网路由分配的私网label
这条私网路由通过v4的邻居关系传递到R2,R2就收到了这条私网路由,且label为1026,通过10.1.4.4这个v4邻居发来的
至此,R2收到这个私网路由172.16.5.0/24 下一跳是10.1.4.4 label为1026 是由R4 的bgp v4产生
2、公网路由,公网标签
R4给作为egress给自己的in打上3的label,即告诉R3要进行PHP
至此,R2收到这个公网路由10.1.4.4/32 下一跳是10.1.23.3 label为1025 是由R3的mpls ldp分配
2、R2查询-instance a的FIB,可以看到这IP包要push一个1026的label,变成标签包,这里的BGPNextHop意思是这个label是通过控制平面的BGP-v4传递对于私网传递过来的label
此时数据包进入到了MPLS-domain中(可以理解为进入公网的范畴),要经过BGP来进行传递,这时就会再次push一个公网的标签,在R2上查看LFIB可以看到对于10.1.4.4有两种操作,分别是Ingress、Transit;看哪个取决于Token,上一步中的tunnel-id对应这里的Fec和Token;继续查询tunnel-id 0x3可以看出对于公网10.1.4.4就要封装1025这个label,至此这个数据包就有了两层label,且下一跳是10.1.23.3 即R3
此时这个数据包就变成了
Sip 172.16.1.1 dip 172.16.5.5 | 私网label 1026 |公网label 1025 | ppp
此时数据包来到R3后,R3收到一个label的包,肯定查询LFIB,R3对于公网的label做了一个POP操作,此LFIB中存在出接口与下一条,将label包扔给R4
如下是对R3的出接口进行抓包,可以看到公网的label被POP了,只留下了私网的label
数据包来到R4后,查询in-label为1026的LFIB,做的是POP操作,但是没有出接口与下一跳,就要继续查询FIB,注意查找的是-instance b(根据的是VrfIndex)
然后数据包扔给R5,路由就通了
后面还会继续更新BGP+MPLS+OSPF的CE联动