文章目录
前言
MPLS协议使用标签交换来转发报文,最初是为了提高IP报文转发效率而设计的,但是后来随着硬件性能的提升,路由表已经不再是路由表/防火墙的转发瓶颈,现在MPLS主要应用于VPN等场景。
一.MPLS VPN
MPLS VPN 一般由运营商搭建,用户购买VPN服务,如下图,中间框内是运营商网络,里面的路由器运行MPLS。公司分分支路由不需要运行MPLS协议,感觉不到VPN的存在,就好像和其它分支路由器直连一样
CE:用户网络的边界设备 汇总私网路由信息
PE:运营商边界设备 接收CE汇总的私网路由信息并使用BGP协议传递给对端PE设备
P:运营商设备 使用IGP协议完成路由信息的高速转发
MPLS VPN 工作原理
MPLS VPN路由传递分为3段:
- 从CE发布路由到PE
- PE1将路由传递给PE2
- PE2将路由交给CE2
CE与E之间路由传递可以通过OSPF BGP等学习。
二.路由传递
VRF:
一个PE可能收到来自多个CE的路由,而且来自不同的CE路由可能使用相同的私网IP,为了不产生混淆,在PE设备上使用虚拟路由转发技术(VRF)将来自不同CE的路由单独存放,如下图。
图中VRF 路由表通常和接口绑定,从指定接口来的路由信息都放在绑定的VRF 路由表中。
MP-BGP:
BGP的一种扩展,它允许BGP用于传输多种协议的路由信息,包括IPv4和IPv6,而且可以在同一BGP会话中传输不同的协议路由信息, MP-BGP还提供了VPN扩展,使得它能够处理VPN路由信息,这个特性被广泛应用于VPN网络中。
PE1使用MP-BGP将路由信息传递给PE2,运行MP-BGP的设备自动将未知网段的路由信息递归进入LSP隧道,且自动开启社团属性传递性。
在MP-BGP路由传递过程中会遇到两个问题:
- 左边CE1和CE2的网段都是一样的,都是10.1.1.0/24,传递过程中如何进行区分?(RD值)
- 10.1.1.0/24到达PE2后,应该交给CE3还是CE4?(RT值)
- 10.1.1.0/24到达PE2后,应该存放在VRF A中还是VRF B中?(私网标签)
为了解决上述问题,引入以下2个值+1和标签。
RD值:路由标识
由64位二级制构成,华为设备的格式:AS号:NN(任意值),由于私网IP地址并非唯一性,不同的客户端可以使用相同的私网IP,因此PE设备会针对不同客户端的路由信息分配不同的RD值用以区分不同客户端的路由信息,再将RD值和路由信息一起传递给PE2。图中含有RD值的路由信息称为 VPNv4路由
图 1 中 路由信息冲突无法区分 图 2 中 路由信息包含RD值用于区分
RT值:路由目标
RT格式与RD类似,而且也在BGP里面传递,如下图所示,在PE2设备上提前配置好,RT=100:1的路由交给CE3对应的VRF 路由表,RT=200:1的路由交给CE4对应的VRF路由表,每个PE设备上都要配置入RT和出RT而且要与对端相互匹配。
私网标签
在MPLS VPN 骨干网络中,MPLS中运行的MPLS会给路由分配一个公网标签用于数据转发,而MP-BGP协议同样会给路由分配一个私网标签(该标签和远端PE设备的VRF存在对应关系),通过BGP社团属性在PE设备之间传递,用于判断该路由存放到哪个VRF 中。
三.配置命令
- #R1配置---PE1
#创建VRF空间 1
[r2]ip vpn-instance 1
#设定RD值
[r2-vpn-instance-1]route-distinguisher 1:100
#设定RT值
#设置出站LSR RT值
[r2-vpn-instance-1-af-ipv4]vpn-target 1:200 export-extcommunity
#设置入站LSR RT值
[r2-vpn-instance-1-af-ipv4]vpn-target 1:100 import-extcommunity
#将接口划入VRF空间
[r2-GigabitEthernet0/0/0]ip binding vpn-instance 1
#创建VRF空间 2
[r2]ip vpn-instance 2
#设定RD值
[r2-vpn-instance-2]route-distinguisher 4:100
#设定RT值
[r2-vpn-instance-1-af-ipv4]vpn-target 4:100 export-extcommunity
[r2-vpn-instance-1-af-ipv4]vpn-target 4:200 import-extcommunity
[r2-GigabitEthernet0/0/2]ip binding vpn-instance 2
#在BGP进程中启用MP-BGP
[r2-bgp]ipv4-family vpnv4
[r2-bgp-af-vpnv4]peer 5.5.5.5 enable
#在VRF空间中启动对应路由协议
[r2]rip 1 vpn-instance 1
[r2]version 2
[r2-rip-1]network 12.0.0.0
[r2]rip 2 vpn-instance 2
[r2-rip-2]version 2
[r2-rip-2]network 13.0.0.0
#在BGP进程中进入对应的VRF空间导入对应AS区域路由
[r2-bgp]ipv4-family vpn-instance 1
[r2-bgp-1]import-route rip 1
[r2-bgp]ipv4-family vpn-instance 2
[r2-bgp-2]import-route rip 2
- #R5配置---PE2
#创建与PE1设备VRF 1 空间对应的VRF 2 空间
[r5]ip vpn-instance 2
[r5-vpn-instance-2]route-distinguisher 3:100
#PE2的入站RT值需和PE1的出站RT值相同,PE2出站RT值要和PE1对应VRF空间的入站RT值相同
[r5-vpn-instance-2-af-ipv4]vpn-target 1:200import-extcommunity
[r5-vpn-instance-2-af-ipv4]vpn-target 1:100 export-extcommunity
[r5-GigabitEthernet0/0/1]ip binding vpn-instance 2
#创建与PE2设备VRF 2空间对应的VRF 1空间
[r5]ip vpn-instance 1
[r5-vpn-instance-1]route-distinguisher 5:100
[r5-vpn-instance-1-af-ipv4]vpn-target 4:200 export-extcommunity
[r5-vpn-instance-1-af-ipv4]vpn-target 4:100 import-extcommunity
[r5-GigabitEthernet0/0/2]ip binding vpn-instance 1
#在VRF空间中启动OSPF
[r5]ospf 2 vpn-instance 2 router-id 5.5.5.5
[r5]ospf 3 vpn-instance 1 router-id 5.5.5.5
#在BGP进程中启用MP-BGP
[r5-bgp]ipv4-family vpnv4
[r5-bgp-af-vpnv4]peer 2.2.2.2 enable
#在BGP进程中进入对应的VRF空间导入对应AS区域路由
[r5-bgp]ipv4-family vpn-instance 2
[r5-bgp-2]import-route ospf 2
[r5-bgp]ipv4-family vpn-instance 1
[r5-bgp-1]import-route ospf 3
拓展配置:
注:将接口划入VRF空间后该接口将从全局路由表中独立出来,路由表中不含该接口直连网段信息
且路由器转发报文时默认查看全局路由表,因此给VRF空间中的网段发送报文时,需使用特殊
命令使设备查看VRF空间路由表转发报文,
注:该PE设备只有转发从VRF空间中的接口接收过来的数据时会自动访问VRF路由表
#查看VRF空间路由表
[r2]dis ip routing-table vpn-instance 1
#指定设备发送该网段报文时查看VRF路由表
<r2>ping -vpn-instance 1 12.0.0.1
#将入站RT和出站RT都设置为1:100
[r2-vpn-instance-1-af-ipv4]vpn-target 1:100
#给VRF空间添加静态路由
[r2-bgp]ipv4-family vpnv4
[r2-bgp]ipv4-family vpn-instance 1
[r2]ip route-static vpn-instance 1 1.1.1.0 12.0.0.1
#在VRF空间中启动RIP
[r2]rip 1 vpn-instance 1
#在VRF空间中启动OSPF
[r5]ospf 2 vpn-instance 2 router-id 5.5.5.5
#查看VRF空间中BGP表
[r2]dis bgp vpnv4 vpn-instance 1 routing-table
效果图:
- R1路由表
- R8路由表
- R2VRF路由表:
- R5VRF路由表
- R6路由表
- R9路由表