QinQ映射配置与管理
QinQ映射功能可以将用户的VLAN标签映射为指定的VLAN标签,从而起到屏蔽不同用户VLAN标签的作用。但QinQ映射功能只能在子接口上应用,通过QinQ映射功能,子接口在向外发送本地VLAN的帧时,将帧中的本地VLAN标签替换成外部VLAN标签;在接收外部VLAN的帧时,又将帧中的外部VLAN标签替换成本地VLAN标签。QinQ映射功能节省了大量的物理端口,因为一个物理端口可以划分许多子接口,而每个子接口可以单独配置不同VLAN ID范围的标签映射。
QinQ映射又分为1 to 1的映射方式和2 to 2的映射方式。
物理端口和该端口下的子接口不能对同一VLAN进行VLAN映射或灵活QinQ配置。如果已经在子接口上配置QinQ映射功能,不能在该子接口下配置灵活QinQ、QinQ终结、Dot1q终结相关命令。
一直对QinQ、Stacking、QinQ映射的概念有些稀里糊涂,通过前面的实验和反复研读,本人有个笼统的概念,就是QinQ(前面讲的基本QinQ、灵活QinQ——包括基于VLANID、8021p、流策略)就是增加外层VLAN,同Stacking(我看前面一般是说VLAN Stacking)是一样的技术,而QinQ映射,这里着重映射两个字,其实就是替换,它不增加VLAN标签,而是将现有标签中的内容进行替换,也就是所谓的映射。然后看到了这篇文章:
https://blog.csdn.net/dadoneo/article/details/8349417,其中开就写到:QinQ技术(也称Stacked VLAN 或Double VLAN)是指将用户私网VLAN标签封装在公网VLAN标签中,使报文带着两层VLAN标签穿越运营商的骨干网络,在公网中只根据外层VLAN标签传播,私网VLAN标签被屏蔽,到这里就明白了,QinQ就是VLAN Stacking。
一、1 to 1的QinQ映射
在子接口上部署1 to 1的QinQ映射功能,当子接口收到带有一层标签的数据帧后,将数据帧中携带的一层标签映射为用户指定的一层标签。“1 to 1”的意思也可理解为直接进行标签替换,帧在映射前、后都只带有一层VLAN标签。
1 to 1的QinQ映射配置,在对应子接口视图下使用qinq mapping vid vlan-id1 [ to vlan-id2] map-vlan vid vlan-id3,即将原来vlan-id1 [ to vlan-id2]的标签映射为vlan-id3。本命令用来配置子接口单层VLAN映射,且只对入方向报文生效。子接口配置的转换前VLAN不能在全局下创建,也不能查看该VLAN信息。但映射前的标签和同一物理端口下的其他子接口下用来替换的外层外层标签互斥,即两者取值不能相同。
二、配置2 to 1的QinQ映射
在子接口上部署2 to 1的QinQ映射功能,当子接口收到带有两层标签的数据帧后,将数据帧中携带的双层标签中的外层标签映射为用户指定的一层标签。即仅对帧中原来双层标签中的外层标签进行替换,内层标签当做数据部分使用,起到屏蔽内层标签的作用。
2 to 1的QinQ映射功能的配置方法,在对应的子接口视图下,使用qinq mapping pe-vid vlan-id1 ce-vid vlan-id2 [to vlan-id3] map-vlan vid vlan-id4即可,子接口双层VLAN映射(只对外层VLAN映射,内层VLAN不变,且只对入方向报文生效)。即将外层为vlan-id1,内层为vlan-id2 [to vlan-id3]的双层标签映射为vlan-id4,映射的结果就是vlan-id1变为了vlan-id4。
VLAN映射基础
前面是双层标签的QinQ VLAN数据帧的标签映射,本次介绍广泛意义上的帧(包括双层标签的QinQ帧、单层标签的VLAN帧和不带标签的普通帧)的标签映射。这里均是在物理端口上应用的,不是像QinQ映射那样仅可应用于子接口上。(通过这里可以看出,VLAN映射与QinQ映射是不一样的。)
VLAN映射原理
VLAN映射可以实现在用户VLANID和运营商VLAN ID之间相互转换。配置了VLAN映射功能后会在交换机内部维护一张VLAN映射表,然后对进入交换机的数据帧根据映射表进行VLAN映射操作。VLAN映射发生在数据帧从入交换机端口接收进来之后,到从出端口转发出去之前(个人认识:VLAN映射发生在交换机内部)。交换机收到数据帧后,会根据帧中是否带有VLAN标签做出以下两种处理方式。
(1)数据帧带有VLAN标签:根据配置的VLAN映射方式,决定替换单层、双层或双层中的外层VLAN标签;然后进入MAC地址学习阶段,根据源MAC地址+映射后的VLAN ID刷新MAC地址表项;根据目的MAC+映射后VLANID查找MAC地址表项,如果没有找到,则在VLANID对应的VLAN内广播,否则从表项对应的端口转发。
(2)数据帧不带VLAN标签:根据配置的VLAN划分方式决定是否添加VLAN标签,对于不能加入VLAN的数据帧上送CPU或丢弃,否则添加标签;然后进入MAC地址学习阶段,按照二层转发流程进行转发。
以下是个人理解的映射过程:
这里第(1)步中,根据目的MAC+映射后VLANID查找MAC地址表项,如果没有找到,则在VLANID对应的VLAN内广播,否则从表项对应的端口转发。那么广播帧在出端口时也应该进行出方向映射。
理解到这里,感觉自己错误,应该没有出端口映射,入端口映射后,根据映射后的VLANID找到对应的出端口,发送,如果要转换回原来的VLANID,应该在对端交换机上配置入方向的映射,将原来映射的VLANID再映射回来,或映射成其他。
VLAN映射特性包括“VLAN映射方式”和“VLAN映射实现方式”两个方面。
1、VLAN映射实现方式
在VLAN映射实现方式方面,S2700和S3700仅支持基于VLAN的VLAN映射;在S5700和S6700中仅支持基于VLAN的VLAN映射和基于流策略的VLAN映射两种实现方式;在高端的S7700S9300和S9700中支持基于VLAN的VLAN映射、基于802.1p优先级的VLAN映射、基于VLAN+802.1p优先级组合方式的VLAN映射,以及基于流策略的VLAN映射共4中实现方式。
通过上面的描述,可以看出,VLAN映射的实现方式与QinQ映射完全一样,区别是QinQ映射功能只能在子接口上应用;还有一点,通过QinQ映射功能,子接口在向外发送本地VLAN的帧时,将帧中的本地VLAN标签替换成外部VLAN标签;在接收外部VLAN的帧时,又将帧中的外部VLAN标签替换成本地VLAN标签。好像VLAN映射没有提到向外发送帧时进行映射功能。
2、VLAN映射方式
(1)1 to 1的映射方式
1 to 1的VLAN映射功能可使设备端口在接收到带有单层VLAN标签的数据帧时,将数据帧中携带的单层VLAN标签映射为公网的单层VLAN标签。与1 to 1的QinQ映射的功能是一样的但实现方式不一样。
上图是一个连续的1to1VLAN映射
(2)2 to 1的映射方式
2 to 1的VLAN映射功能可使设备主接口在接收到带有双层VLAN标签的数据帧时,将数据帧中携带的外层标签映射为公网的标签,内层标签作为数据透传(即当做数据的一部分,不考虑内层的VLAN标签)。
2 to 1的VLAN映射主用用于下图的园区组网环境中。
(3)2 to 2的映射方式
2 to 2的VLAN映射功能可使设备主接口在接收到带有双层VLAN标签的数据帧时,将数据帧中携带的双层VLAN标签均映射为公网的双层VLAN标签。
几种概念的总结:QinQ技术,按照参考文章,也称Stacked VLAN 或Double VLAN,是在数据帧上增加一层VLAN标签,增加的这层标签的VLANID,可以是基于端口增加的(基本QinQ配置),或者是基于VLANID、8021p、流策略的(灵活QinQ配置),QinQ技术在物理端口配置;而QinQ映射是将用户的VLAN标签映射为指定的VLAN标签,数据帧的VLAN标签数量不变,只是对应的VLAN标签内容发生变化,只能在子接口上应用,分为1to1和2to1映射方式。参看前面的QinQ映射配置介绍,QinQ映射只是基于VLANID进行映射,1to1是将一层的标签中的VLANID按映射表改变VLANID,2to1是同时按照外层VLANID和内层VLANID,再按照映射表,修改外层VLANID为映射后的VLANID;VLAN映射特性包括VLAN映射方式和VLAN映射实现方式两种,是在物理端口上进行的映射,映射实现方式与QinQ技术类似,分为基于VLAN的VLAN映射、基于802.1p优先级的VLAN映射、基于VLAN+802.1p优先级组合方式的VLAN映射,以及基于流策略的VLAN映射共4中实现方式,而映射方式与QinQ映射类似,包括1to1、2to1、2to2映射。经过组合,可以形成基于VLAN的1to1映射,基于8021p、基于流策略的1to1VLAN映射,基于VLAN的2to1映射,基于流策略的2 to 1的VLAN映射,基于VLAN的2to2映射,基于流策略的2 to 2的VLAN映射,基于流策略的VLAN映射可应用于入方向和出方向(应用命令有inbound和outbound),其他的暂时看来只有入方向。
有一个疑问:QinQ映射与VLAN映射的使用场景是什么,为什么有这两种映射出现?从映射的功能看基本上一样,实现一样的功能,为何要两种映射??
实验1:基于VLAN的1to1VLAN映射
下图为应用场景拓扑图:
不同的小区拥有相同的业务,各个小区将不同的业务划分到不同的VLAN中,相同的业务划分到同一个VLAN中。由于各小区网络管理员事先没有协商好,存在不同的小区中相同的业务所属的VLAN不相同,要实现相同业务、不同VLAN间的用户相互通信。如小区1和小区2中拥有相同的业务,但是属于不同的VLAN(即VLAN5和VLAN6,但这两个VLAN中的用户计算机同处一个IP网段中)。要实现通过VLAN映射功能实现小区1和小区2的用户可以直接互通。
模拟拓扑图:
配置后,测试,PC1、2、3、4互相连通,在CE1与PE1、PE1与PE2、PE2与CE2之间链路上抓包
实验2:基于VLAN的2to1的VLAN映射配置
场景:用户通过家庭网关、楼道交换机和小区交换机接入汇聚层网络。为节省运营商网络VLAN资源,及实现不同用户相同业务在传输过程中相互隔离,可在楼道交换机上部署QinQ功能,在小区交换机上部署VLAN映射功能
家庭网关中安不同业务划分VLAN2~4,在楼道交换机上部署QinQ功能,小区1中基于VLAN的QinQ,VLAN2、3增加外层VLAN201,VLAN4增加外层VLAN401,小区2中VLAN2、3增加外层VLAN601,VLAN4增加外层VLAN801,小区交换机上部署VLAN映射功能,小区1中VLAN201、401映射501,小区2中VLAN601、801映射501,PE1、2间trunk链路,允许VLAN501通过,实现运营商规划VLAN通信。
配置如下:
验证:配置后,同本地VLAN中的设备互相不连通,即PC1\4\7、PC2\5\9、PC3\6\9不通,在沿路各链路上抓包,从HOME1——LOU1——XIAOQU——PE1——PE2——XIAOQU2——LOU3——HOME3,发现在LOU3——HOME3抓到的包
实际应该是单层VLAN2,现在还是QinQ后的双层VLAN,经过查找,QinQ配置的端口必须是Hybrid类型,配置成了trunk,进行修改。
LOU1、LOU2、LOU3全部修改后,同本地VLAN设备互通了。
实验3:配置2to2的VLAN映射——基于VLANID的2to2VLAN映射
不同地理位置的用户为了便于自己规划私网VLANID不与ISP网络中的VLANID冲突,采用QinQ方式传输,使用户数据帧中带有双层VLAN标签。带来了一个因为用户数据帧中的VLANID与ISP网络分配的VLANID不一致导致用户数据帧被丢弃的问题,从而导致CE两端的用户无法正常通信。此时采用2 to 2的VLAN映射解决这一问题,实现CE Switch5和Switch6中的用户互通。
配置思路
(1)在连接用户的Switch5和Switch6交换机上将端口加入VLAN10或VLAN30中。
(2)在Switch1和Switch4上配置QinQ,使发往ISP网络的数据帧带有双层VLAN标签。
(3)在连接ISP网络的Switch2和Switch3交换机上部署2 to 2的VLAN映射功能。
因为模拟器中没有对应的2to2映射命令,实验无法进行。
实验4:配置2to2的VLAN映射——基于流策略的2to2VLAN映射
企业A和B各自规划自己的私网VLANID,由于用户数据帧中的VLANID与ISP网络分配的VLANID不一致,将导致用户数据帧被丢弃,此时可在CE侧交换机上部署VLAN映射功能,实现企业A与企业B通过运营商网络互通。采用基于流策略的2 to 2的VLAN映射解决方案。
配置思路
(1)在SwitchA、SwitchB、SwitchC、SwitchD上创建各自所属的外层VLAN。
(2)在SwitchA和SwitchB上创建各自的类、流行为、流策略。
(3)配置SwitchA、SwitchB、SwitchC、SwitchD接口加入各自创建的VLAN。
(4)配置SwitchA上GE1/0/1端口和SwitchB上的GE1/0/2端口应用基于流策略的替换双层标签的VLAN映射功能。
如上设置完成后,PC1与PC2没有联通,通过抓包PC1——LSW1——LSW3——SwitchA链路通过的数据包都是正常的,SwitchA与SwitchC之间一开始没有数据包通过,后来将SwitchA的GE0/0/2的trunk增加100外网通过,抓到了外层VLAN100,内层VLAN10的广播包,这就有问题了,按照配置策略,这条链路上的数据帧应该是外层VLAN300,内层VLAN30的帧,出现标签100,10数据帧,说明基于流策略的2to2映射没有起作用,向外发送100,10数据帧,按照出端口策略pa2,如果vlan-id为100,cvlan-id为10,则映射为vlan-id为300,cvlan-id为30的帧,此处明显没有映射。
然后进行了验证性修改,将GE0/0/2口改为Hybrid类型,启用端口的vlan-translation,还是不行,不知道问题出在哪里。
我的理解在SwitchA的GE0/0/1接收到了双层VLAN帧,那么SwitchA中交换到GE0/0/2端口,在GE0/0/2端口进行策略应用,是向外发送的,应用pa2,即将100,10映射为300,30,如果是从SwitchC来的数据,进入SwitchA的GE0/0/2端口后,应用pa1策略,即将300,30映射为100,10。这里有一个问题,从GE0/0/1口进来的数据帧(100,10),在SwitchA交换机内部是怎样判断交换到GE0/0/2口的,因为GE0/0/2口是trunk允许300通过的,后来想将策略应用到GE0/0/1口,细想后道理是一样的,在GE0/0/1口,怎样将GE0/0/2口来的300帧发送出去,应为GE0/0/1口是允许100通过的。如果是先内部应用策略,那么当100,10映射为300,30后,在内部交换到GE0/0/2口,如果别的端口也有允许300的帧通过,但是没有应用映射策略,是不是也同样能够发送映射后的300帧??如果是先交换在应用策略映射,那么映射前100,10帧怎么知道交换到GE0/0/2口??