MPLS VPN 不是一个技术,是一堆技术的集合,是一种解决方案
什么是VPN?虚拟专用网络
能够解决公司之间互联的一种技术,在原始的报文上面再重新封装一个或者多个全新的头部,完成在公共网络上的传递
裸纤(每月每公里收费),专线(跑多家公司业务,运营商可以把这些业务区分开)
VPN分类
IP MPLS BGP VPN,MPLS-L3 VPN-P2MP类型中,在原始的报头增加的是MPLS头部。主要用于运营商或者中石油大型网络中使用,会先修建一个大型的骨干网络,可以让互联互通的节点实现互联互通,不想实现互联互通的地方可以进行隔离。
关注路由是怎么产生的,是怎么是先点到多点。
P设备是骨干网络的设备,PE是骨干网络的边界设备,CE是用户侧的设备
修建骨干网络:底层IP,底层IGP,底层MPLS
连接用户设备:CE把路由传递给PE(OSPF),PE把路由传递给对方的PE(BGP,使用ospf协议会导致中间的设备都会学习到各种路由);创建用户VRF(配置用户RD及RT值),绑定用户接口,配置IP,配置路由协议学习用户侧路由。
PE设备收到来自不同公司相同路由(VRF),会造成地址空间重叠,利用VRF虚拟路由转发技术创建实例来解决(一台路由器虚拟出多个路由器,分别有全局路由器与虚拟路由器,虚拟路由器是没有接口的,需要将物理接口绑定给虚拟路由器)
多个VRF的路由都需要进入BGP(使用MP-BGP传递VPN v4路由),使用BGP传递路由,需要先将路由变为BGP路由才可以传递,BGP只有一个进程,多个VRF的路由都需要进入BGP,使用VPN V4路由(由RD值+IPv4路由构成),VRF会给路由加上不同的RD值,这个时候进入BGP路由时,会变为VPN v4路由(格式1:1 1.1.1.1 32),不同的路由进入BGP就都可以保存, 路由保存在BGP VPN v4路由表,传递VPN v4路由需要用到MP-BGP路由进行传递。
对方PE设备收到路由之后如何将VPN v4路由放到对应的VRF的路由表中,使用RT值(标签),在每个VRF中配置出方向的RT值和入方向的RT值,1的出方向为100:1,如果2的哪个入方向和他相同,则在这个进入收到这个路由。
ip vpn-instance 用户vpn名称 //创建VRF route-distinguisher 1:1 配置RD值 vpn-target 100:1 export-extcommunity|import-excomuuunity 配置RT值
interface g0/0/1 进入接入用户的接口 ip binding vpn-instance vpn1 //绑定VRF实例
PE设备查看用户侧的路由表 dis ip routing-table vpn-instance vpn1 ospf 1 vpn-instance vpn1 //ospf给实例用,不给全局 area 0 qu int g0/0/1 ospf enable 1 area 0
运营商在PE之间交换用户路由:peer 3.3.3.3 as-number 100 这个命令是仅仅建立了连接,并没有可以让它传递路由,能够传递路由是因为自动打开了ipv4-family unicast(默认打开了ipv4的传递功能,如果不自动打开,是无法传递ipv4路由),手动打开vpn v4的功能,ipv4-family vpnv4; peer 3.3.3.3 enable
配置PE间BGP VPNv4邻居
互相引入路由完成路由交互
bgp 100 peer 3.3.3.3 as-number 100 peer 3.3.3.3 conect-interface loopBack0 ipvr-family vpnv4 peer 3.3.3.3 enable ipv4-family vpn-instace vpn1 //bgp只有一个进程,所以只能进入bgp里面去做实例的区分 import-route ospf 1
PE将路由引入到ospf中传递给CE设备
ospf 1 import-route bgp
VRF--实例 解决用户地址空间重叠问题(即地址网段相同问题)解决一个路由表不能存两个相同的路由
RD值--解决BGP路由表中IPv4地址重叠问题 RD+IPv4前缀 VPNv4路由 解决BGP不能传递两个相同的路由
RT值--解决用户是否对路由感兴趣的问题
BGP VPNv4邻居--VPNv4路由传递问题
隧道技术的特性,一台路由器里面有两个VRF,VRF1,2,R1和R3中间修建了隧道,R3会有一个隧道ID,R3的全局都可以看到这条隧道,这条隧道属于所有的VRF+全局,大家都能够共享这条隧道,这样,数据就可以加上标签直接进入了隧道。中间的设备没有参与BGP,所有会产生黑洞,因此在这个地方,MPLS起到了两个作用(迭代出来了下一跳,解决了黑洞问题),对于RT的检查叫做私网路由交叉,对于隧道的检查叫做公网隧道迭代。
- 首先,R5生成了一个报文,R5访问R4,下一跳指向R3,数据从5发出发给了3
- 走到了3之后是从实例绑定的接口进入的,那么就意味着要查询这个接口对应的VRF的FIB表(发现了隧道ID和1026标签)查询FIB表
dis tunnel-info all,查出来0x1隧道是去往1.1.1.1的
查看MPLS,查看去往1.1.1.1封装的MPLS标签
- 在VRF查到了去往4的路由,下一跳是R1,这个地址是公网上面的地址,VRF是私网上面的路由,R3发现有隧道那么就在原有的MP-BGP标签的基础上再加上MPLS头部进入隧道
- 在中间设备会一跳一跳的交换,R2会做一个MPLS的特性动作(次末跳弹出),这个时候会把标签剥离掉,把剩下的报文传递给了R1的全局接口
- 查看全局路由表会发现不存在这条路由(怎么能去查VRF的路由表?收到的报文中还存在一个MP-BGP生成的标签,根据标签查询VRF)报文中有RT值,RT值放在了一个扩展的团体属性里面,还传递了个一个VPNV4路由(有RD+IPV4前缀),这样R1收到之后会先查看MPLS表,标签代表着要去查哪个VRF的路由表,把标签剥掉按照标签支持查指定的路由表完成转发。(通过标签查询对应的VRF)