华为交换机Hybrid端口实战:实现VLAN 10与20互通,隔离VLAN 30
最近处理一个办公网需求老板的原话是“财务和研发这两个VLAN需要互通但其他VLAN别放进来。”这个需求听起来不大真做的时候却很容易踩坑。如果只在华为交换机上创建VLANIF 10和VLANIF 20默认路由会放行所有VLAN之间的三层转发如果在接入端口用trunk allow-pass vlan all更会把所有VLAN的二层广播域都打通。最干净的做法是结合hybrid端口的精确放行和VLANIF三层控制在同一个物理链路上只让指定的VLAN通过其他VLAN在二层直接隔离三层也不建对应网关。这篇文章就以“VLAN 10和VLAN 20互通VLAN 30不参与”为案例把hybrid的原理、配置、验证和实际会踩的坑完整拆一遍。不管你是刚接触华为交换机的网工还是已经在维护办公网的老手都可以照着复现重点是搞清楚“到底什么时候该用hybrid什么时候该用trunk”。1. 先看懂老板这句话二层放行和三层互通是两件事很多人拿到这个需求后第一反应是去配VLANIF因为两个VLAN要互通必须有路由。这个方向没错但只做一半。老板说不让全通意味着你还要回答另一个问题其他VLAN是不是也默认能通如果只创建VLANIF 10和VLANIF 20不创建VLANIF 30VLAN 30在三层天然不可达这算满足了一大半。但如果接入端口把VLAN 30也放行到某个共同设备上那VLAN 30依然可能在二层触达服务器、打印机等共享资源。1.1 只配VLANIF为什么容易让所有VLAN全通华为交换机上创建了VLANIF接口之后只要接口状态是Up并且配置了不同网段的IP设备就会自动产生直连路由。换句话说VLAN 10和VLAN 20之间能互访VLAN 20和VLAN 30之间也能互访除非你手动限制。问题就出在这里你不会只创建两个VLANIF就收手项目里通常为了管理方便会把管理VLAN、设备VLAN都配上。如果管理VLAN是VLAN 99操作时顺手创建一个VLANIF 99那管理网段也进了路由表。老板要的是“财务和研发通”结果财务能访问管理网段研发也能访问管理网段表面看问题不大但安全边界就没了。所以我一般会把需求拆成两层两层互访由VLANIF和路由策略控制如果没有特殊要求可以只建需要互通的VLANIF。二层放行某个物理端口、某一根网线、某一台服务器上允许哪些VLAN的帧经过这个用端口类型控制。hybrid解决的更多是第二层问题同一个物理端口只接收和转发指定的几个VLAN而不是放行所有VLAN。1.2 hybrid在这个需求里到底卡在哪个位置你可以这样理解VLANIF是三层的大门端口类型是二层的门禁。hybrid可以精确指定这个物理口允许哪些VLAN进入从端口出去时哪些VLAN的帧保留tag哪些VLAN的帧剥掉tag后再发送。比如在服务器接口上配置hybrid只放行VLAN 10和VLAN 20那么VLAN 30的帧在进入这个端口时就被丢掉了。即使VLAN 30的三层网关存在也无法通过这台服务器所在的物理链路去访问服务器。这样二级门禁和三层层叠起来才能真正做到“两个VLAN互通但不是全通”。所以开篇结论放这里多VLAN互访的需求不要指望一个命令解决所有问题。通常需要“VLANIF 路由策略 端口类型”三件套配合。hybrid负责把端口级别的VLAN放行范围收住这一步往往是最容易漏的。2. hybrid端口和access、trunk的核心区别华为交换机的端口类型有三种access、trunk、hybrid。access最粗暴一个端口只属于一个VLANtrunk用于交换机或路由设备之间允许多个VLAN通过但对tag的处理不够灵活hybrid可以同时指定多个VLAN带tag或不带tag通过这是它最大的价值。2.1 收到一个数据帧时hybrid端口怎么判断hybrid端口收到一个数据帧分两种情况无tag帧先打上该端口的PVID然后检查这个PVID对应的VLAN是否在允许通过的VLAN列表里。如果在接收如果不在丢弃。有tag帧直接检查VLAN tag是否在允许通过的列表里。如果该VLAN被允许接收否则丢弃。所以“允许通过的VLAN列表”是硬条件。我们常说的port hybrid untagged vlan和port hybrid tagged vlan本质都是往允许列表里加VLAN只是发送时的处理方式不同。2.2 从端口发出时untagged和tagged分别管什么端口从自己转发表中找到一个帧准备从hybrid端口发出去时会看这个帧所属的VLAN如果该VLAN在untagged列表中就删除VLAN tag变成纯以太网帧再发出去。如果该VLAN在tagged列表中就保留VLAN tag原样发出去。如果该VLAN两边列表里都没有不转发。这就是hybrid最灵活的地方。比如一个服务器网卡不支持802.1Q只能认无tag帧那你就可以把VLAN 10和VLAN 20都加进untagged列表服务器不用配置虚拟子接口也能同时接两个VLAN的流量。2.3 为什么trunk做不到的细节hybrid可以做到trunk端口也可以允许多个VLAN通过也有PVID概念。华为trunk默认对PVID所在的VLAN剥tag转发其他VLAN带tag转发。问题是trunk只能有一个PVID也就是只能有一个VLAN被剥tag。如果对端是一台傻瓜交换机它完全不认识VLAN tag你希望VLAN 10和VLAN 20都以untagged方式送过去trunk做不到。hybrid没这个限制。你可以在同一个物理端口上把VLAN 10、VLAN 20都设为untagged把VLAN 30设为tagged或者干脆不允许VLAN 30通过。看起来就是“多个VLAN共用同一个物理口但到达对端时有的保留tag有的不保留”完全按业务需要来。注意华为交换机很多端口默认就是hybrid类型默认PVID是VLAN 1默认允许VLAN 1 untagged通过。所以实际配置时不一定非要先打port link-type hybrid但显式写出来更清晰。3. 实战案例让VLAN 10和VLAN 20互通但VLAN 30不行下面用一个能直接复现的案例场景把配置命令和思路串起来。设备用华为S系列交换机模型不限。eNSP模拟器上也可以按同样的配置跑通。3.1 组网结构和地址规划假设有一台核心交换机接了三个业务网段VLAN用途网段网关VLAN 10财务192.168.10.0/24192.168.10.1VLAN 20研发192.168.20.0/24192.168.20.1VLAN 30访客192.168.30.0/24不建网关终端位置PC-A接G0/0/1属于VLAN 10PC-B接G0/0/2属于VLAN 20服务器Server接G0/0/3要同时能被VLAN 10和VLAN 20访问但VLAN 30不能访问它PC-C接G0/0/4属于VLAN 30。服务器网卡不做VLAN子接口不启用801.Q就用两个IP192.168.10.100/24192.168.20.100/24。3.2 交换机VLAN和三层接口配置先创建VLAN再给VLAN 10和VLAN 20创建网关接口。system-view vlan batch 10 20 30创建VLANIF作为两个业务VLAN的网关interface Vlanif10 ip address 192.168.10.1 255.255.255.0 quit interface Vlanif20 ip address 192.168.20.1 255.255.255.0 quitVLAN 30我故意不创建VLANIF。这样VLAN 30里的终端即使配置了192.168.30.1交换机上也没有这个网关地址无法完成三层转发。这是“不让全通”的第一道闸门。如果业务上需要VLAN 30能上外网但就是不能访问内网那就不要在这里放行把VLAN 30的网关放到上游防火墙由防火墙策略做限制。这里只演示不建VLANIF的最简单方式。3.3 服务器端口用hybrid精确放行交换机接服务器的接口G0/0/3配置成hybrid只放行VLAN 10和VLAN 20并且以untagged方式发出去因为服务器网卡不识别VLAN tag。interface GigabitEthernet0/0/3 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 20 quit这条配置拆开看port link-type hybrid把端口类型显式设为hybrid。port hybrid pvid vlan 10从该端口进来、不带tag的帧打上VLAN 10的标签。比如服务器发出去的无tag帧交换机收到后当VLAN 10处理。port hybrid untagged vlan 10 20该端口允许VLAN 10和VLAN 20通过并且从端口向服务器方向发出时去掉VLAN tag。VLAN 30没有出现在允许列表里所以任何从交换机核心侧发往VLAN 30的帧在G0/0/3这个口不会出去。反过来如果VLAN 30的终端想访问服务器三层过不来二层在这个端口也被拒了。PC-A和PC-B的接入端口用access就行interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quitPC-C接G0/0/4同样用access划分到VLAN 30interface GigabitEthernet0/0/4 port link-type access port default vlan 30 quit3.4 严格模式用ACL掐住三层互访如果只是“两个VLAN互通其他不通”不建VLANIF 30已经够了。但有的项目里VLAN 30的网关在别的设备上或者以后运维人员可能随手创建VLANIF 30那最好再加一道明确的ACL策略只允许VLAN 10和VLAN 20互访。acl number 3000 rule 5 permit ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 rule 10 permit ip source 192.168.20.0 0.0.0.255 destination 192.168.10.0 0.0.0.255 rule 15 deny ip把ACL应用到VLANIF接口的入方向interface Vlanif10 traffic-filter inbound acl 3000 quit interface Vlanif20 traffic-filter inbound acl 3000 quit这样从VLAN 10进入三层、目的不是VLAN 20网段的流量会被拒绝从VLAN 20进入三层、目的不是VLAN 10网段的流量也会被拒绝。同一VLAN内部如果走二层转发不会经过这个过滤所以影响不大。但如果你环境里有同网段但需要跨三层转发的特殊情况要自己再补放行规则。注意ACL规则是按顺序匹配的。实际生产网络里千万别只抄这两条permit要先把该放行的所有源目网段加全再写deny ip。不然后面加新业务会很难排查。4. 配置完了怎么验证配置完成后不要急着上线先在命令行里确认端口和VLAN状态再做业务测试。4.1 看VLAN和端口对应关系display vlan这条命令会列出交换机上所有VLAN以及每个VLAN包含的端口。确认VLAN 10、VLAN 20、VLAN 30都在并且端口归属正确。display vlan brief这条比较简洁适合快速看VLAN ID、状态和端口数量。display port vlan这条可以看到每个端口是access、trunk还是hybrid以及PVID和允许通过的VLAN情况。想单独看某个接口可以加上接口名display port vlan interface GigabitEthernet0/0/3正常状态下G0/0/3应该显示端口类型hybridPVID10Untagged VLAN10、20Tagged VLAN无。4.2 看hybrid端口的实际状态display interface GigabitEthernet0/0/3在显示信息里找PVID、Link Type这些字段。华为不同型号显示格式略有差异但一般都能看到类似以下信息Port Link Type: hybrid PVID: 10 VLAN Passing: 10,20 VLAN Passing (UNtagged): 10,20如果看到VLAN Passing里出现了30说明配置没有生效或者接口下面还有其他配置把VLAN 30放行了。还可以查看当前接口完整配置display current-configuration interface GigabitEthernet0/0/34.3 业务验证顺序验证建议按这个顺序走PC-A ping PC-B的网关192.168.10.1确保本地网关通。PC-B ping网关192.168.20.1确保本地网关通。PC-A ping 192.168.20.10验证VLAN 10到VLAN 20三层互通。PC-B ping 192.168.10.10验证反向三层互通。PC-A ping服务器192.168.10.100验证同VLAN访问服务器。PC-B ping服务器192.168.20.100验证另一个VLAN访问服务器。PC-C ping服务器192.168.10.100或192.168.20.100应该不通。如果PC-A或PC-B访问服务器不通先看ARP能不能学到。在交换机上执行display arp | include 192.168.10.100 display arp | include 192.168.20.100如果服务器两个IP都能学到ARP说明二层没问题。学不到ARP重点检查G0/0/3的untagged列表里有没有对应VLAN服务器网卡IP是否配置正确。5. 实际落地会踩的坑和排查顺序这一类组网看起来简单落地时坑点不少。下面几个问题是我自己排查时经常遇到的。5.1 PVID设置不对帧被当成VLAN 1处理华为交换机端口默认PVID是VLAN 1。如果hybrid接口只配置了untagged vlan 10 20忘记配置port hybrid pvid vlan 10那么从服务器方向进来的无tag帧会被打上VLAN 1的标签。交换机上VLAN 1默认允许通过但VLAN 1里没有服务器对应的网关结果PC-A和PC-B去ping服务器时交换机把帧当成VLAN 1去转发ARP永远学不到。排查顺序先display interface看PVID再看收到无tag帧方向的对端设备。一定要把PVID和untagged列表配合起来看PVID管接收方向无tag帧打哪个标签untagged列表管发送方向哪个VLAN剥标签。5.2 untagged和tagged配置反了这个坑通常出现在对端设备支持802.1Q的场景。比如服务器网卡其实支持VLAN你想让它分别处理VLAN 10和VLAN 20那就应该把G0/0/3上的VLAN 10和VLAN 20配成tagged服务器端做子接口。如果配成了untagged两个VLAN的帧到服务器时都没tag服务器无法区分。反过来如果服务器网卡不支持VLAN却配成了tagged服务器收到带802.1Q tag的帧大概率直接丢弃表现为能通一部分、不能通一部分或者完全不通。判断方法很直接对端设备不开VLAN子接口只配置普通IP用untagged对端设备开VLAN子接口或下一跳是路由器、防火墙用tagged不确定时抓包看帧里有没有0x8100。5.3 服务器或傻瓜交换机只认untagged时广播域会合并hybrid把多个VLAN都配成untagged后在这台服务器或傻瓜交换机看来这些VLAN的帧都是“普通二层帧”。它不会区分VLAN 10和VLAN 20而是当作同一个广播域在处理。如果下面只接一台服务器风险可控。如果下面接的是一台傻瓜交换机而傻瓜交换机下面又接了终端那么VLAN 10和VLAN 20的广播、未知单播、ARP全都混在一起了。此时VLAN 10和VLAN 20之间的二层隔离在傻瓜交换机下已经失效。这不是配置错误是hybrid这种用法的固有边界。真出现这种需求更合适的方案是使用基于IP子网或MAC的VLAN划分让傻瓜交换机上行到华为交换机时交换机能根据IP子网或MAC重新打上VLAN标签。5.4 时序问题先把VLAN 30放进允许列表最后又忘了删实际操作中很多人调试时为了方便会先临时把VLAN 30 untagged加到接口下测试完没删就带着上线了。这类问题在验收时最容易漏。排查这类历史配置建议在所有hybrid端口上统一执行display port vlan人工确认每个端口允许的VLAN是否和业务一致。不要只看某一段配置片段要看完整的端口VLAN放行情况。6. 什么场景该用hybrid什么场景该换方案hybrid很好用但不要把它当成万能钥匙。有些场景用它反而会把问题变复杂。6.1 hybrid最适合的场景清单单台服务器、单台终端不支持802.1Q但需要同时接入多个VLAN。下联一台傻瓜交换机多个VLAN的终端都接在这台傻瓜交换机下需要交换机侧做VLAN重新标记。同一个物理上联口只需要放行部分VLAN其他VLAN不让过又不想创建一堆子接口。需要基于IP子网或MAC地址划分VLAN时接入端口用hybrid配合VLAN关联策略。这些场景里hybrid多出“多个VLAN untagged”的能力是trunk做不到或做起来很别扭的。6.2 什么时候老老实实换trunk或换ACL如果两台交换机之间要跑大量VLAN互联口优先用trunk不要用hybrid。trunk语义更清晰跨厂商兼容性更好。如果核心目标是“限制哪些网段能互访”优先用ACL或防火墙策略而不是靠端口类型去堵。因为访问控制最终发生在三层只靠二层hybrid限制端口遇到多路径组网或上行链路切换容易漏。如果交换机要对接虚拟化平台比如K8s节点、VMware虚拟交换机通常也是用trunk或虚拟交换机上的VLAN策略很少用hybrid。6.3 给两类读者的建议新手不要背命令先把三个问题想清楚端口PVID是谁发送到对端时哪些VLAN保留tag哪些VLAN不允许过。把这三个问题回答了hybrid配置其实不需要记。老手更要注意组网语义hybrid是端口级别的“二进门禁”不是安全策略替代品。业务上的“这两个VLAN通其他不通”最终还要靠VLANIF、ACL、防火墙策略一起收口。先跑通小样例再整体验收比一次性把所有端口都配上要稳得多。