基于盛科5160VPLS技术实现MPLS L2VPN
概述
最近需要在之前做的MPLS 基础上实现L2VPN,所以想在这里把整个开发流程记录下,以便以后进行回忆。
整体的实现方案是采用VPLS技术,这个技术盛科5160芯片是完全支持的。目前VPLS的信令协议采用LDP协议,所以远端PE需要自己手动配置。
5160对MPLS VPN的支持
看了下5160的DataSheet,支持MPLS L2VPN(VPLS、VPWS)、MPLS L3VPN。我要用的就是VPLS(Virtual Private LAN Service虚拟专用局域网服务)。VPLS可以提供一种点到多点的VPN服务,不像传统的VPN(GRE、L2TP、PPTP)只能在公网上搭建一个点对点的专用网络,进行传输私有数据。
VPLS技术简介
VPLS: 是在公网上提供一种点到多点的L2VPN业务。这种通过VPLS技术把各个分散的站点连接起来,构成一个大的二层VPN网络,称为一个VPLS实例。在某个PE设备上,会对每一个VPLS实例虚拟出一个VSI(Virtual Switch Instance)出来。每个VSI在功能上,相当于一个传统的二层以太网设备。
几个基本概念
- CE:Customer Edge 用户网络边缘设备。用于连接PE,无需支持MPLS功能,并感知不到VPN的存在。
- PE:Provider Edge 服务提供商网络边缘设备。处于MPLS网络的边缘,用于直连CE,所有的VPN业务都在该设备上实现。在MPLS L2VPN中,主要实现VSI,来处理VPN数据的转发。
- AC:Attachment Circuit 接入电路。CE和PE的链接,在PE设备上需要绑定具体的二层端口,和VPN实例一一对应,绑定服务实例。
- PW:Pseudowire 伪线即PE–PE的虚链路。用于承载VC标签,链接着同一VPLS实例中的两个PE设备。
- Tunnel:公网隧道。由LSP维护,用于承载PW。一条公网隧道可以跑多条PW。
- LSP:Label Switching Path标签交换路径,即转发分组在MPLS网络中所走过的路径。
- LER:Label Switching Router LSR是MPLS网络的核心交换机,
- FEC:Forwarding Equivalence Class 转发等价类,具有相同转发规则的一组数据,例如目的地址前缀相同的数据分组,在LDP协议中,为一个FEC分配一个标签,和路由表的关系是,一条路由可以映射一个FEC。
- NHLFE:Next Hop Label Forwarding Entry 下一跳标签转发项。用于描述对标签执行的操作,类似IPUC中的Nexthop表项,代表当前转发分组的编辑方式。
- FTN:Fec To NHLFE map 指在Ingress节点将转发等价类 FEC映射到NHLFE的过程。
- ILM:Incoming Label Map 入标签映射,存在LSR设备以及Egress设备上。对标签进行交换、空操作、出栈操作等。
VPLS 实现机制
- 创建PW-----静态PW、LDP PW(手动指定远端PE)、BGP PW(自动发现远端PE设备)。
- 实现VSI 具有传统以太网设备所有功能,包括基于MAC地址表转发、查表失败泛洪、组播/广播的泛洪。
- PW全连接 在同一个VPLS实例中,每两个PE之间必须建立PW链接。
- 水平分割 在PE设备上,从PW上过来的数据禁止向该VSI内的其它PW转发,仅仅只能向AC转发。
基于sdk2.6.0实现VPLS
静态配置
创建一个vlanif接口,interface v10 绑定一个端口。
SDK下敲的命令:
- 使能接口mpls功能
l3if ifid 1 mpls-property mpls-en value 1
下面几条命令用于 AC—>PW - 创建用于编辑隧道的NextHop Id,用于承载PW 方向为AC---->PW
nexthop add mpls-tunnel 10 working-path mac e.e.e vlan-if vlan 10 port 45 label1 200 ttl1 10 exp1 2 exp1-type 0 - 创建用于编辑VC的NextHop Id,用于打上VC标签 方向为AC---->PW
nexthop add mpls 102 push fwd vpls-port 300 payload-op op-l2vpn cvlan-edit-type 1 svlan-edit-type 4 output-cvid 1 output-svid 1 tunnel-id 10 label1 100 ttl1 100 exp1 1 exp1-type 0 - 使用vlan mapping映射出fid 方向为AC---->PW
vlan mapping add port 44 mapping-to fid 4096 vpls-fid - 暂时不知道什么作用,这条如果不设置,不会转发报文。方向为AC---->PW
port 44 scl-key-type scl-id 1 direction ingress type port - 创建入方向fdb表,AC—>PW 方向为AC---->PW
l2 fdb add mac 0.0.1 fid 4096 nexthop 102 static
下面几条命令用于PW—>AC - 出方向弹出隧道标签 PW—>AC
mpls ilm add space 0 label 200 pop - 出方向报文编辑NextHop规则 PW—>AC
nexthop add egs-vlan-edit 100 port 44 cvlan-edit-type 1 svlan-edit-type 4 output-cvid 1 output-svid 1 - 出方向FDB表 PW—>AC
l2 fdb add mac 0.0.2 fid 4096 nexthop 100 static - 添加l2vpn信息。方向为AC---->PW
mpls l2vpn-pw add 100 vpls 4096 pwid 300 vpls-port-type encapsulation-mode raw
动态学习
1. /*使能当前vlanif下的mpls功能*/
l3if ifid 1 mpls-property mpls-en value 1
2. /*创建用于承载PW的隧道,即公网隧道,这里可以采用LSP构建的tunnel 隧道*/
nexthop add mpls-tunnel 10 working-path mac e.e.e vlan-if vlan 1 port 45 label1 200 ttl1 10 exp1 2 exp1-type 0
3. /*用于VC的NHLFE,可以用在Ingress的FTN动作上,如果是两台PE直连,可以把 Nexthop表项中的label标签去掉,把vc标签放在tunnel中,其实这种实现方法有问题,只是盛科的2.6.0把隧道标签去掉之后会报错*/
nexthop add mpls 102 push fwd vpls-port 300 payload-op op-l2vpn cvlan-edit-type 1 svlan-edit-type 1 output-cvid 1 output-svid 1 tunnel-id 10 label1 100 ttl1 100 exp1 1 exp1-type 0
4. /*把ac端口映射到逻辑端口400上,并且加入当前的转发域中,转发域fid为4096,这个范围规定的是4096 ~+1k*/
vlan mapping add port 44 mapping-to fid 4096 vpls-fid logic-port 400
5. /*配置端口44的sck-key-type方式*/
port 44 scl-key-type scl-id 1 direction ingress type port
6. /*添加默认转发规则,在4096这个域内的默认转发规则为在groupid4096中泛洪*/
l2 fdb add vlan-default-entry fid 4096 group 4096 use-logic-port
7. /*Egress设备弹出标签,这个为Tunnel标签*/
mpls ilm add space 0 label 200 pop
8. /*配置L2VPN-PW的信息,VC标签100,VPLS-FID 4096,pwid为300也成为PW的逻辑端口,包封装模式tagged*/
mpls l2vpn-pw add 100 vpls 4096 pwid 300 vpls-port-type encapsulation-mode tagged
9. /*映射逻辑端口的操作方式,PW交给NHLFE进行编辑,AC交给物理口44*/
l2 fdb logic-nhid logic-port 300 nexthop 102
l2 fdb logic-nhid logic-port 400 gport 44
10. /*把ac端口加进去(AC需要和PW在同一个vlan下)盛科FAE的意思是要保证在同一广播域,华三的设备就不需要*/
l2 fdb vlan-default-entry fid 4096 add port 44
11. /*(此处需要吧PW的VC下一跳加进去)*/
l2 fdb vlan-default-entry fid 4096 add nexthop 102
实验效果展示
组网框图
上面框图介绍了VPLS的一个应用场景,把三个PC连接起来,形成一个二层VPN网络。
各表项的信息:
底层SHL表项信息
系统框架笔记
以下图片信息,来源于走读LDP协议源码,为了更好的开发VPLS所做的学习和总结。
LDPD进程中三个进程之间的关系,并讲解主进程和各子进程负者哪些东西
LDPD主进程维护的全局结构体
LDE进程上维护的FEC树以及邻居信息
总结
做这个协议之前先把相关技术理解透,比如MPLS和LDP协议,再然后去研究VPLS的实现。然后在SDK上去配置一下,参考下其它厂家设备作进一步的对比,然后胸有成竹后再动手开发。
开发的时候先想框架知识,怎么维护底层表项,表项怎么和FIB表关联等等。
本节内容记录到此,以后有问题需要定位时,只需要回头看看这个文档,看看自己画的笔记,就大概知道那块出问题了。