1. 项目背景与整体设计思路
1.1 为什么要把VLAN、链路聚合和静态路由放在一起做
很多刚接触网络的朋友会有一个困惑:交换机、路由器、VLAN这些东西单独拿出来好像都能理解,但一旦放到一张真实的拓扑图里,脑子就乱了。我自己刚开始做实验的时候也是这样,VLAN配完了发现跨网段不通,链路聚合配完了发现流量还是走一条线,静态路由写完了发现回包路径不对。后来我才明白,这三个东西本质上解决的是三个不同层面的问题,但它们必须协同工作才能让一张网络真正跑起来。
VLAN解决的是二层广播域隔离的问题。你可以把它想象成一栋写字楼里的不同楼层,每个楼层有自己的门禁系统,本楼层的人可以自由走动,但想去别的楼层就得经过楼梯或者电梯这个"三层设备"。链路聚合解决的是链路带宽和冗余的问题,相当于把几条窄路合并成一条宽路,同时某条路断了还有其他路可以走。静态路由解决的是跨网段通信的问题,就是告诉路由器"要去某个地方,下一跳该往哪走"。
这三个技术放在一起,就构成了一张典型的中小型企业网络的核心骨架。我这次做的实验,目标就是搭建一个包含多个VLAN、跨交换机通信、链路聚合上联、路由器静态路由转发的完整拓扑,并且把每一步的原理和踩坑点都记录下来。
1.2 实验拓扑的整体规划
我设计的拓扑是这样的:两台三层交换机作为接入和汇聚设备,中间用两条物理链路做链路聚合,然后通过一条上联链路接到一台路由器,路由器再连接一个模拟外网的环回接口。两台交换机上各划分三个VLAN,分别是VLAN 10、VLAN 20和VLAN 30,其中VLAN 10和VLAN 20用于终端接入,VLAN 30用于交换机之间的互联管理。
为什么这么设计?因为我想模拟一个真实的场景:一栋楼里有两个部门,各自在不同的VLAN里,他们需要互相通信,也需要访问外网。同时交换机之间的链路需要足够的带宽和冗余,所以用链路聚合。路由器作为三层出口,需要知道内网各个网段怎么走,所以配静态路由。
这个拓扑的好处是,它覆盖了VLAN间路由、链路聚合配置、静态路由编写这三个核心技能点,而且规模不大,用模拟器就能跑起来,适合反复练习。
1.3 方案选型的几个关键决策
在动手之前,我做了几个关键决策,这里说一下背后的考量。
第一个决策是用三层交换机还是用路由器做VLAN间路由。传统做法是单臂路由,就是路由器用一个物理接口划分子接口,每个子接口对应一个VLAN。但这种做法有个明显的瓶颈:所有VLAN间的流量都要经过路由器这一个物理接口,带宽受限,而且配置起来子接口多了很麻烦。三层交换机就不一样了,它内部有硬件转发引擎,VLAN间路由速度极快,配置也简单,只需要在交换机上开启路由功能,给每个VLAN配置一个SVI接口就行。所以我选择了三层交换机做VLAN间路由。
第二个决策是链路聚合用静态模式还是动态协商模式。静态模式就是两边都强制配置成聚合,不协商;动态模式就是用LACP协议自动协商。我选的是LACP动态模式,因为它在链路故障时切换更快,而且能自动检测对端配置是否匹配。静态模式虽然配置简单,但万一一边配了一边没配,容易出现环路或者流量异常。
第三个决策是静态路由还是动态路由。这个拓扑规模很小,网段数量有限,用静态路由完全够用,而且静态路由可控性强,不会因为协议震荡导致网络波动。动态路由协议比如OSPF虽然自动化程度高,但在这种小规模场景下属于杀鸡用牛刀,配置复杂度和排错难度都更高。
2. 核心细节解析与实操要点
2.1 VLAN的划分与Trunk链路配置
VLAN的配置看起来简单,但有几个细节特别容易出错。首先是在交换机上创建VLAN,这个没什么好说的,关键是接口的划分。接入终端的接口要配成Access模式,并且划入对应的VLAN;交换机之间互联的接口要配成Trunk模式,并且允许所有需要的VLAN通过。
我踩过的一个坑是:Trunk接口默认只允许VLAN 1通过,如果你不手动放行其他VLAN,那么跨交换机的同VLAN通信就会失败。这个问题的隐蔽性在于,你在本交换机上测试同VLAN通信是通的,因为流量没有经过Trunk链路,但一旦跨交换机就不行了。
另一个细节是Native VLAN的问题。Trunk链路有一个Native VLAN的概念,默认是VLAN 1,这个VLAN的流量在Trunk上是不打标签的。如果两端的Native VLAN不一致,就会导致流量被错误地放入不同的VLAN。我的建议是,要么两端都保持默认,要么都改成同一个不用的VLAN,并且明确配置。
提示:在配置Trunk之前,先确认两端的VLAN数据库里都已经创建了对应的VLAN。如果一端有VLAN 10另一端没有,即使Trunk允许了VLAN 10,流量也会被丢弃。
2.2 链路聚合的配置要点与负载均衡机制
链路聚合的配置分两步:先创建聚合口,然后把物理接口加入聚合口。在华为设备上,聚合口叫Eth-Trunk;在思科设备上,叫Port-Channel。不管叫什么,核心逻辑是一样的。
这里有一个非常重要的点:加入聚合口的物理接口,其原有配置会被聚合口的配置覆盖。也就是说,你不需要在物理接口上单独配Trunk或者Access,只需要在聚合口上配就行了。我见过有人先在物理接口上配了Trunk,然后又加入聚合口,结果配置冲突导致聚合口起不来。
链路聚合的负载均衡机制也值得说一下。默认情况下,交换机根据源MAC和目的MAC的哈希值来分配流量到不同的物理链路上。这意味着,如果两台主机之间的通信,源和目的MAC是固定的,那么这条流量只会走其中一条物理链路,其他链路处于空闲状态。所以链路聚合提升的是多条独立流量的总带宽,而不是单条流量的带宽。如果你想让单条流量也能跑满所有链路,那需要配置基于源IP和目的IP的负载均衡,但即使这样,同一条TCP流也还是走同一条链路。
注意:链路聚合的成员接口必须具有相同的速率、双工模式和VLAN配置。如果一端是千兆一端是百兆,聚合口可能起不来,或者起来后性能异常。
2.3 静态路由的编写逻辑与回程路由问题
静态路由的配置本身很简单,就是一条命令的事。但难点在于你要清楚地知道每一台设备需要知道哪些网段。很多人配静态路由只配了去程,忘了回程,结果就是ping不通。
举个例子:交换机A上有VLAN 10的网段192.168.10.0/24,路由器上有一个外网环回口8.8.8.8/32。交换机A要能ping通8.8.8.8,它需要一条默认路由指向路由器。路由器要能回包给192.168.10.0/24,它需要一条静态路由指向交换机A。如果只配了交换机A的默认路由,没配路由器的回程路由,那么ping请求能到8.8.8.8,但回包找不到192.168.10.0/24怎么走,就会被丢弃。
所以静态路由的核心原则是:每一台三层设备都要有到达所有需要通信网段的路由,要么是直连路由,要么是静态路由,要么是动态路由。
另外,静态路由的下一跳地址必须是直连可达的。如果你写了一条静态路由,下一跳地址不在直连网段里,这条路由不会生效。这个在配置的时候要特别注意。
2.4 三层交换机SVI接口的配置细节
三层交换机做VLAN间路由,核心就是配置SVI接口。SVI就是给每个VLAN配一个虚拟接口,这个接口的IP地址就是这个VLAN的网关地址。
配置SVI的时候有几个点要注意。第一,要确保三层交换机的路由功能已经开启,有些设备默认是关闭的,需要手动开启。第二,SVI接口的IP地址要和该VLAN内终端的IP地址在同一个网段,并且终端要把网关指向这个SVI的IP。第三,SVI接口的状态取决于该VLAN内是否有活跃的物理接口,如果VLAN内所有接口都down了,SVI也会down。
还有一个容易忽略的点:三层交换机上需要配置默认路由指向路由器,否则VLAN间的流量能通,但访问外网的流量出不去。
3. 实操过程与核心环节实现
3.1 实验环境准备与基础配置
我用的模拟器搭建环境,设备选型是两台三层交换机和一台路由器。开始之前,先把所有设备的接口IP规划好,这是避免后期混乱的关键。
| 设备 | 接口 | IP地址 | 说明 |
|---|---|---|---|
| 交换机A | Vlanif 10 | 192.168.10.1/24 | VLAN 10网关 |
| 交换机A | Vlanif 20 | 192.168.20.1/24 | VLAN 20网关 |
| 交换机A | Vlanif 30 | 192.168.30.1/24 | 互联VLAN网关 |
| 交换机B | Vlanif 10 | 192.168.10.2/24 | VLAN 10备用网关 |
| 交换机B | Vlanif 20 | 192.168.20.2/24 | VLAN 20备用网关 |
| 交换机B | Vlanif 30 | 192.168.30.2/24 | 互联VLAN网关 |
| 路由器 | GE0/0/0 | 192.168.30.254/24 | 内网出口 |
| 路由器 | Loopback0 | 8.8.8.8/32 | 模拟外网 |
这个规划里,交换机A和交换机B的VLAN 10和VLAN 20网关地址不同,这是为了做VRRP或者网关冗余预留的。但在本次实验中,我们只让交换机A作为主网关,交换机B作为备份,所以终端网关指向交换机A的SVI地址。
基础配置包括设备命名、关闭信息中心、保存配置等。这些虽然简单,但养成习惯很重要,尤其是设备命名,后期排错的时候能省很多事。
3.2 VLAN创建与接口划分的完整操作
先在交换机A上创建VLAN 10、20、30,然后把连接终端的接口划入对应VLAN,连接交换机B的接口配成Trunk。
# 交换机A配置 system-view sysname SWA vlan batch 10 20 30 # 配置连接终端的接口 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 # 配置连接交换机B的物理接口(先不加入聚合口) interface GigabitEthernet0/0/23 port link-type trunk port trunk allow-pass vlan 10 20 30 quit interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 30 quit交换机B的配置类似,但接口编号可能不同。这里要注意,Trunk接口一定要放行所有需要的VLAN,包括互联VLAN 30。
配置完成后,用display vlan命令检查VLAN是否创建成功,用display port vlan检查接口的VLAN划分是否正确。
3.3 链路聚合的配置与验证
链路聚合的配置在交换机A和交换机B上都要做。以交换机A为例:
# 创建聚合口 interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan 10 20 30 mode lacp-static quit # 把物理接口加入聚合口 interface GigabitEthernet0/0/23 eth-trunk 1 quit interface GigabitEthernet0/0/24 eth-trunk 1 quit交换机B做同样的配置。配置完成后,用display eth-trunk 1查看聚合口状态,正常情况下应该看到两个成员接口都是Up状态,并且聚合口的带宽是两条链路之和。
这里有一个细节:LACP模式下,两端的聚合口编号不需要一致,但模式必须一致。如果一端是静态模式一端是LACP模式,聚合口起不来。
验证链路聚合是否生效,可以断开其中一条物理链路,然后ping对端,如果ping不中断或者只丢一两个包,说明冗余生效了。
3.4 三层交换机SVI接口与路由配置
在交换机A上配置SVI接口:
# 开启路由功能 ip routing # 配置SVI接口 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 quit interface Vlanif30 ip address 192.168.30.1 255.255.255.0 quit # 配置默认路由指向路由器 ip route-static 0.0.0.0 0.0.0.0 192.168.30.254交换机B的配置类似,但SVI地址不同,并且也需要配置默认路由。
路由器上的配置:
# 配置内网接口 interface GigabitEthernet0/0/0 ip address 192.168.30.254 255.255.255.0 quit # 配置外网环回口 interface Loopback0 ip address 8.8.8.8 255.255.255.255 quit # 配置回程路由 ip route-static 192.168.10.0 255.255.255.0 192.168.30.1 ip route-static 192.168.20.0 255.255.255.0 192.168.30.1这里路由器的回程路由下一跳指向交换机A的VLAN 30接口地址。如果交换机A和交换机B都作为网关,那么路由器需要配置两条等价路由或者根据实际情况选择主备。
3.5 连通性测试与故障排查
配置完成后,按照从近到远的顺序测试:
- 同一VLAN内终端互ping,应该通。
- 不同VLAN间终端互ping,应该通(经过三层交换机路由)。
- 终端ping交换机A的VLAN 30接口,应该通。
- 终端ping路由器的内网接口,应该通。
- 终端ping路由器的外网环回口8.8.8.8,应该通。
如果某一步不通,就按照OSI模型从下往上排查。先看物理层链路是否Up,再看数据链路层VLAN和Trunk是否正确,再看网络层IP和路由是否正确。
我遇到的一个典型问题是:终端能ping通网关,但ping不通其他VLAN的终端。排查后发现是三层交换机的路由功能没开启,SVI接口虽然配了IP,但交换机没有做路由转发。开启ip routing后就正常了。
另一个问题是:终端能ping通路由器内网接口,但ping不通8.8.8.8。排查后发现是路由器的回程路由没配,回包被丢弃了。加上静态路由后解决。
4. 常见问题与排查技巧实录
4.1 VLAN间通信失败的常见原因
VLAN间通信失败是最常见的问题之一。根据我的经验,原因通常集中在以下几个方面:
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 同VLAN通,跨VLAN不通 | 三层交换机未开启路由功能 | 检查ip routing是否配置 |
| 跨VLAN不通,SVI状态Down | VLAN内无活跃物理接口 | 检查VLAN内是否有Up的接口 |
| 跨VLAN不通,SVI状态Up | 终端网关配置错误 | 检查终端网关是否指向SVI地址 |
| 部分VLAN通,部分不通 | Trunk未放行对应VLAN | 检查Trunk的allow-pass列表 |
这里特别说一下SVI状态Down的问题。SVI接口的状态依赖于VLAN的状态,而VLAN的状态依赖于该VLAN内是否有活跃的物理接口。如果VLAN内所有接口都Down了,SVI也会Down,即使你手动配置了IP地址也没用。解决办法是在该VLAN内保留一个活跃接口,或者配置一个环回接口作为VLAN的成员。
4.2 链路聚合不成功的排查思路
链路聚合起不来,通常有以下几个原因:
第一,成员接口的配置不一致。比如一个接口是Trunk一个是Access,或者速率不同,聚合口就无法形成。解决办法是把成员接口的配置清空,只保留加入聚合口的配置。
第二,聚合模式不匹配。一端是LACP一端是静态,聚合口起不来。解决办法是两端统一模式。
第三,成员接口数量超过上限。不同设备支持的聚合口成员数量不同,一般最多8个。如果超过上限,多余的接口不会加入聚合口。
第四,物理链路问题。如果一条链路的光衰太大或者网线质量差,聚合口可能不稳定。解决办法是更换线缆或者检查光模块。
提示:配置链路聚合后,用
display eth-trunk查看成员接口状态,如果显示为Unselected,说明该接口没有被选中转发流量,需要检查上述原因。
4.3 静态路由配置的典型错误
静态路由配置错误导致的网络不通,排查起来其实不难,关键是要有清晰的思路。
最常见的错误是下一跳不可达。比如你写了一条静态路由,下一跳是192.168.30.254,但你的设备上没有到达192.168.30.0/24的路由,这条静态路由就不会生效。解决办法是先用display ip routing-table查看路由表,确认下一跳是否可达。
第二个常见错误是掩码写错。比如把24位掩码写成23位,导致路由匹配范围不对。这个错误比较隐蔽,因为路由表里看起来是正常的,但实际转发的时候会出问题。
第三个错误是回程路由缺失。这个前面已经说过了,就是只配了去程没配回程。解决办法是在每一台三层设备上都检查一遍路由表,确保所有需要通信的网段都有路由。
4.4 我的独家排错流程
经过多次实验,我总结了一套自己的排错流程,分享给大家:
第一步,确认物理层。用display interface brief查看所有接口的物理状态和协议状态,确保该Up的接口都Up了。
第二步,确认二层。用display vlan和display port vlan检查VLAN和接口划分,用display eth-trunk检查聚合口状态。
第三步,确认三层。用display ip interface brief检查接口IP,用display ip routing-table检查路由表。
第四步,分段测试。从源端开始,逐跳ping,找到第一个不通的节点,然后重点排查该节点。
第五步,抓包分析。如果以上都正常但就是不通,可以在关键接口上抓包,看报文是否发出、是否收到、是否被丢弃。
这套流程看起来简单,但能覆盖90%以上的网络故障。关键是要养成习惯,不要跳步,一步一步来。
4.5 实验中的几个实用技巧
第一个技巧:配置前先画图。把拓扑、IP规划、VLAN规划都画在纸上或者用工具画出来,配置的时候照着图来,能避免很多低级错误。
第二个技巧:分段配置,分段验证。不要一口气把所有配置都敲完再测试,而是配一段测一段。比如先配VLAN和Trunk,测试同VLAN跨交换机通信;再配链路聚合,测试聚合口状态;再配SVI和路由,测试跨VLAN通信。这样出了问题容易定位。
第三个技巧:善用display命令。华为设备的display命令非常丰富,display this查看当前接口配置,display current-configuration查看全局配置,display ip routing-table查看路由表,display arp查看ARP表。这些命令在排错时非常有用。
第四个技巧:保存配置。实验过程中随时保存配置,避免设备重启后配置丢失。华为设备用save命令,思科设备用write或copy running-config startup-config。
第五个技巧:做实验记录。每次实验都记录下配置命令、测试结果、遇到的问题和解决办法。时间长了,这些记录就是你自己的知识库。
5. 实验扩展与进阶方向
5.1 从静态路由扩展到动态路由
这个实验用的是静态路由,适合小规模网络。如果网段数量增加,静态路由的维护成本会急剧上升。这时候可以考虑用OSPF或者RIP这样的动态路由协议。OSPF适合中大型网络,收敛速度快,支持区域划分;RIP适合小型网络,配置简单但收敛慢。
从静态路由迁移到OSPF,核心变化是把ip route-static命令换成OSPF的network宣告。但要注意,OSPF的network命令是用反掩码的,而且宣告的网段会被放入OSPF区域。迁移过程中要小心路由环路和次优路径的问题。
5.2 从链路聚合扩展到堆叠和M-LAG
链路聚合解决的是链路级冗余,但如果交换机本身故障了,链路聚合也没用。这时候可以考虑堆叠或者M-LAG技术。堆叠是把多台交换机虚拟成一台,管理方便,但堆叠线缆故障可能导致分裂。M-LAG是跨设备链路聚合,两台交换机独立管理但可以做链路聚合,可靠性更高。
这些技术在企业网络中很常见,但配置复杂度也更高。建议先把单台设备的VLAN、链路聚合、静态路由练熟,再往这些方向扩展。
5.3 增加ACL和NAT的配置
真实的企业网络中,除了路由和交换,还需要考虑安全和地址转换。ACL可以用来控制哪些VLAN之间可以互访,哪些不能。NAT可以让内网私有地址访问外网。
在这个实验的基础上,可以在路由器上增加NAT配置,把内网地址转换成公网地址。然后在交换机上配置ACL,限制VLAN 10和VLAN 20之间的互访。这样整个实验就更接近真实场景了。
5.4 用VRRP实现网关冗余
目前实验里交换机A是主网关,交换机B是备份。如果交换机A故障了,终端需要手动切换网关,这显然不现实。VRRP可以解决这个问题,两台交换机虚拟出一个虚拟IP作为网关,主设备故障时自动切换到备设备。
VRRP的配置不复杂,但要注意优先级和抢占模式的设置。主设备优先级高,备设备优先级低,主设备恢复后是否抢占需要根据实际需求决定。
6. 个人实操体会与建议
这个实验我反复做了很多遍,每次都有新的收获。最开始的时候,我觉得配置命令背下来就行了,后来发现真正难的是理解每一步为什么这么配,以及出了问题怎么排查。配置命令是死的,但网络是活的,同样的命令在不同的拓扑里效果可能完全不同。
我个人最大的体会是:网络实验一定要动手做,光看教程没用。你看十遍教程,不如自己敲一遍命令。因为教程里不会告诉你,Trunk接口忘了放行VLAN会导致跨交换机不通;教程里不会告诉你,链路聚合的成员接口配置不一致会导致聚合口起不来;教程里不会告诉你,静态路由的下一跳不可达会导致路由不生效。这些坑,只有自己踩过才能记住。
另外,我建议大家在实验的时候,不要怕配错。配错了才有机会排查,排查的过程才是真正学习的过程。我见过一些人,实验的时候小心翼翼,生怕配错,结果真到了工作中遇到故障,完全不知道从哪下手。反而是那些在实验里把各种错误都犯过一遍的人,排错能力更强。
最后分享一个小技巧:给实验拓扑做版本管理。每次修改配置之前,先保存一份当前配置,修改后如果出了问题,可以快速回滚。这个习惯在真实工作中也非常重要,因为生产环境的网络变更容错率极低,有备份才有底气。
这个实验后续还可以继续扩展,比如加入无线控制器、加入防火墙、加入SDN控制器等等。但不管怎么扩展,VLAN、链路聚合、静态路由这三个基础技能都是绕不开的。把这三个练熟了,后面的东西学起来会快很多。