实验:VLAN配置,这个题目看着简单,实际上把很多刚入门网络的朋友拦在门口。我接触网络工程这些年,带过不少新人做类似实验,发现真正卡住的往往不是命令行敲不敲得出来,而是想不明白端口为什么有那么多模式,VLAN和IP之间又是什么关系。这篇就用一个非常朴素的实验场景,从设计、配置到排错,把VLAN配置这件事完整走一遍。适合正在学网络基础、准备考认证、或者刚转行做运维的朋友,跟着敲一遍,再看明白每步在干什么,基本就能应付日常工作了。
整个实验我是在模拟环境里完成的,不需要真机也能做。你只要有一台能跑网络模拟软件电脑就够了,配置命令也都来自主流企业级交换机的命令行风格,真机上思路完全一致。下面从为什么要做VLAN开始讲。
1. 实验前必懂的三个为什么
1.1 为什么要做VLAN,VLAN到底解决了什么
先说一个很常见的场景:一台交换机下接了四十台电脑,所有人都在同一个二层网络里。表面上看大家互访很方便,实际上隐患不少。只要有一台电脑中了病毒、开了广播风暴,或者某个网卡异常,二层广播帧就会被交换机从所有端口转发出去,全网机器都能收到。设备多的时候,CPU光是处理无用的广播包就够忙了,真正有用的业务流量反而变慢。更让人头疼的是排错,你想查是哪台设备在广播,就要在交换机上一层层看MAC地址表,非常费劲。
VLAN解决的问题,简单说就是把一台物理交换机,在逻辑上切成多个独立的虚拟局域网。VLAN 10里的广播帧只会在VLAN 10的成员端口之间转发,不会跑到VLAN 20里去。这样广播域从一个大圈子变成几个小圈子。比如财务电脑在VLAN 20,行政电脑在VLAN 10,行政那边再有广播风暴,也影响不到财务。跨VLAN通信必须经过路由器或三层交换机,所以将来想加访问控制、限制谁访问谁,也都方便了。
我在实际项目里感受最深的还有安全隔离。如果一个办公室里有访客WiFi和员工WiFi,两个网段不放同一个VLAN,访客就算接了网线也没办法直接扫描员工电脑的共享资源。VLAN做的是二层隔离,真正的安全策略在三层设备上来落地,但没有VLAN这层隔离,后续策略根本没处下手。
1.2 本实验的拓扑设计与网段规划
很多人做VLAN实验只盯着命令,上来就create,结果做到一半发现拓扑对不上、IP乱成一团。我习惯先画一张简图,把设备、接口、VLAN、网段全部列清楚再动手。
这次实验我用两台交换机和四台PC:
- 交换机LSW1,连接PC1、PC2
- 交换机LSW2,连接PC3、PC4
- LSW1与LSW2之间用一条链路互联
VLAN规划如下:
- VLAN 10:办公网段,192.168.10.0/24,网关192.168.10.254
- VLAN 20:研发网段,192.168.20.0/24,网关192.168.20.254
PC地址分配表:
| 终端 | IP地址 | 子网掩码 | 所属VLAN | 网关 |
|---|---|---|---|---|
| PC1 | 192.168.10.1 | 255.255.255.0 | VLAN 10 | 192.168.10.254 |
| PC2 | 192.168.20.1 | 255.255.255.0 | VLAN 20 | 192.168.20.254 |
| PC3 | 192.168.10.2 | 255.255.255.0 | VLAN 10 | 192.168.10.254 |
| PC4 | 192.168.20.2 | 255.255.255.0 | VLAN 20 | 192.168.20.254 |
看到这里你可能会问,为什么不把PC1和PC3都划在VLAN10里,却要放到两台交换机上?这正是为了演示跨交换机的VLAN互通。只有一台交换机时,VLAN隔离很容易理解,但真实园区网不可能只靠一台设备,很多VLAN要跨交换机打通,这就涉及trunk链路,后面第4节专门讲。
网段规划上,我喜欢让VLAN ID和IP第三段对应上:VLAN 10配192.168.10.x,VLAN 20配192.168.20.x。这样以后看到一个IP,我大概就能猜出它在哪个VLAN,排查故障能少走很多弯路。
1.3 实验环境与设备准备
模拟环境最大的好处是可以随意折腾,不怕把设备配置弄坏。我用的是常见网络模拟软件,创建拓扑后选择实体设备,直接开机操作。如果你用真实交换机,要自己准备console线,连接方式其实一样。
操作前先确认几件事:
- 终端设备要先配置好IP和网关,不然VLAN划分得再好,后面的ping测试也没有意义
- 交换机之间互联的物理链路要先连通,接口状态要up
- 提前记下设备型号和系统版本,因为不同版本默认端口模式、命令表达可能有差别
我见过有人在模拟器里连了线,但线缆类型选错,接口一直不亮,白折腾半天。真机也要检查网线是否插对,别只看端口灯亮了就以为万事大吉。
2. 动手配置前先理解接口的两种身份
2.1 Access端口和Trunk端口:谁连接终端,谁连接交换机
端口模式这个概念,很多初学者第一次接触会绕晕。其实你只要记住一个判断标准:这个端口连接的是终端设备,还是另一台交换机。
连接PC、打印机这类终端,通常用access端口。access端口属于某一个固定VLAN,它收到PC发来的普通帧,会自动打上这个VLAN的标签;转发给PC时,又会把标签剥掉,让PC只看到没有VLAN信息的普通帧。PC完全不感知VLAN的存在,也不需要额外设置。
连接交换机与交换机之间,或者交换机与路由器(单臂路由场景),通常用trunk端口。trunk端口可以同时承载多个VLAN的数据,通过帧里的VLAN标签区分各VLAN流量。如果不打标签,接收端根本不知道这个帧属于哪个VLAN。
我打过一个比方:access端口像单人间宿舍的门禁,只有本宿舍的人能进;trunk端口像办公楼的公共通道,每个人胸前挂一张工牌(VLAN标签),保安看一眼工牌就放行到对应楼层。理解了这个模型,后面配置就不会乱。
实际工程里,接入层交换机下联PC的口一定是access,上联汇聚交换机的口一定是trunk。你只要按这个原则去规划,网就不会搭出太大问题。
2.2 802.1Q标签:Trunk链路里多出来的4个字节
Trunk能承载多个VLAN的帧,依赖的是IEEE 802.1Q协议。它是在标准以太网帧的源MAC地址和类型字段之间,插入了一个4字节的标签。标签里有12位的VLAN ID,也就是我们常说的VID,取值范围是0到4095,实际可用VLAN ID通常在1到4094之间。接收设备靠这个VID判断该帧属于哪个VLAN。
很多人在步骤里问我,背这个协议结构有什么用?说实话,工程上不需要你手写帧结构,但你至少要记住两个结论:
第一,同一根trunk链路上,不同VLAN的帧靠VID区分。所以两台交换机trunk上允许放行哪些VLAN,两端必须保持一致。
第二,不带标签的帧在trunk端口上会被划分到某个VLAN,这个VLAN叫Native VLAN,默认通常是VLAN 1。两端的Native VLAN不一致,就会出现数据画错VLAN的情况。这块细节等到排错部分再展开,先有个印象就行。
2.3 配置命令组合背后到底做了什么
为了让后面实验顺理成章,我先解释一下配置命令的生效逻辑。以创建VLAN并划端口为例:
system-view vlan 10 name office quit interface gigabitethernet0/0/1 port link-type access port default vlan 10这个过程中,第一段只是完成了全局VLAN表的创建,给VLAN 10起了个名字,但还没有任何一个端口属于VLAN 10。端口真正进入VLAN,是在进入接口视图之后才发生的。
第二段发生了两件事:把接口模式改成access,然后把端口默认VLAN改成10。这里要特别提醒,不要漏掉port link-type access这一行。有些设备端口默认可能是hybrid模式,直接设默认VLAN未必能按access特性工作,会造成VLAN隔离不彻底。用大白话说,先告诉端口“你是单人宿舍门禁”,再告诉它“你的宿舍是10号”。
理解了这两层,后面不管换什么厂商设备,你都能快速找到对应的两条命令,而不是死记硬背。
3. 单交换机VLAN配置全过程
3.1 创建VLAN与检查VLAN表
先在交换机LSW1上创建VLAN 10和VLAN 20:
system-view vlan batch 10 20vlan batch好处是一次创建多个,不用挨个进VLAN视图。如果需要给VLAN起名字,再单独进:
vlan 10 name office quit vlan 20 name research quit名字建议用业务含义,比如office、research、guest。不要用vlan10、vlan20这种没意义的名字。等你维护的设备多了,看到display vlan满屏数字会疯掉,业务名一眼就能看出来对应哪个部门。
创建之后用display vlan看表:
display vlan注意观察VLAN 10和20的状态,通常会是down,因为还没有接口加入。这个down不是故障,只是没有活跃端口。等你把端口划进去,VLAN状态会变成up。
3.2 把端口划入VLAN
在LSW1上,PC1接在0/0/1口,PC2接在0/0/2口。我们这样配置:
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 quit配完之后马上验证:
display port vlan这个命令能看出每个端口的类型和PVID。比如0/0/1显示type是access,PVID是10,说明这个端口归到了VLAN 10。如果显示PVID为空,或者端口类型还是hybrid,要回头检查命令是否生效、端口是否up。
这里的PVID很关键,它就是access端口默认VLAN的概念。数据帧进入端口时不带标签,端口就会给它打上PVID对应的标签。PVID设成10,这个口就在VLAN 10里没跑了。
3.3 验证连通性:ping不通也是有效结果
在单交换机阶段,我们来看看PC1和PC2之间的情况。PC1在VLAN 10,PC2在VLAN 20,虽然它们插在同一台交换机上,但二层被隔开了。而且PC1和PC2的IP也不在同一个网段,没有网关,根本没有三层转发通道。
所以实验里PC1 ping PC2,结果会是不通。这个“不通”恰恰验证了VLAN的隔离效果。如果这时候你看到通了,反而要吓一跳,说明哪里配置有问题。
想看得更细一点,可以在交换机上执行:
display mac-address你会发现PC1的MAC地址只被学习在VLAN 10对应的端口上,PC2的MAC只出现在VLAN 20的端口上。这意味着两台PC在二层眼里完全处于不同世界,交换机的转发数据库已经把两边隔离开了。
这里我多说一句,ping不通也要会看提示。如果提示是Destination host unreachable,说明源设备根本找不到出去的路径,多半是本机网关没配;如果提示Request timed out,说明报文发出去了,但对端没有响应,要往交换机、对端设备方向排查。后面排查环节还会细讲。
4. 跨交换机扩展:Trunk链路配置
4.1 两台交换机之间为什么必须走Trunk
如果只有单台交换机,access端口就能解决所有问题。但真实网络中一台交换机不可能把所有人接完,必然有汇聚层、接入层多级交换。这次实验里,PC1在LSW1上,PC3在LSW2上,两个设备都属于VLAN 10,我希望它们能互通,怎么办?
有人会想,两台交换机之间用网线直连不就行了吗?问题是,连接两台交换机的那个端口,如果设成access VLAN 10,那么VLAN 20的流量走不过去;如果设成access VLAN 20,VLAN 10又过不去。接两根线各跑一个VLAN,表面可以,但接口数量消耗大,也不利于以后扩容。
Trunk的出现就是为了解决这个痛点。一个trunk端口上可以同时承载VLAN 10、VLAN 20以及以后更多的VLAN,靠802.1Q标签来区分不同VLAN的流量。就像一条高速公路,上面跑不同目的地的车,车牌就是VLAN标签。
4.2 Trunk配置与PVID概念
在LSW1和LSW2的互联端口上,我分别使用0/0/24口,配置如下:
LSW1:
interface gigabitethernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 quitLSW2:
interface gigabitethernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 quit这段配置里,port link-type trunk把端口切换成trunk模式,allow-pass指定允许哪些VLAN走这条链路。注意,不同厂商默认行为可能不一样。有些设备trunk默认放行所有VLAN,有些则只放行VLAN 1。为了保险,我每次都会显式写上允许列表,不让它靠默认值过日子。
有设备还可能有VLAN封装类型的概念,比如早期设备默认trunk封装可能是其他格式,不是802.1Q。现代设备基本不需要手动指定,但老设备或者某些模拟器版本里还是要确认一下。如果两端封装不一致,trunk端口的协议状态就不会up。排查的时候用类似display interface的命令看端口信息,里面会出现trunk封装状态。
再来说PVID。trunk端口默认PVID是VLAN 1,它决定的是收到“无标签帧”时归到哪个VLAN。比如一个trunk端口上收到了一个没有打标签的帧,交换机会把它当作PVID对应的VLAN来处理。如果两端PVID不一致,无标签帧的归属就会出现错乱,导致数据跑错VLAN。实验里我把两端PVID都保持默认,网络上不要乱改。
4.3 常见中继不畅原因:封装、允许列表、Native VLAN
跨交换机VLAN通信不通,十有八九出在这几个地方:
| 问题类型 | 现象 | 排查思路 |
|---|---|---|
| trunk封装不一致 | 端口协议状态down或显示封装错误 | 两端都改成802.1Q |
| 允许列表不一致 | 部分VLAN能通,部分超时 | 对比两端的allow-pass列表 |
| Native VLAN不匹配 | 无标签帧出现在错误的VLAN里 | 统一两端PVID |
| 物理链路异常 | 端口一直是down | 检查连线、端口shutdown状态 |
我在一个模拟项目里踩过很典型的坑:LSW1与LSW2之间的物理线接好了,用display port vlan看,两边端口也都显示trunk,但PC1 ping PC3就是不通。最后才发现,LSW2上有个接口是LSW1连过来的,但我在LSW2上配置时输错了接口号,把trunk配在了隔壁闲置端口上。看起来都配了,实际链路根本没走trunk。
还有一个经验是,trunk端口不要手动把PVID改成其他VLAN,除非你很清楚自己在做什么。一旦两端PVID不相同,本来应该走VLAN 10的无标签帧被归到VLAN 20,业务静默中断,这种问题最难查。
5. 让VLAN间互通:VLAN间路由实操
5.1 二层VLAN规划完了,业务还是不通
完成上面步骤后,同一个VLAN跨交换机可以通了。PC1能ping通PC3,PC2能ping通PC4。但是PC1(VLAN 10)想访问PC4(VLAN 20)的共享打印机,照样不通。
原因很简单:VLAN隔离的是二层广播域,不同VLAN是不同网段,二层交换机不负责也不允许跨VLAN转发。想要跨VLAN通信,必须有三层路由能力。这就像同一个小区里不同楼道之间是分开的,要去别的楼道,得从小区大门(网关)出去绕一圈(路由),而不是直接在楼道内穿墙。
所以在网络设计里,每个VLAN都要有一个网关地址。PC的IP配置里已经写了网关192.168.10.254、192.168.20.254,但光写了IP还不行,交换机或路由器上必须真实存在这个三层接口。
5.2 单臂路由:一根线跑多个网段
最经典的VLAN间路由方案是单臂路由。思路是把路由器的一个物理接口,通过子接口的方式拆成多个逻辑接口,每个子接口对应一个VLAN,并且都打上对应的802.1Q标签。
拓扑调整一下:路由器用0/0/0口连接交换机的一个trunk口。在路由器上配置:
interface gigabitethernet0/0/0.10 encapsulation dot1q vlan 10 ip address 192.168.10.254 255.255.255.0 quit interface gigabitethernet0/0/0.20 encapsulation dot1q vlan 20 ip address 192.168.20.254 255.255.255.0 quitencapsulation dot1q vlan 10这行非常关键。它告诉路由器,这个子接口处理的是VLAN 10的带标签帧。收到VLAN 10的帧,路由器剥掉标签后按IP路由处理;要发往VLAN 10的帧,路由器会打上VLAN 10的标签从物理口送出去。
同时交换机连接路由器的端口必须改成trunk,允许VLAN 10和20通过。不这么做,带标签的帧到达交换机端口就被丢弃了。
单臂路由适合实验和流量小的场景。所有VLAN间流量都汇聚在一个物理口上,带宽受限,流量一高就容易卡。真实生产环境里,三层交换机才是主流。
5.3 三层交换机的SVI接口:更常用的方案
三层交换机的做法,相当于把路由功能集成到了交换机内部。它不需要外部路由器,也不需要子接口,直接在交换机上给VLAN创建三层接口。这个虚拟三层接口叫VLANIF或者SVI。
在模拟实验的交换机LSW1上配置:
interface vlanif 10 ip address 192.168.10.254 255.255.255.0 quit interface vlanif 20 ip address 192.168.20.254 255.255.255.0 quit创建了VLANIF 10和20之后,这台交换机就同时拥有192.168.10.254和192.168.20.254两个三层地址。PC1的网关是192.168.10.254,PC4的网关是192.168.20.254,当PC1想访问PC4时:
- PC1发现目标192.168.20.2不在自己网段,把数据帧发给网关192.168.10.254
- 交换机收到帧,目标MAC是网关,于是交给三层转发流程
- 查路由表,192.168.20.0/24是直连网段,走VLANIF 20
- 交换机把帧从VLAN 10转到VLAN 20,发给PC4
整个过程在交换机内部硬件转发,速度比外部路由器快得多。做这个实验时,ISW1和ISW2都需要支持三层功能,实际网络工程中一般用三层交换机做核心层设备,VLANIF基本是标配。
5.4 路由表确认:别让回程路由掉链子
配完VLANIF之后,一定不要急着去ping,先用命令看路由表:
display ip routing-table正常会看到类似这样的直连路由:
- 192.168.10.0/24,通过VLANIF 10
- 192.168.20.0/24,通过VLANIF 20
在静态环境里,这两条是核心。只要存在,网关就能正确转发两个VLAN之间的流量。如果这里只看到其中一条,说明另一个VLANIF没有配置或没有启用,PC自然不通。
还要理解回包路径。PC1访问PC4,PC4收到请求后,发现PC1不在本网段,也会把回包发给自己的网关192.168.20.254。因为PC4的网关也是同一台三层交换机,回包会正确回到PC1。如果用了多台路由器做跨网段转发,每一跳都要检查路由表和回程路由,漏掉一环,表现就是“能出去但回不来”。网上很多人ping不通半天查不出原因,就是在回程路由上栽了跟头。
6. 常见问题与排查技巧实录
6.1 ping不通的排查顺序:不要乱猜
VLAN配置的故障,90%集中在几个固定位置。我自己排查的时候基本按固定顺序走,不凭感觉跳来跳去:
- 看物理层:接口是否up,网线是否插好,设备电源是否正常
- 看二层配置:端口类型、PVID、trunk允许列表、Native VLAN是否一致
- 看终端IP:IP、子网掩码、网关是否在同一网段,网关有没有写错
- 看三层接口:VLANIF或子接口是否存在且启用了ip address
- 看路由表:有没有到目标网段的直连或静态路由
- 看策略:有没有ACL、防火墙规则拦截
有一次我在调试某跨交换机实验,PC1 ping PC3超时。第一反应是trunk配置有问题,查来查去没问题,最后才发现PC1的IP填成了192.168.10.200,子网掩码却写成了255.255.255.0,但网关配的是192.168.10.1,根本不在自己网段内,系统就把所有流量按本网段处理,直接走二层出接口,压根没找网关。终端配置错误比交换机配置错误更容易被忽略,所以一定要按顺序查。
6.2 VLAN表不匹配和端口没有UP的典型案例
我再讲一个真实的排查案例。实验环境里,PC1在LSW1的VLAN 10,PC3在LSW2的VLAN 10,两者不通。我用display vlan看了一下,两台交换机都有VLAN 10。用display port vlan看互联口,也确实是trunk并且允许了VLAN 10。
那问题在哪?我最后检查物理连接才发现,LSW1的0/0/24插在了LSW2的0/0/23上,而我在LSW2上配置trunk的是0/0/24。物理线路和逻辑配置错位。把0/0/23也切成trunk后,PC1立刻能ping通PC3。
另外模拟环境还有一个常见坑,就是两台交换机之间用了错误线缆类型。有些模拟器里分直通线和交叉线,选错的话端口不会up;真机环境则要检查光模块、电口速率协商,或者端口是不是被手动shutdown了。
遇到VLAN跨交换机不通,先做三步:
display interface brief display port vlan display vlan依次确认物理、端口类型、全局VLAN表。这三步走完,大多数问题都能定位到大概方向。
6.3 快速验证命令清单和实测心得
整理一下我平时用得最多的验证命令:
| 命令 | 作用 |
|---|---|
| display vlan | 查看全局VLAN列表和端口成员 |
| display port vlan | 查看接口模式、PVID、允许列表 |
| display interface brief | 查看端口状态是否up |
| display mac-address | 查看MAC地址学习到哪个VLAN和端口 |
| display ip routing-table | 查看三层路由表 |
| ping / ping -a | 测试连通性,可指定源地址 |
要特别推荐一个习惯:在PC上ping的时候,用源地址ping。有的系统默认使用本机主IP,如果你一台PC有多个IP,可能走的路径和你预期的完全不一样。用源地址ping网关和ping目标IP,能快速判断出回包路径是否正确。
我自己的习惯是每完成一步就验证一步。先创建VLAN,看display vlan;再划access端口,看display port vlan;再配trunk,立刻用PC1 ping PC3。不要等所有配置都敲完再一起测。问题范围越小,定位越快。很多初学者喜欢一口气把全部命令敲完,等报错时根本不知道从哪查起。
还有一个非常实用的防呆手段:做实验前把IP规划表画好,每个PC的IP、掩码、网关、VLAN、接入端口都列成表,贴在屏幕旁边。这个习惯看着简单,但能省掉一半以上低级错误。我见过有人在模拟器里配了一个多小时,最后发现是规划表上IP子网掩码就写错了,怎么调都不通。
6.4 别忘了保存配置和备份
实验完成,VLAN通了,路由通了,看起来完美收工。但最后一步很多人忘记做:保存配置。
save不保存,设备重启后配置全部失踪,几个小时的努力清零。真实设备也一样,甚至更麻烦,很多线上设备故障就是因为调试完没保存,重启后回到旧配置,业务直接掉线。保存时如果系统提示确认文件名,直接确认就行。保存之后最好再把配置文件导出一份到本地电脑,或用display current-configuration把当前配置复制到文档里留底。
给VLAN命名这件事,我再啰嗦一次。初期实验只有两三个VLAN,随便叫无所谓。等你在生产环境维护几十个VLAN,看到满屏vlan100、vlan200,想定位业务都费劲。用业务名命名,不仅方便自己,后期交接给同事,也能少被问无数遍。
最后再多说一句,我在实际做这个实验时最大的体会是:VLAN配置并不难,难的是每一步都清楚自己在做什么。学会看表、按顺序查、每次只改一个变量,远比背诵一堆命令更管用。以后不管遇到单臂路由、三层交换、还是更复杂的VLAN间策略,底层思路都是同一个:先把二层隔离做干净,再把三层路由打通,最后用验证命令确认每个环节对得上。