VLAN 这个东西,概念听了无数遍,"隔离广播域"背得很熟,但真到交换机上敲命令还是会手抖。这次拿两台交换机 + 一台三层交换机做了个完整实验,把 access / trunk / hybrid 三种端口类型、单臂路由、以及最常见的几个"通不了"场景全部实操了一遍。
一、为什么需要 VLAN
一个二层网络就是一个广播域。机器一多,ARP 广播、DHCP 广播到处乱窜,网络又慢又不安全——最重要的是,所有部门都在同一个网段里,谁都能访问谁,财务的电脑和访客的手机在一个平面。
VLAN 的作用就是在二层把这个大网络切成几个互不可见的小网络。切完之后:
- 广播域变小,网络更干净;
- 不同 VLAN 之间默认不通,要通信必须走三层(路由器/三层交换机/防火墙),而三层设备正好可以挂 ACL 做管控;
- 部门调整网络时,改交换机端口配置就行,不用重新布线。
二、三个必须分清的概念
- PVID:端口的"本征 VLAN ID"。收到一个不带标签的帧时,交换机给它打上 PVID 的标签再转发。Access 口的 PVID 就是它所属的 VLAN。
- Tagged / Untagged:帧带不带 802.1Q 标签。交换机之间传的帧要带标签才知道属于哪个 VLAN;发给 PC 的帧必须剥掉标签,因为普通网卡不认识 802.1Q 帧。
- Native VLAN(本征 VLAN):Trunk 口上,不带标签的帧归到哪个 VLAN。两端 Native VLAN 不一致会导致 VLAN 间串流量,是个隐蔽的坑。
三、实验拓扑
[三层交换机 SW-Core]
Vlanif10: 192.168.10.1/24
Vlanif20: 192.168.20.1/24
| (Trunk, 放行 10/20)
|
[接入交换机 SW-Acc]
G0/1 → PC-A (VLAN 10)
G0/2 → PC-B (VLAN 20)目标:PC-A 和 PC-B 拿到各自网段的 IP,能 ping 通自己的网关,跨 VLAN 通过三层交换机互通。
四、Access 口:接终端
Access 口只属于一个 VLAN,进出都剥标签。
华为 / H3C:
[SW-Acc] vlan batch 10 20
[SW-Acc] interface GigabitEthernet 0/0/1
[SW-Acc-GigabitEthernet0/0/1] port link-type access
[SW-Acc-GigabitEthernet0/0/1] port default vlan 10
[SW-Acc-GigabitEthernet0/0/1] quit
[SW-Acc] interface GigabitEthernet 0/0/2
[SW-Acc-GigabitEthernet0/0/2] port link-type access
[SW-Acc-GigabitEthernet0/0/2] port default vlan 20思科:
SW(config)# vlan 10
SW(config-vlan)# name IT
SW(config)# interface GigabitEthernet0/1
SW(config-if)# switchport mode access
SW(config-if)# switchport access vlan 10注意:华为的 vlan batch 10 20 是批量建 VLAN,思科要一个一个 vlan 10 / vlan 20(或者在 vlan database 模式下批量)。另外思科的 VLAN 1 是默认 VLAN 且不能删除,华为的默认 VLAN 也是 1。
五、Trunk 口:交换机之间
Trunk 口允许多 VLAN 通过,靠标签区分。
华为:
[SW-Acc] interface GigabitEthernet 0/0/24
[SW-Acc-GigabitEthernet0/0/24] port link-type trunk
[SW-Acc-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20思科:
SW(config)# interface GigabitEthernet0/24
SW(config-if)# switchport mode trunk
SW(config-if)# switchport trunk allowed vlan 10,20
SW(config-if)# switchport trunk native vlan 99这里有个我实际踩到的坑:华为的 trunk 口默认只允许 VLAN 1 通过,必须显式 port trunk allow-pass vlan;而思科的 trunk 默认放行所有 VLAN。两台设备对接时如果不注意,会出现"配了 trunk 但 VLAN 20 就是不通"的情况——华为侧忘了放行 VLAN 20。
六、Hybrid 口:华为特有的灵活口
华为还有第三种端口类型 hybrid,可以指定某些 VLAN 带标签出、某些 VLAN 剥标签出。典型场景:
- IP 电话 + PC 串接(语音 VLAN 带标签给话机,数据 VLAN 剥标签给 PC);
- 一台服务器要同时属于多个 VLAN;
- 不同 VLAN 之间想二层互通(比如让所有 VLAN 都能访问同一台打印机)。
[SW] interface GigabitEthernet 0/0/5
[SW-GigabitEthernet0/0/5] port link-type hybrid
[SW-GigabitEthernet0/0/5] port hybrid pvid vlan 10
[SW-GigabitEthernet0/0/5] port hybrid untagged vlan 10 100
[SW-GigabitEthernet0/0/5] port hybrid tagged vlan 20上面这段的意思是:这个口进来的无标签帧归 VLAN 10;转发出去时 VLAN 10 和 100 剥标签,VLAN 20 带标签。
七、跨 VLAN 通信:两种做法
做法一:三层交换机做网关(推荐)
给每个 VLAN 建一个三层接口(华为叫 Vlanif,思科叫 SVI),配 IP 作为该 VLAN 的网关。
华为:
[SW-Core] interface Vlanif 10
[SW-Core-Vlanif10] ip address 192.168.10.1 255.255.255.0
[SW-Core] interface Vlanif 20
[SW-Core-Vlanif20] ip address 192.168.20.1 255.255.255.0思科:
SW(config)# ip routing
SW(config)# interface vlan 10
SW(config-if)# ip address 192.168.10.1 255.255.255.0
SW(config-if)# no shutdown思科别忘了 ip routing,三层交换机默认是二层模式,不开这条 SVI 起不来。华为的三层交换机则要先确认 Vlanif 接口是 up 的(需要有端口属于该 VLAN 且链路 up)。
做法二:单臂路由(路由器子接口)
没有三层交换机时,用一台路由器,一个物理口划多个子接口,每个子接口终结一个 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 24
[R1-GigabitEthernet0/0/0.10] arp broadcast enable思科:
R1(config)# interface GigabitEthernet0/0.10
R1(config-subif)# encapsulation dot1Q 10
R1(config-subif)# ip address 192.168.10.1 255.255.255.0华为这里有个坑:子接口必须敲 arp broadcast enable,否则 ARP 广播发不出去,PC 能 ping 通网关但业务会时通时断。我第一次配完发现能 ping 通网关但打不开网页,就是这个命令没敲。
八、验证命令
# 华为
display vlan
display port vlan
display interface Vlanif 10
display mac-address vlan 10
# 思科
show vlan brief
show interfaces trunk
show interfaces gigabitEthernet 0/1 switchport
show ip interface brief | include Vlan九、排错三板斧
- PC 拿不到 IP(DHCP 不通):先怀疑 trunk 没放行该 VLAN,或者 DHCP 服务器在别的 VLAN 但没配 DHCP Relay(
ip helper-address/ 华为的dhcp select relay)。 - 同 VLAN 内两台 PC 不通:查端口 PVID 是不是一致的、是不是一个配了 access 一个配了 trunk、以及两台 PC 是否真在同一个网段。
- 能 ping 通网关但跨 VLAN 不通:查三层接口有没有起来、有没有开路由、PC 的网关填对没有、以及防火墙/ACL 有没有拦。
还有个特别隐蔽的:Native VLAN 不一致。两台交换机 trunk 的 native VLAN 不同,VLAN 10 的流量可能被当成 VLAN 1 处理,表现为"网络时好时坏"。思科还会直接报 CDP 的 native VLAN mismatch 告警,华为要看日志。
十、和日常运维的结合
公司里 VLAN 和上网行为管理(我们用的是深信服 AC)是配合着来的:按部门划 VLAN,网关放在核心交换机或者 AC 上,然后在 AC 上针对不同网段做不同的上网策略(比如研发网段放行 GitHub,产线网段只放行 ERP)。所以 VLAN 划得清楚,后面的管控才有抓手——这也是我觉得运维必须把 VLAN 吃透的原因。
小结
一句话概括:接终端用 access,交换机互联用 trunk,多个 VLAN 要互通就交给三层。命令记不住没关系,把这三句话记牢,再记住华为和思科 trunk 默认放行策略的差异,剩下的查文档就行。下一篇把 AD、DNS、GPO 和虚拟化串起来,做一个完整的域环境实验。