做网络的朋友应该都遇到过这种需求财务部一个VLAN办公区一个VLAN服务器区又单独划了一个VLAN结果业务上线那天发现各VLAN之间互相访问不通。VLAN本身是二层隔离广播域的好东西但也正是这层隔离把不同网段的设备给隔开了想让它们互通就得引入三层路由。这就是VLAN间路由的由来。华为设备上做VLAN间路由主流做法其实就三种路由器单臂路由、三层交换机VLANIF接口、三层交换机物理三层口包括三层Eth-Trunk。不少新手容易把这三个搞混不知道什么场景该用哪个配置命令也容易踩坑尤其是华为的子接口还比思科多一个ARP广播开启的步骤。这篇文章我就把三种方式的原理、配置命令、适用场景和坑都捋一遍按实战经验讲照着配基本能一次通。1. 三种方式怎么选先搞清楚它们各自在做什么1.1 为什么需要VLAN间路由先说基础。VLAN虚拟局域网的核心作用是在二层把广播域切小一个VLAN就是一个独立的广播域VLAN内的设备靠MAC地址就能通信但VLAN之间的广播帧是互相隔离的。问题来了当VLAN 10里的PC要访问VLAN 20里的服务器时数据帧从PC发到交换机交换机一看目的MAC不在本VLAN的MAC表里同时又没有三层转发的能力那就只能干瞪眼——默认情况下这个包到不了另一个VLAN。所以要打通VLAN必须有一个“三层设备”参与转发这台设备负责在不同网段之间查路由表、改MAC地址、重新封装数据帧。这个设备可以是外接路由器也可以是三层交换机本身。三种方式的本质区别就是“三层转发点放在哪里”放在路由器上还是放在交换机内部的三层逻辑接口上还是放在交换机的物理三层口上。1.2 每个方案的价值和代价单臂路由三层转发点在外部路由器交换机只负责二层所有跨VLAN流量都要绕到路由器再回来适合没有三层交换机、但手头有路由器的场景。VLANIFSVI三层转发点在三层交换机内部交换机既做二层又做三层数据包在交换机内部完成路由转发不走外部链路性能和效率最高也是生产环境里用得最多的方案。物理三层口把交换机的某个物理端口直接配置成三层路由口给它配IP当作一个普通路由器接口用。适合交换机与防火墙、服务器、另一台三层设备直连的场景因为这个时候根本不需要在这个端口上跑VLAN直接三层互联更干净。三者的对比我整理成了一张表方便快速定位对比维度单臂路由子接口三层交换机VLANIF三层物理口 / 三层Eth-Trunk三层转发点外部路由器交换机内部SVI交换机物理端口是否需要三层交换机不需要二层交换机即可必须三层交换机必须三层交换机跨VLAN流量路径交换机 - 路由器 - 交换机交换机内部直接转发取决于路由表一般走物理口互联性能受限于路由器转发能力且共享一条物理链路硬件转发性能高硬件转发性能高配置复杂度中等需配子接口和trunk低逻辑接口配IP即可低但需注意端口模式切换典型场景小规模网络、临时方案、实验环境园区网/企业网内部VLAN互访核心与防火墙/服务器/上联设备三层互联1.3 我遇到的一个典型选择场景前阵子帮一家公司做办公网改造拓扑不复杂一台二层交换机一台旧路由器内部需要划分三个VLAN分别是办公终端、打印机、服务器。最初提的方案是单臂路由因为公司不想新增三层交换机旧路由器也还能用。但后来算了算流量和并发打印机和服务器之间交互频繁所有跨VLAN流量都要经过路由器那条1G的上联口高峰期肯定扛不住而且单臂路由还有个天然问题路由器故障整个网络就瘫了。最后说服客户加了一台三层交换机做核心VLANIF方案解决二层交换机全部降级为接入层。这个案例其实说明了一件事选方案不能只看能不能通还要看流量模型、设备性能和后续扩展。下面我按顺序把三种方式的配置都写一遍命令基于华为VRP平台读者可以直接在模拟器或真机上操作验证。2. 方式一单臂路由路由器子接口配置实录2.1 原理一根Trunk怎么跑多个VLAN单臂路由的核心思路是在路由器的一个物理接口上拆出多个“子接口”每个子接口对应一个VLAN。物理接口和交换机之间用Trunk连接Trunk链路允许VLAN 10和20的数据帧带着802.1Q标签通过。当VLAN 10的PC要访问VLAN 20时交换机给数据帧打上VLAN 10的标签通过Trunk发给路由器路由器的子接口收到后剥掉VLAN 10的标签按路由表转发到VLAN 20的子接口重新打上VLAN 20的标签再从Trunk链路送回交换机交换机剥掉标签后转发给VLAN 20里的设备。关键点是路由器子接口必须做802.1Q封装这样才能识别不同的VLAN标签。华为的命令是dot1q termination vid这个“termination vid”就是终结VLAN标签的意思一个子接口只终结一个VLAN。另外还有一个华为特有的坑子接口默认不回应ARP广播必须在子接口视图下开启arp broadcast enable否则PC ping网关会一直超时。2.2 完整配置命令与连通性验证假设拓扑如下路由器GigabitEthernet0/0/0连接交换机GigabitEthernet0/0/24交换机上VLAN 10和VLAN 20PC网关分别指向192.168.10.1和192.168.20.1。先看交换机配置# 交换机侧 vlan batch 10 20 # 连接PC的接口划入对应VLAN interface GigabitEthernet0/0/1 port link-type access port default vlan 10 interface GigabitEthernet0/0/2 port link-type access port default vlan 20 # 连接路由器的接口配置为Trunk interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20然后是路由器配置# 路由器侧 interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.1 255.255.255.0 arp broadcast enable这里有几个细节值得强调子接口编号只是本地标识可以随便取但为了可维护性建议用.10、.20这种方式和VLAN ID对应。dot1q termination vid里的VLAN ID必须和交换机上实际划分的VLAN一致否则标签终结不了。另外物理接口GigabitEthernet0/0/0本身不能配置IP地址它只是承载子接口的物理载体。验证连通性先看路由器的路由表display ip routing-table能看到192.168.10.0/24和192.168.20.0/24两个网段都是直连路由说明子接口已经生效。然后在路由器上ping PC的IP例如ping -a 192.168.10.1 192.168.20.2再从PC侧ping对端VLAN的PC或网关。正常情况下VLAN 10的PC能ping通192.168.20.1就说明单臂路由已经通了。如果ping不通优先检查两点一是交换机Trunk端口有没有放行对应的VLAN二是路由器子接口有没有开ARP广播。2.3 单臂路由的致命短板单臂路由虽然能解决VLAN互通问题但生产环境里要慎用。最大的问题是性能瓶颈所有跨VLAN流量都汇聚在一条物理链路上去程和回程都走同一根线无论物理带宽是1G还是10G跨VLAN总流量就被死死卡在这个数值上。更严重的是路由器转发依赖CPU如果是低速路由器一旦跨VLAN流量大CPU占用会飙升伴随的丢包和延迟会让人崩溃。第二个问题是单点故障。所有VLAN的默认网关都在这一台路由器上路由器挂掉全网各VLAN之间直接失联影响面太大。我见过一个小公司就因为图省事用单臂路由承载了所有VLAN互访路由器被攻击导致CPU跑满整个公司网络瘫痪了一个上午。所以单臂路由更适合什么场景呢临时测试环境、新业务验证、手头只有二层交换机和路由器的低成本网络。拿来学习原理、练习排错非常好但正式生产网络尤其是有高可用要求的不建议这么干。3. 方式二三层交换机VLANIF接口最常用3.1 VLANIF的本质交换机上的逻辑三层口VLANIF是三层交换机上的一种逻辑三层接口也叫SVISwitch Virtual Interface。它和一个VLAN绑定只要VLAN存在就可以在VLANIF上配置IP地址这个IP就是这个VLAN内所有PC的网关。数据包进入交换机后如果是跨VLAN访问交换机会直接查三层转发表在内部完成路由转发完全不需要把数据绕到外部设备。和单臂路由对比VLANIF最直观的优势是转发效率三层交换机内部的路由转发由硬件芯片完成是线速转发几乎不消耗CPU。所以在大中型园区网络、企业网络中VLANIF基本是标准配置。这里有个常见的认知误区有人以为VLANIF就是一个“能配IP的VLAN”其实不对。VLANIF在交换机内部本质上对应一个虚接口它能不能Up取决于该VLAN下有没有Up的二层物理端口。如果VLAN 10下所有接入端口都Down哪怕VLANIF配了IPVLANIF接口状态也是Down的这时候PC即使配了同网段IP也ping不通网关。这是排错时最先要确认的点。3.2 配置步骤与命令细节还是沿用上面的拓扑区别是这次不需要外部路由器直接用一台三层交换机完成所有工作。交换机连接PC的端口划分到VLAN 10和VLAN 20然后创建VLANIF接口并配IP。交换机配置如下# 创建VLAN vlan batch 10 20 # 接入端口划分VLAN interface GigabitEthernet0/0/1 port link-type access port default vlan 10 interface GigabitEthernet0/0/2 port link-type access port default vlan 20 # 创建VLANIF并配置网关地址 interface Vlanif10 ip address 192.168.10.1 255.255.255.0 interface Vlanif20 ip address 192.168.20.1 255.255.255.0配置完成后PC的IP、掩码、网关对应关系如下设备IP地址网关VLANPC-A192.168.10.10/24192.168.10.1VLAN 10PC-B192.168.20.10/24192.168.20.1VLAN 20注意VLANIF划分的网段不能重叠网关IP必须和PC在同一子网。如果只是测试两台PC互通PC的网关可以不配但生产环境必须配因为PC访问其他网段时数据包要交给网关转发没有网关就没法出本地子网。验证命令display ip interface brief这个命令会列出所有三层接口的IP地址和状态重点看Vlanif10和Vlanif20的Status和Protocol是否都是Up。如果Protocol显示Down说明对应VLAN下没有Up的二层端口回去查端口配置。然后可以在交换机上直接ping PCping 192.168.10.10 ping 192.168.20.10最后在PC上互ping能通就说明VLAN间路由已经生效。3.3 跨厂商对比与常见误区华为的VLANIF和思科的SVI、H3C的VLAN接口在原理上完全一样只是命令措辞不同。华为是interface Vlanif10思科是interface Vlan10H3C是interface Vlan-interface10。如果你平时主要玩思科模拟器切到华为设备后第一个要记住的就是VLANIF的写法别把Vlanif写成Vlan命令都敲不进去。实操中还有几个容易踩的坑第一忘记创建VLAN就直接敲interface Vlanif10华为会报错提示VLAN不存在。必须先vlan batch 10或者vlan 10创建VLAN再进VLANIF。第二VLANIF配了IP但状态一直Down。这种情况多半是VLAN下没有物理端口或者物理端口没有划入该VLAN。排查顺序是先display vlan 10查看该VLAN下的端口列表再确认端口是否Up。第三PC能ping通网关但ping不通另一个VLAN的PC。这种九成是VLANIF网段掩码配错了或者PC的IP/网关不在同一子网。用display ip routing-table看路由表如果192.168.20.0/24在路由表里是直连路由说明交换机侧没问题问题在PC侧。VLANIF性能好、配置简单所以它是绝大多数场景的首选。但有三层口直连需求的场景VLANIF就排不上用场了这就是下面要说的第三种方式。4. 方式三三层物理口 / 三层聚合口直连高带宽与互联场景4.1 什么场景需要放弃VLANIFVLANIF看起来万能但有些场景它并不适用。比如交换机上联防火墙或核心路由器这时候两端都是三层设备互联口只需要一个IP地址不需要在链路上跑VLAN直接用物理三层口配一个互联地址即可。又比如两台三层交换机之间做跨设备链路聚合用Eth-Trunk承载三层流量这时候也需要把Eth-Trunk接口配置成三层口。另外还有一类场景某些设备上VLANIF数量太多会影响性能或管理复杂度。比如一个接入交换机上每个VLAN都需要一个网关但VLAN数量几百个如果全部依赖VLANIF配置量会非常大。有些网络设计会选择把多个VLAN终结在不同的三层物理口上方便做策略路由或QoS策略绑定不过这种情况相对少见多数还是用VLANIF。4.2 配置示例单物理三层口和Eth-Trunk华为S系列盒式交换机上端口默认是二层模式要想让一个端口变成三层路由口必须执行undo portswitch。这一步非常容易忽略因为很多从思科转过来的朋友习惯了“接口直接配IP”的操作在华为设备上直接敲ip address会报错先切换模式就对了。三层物理口配置示例一台交换机用GigabitEthernet0/0/1连接防火墙interface GigabitEthernet0/0/1 undo portswitch ip address 192.168.100.1 255.255.255.252这里互联地址用了30位掩码2个可用IP一个给交换机一个给防火墙这是设备间互联的标准做法。注意undo portswitch之后这个端口就不再参与二层交换不能再把它划入某个VLAN了。如果需要高带宽互联可以把多个物理口捆成Eth-Trunk。先创建Eth-Trunk再切换为三层模式然后把物理口加入# 创建Eth-Trunk并切换为三层口 interface Eth-Trunk1 undo portswitch ip address 192.168.100.2 255.255.255.252 # 成员口加入Eth-Trunk interface GigabitEthernet0/0/1 eth-trunk 1 interface GigabitEthernet0/0/2 eth-trunk 1这里有个细节成员口加入Eth-Trunk之后成员口的二层/三层属性会跟随Eth-Trunk接口不需要在每个成员口上单独敲undo portswitch但前提是Eth-Trunk接口本身已经切换为三层模式。如果先创建Eth-Trunk并配了IP再加成员口成员口会自动继承三层属性。有些版本在成员口上还会提示“该接口将被加入Eth-Trunk原有配置将失效”正常确认即可。验证三层口状态display ip interface brief看到GigabitEthernet0/0/1的Type显示为Ethernet而不是Switch说明端口已经是三层口。Eth-Trunk1的Status为Up说明成员链路正常。然后通过互联地址互ping验证连通性。4.3 第三种方式的选型建议物理三层口和Eth-Trunk本质上就是把交换机当成一台路由器来用。什么情况下优先考虑这种方式交换机与防火墙、路由器、服务器直连链路不需要跑VLAN配置一个互联IP就够。两台三层设备之间需要多条链路捆绑增加带宽和链路冗余优先使用三层Eth-Trunk。核心交换机与汇聚交换机之间跑三层路由协议如OSPF三层口作为协议互联口。需要注意的是一旦把端口切成三层口这个端口就不再属于任何VLAN也不会透传二层流量。如果这个端口后面还要接PC或二层交换机就不能这么切想清楚需求再动手。5. 实操避坑与连通性故障排查5.1 三个典型的“配了但通不了”的坑我接手过的运维工单里VLAN间路由不通的原因翻来覆去就那么几个大多不是协议问题而是操作细节问题。第一个坑华为单臂路由子接口没开ARP广播。华为路由器以及部分交换机的子接口在配置了dot1q termination vid和IP之后默认不处理来自该接口的ARP广播请求。PC发ARP找网关网关不回应于是ping一直超时。症状很典型PC能ping通自己能ping通同VLAN设备但ping网关不通。解决办法就是在子接口视图下补一句arp broadcast enable。这个坑我在模拟器上复现过无数次每次都能精准踩中建议所有用华为设备做单臂路由的朋友都记住。第二个坑交换机Trunk端口没有放行对应VLAN或者access端口的PVID搞错了。比如Trunk只放行了VLAN 10没有放行VLAN 20那VLAN 20的流量到了路由器子接口标签可能根本发不出去。再比如access端口port default vlan配错PC被划到了错误的VLAN导致IP和VLAN对不上。排查时用display vlan看端口归属用display port vlan看Trunk放行情况一目了然。第三个坑VLANIF配好后PC能ping通网关但跨VLAN访问不通。这种一般不是交换机问题而是PC网关没有生效。某些PC有多个网卡或启用了防火墙会干扰路由选择。我在客户现场遇到过一次PC上装了虚拟网卡系统路由表把去往另一个网段的流量交给了错误的网卡导致包根本没到交换机。直接在命令行route print查看路由表禁用多余网卡即可。5.2 排错命令速查表网络排错最忌讳凭感觉改配置必须按逻辑一步步排查。我一般按这个顺序来排查步骤命令结论依据查看VLAN是否存在及端口归属display vlan确认VLAN和端口映射正确查看三层接口状态display ip interface briefStatus和Protocol必须都为Up查看路由表display ip routing-table各VLAN网段必须是直连路由查看ARP表display arp网关IP能解析到PC的MAC查看MAC表display mac-address二层转发路径是否正确从交换机ping PCping 192.168.10.10验证三层接口到PC是否连通从PC ping网关ping 192.168.10.1验证PC到网关链路是否通如果PC ping网关不通先查PC的IP、掩码、网关有没有配对再查交换机到PC的端口VLAN最后查VLANIF状态。如果PC能ping通网关但跨VLAN不通直接在交换机上用不同的源地址ping对端PC例如ping -a 192.168.10.1 192.168.20.10这样可以验证交换机自身能否路由到目标网段能通说明问题大概率在PC侧不能通则检查路由表和对端VLANIF状态。5.3 常见问题速查与最终选型建议我整理了VLAN间路由最常见的几类问题方便直接对照问题现象可能原因解决办法VLANIF Protocol DownVLAN下没有Up的二层端口检查接入端口是否划入VLAN并物理UpPC ping不通网关子接口缺ARP广播单臂路由场景进入子接口执行arp broadcast enablePC ping不通网关PC与网关不在同一子网检查IP和掩码确保和网关同网段能ping通网关但跨VLAN不通PC路由表异常或防火墙拦截查PCroute print禁用多余网卡或关防火墙Trunk链路数据不通Trunk未放行对应VLANport trunk allow-pass vlan补放行端口敲不了IP端口是二层模式执行undo portswitch切换三层Eth-Trunk成员口加入失败成员口已有配置或类型不匹配清空成员口配置确保加入前接口为默认状态最后聊一聊选型。我个人给朋友的建议很简单不管规模大小只要预算允许内部VLAN互通优先用三层交换机的VLANIF方案实在只有二层交换机和路由器再考虑单臂路由需要和设备互联、做高带宽链路捆绑用三层物理口或Eth-Trunk。三种方式并不互斥经常能在同一个网络里共存核心交换上跑VLANIF上联防火墙用三层口主干链路做Eth-Trunk这才是真实生产环境的常态。对新手而言三种方式都值得在模拟器上亲手敲一遍。我见过太多人只背命令不关心原理结果换个拓扑就抓瞎。VLAN间路由的核心无非是三层设备要有一个属于该VLAN的网关地址无论这个地址是配在子接口、VLANIF还是物理端口上思路都是相通的。把原理想透了命令只是顺手的事。