最近处理一个办公网需求,老板的原话是:“财务和研发这两个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 30,VLAN 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最粗暴,一个端口只属于一个VLAN;trunk用于交换机或路由设备之间,允许多个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/24 | 192.168.10.1 |
| VLAN 20 | 研发 | 192.168.20.0/24 | 192.168.20.1 |
| VLAN 30 | 访客 | 192.168.30.0/24 | 不建网关 |
终端位置:
- PC-A接G0/0/1,属于VLAN 10;
- PC-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,就用两个IP:
- 192.168.10.100/24;
- 192.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 30:
interface 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应该显示:
- 端口类型:hybrid;
- PVID:10;
- Untagged VLAN:10、20;
- Tagged 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、防火墙策略一起收口。先跑通小样例,再整体验收,比一次性把所有端口都配上要稳得多。