MPLS VPN( BGP/MPLS IP VPN)不是一种技术,而是一种解决方案,多个技术的结合体。控制面使用BGP,转发面用了MPLS。
现在有A公司和B公司,在不同的城市,要实现互访的要求,可以向运营商租借光纤,但成本太高;也可以使用VPN技术。
VPN:在原有的报文前面封装一个或多个全新的头部,完成在公共网络上(不只运营商的网络)的传递。
VPN技术可以在原有报文的前面封装MPLS头部或IP头部
MPLS头部:
L2 VPN :同网段转发 ---二层转发
L3 VPN :不同网段转发 -三层转发
L2 L3VPN又细分为P2P和P2MP网络
IP头部:
L2 VPN :同网段转发 ---二层转发
L3 VPN :不同网段转发 -三层转发
L2 L3VPN又细分为P2P和P2MP网络
对于二层或三层,是看CE两侧的地址
MPLS VPN
MPLS VPN网络架构由三部分组成:CE(Customer Edge)、PE(Provider Edge)和P(Provider),其中PE和P是运营商设备,CE是MPLS VPN用户设备。
P:运营商网络中的骨干路由器,不与CE直接相连。P设备只需要具备基本MPLS转发能力,不维护VPN相关信息。
PE:运营商边缘路由器,是与CE直连相连的设备。对VPN的所有处理都在PE上。需要隔离不同用户间的二路由。
CE:用户网络边缘设备,有接口直接与运营商网络相连。CE不知道VPN的存在,也无需支持MPLS。只需与PE交互路由即可。
MP-BGP:负责PE与PE之间传递路由信息
LDP:负责PE与PE之间的隧道建立
VRF:负责PE的VPN用户管理
IGP:负责PE与CE之间的路由信息交换
运营商网络设备(P、PE)底层IGP需要通
MPLS VPN的路由交互
VPN路由信息的发布过程包括三部分:
- 本地CE到入口PE
- 入口PE到出口PE
- 出口PE到远端CE
- CE和PE之间交换IPv4路由,使用IGP或BGP协议都可以
- 因为PE需要为多个用户提供VPN服务,因此创建了多个VRF,在创建VRF时,需要指定RD和RT值,然后将连接CE的接口与VRF绑定,在使用路由协议和CE交互路由时,进程下需要指定VRF。然后从CE学到的路由就会进入VRF路由表中。
VRF: PE收到来自不同的VPN用户相同的路由,所以有了VRF来解决地址空间重叠的问题。
- 进入到VRF路由表后,需要通过BGP传递给对端PE,但是BGP只能接收一条相同路由,所以需要在IPv4前加上RD值,变成全局唯一的VPNv4路由。并且添加一个RT值,用于传递给对端PE时,匹配对端PE的入方向RT值,让对端PE接收出入方向RT值对应的路由,注入VRF表中。
RD:VRF解决了地址空间重叠问题,但PE之间仍需通过BGP传递路由,但BGP路由表仍然只有一个,所以有了RD值,把路由变成全局唯一的VPNv4路由。
RD值用于解决在MPLS VPN网络中客户IPv4地址空间的冲突问题。
VPNv4路由共有12个字节。RD+IP地址=8字节+4字节。
RT:PE与PE之间传递路由,需要使用MP-BGP协议,因为传递的是VPNv4路由。
传递到对端PE之后,对端PE接收时,不知道传递给他的哪个VPN用户,所以 需要用RT值进行区分,传递给相应的VPN用户。
每个VPN实例都会与一个或多个VPN Target绑定,一个出方向,一个入方向。
如果PE与CE使用IGP协议交互的路由,那么PE需要把客户路由引入BGP中;
如果PE与CE使用BGP协议交互的路由,那么PE不需要把客户路由引入BGP中,因为BGP会自动形成VPNv4路由。
- PE与PE交互VPNv4路由,需要建立MP-BGP对等体关系,前提是MPLS VPN骨干网络内部署IGP协议。
- 因为对端PE也会连接很多用户,创建VRF。所以需要根据接收到的VPNv4路由携带的出方向的RT值,与自己的VRF表中的入方向RT相匹配,如果出入方向RT值一样,就会接收,并剥离RD值,变成IPv4路由,注入自己本地的VRF表中。
- 然后由PE设备发给自己对应的CE设备。
MPLS的使用:P设备上没有VPN路由,无法根据IP地址转发。
- PE和P设备之间运行LDP,交换公网标签,建立PE之间的LSP隧道(公网隧道)。
- 入口PE在通过MP-BGP传递VPNv4路由时,会携带私网标签,用于区分不同VPN的数据。
- 出口PE在接收到VPNv4路由后,需要执行私网路由交叉和隧道迭代来选择路由
MPLS VPN的报文转发过程
虽然CE已经知道了对端CE的路由,但还需要将报文转发到对端。
CE把路由发给PE,PE查看fib表,得到对应的Tunnel ID,然后PE压入一个私网标签头部,再根据Tunnel ID找到对应的隧道,对应的是LSP,然后压入公网标签头部,然后PE一路使用公网标签头部走到对端PE,对端PE弹掉公网标签后漏出私网标签,然后根据私网标签找到对应的VRF,弹掉私网标签将IP报文再转发给CE。
外层标签也被称为公网标签,被用于将报文沿着LSP转发到远端PE设备。
内层标签也被称为私网标签,被用于将报文在远端PE设备对应到具体的CE设备。
VRF
VRF:通过在一台三层转发设备上创建多张路由表实现数据或业务的隔离。不同的VRF路由表是不通的。
VRF又称VPN实例,是一种虚拟化技术,在物理设备上创建多个VPN实例,每个VPN实例有独立的接口、路由表和路由协议进程等。部署路由协议时,需要绑定好对应的VPN实例。
基本配置:
ip vpn-instance <name> 创建VPN实例
ipv4-family 使能VPN实例的IPv4类型路由
ip binding vpn-instance <name> 将接口绑定到VPN实例
ospf 1 router-id <id> vpn-instance <name> 创建与VPN实例绑定的路由协议 (静态同理)
如该拓扑图,R1连接R4使用ospf,假设此时R4产生一条路由x(192.168.1.0/24),发给R1,那么R1路由表里会有x(192.168.1.0/24),那如果R1又接了另外一台新设备(R5),同理的,新设备也产生一条路由x(192.168.1.0/24)发给了R1,那此时R1如何去做?这个问题叫做地址空间重叠!于是这就产生了VRF(虚拟路由转发)。
VRF也就是说,在路由器上虚拟出多个虚拟的路由器,这些虚拟路由器都有自己单独的路由表。然后再将这些虚拟路由器与路由器的接口进行绑定,则使接口的路由存放在虚拟路由器中的路由表里。
VRF在PE设备配置
R1收到了R4和新设备(R5)产生的x路由(192.168.1.0/24),R1如何通过BGP发送给R3?因为BGP只能发送最优的路由,也就是说要么发R4的,不发R5的;要么发R5的不发R4的,那这样就不能满足需求!于是有了RD值(路由标识符)的概念。
RD在PE的VRF中配置
RD:PE从CE接收到IPv4路由后,在IPv4前缀前加上RD,转换为全局唯一的VPN-IPv4路由。RD值是本地唯一的,两个VRF中,RD值不能冲突。
RD值长度:8字节 例如:1:2 192.168.1.1 ---1:2是RD值
所以IPv4+RD=VPNv4路由 ---同理,PE通过MP-BGP传给对端PE时,实际传递的是VPNv4路由,而并非IPv4路由
此时,R1发给了对端PE R3,R3也会有很多VPN实例,那么R1如何准确无误的把路由发给R3对应的VPN实例呢?此时引出了RT值(路由标签--标识符的名称)的概念。
RT值会在PE的VRF里中配置,出方向和入方向的RT值
这两行的命令代表意思是打开了ipv4单播路由功能,并且是与邻居1.1.1.1开启的 ---这是默认开启的
但我们要通过BGP传递的是BGP路由,因此还要配置打开vpnv4路由传递功能
ipv4-family vpnv4 peer 3.3.3.3 enable
1.运营商搭建
底层IP
底层IGP
底层MPLS LDP
2.链接用户
创建用户VRF
ip vpn-instance vpn1 创建vpn实例
配置用户RD及RT值
route-distinguisher 1:1 ---RD值
vpn-target 100:1 export-extcommunity --出方向的RT值
绑定用户接口配置IP ----------绑定接口前一定要dis this,因为绑定之后接口下的配置全部消失,所以绑定前要dis this
ip binding vpn-instance vpn1
配置路由协议学习用户侧路由
PE与CE使用IGP打通
3.运营商在PE之间交换用户路由
bgp <as号>
peer x.x.x.x as-number
配置PE间BGP VPNv4邻居
ipv4-family vpnv4
peer 3.3.3.3 enable
互相引入路由完成路由交互
import-route
VRF--实例 解决用户地址空间重叠问题 --不同用户用了相同网段的问题
RD值 解决BGP路由表中IPv4地址重叠问题 RD+IPv4前缀=VPNv4路由
RT值 解决用户是否对路由感兴趣的问题 ---PE接收该路由,要匹配出入方向
BGPVPNv4邻居 解决VPNv4路由传递问题
配置完成之后,报文转发流程:
5-->4:
5去访问4时,发给下一跳R3,R3查询VRF路由表,发现下一跳是R1(通过BGP学来的),但是正常流程走,R3发给R1,经过R2时,R2没有去往4的路由,所以会丢弃。通过配置MPLS VPN,会通过隧道(0x01)转发(MPLS),到达R1。R1再查询路由表到达R4。那么此时有个问题:R1如何准确无误的发给R4,因为R1是通过全局路由表收到的去往4报文,会去查询全局路由表,但是4产生的路由R1是保存在VRF表的,全局路由表并不存在,所以此时MP-BGP会产生标签,比如VRF表1分配1025标签,VRF表2分配1024标签,再通过对应的标签,查询对应的VRF表,就可以实现转发。
MPLS VPN,MPLS LSP表中有两张表,一张是BGP的LSP表,一张是LDP LSP的表
BGP的LSP表,就是根据标签查找VRF对应表的。这个标签是BGP传递VPNv4路由出去的时候分配的