ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VLANIF与VLAN聚合:跨VLAN通信原理、配置与选型对比

VLANIF与VLAN聚合:跨VLAN通信原理、配置与选型对比 处理过多台交换机之后你就会发现VLAN这个功能一半是天使一半是魔鬼它能把广播域拆得干干净净也能让原本直通的网络瞬间鸡同鸭讲。我刚负责办公网时被问过一个很基础的问题——两个不同VLAN的主机到底怎么才能互相访问第一个念头是加路由器后来才明白真正应该先搞清楚的是VLANIF和VLAN聚合这两个东西。VLANIF给每个VLAN提供一个虚拟的三层网关VLAN聚合则让多个VLAN共用同一个网关。一个是一对一的关系另一个是多对一的关系。这篇文章不绕弯子直接把两者的原理、配置和排错讲透适合网络运维、弱电工程师以及正在学数通认证的同学。1. 为什么需要VLANIFVLAN隔离之后的通信困局1.1 VLAN只负责隔离管不了三层通信VLAN的核心价值就是分割广播域。默认情况下交换机所有接口都在VLAN 1里一台主机发广播包全网段都能收到。划分VLAN后VLAN 10的主机和VLAN 20的主机在二层上彻底隔开广播帧、普通数据帧都过不去。这个隔离是有意为之为了减小广播域、提升安全性、便于管理。但需求总有两面业务上更希望隔离但能通信。财务部在VLAN 10里行政部在VLAN 20里平时互相不能随便访问可一旦需要跨部门查数据、打网络打印机的时候总得有一条安全可控的路。二层数据帧走不通那就得靠三层IP路由。传统办法是单臂路由交换机把Trunk口上联路由器路由器上创建子接口每个子接口对应一个VLAN终结VLAN的网关地址。典型配置长这样# 交换机侧Trunk口放通VLAN 10和VLAN 20 [Switch] interface GigabitEthernet0/0/24 [Switch-GigabitEthernet0/0/24] port link-type trunk [Switch-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20 # 路由器侧子接口分别终结VLAN [R1] interface GigabitEthernet0/0/0.10 [R1-GigabitEthernet0/0/0.10] dot1q termination vid 10 [R1-GigabitEthernet0/0/0.10] ip address 192.168.10.1 255.255.255.0 [R1] interface GigabitEthernet0/0/0.20 [R1-GigabitEthernet0/0/0.20] dot1q termination vid 20 [R1-GigabitEthernet0/0/0.20] ip address 192.168.20.1 255.255.255.0这种方案能用但痛点很明显终端多的时候所有跨VLAN流量都挤在一根上行链路上链路带宽、路由器CPU转发能力都扛不住而且出现故障时排查链路也麻烦。当时我在一个机房踩过这个坑一个VLAN做视频流另一个VLAN做文件服务跨VLAN传输时单臂路由成了瓶颈带宽上不去。于是交换机厂商把路由能力下沉到交换芯片里VLANIF应运而生。它让交换机自己就能当网关跨VLAN流量直接走背板/交换芯片转发不再绕外置路由器。1.2 VLANIF的本质给VLAN配一个虚拟三层口VLANIF是一个逻辑三层接口编号与VLAN ID一一对应。VLAN 10就对应VLANIF 10VLAN 20对应VLANIF 20。它相当于给某个VLAN的二层广播域挂了一个三层网关出口。理解VLANIF的关键点它不是物理接口不需要插网线。你在交换机上创建了VLAN再进VLANIF视图配置IP地址只要这个VLAN里至少有一个物理接口处于Up状态VLANIF就会Up整个VLAN内的主机都以它作为网关。主机的数据走向大概是这样的VLAN 10的主机A要访问VLAN 20的主机B。A发现B不在同一网段就把数据包交给默认网关。A发ARP请求询问网关192.168.10.1的MAC地址交换机收到后用VLANIF 10的MAC地址应答。A将数据帧发往网关交换机查询路由表发现192.168.20.0/24是VLANIF 20的直连网段。交换机把数据帧在VLAN 20内转发给BB回包时走同样的流程。整个过程对主机来说就是正常走网关对交换机来说则等于把路由转发能力内化成了一个标准功能。这也是为什么VLANIF经常被称为SVISwitch Virtual Interface交换虚拟接口。如果你在模拟器里敲配置印象会更深。在华为设备上VLANIF的创建极其简单[Switch] vlan batch 10 20 [Switch] interface vlanif 10 [Switch-Vlanif10] ip address 192.168.10.1 255.255.255.0 [Switch] interface vlanif 20 [Switch-Vlanif20] ip address 192.168.20.1 255.255.255.01.3 VLANIF与物理三层口的区别很多人分不清VLANIF和交换机上的物理三层口Routed Port到底有什么区别。简单说对比维度VLANIF物理三层口对应对象对应一个VLAN二层域对应一个物理接口配IP前提VLAN必须存在且至少一个物理口Up接口本身Up即可适用场景给二层接入VLAN提供网关路由器之间互联、交换机上联三层口是否支持子接口不支持VLANIF本身就是终结VLAN的三层口支持子接口做单臂路由物理三层口一般用在设备互联链路比如两台交换机之间需要三层互通就把互联口切成三层口各配一个IP。而VLANIF则主要用于终结接入侧VLAN的网关。一个典型的三层园区网架构里接入交换机用VLANIF给用户终端做网关核心交换机之间用物理三层口互联或走三层路由。明白了VLANIF之后下一个卡住很多人的点就来了如果VLAN非常多每个VLAN都要一个独立网段IP地址根本不够分。这时候VLAN聚合就派上用场了。2. VLANIF配置实测从规划到跨VLAN互通2.1 先规划再动手接口、VLAN、网段一次想清楚VLANIF配置本身不复杂真正容易翻车的都在前期规划。以一台华为S5700交换机为例要做两个VLAN互通规划如下VLAN 10财务部终端网段 192.168.10.0/24网关 192.168.10.1VLAN 20人事部终端网段 192.168.20.0/24网关 192.168.20.1交换机GigabitEthernet0/0/1加入VLAN 10GigabitEthernet0/0/2加入VLAN 20规划阶段就要确认几个事VLAN ID全局唯一不要和默认VLAN 1重叠终端网段不能冲突交换机剩余接口够不够用。别小看这一步我见过有人把VLAN ID规划成10和010排查半天才发现问题出在命名习惯上实际VLAN ID是10和10直接在配置里报错。2.2 完整命令与配置顺序配置顺序有一个潜在逻辑VLAN必须先存在VLANIF才能创建物理接口再加入到VLAN中。顺序乱了后面就是连环报错。# 第一步批量创建VLAN [Switch] vlan batch 10 20 # 第二步把接口切成Access口并加入VLAN [Switch] interface GigabitEthernet0/0/1 [Switch-GigabitEthernet0/0/1] port link-type access [Switch-GigabitEthernet0/0/1] port default vlan 10 [Switch-GigabitEthernet0/0/1] quit [Switch] interface GigabitEthernet0/0/2 [Switch-GigabitEthernet0/0/2] port link-type access [Switch-GigabitEthernet0/0/2] port default vlan 20 [Switch-GigabitEthernet0/0/2] quit # 第三步创建VLANIF并配置网关地址 [Switch] interface vlanif 10 [Switch-Vlanif10] ip address 192.168.10.1 255.255.255.0 [Switch-Vlanif10] quit [Switch] interface vlanif 20 [Switch-Vlanif20] ip address 192.168.20.1 255.255.255.0 [Switch-Vlanif20] quit如果是跨交换机交换机之间的链路需要配成Trunk并放通相关VLAN。这是最容易漏的一步。我踩过最典型的一次接入交换机A上的VLAN 10要访问核心交换机B上的VLANIF 10网关结果A到B的接口忘了放通VLAN 10终端一直显示无Internet访问。# 交换机A的Trunk接口放通VLAN 10 [switchA] interface GigabitEthernet0/0/24 [switchA-GigabitEthernet0/0/24] port link-type trunk [switchA-GigabitEthernet0/0/24] port trunk allow-pass vlan 102.3 验证VLANIF是否正常配置完成后验证比配置更重要。推荐按这个顺序来# 查看VLANIF状态 [Switch] display ip interface brief *down: administratively down !down: FIB overload down ^down: standby down Interface IP Address/Mask Physical Protocol Vlanif10 192.168.10.1/24 up up Vlanif20 192.168.20.1/24 up up看到接口物理和协议都是up说明VLANIF已经可用。接着在交换机上ping一下终端的IP[Switch] ping -a 192.168.10.1 192.168.20.2如果通了说明三层链路没大问题。最后再在两台终端上互相ping确认端到端转发。2.4 VLANIF Down的常见原因和处理思路很多第一次配置VLANIF的同学会被一个问题卡住VLANIF配了IP但状态始终是down。大概率原因就一个这个VLAN里没有处于Up状态的物理接口。这是个反直觉的地方。物理三层口只要插了线就能upVLANIF却完全依赖其对应VLAN内物理口的数量。如果VLAN 10里一个接口都没加或者加进去的接口都是down的VLANIF 10必然down。排查路径也简单# 查看VLAN 10下的接口状态 [Switch] display vlan 10 # 查看物理接口是否为up [Switch] display interface GigabitEthernet0/0/1再一种情况是接口虽然是up的但VLAN没配对。比如接口配了Access VLAN 10实际VLANIF建的是20那VLANIF 10里就一个口都没有自然起不来。所以VLANIF的编号要和接口加入的VLAN保持一致这句话听起来像废话但真到了现场十几台设备挨个查的时候你才发现很多人就栽在这种基础问题上。VLANIF配置还有一个容易混淆的点VLANIF 10的IP和VLANIF 20的IP不能配在同一网段。比如192.168.1.1/24和192.168.1.2/24一旦这样配交换机会直接报地址冲突/路由冲突即使能配上三层转发表也会出问题。遇到这种情况先把地址规划理清楚。3. VLAN聚合出现的必然性IP地址浪费和Super-VLAN3.1 传统VLANIF方案的地址浪费账单VLANIF虽然解决了VLAN间通信但有一个副作用每个VLAN都要独占一个网段。假如一个办公园区有10个VLAN每个VLAN下面实际只有5台设备按照传统规划你得分配10个24位掩码子网总共2540个地址可用却只有50个。大学网络中心、商场弱电、酒店IPTV这类场景尤其明显。VLAN按楼层、按功能、按房间划分动辄几十上百个VLAN但每个VLAN下可能就是几台监控、几个AP或几台信息发布屏。如果每个VLAN都独占一个网段IPv4地址空间很快就消耗殆尽。以监控网为例一个商场有40个摄像头点位按楼层划了5个VLAN。传统方案至少需要5个24位网段共1270个可用地址实际只用了40个。如果换用VLAN聚合这5个VLAN可以共享一个24位网段254个地址完全够用地址利用率一下子从惨不忍睹变成极致利用。这个痛点不是理论推演是所有做弱电、做园区网络的工程师早晚都会撞上的现实。于是就有了Super-VLAN也就是VLAN聚合。3.2 Super-VLAN和Sub-VLAN的角色分工VLAN聚合的思路非常巧妙把原本绑定在一起的二层隔离和三层网关解耦。Super-VLAN聚合VLAN只建三层VLANIF不包含任何物理接口相当于整个聚合组的统一网关出口。Sub-VLAN子VLAN只承载物理接口负责二层隔离不配置VLANIF没有独立的三层网关。多个Sub-VLAN共享同一个Super-VLAN的IP子网和网关。也就是说Sub-VLAN 10、Sub-VLAN 20、Sub-VLAN 30里的终端网关都指向同一个地址整个网段也只有一个。用一个生活化的类比Super-VLAN就像小区的大门Sub-VLAN是每栋楼的单元门。所有居民终端住不同单元Sub-VLAN但出小区都走同一个大门Super-VLAN的VLANIF门牌地址统一而单元门之间日常互不影响。华为交换机上创建Super-VLAN的命令很直观[Switch] vlan 100 [Switch-vlan100] aggregate-vlan [Switch-vlan100] access-vlan 10 [Switch-vlan100] access-vlan 20VLAN 100被标记为aggregate-vlan聚合VLANVLAN 10和VLAN 20被划为它的Sub-VLAN。配置完成后VLAN 100就是Super-VLAN。3.3 为什么Sub-VLAN不能配置VLANIF在VLAN聚合架构下Sub-VLAN不能创建VLANIF这是设计上的硬性要求也是配置中最容易困惑的地方。原因很简单一个网段只能有一个网关。如果VLAN 10、VLAN 20、VLAN 100各自都有了VLANIF并且共享同一个IP网段那么交换机上就会同时出现多个接口争抢同一网段的网关地址路由表、ARP表全乱套转发行为完全不可控。所以华为设备在配置时直接做了限制。如果你先创建了Sub-VLAN再尝试为其创建VLANIF系统会提示该VLAN是Sub-VLAN无法创建VLANIF反过来如果你想把一个已经配置了VLANIF的VLAN改成Super-VLAN的Sub-VLAN需要先把原来的VLANIF删掉。这个限制从机制上杜绝了网关冲突的可能。理解了这一点也就理解了VLAN聚合的边界它不追求每个业务VLAN都有独立网关而是牺牲网关的独立性换取IP地址的高效利用。4. VLAN聚合配置实操命令、ARP代理与踩坑记录4.1 配置顺序不能乱先聚合再绑Sub-VLAN用一台华为交换机模拟一个经典场景监控网络划分了VLAN 10、VLAN 20、VLAN 30三个VLAN对应不同楼层的摄像头但希望所有摄像头都在同一个192.168.1.0/24网段内网关统一为192.168.1.1。# 第一步创建VLAN [Switch] vlan batch 10 20 30 100 # 第二步把VLAN 100设置为Super-VLAN并把VLAN 10/20/30绑定为Sub-VLAN [Switch] vlan 100 [Switch-vlan100] aggregate-vlan [Switch-vlan100] access-vlan 10 20 30 [Switch-vlan100] quit注意这里的顺序一定是先把VLAN 100定义成聚合VLAN再去绑定Sub-VLAN。如果你只是把VLAN 100创建出来绑定会失败。另外把物理接口划入Sub-VLAN的方式和普通VLAN完全一样# 第三步把摄像头的接口划入不同的Sub-VLAN [Switch] interface GigabitEthernet0/0/1 [Switch-GigabitEthernet0/0/1] port link-type access [Switch-GigabitEthernet0/0/1] port default vlan 10 [Switch-GigabitEthernet0/0/1] quit [Switch] interface GigabitEthernet0/0/2 [Switch-GigabitEthernet0/0/2] port link-type access [Switch-GigabitEthernet0/0/2] port default vlan 20 [Switch-GigabitEthernet0/0/2] quit # 第四步创建Super-VLAN的VLANIF [Switch] interface vlanif 100 [Switch-Vlanif100] ip address 192.168.1.1 255.255.255.0到这一步VLAN聚合的框架已经搭好。但是先别急着庆祝如果你现在拿摄像头去ping大概率不通。因为还缺最后一步关键配置。4.2 ARP代理VLAN聚合生效的灵魂问题出在ARP上。VLAN 10的摄像头A要访问VLAN 20的摄像头B由于它们处于同一个IP网段192.168.1.0/24A不会把数据包发往网关而是直接向B发起ARP请求询问B的MAC地址。但VLAN 10和VLAN 20是二层隔离的。A的ARP广播请求在VLAN 10内就被淹没了根本到不了B。结果A收不到ARP应答直接判定对方不可达通信失败。解决思路顺势而出交换机在Super-VLAN上收到A的ARP请求后由Super-VLAN的VLANIF代替B做出ARP应答。A拿到的是Super-VLAN VLANIF的MAC地址它就把数据包发给这个网关由交换机去查询并转发到VLAN 20内部的B。这就是ARP代理在这个场景里的作用。华为设备上开启的命令是[Switch] interface vlanif 100 [Switch-Vlanif100] arp-proxy inter-sub-vlan-proxy enable这行命令一加上VLAN聚合才算真正打通。我在一个商场的监控网络项目里就吃过亏。当时配置完VLAN聚合发现VLAN 10的摄像头能ping通网关但无法访问VLAN 20的NVR查了好半天路由、VLAN、物理链路最后才发现是漏了这条ARP代理。加上之后全组摄像头和NVR瞬间互通。这个命令的重要性怎么强调都不为过。4.3 附加的ACL控制维度VLAN聚合条件下因为所有Sub-VLAN共享同一IP网段基于IP网段做访问控制就会受限。要区分不同Sub-VLAN的流量得靠二层信息或专门的VLAN ACL来实现。华为设备上可以基于VLAN下发ACL比如只允许VLAN 10访问服务器的某个端口# 创建ACL匹配从VLAN 10进来的流量 [Switch] acl 3000 [Switch-acl-adv-3000] rule 5 permit ip vlan-id 10 [Switch-acl-adv-3000] rule 10 deny ip [Switch-acl-adv-3000] quit # 在Super-VLAN的VLANIF上调用 [Switch] interface vlanif 100 [Switch-Vlanif100] traffic-filter inbound acl 3000这等于用VLAN ID作为策略条件弥补了网段相同带来的策略区分难题。实际项目里如果对安全和隔离有更高要求VLAN聚合不是最优选反而传统VLANIF更直接。5. VLANIF与VLAN聚合怎么选一张表说清楚对比维度VLANIF方案VLAN聚合方案网关数量每个VLAN一个网关多个Sub-VLAN共享一个网关IP地址利用率低每个VLAN独占一个网段高多个VLAN共用同一个网段配置复杂度简单、直观需要配置聚合VLAN和ARP代理ARP代理不需要必须开启inter-sub-vlan-proxy基于IP的ACL方便网关网段天然可区分受限需要基于VLAN的ACL排错难度低逐VLAN排查即可较高需要结合ARP代理状态判断适用场景VLAN少、IP地址充裕、安全隔离要求高VLAN数量多、地址紧张、终端数量少项目选型时我会先问几个问题这个网络里VLAN有多少个IP地址是否紧张安全策略区分是依赖网段还是依赖VLAN如果是写字楼办公网VLAN数量少、每个部门就一二十台电脑、IP地址充足直接VLANIF配置透明排错省心。如果是商场、酒店、学校这类VLAN数量多、单个VLAN设备少、IP地址规划压缩的场景VLAN聚合就很合适一个C段能顶好几个C段用。说实话VLAN聚合这功能在实际项目里有点被低估。很多工程师习惯了一个VLAN一个网关的固定思维不到IP不够用的时候不会想起它。但真到规划一个几百个VLAN的无线网络时地址规划就是生死线VLAN聚合这种省地址的利器早该出现在方案里。不过VLAN聚合也有明显短板。同网段下所有Sub-VLAN终端三层是互通的只是二层隔离。一旦需要做严格的部门间安全隔离或者需要给不同VLAN分配不同网关做策略路由VLAN聚合就不合适了。这种情况还是老老实实VLANIF加防火墙策略。实际部署时还有两个经验值得分享第一VLAN聚合和DHCP配合时DHCP地址池只建在Super-VLAN的VLANIF网段即可所有Sub-VLAN的主机都能获取到地址不需要每个Sub-VLAN单独建池。第二跨交换机做VLAN聚合时Trunk口要放通Super-VLAN和所有Sub-VLAN否则Sub-VLAN内主机能获取IP但跨交换机通信就会出现部分通、部分不通的怪现象。这个坑不试一次很难定位因为单看Super-VLAN是通的单看Sub-VLAN也是通的偏偏组合起来有问题。如果你用的是模拟器比如eNSP配置流程一模一样建议亲手敲一遍VLAN聚合的场景然后故意不开ARP代理用抓包看看ARP请求卡在哪一步这样对为什么需要代理会比看十遍文档印象都深。我当初就是这么过来的实验做完整个机制就通了。
返回列表