这是《网络工程师笔记》系列的第五篇,定位很明确:初级网络工程师的实操进阶。前四篇我们一直在二层圈子里打转——广播域、交换机端口类型、VLAN划分、生成树那些事,本质上都是“怎么把一个局域网切得更干净”。但从这一篇开始,我们要迈过一道分水岭:VLAN切完之后,不同部门怎么互相访问?办公室的同事为什么死活访问不了隔壁VLAN里的打印机?这个问题的标准答案就是VLAN间路由。这篇笔记不玩虚的,直接围绕单臂路由和三层交换机SVI两种打通VLAN的方法展开,会带上完整配置、验证命令、对比选型,以及我实际排障时走过的完整链路。适合刚接触路由功能、想把三层网络真正跑起来的Junior工程师,也适合做网络运维但一直靠“重启解决一切”的朋友。
1. 为什么二层隔离之后反而需要三层转发:VLAN间路由的本质
1.1 广播域隔离带来的副作用
我们先回到一个朴素的问题:VLAN到底为了解决什么?最直接的答案是隔离广播域。如果没有VLAN,交换机上所有端口都在同一个广播域里,一台设备发送ARP广播,整个网络的设备都要停下手里的活听一下。假设公司500台设备全在一个二层平面里,每隔几秒就有一台设备吼一嗓子“谁是192.168.1.1”,网络噪声会非常夸张,更别说出现广播风暴时整网瘫痪的场面。
所以VLAN把不同部门、不同业务隔开:销售部VLAN 10、服务器区VLAN 20、访客网络VLAN 30。广播被限制在各自VLAN内部,互相不干扰。安全上也更干净——默认情况下两个VLAN之间连个包都送不出去,想互访必须经过我方的明确授权。
但问题也随之而来:用户根本不在乎你划了几个VLAN,他们要的就是“我要访问服务器”“我要访问打印机”。VLAN天生是二层隔离的,这种隔离不会自己长出一条通路。于是你必须在隔离和互通之间架一座桥,这座桥就是三层设备,也就是路由器或三层交换机。
1.2 二层决定邻居关系,三层决定通路
很多新手在这一步最容易犯迷糊。他们的疑问是:交换机都能转发数据了,为什么两个VLAN之间的包不直接转发?原因很简单——交换机内部的转发依据是MAC地址表,而MAC地址表里只会记录“某个MAC地址在哪个VLAN的哪个端口”。PC发给不同VLAN主机的数据包,目标MAC地址根本不在MAC地址表中,交换机没有能力也没有义务去做跨VLAN转发。
数据包的走向是这样的:PC发现目标IP不在自己的网段,就会把包扔给默认网关。这时候网关必须是一个三层设备,它查看自己的路由表,知道目标网段往哪个方向走,再把包路由过去。这个过程里,二层交换解决的是“同网关下谁是谁”,三层路由解决的是“不同网段之间怎么走”。理解了这一点,后面配置单臂路由和SVI时就不会觉得是背命令,而是在做一件逻辑上很自然的事。
1.3 三类设备、两台网关的典型场景
为了让后面的配置有画面感,用一个典型的小型企业场景来贯穿全文。网络里规划了三个VLAN:
- VLAN 10:办公终端段,网关192.168.10.1/24
- VLAN 20:服务器段,网关192.168.20.1/24
- VLAN 30:访客/无线段,网关192.168.30.1/24
交换机是二层交换机,三台。要打通这三个VLAN,最朴素的做法是一台路由器同时接入三台交换机,用三个物理接口分别配置三个网段的IP。这种方法当然可行,但浪费接口且扩展性极差。于是业界想出了两种更聪明的做法:一种是单臂路由,用一根Trunk线把所有VLAN的流量送进路由器;另一种是直接用三层交换机,在交换机内部完成路由。下面两章分别展开。
2. 单臂路由:一根Trunk线硬生生跑出三个网段
2.1 单臂路由的原理基础:子接口与802.1Q标签
单臂路由的思路是:物理上只有一根线,但逻辑上让路由器为每个VLAN开一个“虚拟接口”。每个虚拟接口绑定一个VLAN,并配上对应网段的网关IP。交换机侧把连接路由器的端口设为Trunk,这样VLAN 10、20、30的数据帧都会被带上802.1Q标签,送到路由器的物理口。
路由器收到带标签的帧后,根据标签里的VLAN ID决定交给哪个子接口处理。子接口就是一个逻辑接口,比如GigabitEthernet0/0.10就是物理口GE0/0/1上属于VLAN 10的逻辑子接口。从网络角度来看,相当于路由器有三个接口,分别连着三个VLAN,但实际上它们共用一根物理线。
这里有一个新手特别容易忽略的坑:在华为设备上,子接口配置了VLAN封装之后,默认不处理ARP广播报文,必须开启arp broadcast enable,否则PC可以ping通网关IP(数据面正常),但网关上ping不到PC(ARP请求被丢弃)。思科设备默认没有这个问题,所以网上看了杂七杂八的教程后容易在这类细节上栽跟头。
2.2 华为与思科设备下的完整配置示例
下面分别给出华为CE/S系列和思科IOS设备的单臂路由配置。开局前提:交换机侧已经创建VLAN 10、20、30,并把对应终端端口划入了各自VLAN,连接路由器的物理口设为Trunk且允许这三个VLAN通过。
先看我用华为设备时的配置写法:
# 交换机侧(S5700为例) vlan batch 10 20 30 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 30 # 路由器侧(AR系列为例) interface GigabitEthernet0/0/1.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/1.20 dot1q termination vid 20 ip address 192.168.20.1 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/1.30 dot1q termination vid 30 ip address 192.168.30.1 255.255.255.0 arp broadcast enable思科设备的写法差别不大,但命令风格完全不同:
interface GigabitEthernet0/0.10 encapsulation dot1Q 10 ip address 192.168.10.1 255.255.255.0 interface GigabitEthernet0/0.20 encapsulation dot1Q 20 ip address 192.168.20.1 255.255.255.0 interface GigabitEthernet0/0.30 encapsulation dot1Q 30 ip address 192.168.30.1 255.255.255.0配置完成后,PC的默认网关分别指向对应子接口的IP。VLAN 10的PC访问VLAN 20的服务器时,数据包先到网关192.168.10.1,路由器查路由表发现192.168.20.0/24直连在子接口.20上,于是把包重新打上VLAN 20的标签从同一根物理线发回交换机,交换机再转发给服务器。整个流程就这么跑通了。
2.3 验证命令不要只会ping
配置完之后不能光靠终端设备ping一下就算完事,工程师必须习惯看中间设备的状态。我在验证单臂路由时固定的命令组合是:
- 查看子接口状态:
display ip interface brief,确认.10/.20/.30的IP和物理状态都是UP。 - 查看路由表:
display ip routing-table,看192.168.10.0/24、192.168.20.0/24是不是以直连方式存在。 - 查看VLAN信息:
display vlan,确认交换机上VLAN和端口成员状态。 - 查看Trunk端口:
display port trunk,确认允许通过的VLAN列表是否恰当。
如果PC能ping通自己的网关,但ping不通另一VLAN的网关,问题大概率出在Trunk配置或子接口VLAN封装不一致上。如果PC连自己网关都ping不通,先查物理链路、Access口VLAN划分、终端IP和掩码,一层层往上找。
2.4 单臂路由的性能瓶颈:适合实验,不适合大流量
单臂路由最大的问题是性能和单点故障。所有VLAN之间的流量都必须走同一根物理线、由同一个物理接口承担,带宽天然被压缩。即使物理接口是1Gbps,三个VLAN之间的总吞吐也会被这根线卡死。而且路由器转发性能远低于交换机,尤其是小路由器,大包多流的情况下很容易CPU飙升、延时抖动。
我的建议是:单臂路由适合学习、测试、以及小规模(几十台终端)的临时场景。真到了生产环境,尤其是视频监控、文件服务器这类大流量业务频繁跨VLAN互访的场景,老老实实上三层交换机更稳。这也是第三章要聊的方案。
3. 三层交换机SVI:把路由功能塞回交换机内部
3.1 SVI是什么:用VLANIF接口代替路由器子接口
很多刚接触三层交换机的朋友会有个误解,觉得三层交换机是一台“交换机加一台路由器”装在同一个盒子里。这个比喻方向没错,但理解得有点粗。三层交换机的核心是:它既能做二层转发,也能做三层转发,而三层转发的入口是SVI(Switch Virtual Interface),在华为设备上叫VLANIF接口,在思科设备上就是VLAN接口。
SVI的思路很巧妙:每个VLAN对应一个逻辑三层接口,这个接口的IP就是该VLAN的网关。交换机内部维护一张三层转发表(FIB),当一个数据包的目标IP命中另一VLAN的网关地址时,交换机内部直接完成路由动作——不再需要把数据包发到外部路由器。这比单臂路由高效得多,因为流量不需要绕到外部,也不需要经过Trunk链路再折返。
对用户来说,网络拓扑变成了“主干交换机直接实现各VLAN网关”,比“每个VLAN绕道路由器”少了一层物理依赖,无论从性能、可靠性还是配置简洁度上都更舒服。
3.2 华为三层交换机配置示例与关键命令
以华为S5720作为核心交换机为例,假设连接接入交换机的端口是GE0/0/24(Trunk口),VLAN分别设置为10、20、30,网关分别是192.168.10.1/24、192.168.20.1/24、192.168.30.1/24:
# 创建VLAN并配置Trunk vlan batch 10 20 30 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 30 # 配置VLANIF接口(SVI) interface Vlanif10 ip address 192.168.10.1 255.255.255.0 interface Vlanif20 ip address 192.168.20.1 255.255.255.0 interface Vlanif30 ip address 192.168.30.1 255.255.255.0这里有一个我在实施过程中见过很多次的坑:在思科三层交换机上,即使你配置了VLAN接口的IP,如果全局没有开启路由功能,SVI也不会上线转发。思科命令必须先执行ip routing开启三层路由,否则show ip route里什么都没有。华为设备默认支持VLANIF三层转发,通常不需要额外开启,但建议配置完还是手动查一下路由表确认直连路由存在。
验证命令跟单臂路由类似,我习惯先在核心交换机上执行以下操作:
display ip interface brief:看Vlanif10/20/30接口状态和IP。display ip routing-table:确认三个网段以Direct方式存在于路由表。display vlan:确认Trunk口放行VLAN正确。- 在核心交换机上直接
ping 192.168.20.20,验证三层转发独立于PC侧是否可用。
3.3 单臂路由与SVI的核心差异:一张表看懂怎么选
方案摆在一起做对比,选择就清晰多了:
| 对比维度 | 单臂路由(Router-on-a-Stick) | 三层交换机SVI |
|---|---|---|
| 转发位置 | 外部路由器CPU | 交换机硬件芯片 |
| 跨VLAN带宽 | 受限于一根物理链路 | 受限于背板,通常远高于单臂 |
| 配置复杂度 | 子接口+VLAN封装+Trunk | VLANIF接口+Trunk |
| 网关归属 | 路由器子接口 | 交换机VLANIF |
| 适合场景 | 实验、小规模、临时扩容 | 生产环境、大流量、多VLAN互访 |
| 扩展性 | 较难扩展,增加VLAN需新增子接口 | 易于扩展,新VLAN加一个VLANIF即可 |
| 典型故障点 | Trunk标签、子接口封装、ARP广播 | SVI未创建、路由未开启、端口VLAN错乱 |
结论不需要硬背,记住一个核心判断标准:流量规模大了、跨VLAN访问频繁了,三层交换机是更合理的形态;如果只是测试、练手,或者手头根本没有三层交换机,单臂路由足以让你理解“路由发生在哪一层”。
3.4 一个容易漏掉的细节:接入交换机到核心之间的网关方向
很多人配完三层交换机后,PC能ping通局域网内其他VLAN的IP,但访问不了某个具体服务器,这时先别急着怀疑路由配置,回头检查一下接入层设备。接入交换机和核心交换机之间的链路必须放行所有需要跨VLAN访问的VLAN流量。如果接入交换机那个上联口只放行了VLAN 10,而服务器在VLAN 20,PC亲手把包交给了VLAN 10的网关,网关也成功把包路由到了核心交换机上,但核心交换机想把包发给VLAN 20的服务器时,却发现Trunk口根本没有放行VLAN 20,帧被交换机丢弃。
这个错非常隐蔽,因为“PC到网关”这一段是通的,看起来路由也正常,问题却出在中间传送链路上。排查思路在下一章会重点讲。
4. 实战排障:VLAN 10访问不了VLAN 20,我排查的完整链路
4.1 故障现象:比“不通”更迷惑人的是“能ping通网关”
有一回同事报障:销售部PC访问不了服务器区的一台OA服务器。网络拓扑就是前面说的三层交换机SVI方案,VLAN 10办公段、VLAN 20服务器段。我远程登录PC,先ping了一下OA服务器IP 192.168.20.20,结果超时。再ping PC自己的网关192.168.10.1,通。再ping服务器段的网关192.168.20.1,也通。
这个现象非常有意思——PC能ping通对方网段的网关,说明三层路由至少在“PC到网关再到VLAN 20网关”这条路径上是通的。但ping不同具体服务器IP,问题就缩小到“VLAN 20网关之后的那一段二层/终端部分”。我最担心的是路由表一大片黑洞,但眼前这个现象已经把问题范围压到了很窄的区域,心态会稳很多。
4.2 排查链路:从PC一路查到服务器,每一层都不要跳
我的排查顺序是这样的:
第一步,在PC上确认IP配置和ARP结果:ipconfig /all,确认IP、掩码、网关是否正确;arp -a看有没有学到网关的MAC。如果ARP里没有网关条目,说明二层通信有问题,多半是端口VLAN、线缆、交换机端口状态的问题。如果ARP有网关MAC但ping网关还是不通,关注点放在网关设备或中间的接入交换机。
第二步,登录核心交换机,看VLANIF接口状态:display ip interface brief,确认Vlanif10和Vlanif20都是UP。这里有个小坑,SVI只有在VLAN内有至少一个端口是UP时才会显示物理状态UP。如果某个VLANIF显示DOWN,说明这个VLAN在核心交换机上没有任何活跃端口。
第三步,检查Trunk链路:display interface GigabitEthernet0/0/24,确认物理链路和协议都UP;display port trunk,确认VLAN 10和20都已经被放行。这往往就是“看似一切都正常”表象下隐藏问题的地方——access口划错VLAN、Trunk允许列表缺失、甚至对端交换机PVID不一致,都会造成转发黑洞。
第四步,在核心交换机上测试路由转发:ping 192.168.20.20,如果核心交换机自己都ping不通服务器,问题已经与PC无关;如果核心交换机能ping通,说明三层转发正常,回程路由正常,问题大概率在PC侧到核心的路径上。注意要多带几个源地址测试,比如ping -a 192.168.10.1 192.168.20.20,确认从VLAN 10网关地址发起也没有问题。
第五步,检查服务器本身:服务器IP、掩码、默认网关。很多人会把服务器网关配错成192.168.20.254,但实际网关是192.168.20.1。这在单臂路由里遇到得更多,服务器回包时发现网关不通,直接把回包丢弃,PC就永远得不到响应。
4.3 这次故障的根因:一个不起眼的Trunk口PVID不一致
最终定位到问题:接入层交换机连接服务器的那个端口,所属VLAN被误设成了VLAN 30,服务器实际上待在VLAN 30而不是VLAN 20。为什么PC ping服务器不同,但ping服务器段网关却通?因为在核心交换机看来,192.168.20.1是VLAN 20的网关,它当然通;但真正连接服务器的物理端口在接入交换机上属于VLAN 30,核心交换机发出的VLAN 20数据帧在Trunk链路上虽然能到达接入交换机,接入交换机却发现VLAN 20并没有对应端口,于是帧被丢弃。
找根因时最有用的命令是display mac-address。我在核心交换机上查看服务器的MAC地址,发现它出现在Trunk口对应的MAC表项里,但进一步在接入交换机上查display mac-address,发现这个MAC对应的端口根本不属于VLAN 20,才最终确认了问题。所以排查VLAN间路由问题时,不要只盯路由表和IP,二层MAC表项的位置信息往往比任何命令都直观。
4.4 修复与验证:改对端口VLAN之后,还得测回程
把接入交换机上服务器端口从VLAN 30改回VLAN 20之后,我并没有直接宣布修好。在核心交换机上重新执行display mac-address,确认服务器MAC已经从旧VLAN消失、出现在VLAN 20;再执行ping 192.168.10.10,确认从服务器段到PC方向的回程也通。
很多新手在检查网络问题时习惯只从源端ping目标,通了就算完事。但熟练之后你会发现,单程通、回程不通的情况比比皆是,因为回程路由、ACL、NAT、防火墙状态表都可能各自出问题。所以排障的最后一步永远是“双向验证”:PC ping服务器、服务器 ping PC、网关ping PC、网关ping服务器,四个方向都通了,这次修复才算真正结束。
5. 留给自己和同阶段同事的几条实操经验
5.1 配置前先画一张IP规划和VLAN映射表
我在前几篇笔记里就反复强调过,网络配置不怕命令不熟,就怕脑子里的拓扑是乱的。这一篇涉及VLAN间路由,更要提前把这张表画清楚:
| VLAN | 用途 | 网段 | 网关 | 接入交换端口 |
|---|---|---|---|---|
| 10 | 办公终端 | 192.168.10.0/24 | 192.168.10.1 | GE0/0/1-10 |
| 20 | 服务器 | 192.168.20.0/24 | 192.168.20.1 | GE0/0/11-20 |
| 30 | 访客 | 192.168.30.0/24 | 192.168.30.1 | GE0/0/21-24 |
这张表不是写给自己看的,是写给未来的自己的——三个月后你接到一个故障工单,第一件事就是打开这张表确认“网关是哪台设备、哪个VLANIF、哪个交换机端口”。没有这张表,你等于要在现场黑暗中摸索。
另外,通用网关地址规划上有个习惯值得坚持:核心设备作为网关的地址尽量用小号,比如.x.1;服务器地址从.x.10开始;终端地址从.x.100开始。这样看IP段就能大致判断设备角色,排障时少走很多弯路。
5.2 验证命令练成肌肉记忆,别等到故障才查文档
初级工程师最容易犯的毛病是查得慢。故障已经冒烟了,还在一个个翻命令手册。我的经验是每配完一类功能,就固定练一套验证组合拳。单臂路由练:display ip interface brief、display ip routing-table、display vlan、display port trunk。SVI方案练:display vlan、display ip interface brief、display ip routing-table、display mac-address。把这些命令练到闭着眼睛都能打出来,排障速度会提升一大截。
更关键的是知道每条命令在验证什么:display vlan看的是二层划分是否正确;display ip interface brief看的是三层接口和IP是否就位;display ip routing-table看的是路由是否是直连、有没有缺路由;display mac-address看的是终端MAC到底落在哪个VLAN和端口。命令是用来回答问题的,不是用来炫技的。
5.3 从这一次经历中沉淀的排障顺序
排障最容易犯的错误是直接尝试“修复方案”而不是先给问题定位。我在这一篇故障里最有价值的收获,是形成了一个稳定的排查顺序:
- 先确认终端配置:IP、掩码、网关、ARP表。这里的错误占所有二层以上故障的至少三分之一。
- 再确认路径上每一跳设备的接口状态:PC到接入交换机、接入交换机到核心、核心到服务器。接口只要有一处DOWN,后面所有配置都是白搭。
- 然后确认路由和MAC表:路由表证明三层知道怎么走,MAC表证明二层知道把帧交给谁。
- 最后才是策略类问题:ACL、防火墙、端口安全。很多新手一上来就怀疑ACL,但实际配置里策略类问题往往是最少见的。
这个顺序本质上是从物理层一直看到应用层,每一层都用自己的验证手段排除掉一种可能。等你形成这种条件反射,再遇到“VLAN间不通”这种故障,就不会手忙脚乱四处乱试了。
5.4 最后一个值得养成的习惯:保存现场记录
网络工程师的工作里,技能成长往往不来自配置多熟练,而来自故障后的复盘够不够深。这次排查完成后,我把拓扑、IP规划表、故障根因、修复操作、验证命令都整理进了笔记。过段时间再回看,这些记录比任何认证教材都更贴近实际工作。Junior 05这篇笔记本身,其实就是这个习惯的产物。希望看到这里的朋友,也能把自己的每一次配置和排障变成下一份“现场记录”。