1. 项目缘起与整体设计思路
1.1 为什么要把VLAN、链路聚合和静态路由放在一起做
很多刚接触企业级网络的朋友会有一个困惑:明明交换机上划了VLAN,广播域也隔离了,可不同VLAN之间还是通不了;明明两条网线插在交换机上,一条断了业务就中断,带宽也没叠加。这三个问题——VLAN间通信、链路冗余与带宽叠加、跨网段路由——在实际组网里几乎总是同时出现,所以我把它们放在一个实验里一次性打通。
这个项目的核心目标很明确:在一台三层交换机上划分多个VLAN,用链路聚合把两台交换机之间的多条物理链路捆绑成一条逻辑链路,再通过静态路由把三层交换机和一台路由器连起来,最终实现不同VLAN的主机能互访,同时能访问路由器模拟的外部网段。整套方案适合有一定网络基础、正在准备网络方向认证考试,或者需要给中小型办公网络做规划的朋友参考。
我选择“三层交换机做VLAN间路由 + 路由器做出口静态路由”这个组合,而不是全部用路由器或者全部用三层交换机,原因在于成本和效率的平衡。三层交换机做VLAN间路由是硬件转发,速度快、延迟低,适合内部东西向流量;而出口方向用一台路由器做静态路由,配置简单、行为可预测,不需要跑复杂的动态路由协议。对于中小规模网络来说,这是性价比最高的一种做法。
链路聚合这部分,我用的是基于端口的手工聚合模式,没有用协商协议。为什么?因为手工模式配置最直接,两端都强制聚合,不依赖协议报文交互,在实验环境和很多生产环境里都足够稳定。当然它也有缺点,后面我会详细说。
1.2 整体拓扑与地址规划
先把我用的拓扑说清楚。整个实验由三台设备组成:一台三层交换机(作为核心,负责VLAN间路由和聚合)、一台二层交换机(作为接入,负责连接终端主机并参与链路聚合)、一台路由器(作为出口网关,连接外部网段)。
地址规划我遵循了几个原则:VLAN号与网段第三段对应,方便记忆;互联地址用/30掩码,节省地址空间;管理地址单独规划,避免和业务网段冲突。具体规划如下表:
| 设备 | 接口/逻辑接口 | 地址 | 说明 |
|---|---|---|---|
| 三层交换机 | VLANIF 10 | 192.168.10.1/24 | VLAN10网关 |
| 三层交换机 | VLANIF 20 | 192.168.20.1/24 | VLAN20网关 |
| 三层交换机 | VLANIF 30 | 192.168.30.1/24 | VLAN30网关 |
| 三层交换机 | VLANIF 100 | 10.0.0.1/30 | 与路由器互联 |
| 路由器 | 上行口 | 10.0.0.2/30 | 与三层交换机互联 |
| 路由器 | 下行口 | 172.16.1.1/24 | 模拟外部网段 |
| 主机A | — | 192.168.10.10/24 | VLAN10终端 |
| 主机B | — | 192.168.20.10/24 | VLAN20终端 |
| 主机C | — | 192.168.30.10/24 | VLAN30终端 |
这个规划里有一个细节值得说:互联地址我用了10.0.0.0/30,而不是常见的192.168.x.x。原因是/30只有两个可用地址,刚好给两端接口用,不会浪费;而且用10开头可以和业务网段明显区分开,排查问题时一眼就能看出这是互联链路。
1.3 方案选型的几个关键取舍
在动手之前,有几个选择需要想清楚,不然做到一半会返工。
第一个取舍:链路聚合用二层还是三层?我选择在二层交换机与三层交换机之间做二层聚合。原因是接入交换机通常不具备三层能力,而且聚合的目的是增加交换机之间的带宽和冗余,二层聚合更通用。如果两端都是三层设备,也可以做三层聚合,但配置会更复杂,对实验来说没必要。
第二个取舍:静态路由写几条?三层交换机上需要一条默认路由指向路由器,路由器上需要三条明细路由分别指向三个业务网段。为什么三层交换机用默认路由而不是明细?因为三层交换机是内部核心,所有未知流量都应该往出口走,默认路由最简洁。而路由器上必须写明细,因为路由器不知道内部有哪些网段,如果不写,回包就丢了。
第三个取舍:VLAN间路由用VLANIF还是子接口?三层交换机上直接用VLANIF接口,这是最标准的做法。子接口通常用在路由器上做单臂路由,三层交换机不需要这么绕。VLANIF的好处是每个VLAN一个逻辑接口,地址就是网关地址,配置直观,排错也方便。
2. 核心细节解析与实操要点
2.1 VLAN划分与Trunk链路配置要点
VLAN划分看起来简单,但有几个坑我踩过不止一次。
第一,VLAN必须在两台交换机上都创建。只在三层交换机上创建VLAN,二层交换机上没有对应的VLAN,那么接入主机的流量到了二层交换机就会被丢弃,因为VLAN不存在。这个错误很隐蔽,因为接口看起来是up的,但就是不通。
第二,Trunk链路两端必须都配置。我习惯在Trunk接口上显式允许需要的VLAN通过,而不是用默认的allow all。这样做的好处是安全,避免不必要的VLAN流量穿过Trunk;坏处是如果漏了某个VLAN,排查起来要多花时间。我的做法是先把所有需要的VLAN列出来,配置完后再逐一核对。
第三,PVID的处理。Trunk接口的PVID默认是VLAN1,如果两端不一致,可能会出现流量跑到错误VLAN的情况。我一般会把Trunk的PVID改成某个不用的VLAN,比如VLAN999,避免和业务VLAN混淆。
具体配置上,三层交换机侧创建VLAN10、20、30、100,二层交换机侧创建VLAN10、20、30。注意VLAN100只在三层交换机和路由器之间使用,二层交换机上不需要。
2.2 链路聚合的配置细节与模式选择
链路聚合这块,我用的是手工模式(不同厂商叫法不同,有的叫静态聚合,有的叫手工负载分担)。配置的时候有几个关键点:
成员接口的配置必须完全一致。速率、双工、VLAN模式这些参数如果不一致,聚合可能起不来,或者起来了但流量只走其中一条。我一般会先把成员接口的配置清干净,然后统一配置。
聚合组的编号两端可以不同,但成员接口的对应关系必须正确。比如三层交换机用Eth-Trunk 1,二层交换机用Eth-Trunk 2,这是可以的,只要两端的成员接口物理连接对应就行。
聚合模式两端必须匹配。一端手工、一端动态协商,聚合是起不来的。这个错误在新手配置里很常见,因为不同厂商的默认模式可能不一样。
我选择手工模式而不是动态协商模式,还有一个实际考虑:手工模式不依赖协议报文,不会因为协议报文被过滤或者CPU繁忙而误判链路故障。当然,手工模式的缺点是如果一端配置错误,另一端不会自动发现,需要人工检查。对于实验和中小型网络,这个缺点可以接受。
2.3 静态路由的写法与回程路由问题
静态路由的配置本身很简单,但回程路由是新手最容易忽略的问题。
三层交换机上写一条默认路由:ip route-static 0.0.0.0 0 10.0.0.2。这条路由的意思是,所有不知道往哪走的流量,都交给路由器。
路由器上需要写三条明细路由:
ip route-static 192.168.10.0 255.255.255.0 10.0.0.1ip route-static 192.168.20.0 255.255.255.0 10.0.0.1ip route-static 192.168.30.0 255.255.255.0 10.0.0.1
如果不写这三条,主机A能ping通路由器上行口,但ping不通路由器下行口连接的网段,因为回包到了路由器之后,路由器不知道192.168.10.0/24在哪里,只能丢弃。
还有一个细节:路由器的上行口和下行口都要配置地址,而且上行口地址必须和三层交换机的VLANIF 100在同一个网段。我见过有人把上行口配成192.168.100.1,然后奇怪为什么ping不通10.0.0.1,这就是网段不匹配的问题。
2.4 几个容易忽略的配置禁忌
- 不要在Trunk接口上配置access VLAN,这会导致接口模式冲突,流量行为异常。
- 链路聚合的成员接口不要单独配置IP地址,地址应该配在聚合接口上。
- 静态路由的下一跳必须是直连可达的,如果下一跳地址不可达,路由不会生效。
- VLANIF接口的状态依赖于VLAN内是否有up的成员接口,如果VLAN里一个up的接口都没有,VLANIF会是down的。
提示:配置完成后,先用display命令检查接口状态和路由表,确认所有接口都是up、所有路由都是active,再去测试连通性。这样可以把问题范围缩小。
3. 实操过程与核心环节实现
3.1 三层交换机侧的完整配置流程
我按实际配置顺序来写,你可以直接照着敲。
第一步,创建VLAN:
vlan batch 10 20 30 100第二步,配置连接主机的接口(假设接口G0/0/1连接VLAN10主机):
interface GigabitEthernet0/0/1 port link-type access port default vlan 10VLAN20和VLAN30的接口类似,分别划入对应VLAN。
第三步,配置链路聚合。先创建聚合接口,再把成员接口加入:
interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan 10 20 30 mode lacp-static这里我用了lacp-static,这是动态协商模式的一种。等等,前面我说用手工模式,这里怎么变成动态了?这里需要说明一下:在实际配置中,如果设备支持LACP,我倾向于用LACP,因为它有链路故障检测机制,比纯手工模式更可靠。纯手工模式(mode manual)在两端配置不一致时不会报错,而LACP会通过协议报文发现不一致。所以最终我选择了LACP模式。这个取舍我在2.2节里提到过手工模式的缺点,LACP正好弥补了这个缺点。
然后把成员接口加入聚合组:
interface GigabitEthernet0/0/23 eth-trunk 1 interface GigabitEthernet0/0/24 eth-trunk 1第四步,配置VLANIF接口地址:
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 interface Vlanif100 ip address 10.0.0.1 255.255.255.252第五步,配置默认路由:
ip route-static 0.0.0.0 0.0.0.0 10.0.0.23.2 二层交换机侧的配置与聚合对接
二层交换机的配置相对简单,但聚合部分的对接要仔细。
创建VLAN:
vlan batch 10 20 30配置主机接口(假设G0/0/1连接VLAN10主机):
interface GigabitEthernet0/0/1 port link-type access port default vlan 10配置聚合接口:
interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan 10 20 30 mode lacp-static加入成员接口:
interface GigabitEthernet0/0/23 eth-trunk 1 interface GigabitEthernet0/0/24 eth-trunk 1这里有一个关键点:两端聚合组的模式必须一致。三层交换机用lacp-static,二层交换机也必须用lacp-static。如果一端是manual,另一端是lacp-static,聚合接口的协议状态会不一致,可能导致聚合失败或者只有部分链路活跃。
配置完成后,用display eth-trunk 1查看聚合状态,确认成员接口都是Selected状态。如果看到Unselected,说明成员接口的配置或者物理链路有问题。
3.3 路由器侧的配置与路由验证
路由器的配置分三部分:接口地址、静态路由、验证。
接口地址:
interface GigabitEthernet0/0/0 ip address 10.0.0.2 255.255.255.252 interface GigabitEthernet0/0/1 ip address 172.16.1.1 255.255.255.0静态路由:
ip route-static 192.168.10.0 255.255.255.0 10.0.0.1 ip route-static 192.168.20.0 255.255.255.0 10.0.0.1 ip route-static 192.168.30.0 255.255.255.0 10.0.0.1配置完成后,先在三层交换机上ping路由器的上行口10.0.0.2,确认互联链路通。然后在路由器上ping三层交换机的VLANIF地址192.168.10.1,确认回程路由生效。最后用主机A ping主机B、主机C,以及ping路由器下行口172.16.1.1,验证全网连通性。
3.4 链路聚合的带宽叠加验证
链路聚合配好了,怎么确认带宽真的叠加了?我一般用两个方法验证。
方法一:查看聚合接口的成员状态。display eth-trunk 1会显示每个成员接口的状态,Selected表示活跃,Unselected表示不活跃。两个成员都是Selected,说明聚合正常工作。
方法二:用流量测试。在两台主机之间传大文件,同时查看两个成员接口的流量计数。如果两个接口的流量都在增长,说明流量被分担到了两条链路上。如果只有一个接口有流量,可能是哈希算法的问题,或者流量本身是单一会话,哈希结果只走了一条链路。
这里要说明一个常见误解:链路聚合不一定能提升单条流的带宽。如果两台主机之间只有一个TCP会话,流量可能只走一条成员链路,带宽还是一条链路的带宽。链路聚合提升的是多条流的总带宽,以及提供链路冗余。这个点很多新手会搞错,以为插两根网线带宽就翻倍了。
4. 常见问题与排查技巧实录
4.1 VLAN间不通的排查思路
VLAN间不通是最常见的问题,我按排查顺序列一下。
第一步,检查VLAN是否创建。display vlan看VLAN列表里有没有对应的VLAN。
第二步,检查接口是否划入正确的VLAN。display port vlan看接口的PVID和VLAN成员关系。
第三步,检查VLANIF接口是否up。display ip interface brief看VLANIF的状态和协议状态。如果VLANIF是down的,说明VLAN里没有up的成员接口。
第四步,检查主机网关是否配置正确。主机的网关必须是VLANIF的地址,如果配错了,流量出不了本网段。
第五步,检查Trunk链路是否允许了对应的VLAN通过。display port vlan看Trunk接口的allow-pass列表。
4.2 链路聚合起不来的典型原因
链路聚合起不来,我遇到过以下几种情况:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 聚合接口down | 成员接口没有加入 | 检查eth-trunk配置 |
| 成员接口Unselected | 两端模式不一致 | 统一为lacp-static或manual |
| 成员接口Unselected | 成员接口配置不一致 | 检查速率、双工、VLAN配置 |
| 聚合接口up但流量只走一条 | 哈希算法或流量模型 | 检查哈希配置,用多会话测试 |
| 聚合接口频繁up/down | 物理链路不稳定 | 检查网线、光模块、接口错误计数 |
其中“两端模式不一致”是最常见的。我见过有人一端配了lacp-static,另一端忘了配,结果聚合接口看起来是up的,但只有一个成员接口活跃,另一个一直是Unselected。这种情况用display eth-trunk一看就知道。
4.3 静态路由不生效的排查方法
静态路由配了但不生效,通常有以下几个原因:
下一跳不可达。路由表里会显示这条路由是inactive的。用display ip routing-table查看,如果路由前面没有星号或者显示inactive,说明下一跳有问题。
出接口配置错误。如果静态路由指定了出接口而不是下一跳,出接口必须是up的,而且不能是以太网接口(以太网接口需要下一跳地址)。
掩码写错。比如把255.255.255.0写成255.255.0.0,路由能配上去,但匹配的网段范围不对,导致部分流量走错。
路由优先级问题。如果有多条路由到达同一目的地,优先级高的生效。静态路由默认优先级是60,如果有一条优先级更低的动态路由,静态路由会优先生效。
4.4 实操心得与避坑清单
做了这么多次实验,我总结了几个实操心得:
- 配置前先画拓扑、写地址表。不要一边配一边想,容易乱。
- 每配完一段就验证一段。不要全部配完再测,出了问题不好定位。
- 用display命令而不是凭感觉。接口状态、路由表、聚合状态,都要用命令确认。
- 保存配置前先确认业务正常。有些设备重启后配置丢失,如果不保存,白配了。
- 链路聚合的成员接口不要跨设备。成员接口必须在同一台设备上,不能把两台设备的接口聚合成一个逻辑接口。
- 静态路由的下一跳用互联地址,不要用业务地址。用业务地址做下一跳,如果业务网段出问题,路由也会受影响。
注意:不同厂商的设备命令有差异,比如华为的Eth-Trunk、思科的EtherChannel、H3C的Bridge-Aggregation,原理一样但命令不同。配置前先确认设备厂商和型号,查对应的命令手册。
4.5 从实验到生产的几个扩展方向
这个实验是最小化的验证环境,实际生产环境还需要考虑更多。
扩展方向一:增加动态路由。如果网络规模变大,静态路由维护成本高,可以换成OSPF等动态路由协议,让路由器自动学习内部网段。
扩展方向二:增加网关冗余。如果三层交换机单点故障,整个网络就断了。可以用VRRP做网关冗余,两台三层交换机互为备份。
扩展方向三:增加链路聚合的冗余。如果两台交换机之间的聚合链路全部断了,网络就分区了。可以增加一条备用链路,或者用堆叠技术把两台交换机虚拟成一台。
扩展方向四:增加访问控制。不同VLAN之间默认是互通的,如果某些VLAN不应该互访,需要用ACL做访问控制。
这些扩展方向每一个都可以单独做一个实验,我后续会逐个展开。对于当前这个实验来说,先把VLAN间路由、链路聚合、静态路由这三块吃透,后面的扩展都是在这基础上叠加。
我个人在实际操作中的体会是,网络配置最怕“想当然”。你以为配了就能通,但往往因为一个掩码、一个VLAN号、一个接口模式,整个链路就不通。所以每次配置完,一定要用命令验证,用ping测试,用tracert看路径。把每一次排错的过程记下来,下次遇到类似问题就能快速定位。这个实验我反复做了很多遍,每次都能发现新的细节,比如LACP的协议报文优先级、静态路由的递归查找、VLANIF的MAC地址学习,这些都是书本上不会细讲但实际会遇到的东西。