VPN的服务模型
- Overlay VPN
- 客户的路由信息时直接交互的
- 运营商只保证源目可达
- 例如IPsec、SSL
- peer-to-peer VPN
- 客户的路由信息发送给运营商,由运营商扩散
传统的VPN通过在所有站点建立全连接隧道(ipsec、SSL等)或者永久虚链路PVC(Permanent Virtual Circuit)的方式实现,不易维护和扩展,特别是向已有的VPN加入新的站点时,需要同时修改所有接入此VPN站点的边缘节点的配置
BGP/MPLS IP VPN基于对等体模型。这种模型使得服务提供商和用户可以交换路由,服务提供商转发用户站点之间的数据而不需要用户参与。相比于传统VPN,BGP/MPLS IP VPN更易于扩展和管理,新增站点时,只需修改提供站点业务的边缘设备配置
BGP/MPLS IP VPN简称MPLS VPN
BGP/MPLS IP VPN(IP是指VPN承载的是IP报文)是一种L3VPN(Layer 3 Virtual Private Network),实现不同站点的三层互访
使用BGP在服务提供商骨干网上发布VPN路由,使用MPLS 在服务提供商公干网络上转发VPN报文。
MPLS VPN服务模型
MPLS VPN服务模型有三个部分组成:CE、PE和P
-
CE(Customer Edge):用户网络边缘设备,有接口直接跟运营商连接;只维护私有路由并且将私有路由传递给PE
- CE可以是路由器或交换机、也可以是一台主机。通常,CE是感知不到VPN的存在(CE使用普通路由协议向PE设备传递路由),不需要支持MPLS
-
PE(Provider Edge):服务提供商边缘设备,与CE相连,收集和传递私网路由;MPLS网络中,对VPN处理的动作都发生在PE上(对PE性能要求高)。PE设备需要做如下几件事;
- 存储VRF(Virtual Routing Forwarding Instance)
- 分发私网标签
- 处理VPNv4路由
- P(Provider):服务提供商骨干设备,只需具备MPLS转发能力即可,不维护私网路由信息
PE和P设备由服务提供商管理,CE设备由用户管理(除非用户将CE设备交由服务提供商管理)
一个PE设备可以接入多台CE设备,一台CE设备也可以连接属于相同或不同服务提供商的多台PE设备
- CE双归组网:CE设备接入多台相同服务提供商的PE设备;冗余性
一、MPLS VPN的基本概念
MPLS VPN需要解决的问题
1.本端PE接收到来自不同客户站点的相同的路由冲突问题(控制层面)
2.远端PE接收到本段PE发出的相同路由无法区分,该如何正确导入客户站点(控制层面)
3.本端PE收到VPN数据是,无法区分发送按哪个客户站点(数据层面)
1.VRF虚拟路由转发
Virtual Route Forwading
作用:用于区分私网路由和公网路由;用于解决私网路由在本地PE上发送重叠问题
- 在PE设备配置,为不同的客户站点创建不同VRF表
- 不同VRF表是相互隔离的
- PE设备创建VRF表后,设备存在VRF表与全局路由表
- 一个VRF可以由多个物理接口绑定,但一个接口只能绑定一个VRF
1.在PE创建VRF表
ip vpn-instance VPN1 ipv4-family route-distinguisher 100:100
2.PE上将接口绑定进VRF中
interface G0/0/1 ip bind vpn-instance VPN1 ##绑定后IP地址需要重新配置 ip address 10.1.14.1 255.255.255.0
3.CE与PE之间运行路由协议
CE
ospf 10 area 0.0.0.0 network 10.1.14.0 0.0.0.255 network 172.16.1.0 0.0.0.255
PE(要绑定VRF)
ospf 10 vpn-instance VPN1 area 0.0.0.0 network 10.1.14.0 0.0.0.255 import bgp 100 ##引入VPNv4路由
4.在PE上将VRF路由引入BGP,成为VPNv4路由
bgp 100 ipv4-family vpn-instance VPN1 import ospf 10
查看命令
display ip routing-table vpn-instance VPN1
ping vpn-instance VPN1 10.1.14.4 ##检查底层链路
2.RD路由区分符
作用:解决私网路由在PE设备上传递出现冲突的问题
格式:N:M;64bit;例如 100:100、100:1、200:200
在私网路由转换为VPNv4路由时添加
- 32bit IPv4路由+64bit RD值=96bit VPNv4路由
配置:
ip vpn-instance VPN1
route-distinguisher 100:100 ##RD值
3.RT路由标记
作用:主要用于控制VPNv4路由导入,如何将路由导入到相应的VRF中
-
RT值分为导入值和导出值,格式:N:N
-
一台PE设备可以配置多个RT值、导入值和导出值可以不一致
-
RT值时BGP的扩展团体属性
-
运行MP-BGP的设备默认会开启RT值检查。VPNv4路由传递的中间节点设备本地并没有配置RT值,会影响VPNv4路由的传递,要关闭
-
使用方式:
- 导出值在PE发出VPNv4路由时携带
- 导入值在接收VPNv4路由时进行比对,一致则导入对应站点
配置
ip vpn-instance VPN1
route-distinguisher 100:100
vpn-target 100:100 export-extcommunity ##导出值,可以配置多个
vpn-target 200:200 import-extcommunity ##导入值,可以配置多个
4.私网标签
控制层面分发
在私网路由转换成VPNv4路由时,由MP-BGP协议分发
- MP-BGP协议会为每条私网路由分发一个私网标签,通过VPNv4路由发送
PE设备接收到私网标签后,会保存
- 后续PE设备发送客户站点的数据时,会打上相应的私网标签发送给远端PE
远端PE设备在收到带有私网标签的数据时,通过私网标签决定发完哪个客户站点
查看私网标签
display fib vpn-instance X.X.X.X verbose
5.公网标签
在公网运行MPLS LDP 协议分发
为实现私网数据能够在公网传递而设计,因为P设备无法识别私网标签
LDP默认为32位的主机路由(IP路由表)分发标签
- MP-BGP邻居一般通过环回接口建立
- 该地址会成为VPNv4路由的下一跳
- 刚地址的路由会成为LDP协议分发标签FEC
- MP-BGP协议会在发送VPNv4路由时携带路由的下一跳地址(邻居建立的地址)
- 在公网LDP协议会为该下一跳地址路由(32位主机路由)分发公网标签
- 在数据访问时,可以通过访问私网路由的下一跳直接找出公网标签
查看私网路由的公网标签
1.查找私网的tunnel ID
tunnel ID由收到的私网路由中‘BGPNexthop’决定
display fib vpn-instance VPN1
2.查询对应tunnel ID的信息
6.MP-BGP
PE和PE之间建立VPNv4邻居,用来传递VPNv4路由
MP-BGP为VPNv4路由分发标签
传统的BGP-4只能管理IPv4单播路由信息,对于其他网络层协议的应用,在跨AS传播时会受到限制
所以使用BGP多协议扩展MP-BGP(MultiProtocol BGP),提供对多种网络协议的支持,目前的MP-BGP标准是RFC4760,使用扩展属性和地址族来实现对IPv6、组播和VPN相关内容的支持,BGP协议原有的报文机制和路由机制并没有改变
- 对IPv6单播网络的支持称为BGP4+
- 对IPv4组播网络的支持称为MBGP
二、组网实现
1.PE设备上创建VPN实例,配置好RD、RT值
2.将PE上与CE的接口绑定创建的VPN实例
3.CE与PE之间实现路由交换,所以需要部署 静态路由/RIP/OSPF/ISIS/BGP 等路由协议
- 使用的路由协议需要与VPN实例绑定
4.PE和P设备上配置IGP实现互通,配置MPLS以建立MPLS隧道用于流量转发
5.PE之间建立MP-BGP邻居;如果有RR反射器,则PE与RR建立MP-BGP邻居
查看方式
display bgp vpnv4 all peer ##查看MP-BGP邻居是否建立成功
display bgp vpnv4 all routing-table ##查看VPNv4路由
display ip routing-table vpn-instance XXX ##查看VRF路由表
三、MPLS VPN工作流程
工作流程分为两个模块,一个是私网路由的传递方式既控制层面,一个是实现VPN流量的转发既数据层面
控制层面
1.CE将宣告路由(172.16.2.1/32)进路由协议(与PE通信的路由协议)
2.本端PE收到CE客户站点的私网路由(172.16.2.1/32),放入VRF表
display ip routing-table vpn-instance xxx
3.本端PE将私网路由(172.16.2.1/32)转换成VPNv4路由(172.16.2.1/32+RD值)
- MP-BGP协议为私网路由(172.16.2.1/32)分配私网标签(label)
- 将32bit私网(IPv4)路由添加 64bitRD值 变成 96bit VPNv4路由
- 172.16.2.1(32bit)+100:1(64bit)=172.16.2.1,100:1(96bit)
4.本端PE将VPNv4路由(172.16.2.1/32+RD值)放入BGP update报文的MP-REACH-NLRI字段中放松给远端PE
- VPNv4路由
- 私网标签
- 下一跳(自己与远端PE(或RR)建立BGP邻居的地址,一般使用loopback 0接口)
- RT导出值
5.远端PE收到VPNv4路由(172.16.2.1/32+RD值),执行检查
- 本地是否存在对应RT导入值
- 下一跳地址(PE发来的BGP update报文中的下一跳)是否存在可用LSP
6.检查通过,保存对应的信息
- 路由前缀(172.16.2.1)
- 私网标签
- 下一跳(PE发来的BGP update报文中的下一跳)
7.远端PE将VPNv4路由(172.16.2.1/32+RD值)转换成IPv4路由(172.16.2.1/32),发送给远端CE
数据层面
远端CE收到本端CE的私网路由(172.16.1.1/32)后,想去访问它
1.远端CE设备发出数据包(IP包)
2.远端PE收到CE的数据包,查找对应实例的VRF表
display ip routing-table vpn-instance 172.16.2.1 verbose
- 查找出私网标签
- 通过BGPNextHop查找出公网标签
- 封装两层标签(172.16.2.1+私网标签+公网标签)后发送给实际的下一跳(Next hop:10.1.12.2)P设备
3.P设备收到带标签的报文(172.16.2.1+私网标签+公网标签),根据公网LSP进行标签转发,直到本端PE设备
4.本端PE收到带标签的报文(172.16.2.1+私网标签;默认情况下会次末跳弹出公网标签)后,查找对应的实例
- 弹出私网标签
- 找到对应的VRF表
5.本端PE以IP包(172.16.2.1)的形式,根据VRF表指导转发,到达本端CE
私网标签和公网标签的区别?
栈底位不一致
- 私网标签 S=1
- 公网标签S=0
分配的协议
- 私网标签-----MP-BGP
- 公网标签-----MPLS LDP
实现作用
- 私网标签----指导私网数据准确找到对应的VRF表
- 公网标签----使公网设备(P设备)能够传递私网数据
四、MPLS VPN防环
适用场景:CE双归属到PE
1.DN置位
场景:CE双归属到PE,并且**PE和CE之间运行的协议为OSPF****
作用:防止PE设备出现次优路径以及环路问题
实现方式:当PE向CE传递LSA3/5/7时,会将LSA flag中的DN位 置1,当另一台PE/MCE收到LSA中DN位为1的路由时,接收不计算
关闭DN置位检查
dn-bit-set disable summary/ase/nssa ##关闭 LSA3/5/7 的DN置位检查
2.route-tag
场景:CE双归属到PE,并且PE和CE之间运行的协议为OSPF,并且关闭DN置位检查
组成:tag(只存在在LSA5类) + BGP AS号
- 如果路由适用LSA3类传递,route-tag无效
实现方式:当PE向CE传递路由时会携带上route-tag,当另一台PE收到后会检查route-tag(使用路由固定值tag+自身AS号相加,如果和CE设备发过来的route-tag一致,则接收不计算)
- 路由的固定tag值从另一台PE设备发送而来
3.SoO
场景:CE双归属到PE,并且PE和CE之间运行的协议为BGP
作用:防止CE发出的BGP路由,从另一个PE又发送回来
实现:PE收到CE的BGP路由时,如果配置SoO值,添加SoO值;PE发送给CE BGP路由前,会检查BGP路由中对应的SoO值,与peer时配置的SoO值是否一致,如果一致则不会发送