三层交换机VLAN间路由、链路聚合与静态路由综合组网实战 1. 项目缘起与整体设计思路1.1 为什么要把VLAN、链路聚合和静态路由放在一起做很多刚接触企业级网络的朋友会有一个困惑明明交换机上划了VLAN广播域也隔离了可不同VLAN之间还是通不了明明两条网线插在交换机上一条断了业务就中断带宽也没叠加。这三个问题——VLAN间通信、链路冗余与带宽叠加、跨网段路由——在实际组网里几乎总是同时出现所以我把它们放在一个实验里一次性打通。这个项目的核心目标很明确在一台三层交换机上划分多个VLAN用链路聚合把两台交换机之间的多条物理链路捆绑成一条逻辑链路再通过静态路由把三层交换机和一台路由器连起来最终实现不同VLAN的主机能互访同时能访问路由器模拟的外部网段。整套方案适合有一定网络基础、正在准备网络方向认证考试或者需要给中小型办公网络做规划的朋友参考。我选择“三层交换机做VLAN间路由 路由器做出口静态路由”这个组合而不是全部用路由器或者全部用三层交换机原因在于成本和效率的平衡。三层交换机做VLAN间路由是硬件转发速度快、延迟低适合内部东西向流量而出口方向用一台路由器做静态路由配置简单、行为可预测不需要跑复杂的动态路由协议。对于中小规模网络来说这是性价比最高的一种做法。链路聚合这部分我用的是基于端口的手工聚合模式没有用协商协议。为什么因为手工模式配置最直接两端都强制聚合不依赖协议报文交互在实验环境和很多生产环境里都足够稳定。当然它也有缺点后面我会详细说。1.2 整体拓扑与地址规划先把我用的拓扑说清楚。整个实验由三台设备组成一台三层交换机作为核心负责VLAN间路由和聚合、一台二层交换机作为接入负责连接终端主机并参与链路聚合、一台路由器作为出口网关连接外部网段。地址规划我遵循了几个原则VLAN号与网段第三段对应方便记忆互联地址用/30掩码节省地址空间管理地址单独规划避免和业务网段冲突。具体规划如下表设备接口/逻辑接口地址说明三层交换机VLANIF 10192.168.10.1/24VLAN10网关三层交换机VLANIF 20192.168.20.1/24VLAN20网关三层交换机VLANIF 30192.168.30.1/24VLAN30网关三层交换机VLANIF 10010.0.0.1/30与路由器互联路由器上行口10.0.0.2/30与三层交换机互联路由器下行口172.16.1.1/24模拟外部网段主机A—192.168.10.10/24VLAN10终端主机B—192.168.20.10/24VLAN20终端主机C—192.168.30.10/24VLAN30终端这个规划里有一个细节值得说互联地址我用了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 三层交换机侧的完整配置流程我按实际配置顺序来写你可以直接照着敲。第一步创建VLANvlan 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 二层交换机侧的配置与聚合对接二层交换机的配置相对简单但聚合部分的对接要仔细。创建VLANvlan 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地址学习这些都是书本上不会细讲但实际会遇到的东西。