多 VLAN 跨路由组网这个题目,看着像是认证教材里的标准实验,但真正在设备上从头到尾敲一遍配置、抓一遍包、再回头梳理协议行为,你会发现很多“理所当然”的结论其实经不起推敲。比如同一台交换机上两个 VLAN 明明都配了网关,可终端就是 ping 不通;比如 trunk 口明明放通了所有 VLAN,可某些网段就是不通;再比如单臂路由和三层交换都能实现 VLAN 间路由,但抓包看到的 ARP 行为完全不一样。这篇文章不绕弯子,直接把我做华为多 VLAN 跨路由组网实验的完整过程、配置命令、验证结果和协议层面的思考整理出来,实验基于 VRP 平台,用 eNSP 模拟器完成,思路和真机一致,可以照着敲。
适合谁看?刚学完 VLAN 基础、准备啃 VLAN 间路由和三层交换的人;被“trunk 口 PVID”坑过的人;还有那些想在模拟器里把抓包、排错、路由表分析一次做透的人。我会尽量把每一步为什么这么做讲清楚,把排障时看哪些字段也写清楚。
1. 实验需求与整体拓扑设计:别急着敲命令,先想清楚数据流怎么走
做网络实验最容易犯的毛病就是一上来就配 IP、配 VLAN,敲完发现不通,然后开始瞎猜。我这次刻意先把需求拆开,把拓扑画明白,把地址规划写在纸上,再动手配。
1.1 需求拆解:两层交换与三层互通的结合点
实验要解决两个层面的问题:
- 二层层面:同一台交换机(或跨交换机)上多个 VLAN 的隔离与透传。VLAN 10 和 VLAN 20 的终端不能直接二层互通,这是 VLAN 隔离广播域的基本诉求。
- 三层层面:VLAN 10、VLAN 20、VLAN 30 三个网段之间需要能够互相访问,也就是 VLAN 间路由。核心问题是:网关放在哪儿?用单臂路由还是三层交换机?
我把这两个问题放在同一个拓扑里解决,既包含纯二层链路设计,又包含三层网关终结。这样做完一个实验,既能看清 VLAN 在接入链路上的行为,也能看清路由设备如何处理来自不同 VLAN 的流量。
1.2 拓扑与地址规划:给每个接口一个明确身份
拓扑设计如下:
- LSW1 作为二层接入交换机,下挂两个终端:PC1 属于 VLAN 10,PC2 属于 VLAN 20。两个终端分别使用独立的接入端口,互不打标签。
- LSW1 通过一个 trunk 上行口连接 LSW2。这个 trunk 链路需要放通 VLAN 10 和 VLAN 20。
- LSW2 同时充当三层交换设备:它上面创建 VLANIF 10 和 VLANIF 20 作为网关,并连接一台 PC3(VLAN 30),用于验证跨 VLAN 的三层互通。
地址规划如下:
| 设备 | 接口/所属 VLAN | IP 地址 | 网关 |
|---|---|---|---|
| PC1 | VLAN 10 | 192.168.10.10/24 | 192.168.10.1 |
| PC2 | VLAN 20 | 192.168.20.10/24 | 192.168.20.1 |
| PC3 | VLAN 30 | 192.168.30.10/24 | 192.168.30.1 |
| LSW2 | VLANIF 10 | 192.168.10.1/24 | — |
| LSW2 | VLANIF 20 | 192.168.20.1/24 | — |
| LSW2 | VLANIF 30 | 192.168.30.1/24 | — |
这样的结构,LSW1 只做二层转发,LSW2 既做二层(透传来自 LSW1 的 VLAN 帧)又做三层(终结 VLAN 并路由)。如果后面想验证“分层网关”或“网关漂移”,还可以在这个基础上扩展,但本次实验先聚焦基础。
1.3 数据流预判:在配置之前先画出通信路径
我在动手前把三条典型流量路径写在纸上:
- PC1 → PC2:PC1 发现目的 IP(192.168.20.10)不在本网段,于是将报文交给网关 192.168.10.1。这里有个关键细节:PC1 必须先通过 ARP 请求解析网关 IP 对应的 MAC,而网关 MAC 来自 LSW2 的 VLANIF 10 接口。随后报文被 LSW2 三层转发到 VLAN 20 的网关,再通过 ARP 解析 PC2 的 MAC,最后交付。
- PC1 → PC3:同样先到网关,再由 LSW2 根据路由表转发到 VLANIF 30,PC3 的网关就是 LSW2 的 VLANIF 30,整个过程发生在 LSW2 内部,不再经过 LSW1。
- PC1 → 网关:这是最基础的连通性验证,能通说明二层链路和 VLAN 终结没问题;这一步不通,后面跨网段必然失败。
预先画出这条路径,后面排查问题时就有了一个“应该通”的基线。实际排查中,我就是靠这个基线把问题定位在二层链路还是三层转发的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 二层链路搭建:access、trunk 与 PVID 的那些坑
二层链路是整个实验的地基。很多初学者在这块出问题,不是不会配 access 和 trunk,而是不理解一个端口在某个 VLAN 下“打不打标签”的本质。
2.1 接入端口用 access:为什么边缘口不要用 trunk
PC 和交换机之间的链路上只有一个 VLAN,所以端口类型选 access 最合适。access 口干两件事:收到不带标签的帧时,打上该端口 PVID(默认就是 VLAN 1,需要改成对应 VLAN)对应的 VLAN 标签;发送帧时剥离 VLAN 标签,让终端看到原始的以太网帧。
有些初学者为了让“以后扩展方便”,在 PC 口上配 trunk。这里有两个问题:一是很多终端的网卡驱动对 802.1Q 标签支持不好,会出现能协商但收不到数据的情况;二是 trunk 口默认放通所有 VLAN,如果这个口被误接了一台交换机,会意外扩大二层域。接入层老老实实配 access,把 untagged 流量收进来,是网络工程里最稳的写法。
LSW1 的接入配置如下:
code复制<LSW1> system-view
[LSW1] vlan batch 10 20
[LSW1] interface GigabitEthernet0/0/1
[LSW1-GigabitEthernet0/0/1] port link-type access
[LSW1-GigabitEthernet0/0/1] port default vlan 10
[LSW1-GigabitEthernet0/0/1] quit
[LSW1] interface GigabitEthernet0/0/2
[LSW1-GigabitEthernet0/0/2] port link-type access
[LSW1-GigabitEthernet0/0/2] port default vlan 20
[LSW1-GigabitEthernet0/0/2] quit
2.2 trunk 口的 PVID 选择:到底该不该改成默认 VLAN 以外的值
上联口要承载多个 VLAN 的帧,所以必须配 trunk。这里最关键的坑就是 PVID。
华为交换机上,trunk 口的默认 PVID 是 VLAN 1。在 trunk 链路上,如果对端交换机收到一个不带 VLAN 标签的帧,就会认为它属于接收端口的 PVID。而在真正传输时,VLAN 10 的帧带着 802.1Q 标签走 trunk,VLAN 20 的帧也带着标签走 trunk——这两个都没问题。
但问题出在当 trunk 口的 PVID 仍然为 VLAN 1,而实际上链路两端都没有 VLAN 1 的数据流量时,链路中传输的 VLAN 10 和 VLAN 20 帧是不受影响的;可一旦某个帧丢了标签(比如某台设备把 VLAN 10 的 access 口配错成了 trunk,或是一些特殊抓包场景),对端就会把它当成 VLAN 1 的帧,于是直接进 VLAN 1,导致“明明配置了放通 VLAN 10,却还是不通”的诡异现象。
我在实验中把 LSW1 上联口的 PVID 保持为 VLAN 1,同时用 port trunk allow-pass vlan 10 20 放通对应 VLAN。这种做法在标准组网中没有任何问题,反而是新
