文章目录
参考阅读
实验详解手工指定MPLS的LSP(Huawei设备)
MPLS+BGP产生的数据层面的路由黑洞详解
双层标签含义
对于MPLS+BGP的组网中,需要将各个CE间的路由打通,这样在公网的内部就回出现两层的label;
- 由公网内部的mpls ldp分配的 对于公网路由的label
- 由MP-BGP的vpnv4分配的 对于私网路由的label
实验拓扑
说明:
1、R2 R4之间建立BGP-vpnv4的邻居,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 vpn-instance a 172.16.1.0 255.255.255.0
[R4]ip route-static vpn-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即可 参考阅读的实验由配置上说明
vpn-instance配置
[R2-vpn-instance-a]di th
[V200R003C00]
#
ip vpn-instance a
ipv4-family
route-distinguisher 12:12
vpn-target 15:15 export-extcommunity
vpn-target 15:15 import-extcommunity
#
return
[R4-vpn-instance-b]di th
[V200R003C00]
#
ip vpn-instance b
ipv4-family
route-distinguisher 45:45
vpn-target 15:15 export-extcommunity
vpn-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 vpnv4
policy vpn-target
peer 10.1.4.4 enable
#
ipv4-family vpn-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 vpnv4
policy vpn-target
peer 10.1.2.2 enable
#
ipv4-family vpn-instance b
import-route direct
import-route static
#
return
检查
BGP-vpnv4邻居
MPLS LDP邻居
R1的私网路由pingR5在R3的入接口处(S4/0/0)抓包,可以看到是双层的label
控制+数据层面
下面就对控制和数据层面分别分析路由和label的情况
控制平面
1、私网路由,私网标签
R4将vpn-instance b中的static引入到bgp中
BGP将RD+ipv4 组成一个96bit的vpnv4路由,且带上export的vpn-target45:45 BGP-vpnv4为这条私网路由分配的私网label
这条私网路由通过vpnv4的邻居关系传递到R2,R2就收到了这条私网路由,且label为1026,通过10.1.4.4这个vpnv4邻居发来的
至此,R2收到这个私网路由172.16.5.0/24 下一跳是10.1.4.4 label为1026 是由R4 的bgp vpnv4产生
2、公网路由,公网标签
R4给作为egress给自己的in打上3的label,即告诉R3要进行PHP
R3打上1025传递给R2
R2就收到了这个1025的label
至此,R2收到这个公网路由10.1.4.4/32 下一跳是10.1.23.3 label为1025 是由R3的mpls ldp分配
数据层面
1、R1查询本地FIB,找到下一跳给到R2
2、R2查询vpn-instance a的FIB,可以看到这IP包要push一个1026的label,变成标签包,这里的BGPNextHop意思是这个label是通过控制平面的BGP-vpnv4传递对于私网传递过来的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的入接口进行抓包(serial 4/0/0)
此时数据包来到R3后,R3收到一个label的包,肯定查询LFIB,R3对于公网的label做了一个POP操作,此LFIB中存在出接口与下一条,将label包扔给R4
如下是对R3的出接口进行抓包,可以看到公网的label被POP了,只留下了私网的label
数据包来到R4后,查询in-label为1026的LFIB,做的是POP操作,但是没有出接口与下一跳,就要继续查询FIB,注意查找的是vpn-instance b(根据的是VrfIndex)
然后数据包扔给R5,路由就通了
总结
- 对于数据包来到路由器上首先要从宏观上分析控制层面的表项信息是如何学习生成的
- 查询什么表取决于这个数据是IP还是label
- 对于双层标签要明确每层是如何封装且数据包转发时,什么时候做POP操作
后面还会继续更新BGP+MPLS+OSPF的CE联动