首页 / 资讯中心 / 文章详情

三层交换机VLAN间通信配置实战:SVI与路由开启详解

三层交换机VLAN间通信配置实战:SVI与路由开启详解 ★ FEATURED ARTICLE
1. 为什么还要折腾三层交换机做VLAN间通信刚入行那会儿我对三层交换机这个概念一直有点模糊。二层交换机负责同一个网段内的数据转发路由器负责不同网段之间的路由那三层交换机到底站在哪个位置后来在实际项目里踩了几次坑才真正搞明白三层交换机本质上就是带路由功能的交换机它把路由能力集成到了交换芯片里转发不同VLAN之间的数据包时不需要像传统路由器那样把流量拉到CPU上慢慢处理而是通过ASIC芯片线速转发。这个差别在实际网络里非常关键。我做过一个园区网的改造项目原来用的是二层交换机加单臂路由的方案也就是把路由器的一个物理接口划分成多个子接口每个子接口对应一个VLAN的网关。刚开始用户少的时候没什么感觉后来终端数量涨到三百多台跨VLAN的访问延迟明显上来了高峰期ping网关的延迟从1毫秒飙到十几毫秒丢包也开始出现。原因很简单所有跨VLAN的流量都要经过路由器那一个物理接口带宽和CPU处理能力都成了瓶颈。换成三层交换机之后跨VLAN转发直接在硬件层面完成延迟稳定在1毫秒以内问题彻底解决。所以这篇内容主要聊的就是怎么用三层交换机把不同VLAN之间的通信打通。涉及的核心技术点包括VLAN划分、SVI接口配置、IP路由开启、静态路由或动态路由协议的选择。适合有一定网络基础、正在学习交换路由配置的读者也适合在实际工作中需要做VLAN间互通方案选型的从业者。我会从整体设计思路讲到具体配置命令再到排错经验尽量把每个环节的为什么说清楚。2. 整体方案设计与核心思路拆解2.1 二层隔离与三层互通的本质矛盾VLAN这个东西本质上是在一个物理交换机上划分出多个逻辑上的独立网络。同一个VLAN内的设备可以自由通信不同VLAN之间默认是完全隔离的。这个隔离是好事广播域被限制了安全性也提高了。但实际业务中不同部门、不同功能区域之间往往又需要互相访问比如办公区的电脑要访问服务器区的数据库这就产生了隔离和互通的矛盾。解决这个矛盾的思路其实很直接既然二层不通那就在三层上想办法。具体来说就是给每个VLAN分配一个IP网段然后让三层交换机充当每个VLAN的网关。当VLAN 10里的主机要访问VLAN 20里的主机时数据包先送到网关也就是三层交换机上的SVI接口三层交换机查路由表发现目标网段在VLAN 20于是把包转发到VLAN 20的SVI接口再二层转发给目标主机。整个过程数据包只经过了一次三层查表而且是在硬件层面完成的。2.2 为什么选SVI而不是单臂路由实现VLAN间通信有好几种方案我列个表对比一下方案核心原理优点缺点适用场景单臂路由路由器一个物理口划子接口做网关设备要求低路由器就能做带宽瓶颈明显CPU压力大小型网络终端少于50台多臂路由每个VLAN一个物理接口连路由器各VLAN独立带宽浪费物理接口布线复杂几乎不推荐三层交换机SVI交换机上创建虚拟接口做网关线速转发配置简洁需要三层交换机中大型园区网三层交换机路由口用物理口转三层口互联适合交换机之间互联不直接解决终端网关问题核心到汇聚互联SVI的全称是Switch Virtual Interface你可以把它理解成给VLAN配的一个虚拟网卡。每个VLAN对应一个SVI在这个SVI上配IP地址这个IP就是这个VLAN内所有主机的网关。主机把跨网段的包发给网关三层交换机收到后查路由表从对应的SVI发出去。整个过程对主机来说是透明的它只知道自己的网关是某个IP剩下的路由和转发都由三层交换机搞定。我选SVI方案的理由很实在一是转发性能好硬件ASIC处理不会成为瓶颈二是配置简单不需要额外拉线连路由器三是扩展方便加一个VLAN就加一个SVI不用动物理连接。2.3 路由方式的选择静态还是动态三层交换机开启路由功能后它需要知道去往各个网段的路由。如果网络拓扑比较简单就一台三层交换机下挂几个VLAN那其实不需要额外配置路由因为直连网段会自动生成直连路由。但如果网络里有多台三层交换机或者要连到外网就需要考虑路由协议了。静态路由适合拓扑稳定、规模小的场景配置简单不占资源。动态路由协议比如OSPF适合拓扑复杂、可能变化的场景能自动收敛。我在实际项目里的经验是如果只有一台三层交换机做核心下面挂几个VLAN直连路由就够了如果有两台三层交换机做冗余之间跑OSPF比较省心如果只是简单互联静态路由写两条也就够了。3. 核心细节解析与实操要点3.1 VLAN规划与IP地址设计动手配置之前先在纸上把VLAN和IP规划好这一步偷懒后面会加倍还回来。我一般按这样的原则来VLAN ID选择避开VLAN 1因为很多设备默认所有端口都在VLAN 1容易出安全问题。从VLAN 10开始以10为步长递增方便记忆和扩展。IP网段规划每个VLAN用一个独立的子网比如VLAN 10用192.168.10.0/24VLAN 20用192.168.20.0/24。第三段数字和VLAN ID对应一看就明白。网关地址一般用网段的第一个可用地址或者最后一个可用地址。我习惯用第一个比如192.168.10.1。举个例子假设有三个VLANVLAN ID名称网段网关地址用途10Office192.168.10.0/24192.168.10.1办公区终端20Server192.168.20.0/24192.168.20.1服务器区30Manage192.168.30.0/24192.168.30.1网络设备管理注意规划的时候要预留扩展空间别把网段用得太满。比如用/24的掩码实际可能只用了二三十个地址但剩下的留着以后加设备用。3.2 三层交换机上必须开启的关键功能很多人配置完了发现VLAN间不通排查半天最后发现是某个基础功能没开。三层交换机上有几个关键点必须确认第一IP路由功能要开启。大部分三层交换机默认是关闭路由功能的需要手动开启。不同厂商命令不一样但思路一致。比如某些设备用ip routing命令开启有些是在全局配置模式下默认就支持。第二SVI接口要激活。创建SVI之后接口默认可能是shutdown状态需要手动no shutdown。另外SVI的活跃状态还依赖于该VLAN下至少有一个物理端口是up的。如果VLAN里一个端口都没upSVI就是down的网关也就不生效。第三物理端口要划到正确的VLAN里。这个听起来是废话但我确实见过有人SVI配好了端口忘了划VLAN结果终端根本不在那个VLAN里自然不通。3.3 终端网关配置的常见误区终端要跨网段通信必须把网关指向三层交换机上对应SVI的IP地址。这里有几个坑网关地址写错比如SVI配的是192.168.10.1终端网关写成了192.168.10.254那肯定不通。子网掩码不一致终端掩码和SVI掩码不一致会导致终端认为目标地址在同一网段直接发ARP请求而不走网关。多个网关有些终端配了多个网关但系统只认第一个配了也没用。我一般建议在DHCP服务器上统一分配网关避免手动配置出错。如果必须手动配配完用ipconfigWindows或ip addrLinux确认一下。4. 完整实操过程与核心环节实现4.1 实验环境搭建与基础配置我用一个典型的实验拓扑来说明。假设有一台三层交换机下面接了两台二层交换机分别承载VLAN 10和VLAN 20的终端。三层交换机上创建VLAN 10和VLAN 20的SVI配置IP地址作为网关。先做基础配置。进入三层交换机的命令行创建VLANSwitch enable Switch# configure terminal Switch(config)# vlan 10 Switch(config-vlan)# name Office Switch(config-vlan)# exit Switch(config)# vlan 20 Switch(config-vlan)# name Server Switch(config-vlan)# exit然后把连接下层交换机的端口配成Trunk允许VLAN 10和VLAN 20通过Switch(config)# interface GigabitEthernet0/1 Switch(config-if)# switchport trunk encapsulation dot1q Switch(config-if)# switchport mode trunk Switch(config-if)# switchport trunk allowed vlan 10,20 Switch(config-if)# exit提示有些三层交换机不支持switchport trunk encapsulation dot1q这条命令因为默认就是dot1q封装敲了反而报错。遇到报错直接跳过这条就行。4.2 SVI接口配置与路由开启接下来创建SVI并配置IP地址Switch(config)# interface vlan 10 Switch(config-if)# ip address 192.168.10.1 255.255.255.0 Switch(config-if)# no shutdown Switch(config-if)# exit Switch(config)# interface vlan 20 Switch(config-if)# ip address 192.168.20.1 255.255.255.0 Switch(config-if)# no shutdown Switch(config-if)# exit然后开启IP路由功能Switch(config)# ip routing这条命令是整篇文章的核心。没有它三层交换机就只是一台普通的二层交换机SVI配了IP也没用因为它不会在不同VLAN之间转发数据包。配置完成后查看路由表确认直连路由已经生成Switch# show ip route你应该能看到类似这样的输出C 192.168.10.0/24 is directly connected, Vlan10 C 192.168.20.0/24 is directly connected, Vlan20这两个C代表直连路由说明三层交换机已经知道这两个网段怎么走了。4.3 终端配置与连通性验证给VLAN 10里的终端配IP192.168.10.100/24网关192.168.10.1。给VLAN 20里的终端配IP192.168.20.100/24网关192.168.20.1。配好后从VLAN 10的终端ping VLAN 20的终端ping 192.168.20.100如果通了说明配置成功。如果不通按下面的顺序排查先ping自己的网关确认终端到三层交换机通不通。再在三层交换机上ping两个SVI地址确认SVI本身是up的。检查show ip route有没有直连路由。检查show vlan确认端口划到了正确的VLAN。检查终端的掩码和网关有没有配错。4.4 多台三层交换机场景下的路由配置如果网络里有两台三层交换机各自下面挂了不同的VLAN那还需要在两台交换机之间配置路由。假设交换机A有VLAN 10192.168.10.0/24交换机B有VLAN 20192.168.20.0/24两台交换机之间用一条链路互联互联地址用10.0.0.0/30。交换机A上配置SwitchA(config)# interface GigabitEthernet0/24 SwitchA(config-if)# no switchport SwitchA(config-if)# ip address 10.0.0.1 255.255.255.252 SwitchA(config-if)# exit SwitchA(config)# ip route 192.168.20.0 255.255.255.0 10.0.0.2交换机B上配置SwitchB(config)# interface GigabitEthernet0/24 SwitchB(config-if)# no switchport SwitchB(config-if)# ip address 10.0.0.2 255.255.255.252 SwitchB(config-if)# exit SwitchB(config)# ip route 192.168.10.0 255.255.255.0 10.0.0.1这里no switchport命令的作用是把物理端口从二层模式转成三层模式让它像路由器接口一样工作。然后写静态路由告诉交换机A去192.168.20.0/24的下一跳是10.0.0.2交换机B反过来。如果拓扑更复杂或者需要冗余那就上OSPF。配置也不复杂在每台三层交换机上启用OSPF进程把直连网段宣告进去就行SwitchA(config)# router ospf 1 SwitchA(config-router)# network 192.168.10.0 0.0.0.255 area 0 SwitchA(config-router)# network 10.0.0.0 0.0.0.3 area 0OSPF会自动学习对端的路由不需要手动写静态路由。但要注意area ID要一致network命令里的反掩码要算对。5. 常见问题与排查技巧实录5.1 配置完了不通先查这五个地方我整理了一个排查顺序表按这个顺序走基本能覆盖90%的问题排查步骤检查命令预期结果常见问题1. 终端到网关ping 网关IP通终端IP/掩码/网关配错2. SVI状态show ip interface briefup/upSVI被shutdown或VLAN无活跃端口3. 路由表show ip route有直连路由ip routing没开4. VLAN成员show vlan brief端口在正确VLAN端口没划VLAN或划错5. Trunk配置show interfaces trunk允许对应VLAN通过Trunk没放行VLAN5.2 几个我踩过的坑坑一SVI是up的但协议是down的。有一次配置完show ip interface brief显示SVI的status是up但protocol是down。查了半天发现是这个VLAN下没有任何物理端口是up的。三层交换机上SVI的协议状态依赖于VLAN内是否有活跃端口。解决办法很简单确保该VLAN下至少有一个端口连接了设备并且是up的。坑二Trunk两端VLAN允许列表不一致。一端允许了VLAN 10和20另一端只允许了VLAN 10结果VLAN 20的流量过不去。这种问题在跨设备排错时特别隐蔽因为两端单独看配置都没错。我的习惯是配完Trunk后两端都show interfaces trunk对比一下。坑三终端防火墙拦截了ping。网络配置全对但ping不通。后来发现是终端自带的防火墙把ICMP包拦了。这种情况换用TCP端口测试比如telnet或curl就能确认网络是通的。坑四ARP表项没老化。改了网关IP之后终端还缓存着旧的ARP表项导致通信异常。清一下ARP缓存Windows用arp -dLinux用ip neigh flush就好了。5.3 性能与安全方面的注意事项VLAN间通信打通之后有几个安全和性能上的点值得关注ACL控制不是所有VLAN之间都应该自由通信。比如办公区不应该能直接访问管理VLAN。可以在SVI上应用ACL限制源和目标网段。广播风暴抑制虽然VLAN隔离了广播域但每个VLAN内部还是可能有广播风暴。可以在端口上配置风暴控制。DHCP中继如果DHCP服务器在某个VLAN里其他VLAN的终端要获取IP需要在SVI上配置DHCP中继ip helper-address把DHCP请求转发给服务器。ARP代理某些场景下可能需要开启ARP代理但一般不建议会增加安全风险。6. 不同厂商设备的配置差异与选型建议6.1 主流厂商命令对比不同厂商的三层交换机配置命令有差异但逻辑是一样的。我列个对比表功能厂商A风格厂商B风格厂商C风格创建VLANvlan 10vlan 10vlan 10SVI配置interface vlan 10interface vlanif 10interface vlan 10开启路由ip routing默认开启ip routing端口转三层no switchportundo portswitchno switchport静态路由ip route 目标 掩码 下一跳ip route-static 目标 掩码 下一跳ip route 目标 掩码 下一跳虽然命令长得不一样但核心概念完全一致创建VLAN、配SVI、开路由、写路由条目。学会一个厂商的配置换到另一个厂商也就是查一下命令手册的事。6.2 选型时看什么如果让我推荐三层交换机的选型我会关注这几个点背板带宽和包转发率这两个参数决定了交换机的转发能力。包转发率要能满足所有端口线速转发的需求。路由表容量如果网络规模大路由条目多路由表容量要够。ACL规则数量安全控制需要ACL规则数量上限要满足业务需求。堆叠或冗余能力核心层最好支持堆叠或VRRP避免单点故障。管理方式支持命令行、Web、SNMP等多种管理方式方便运维。对于中小型网络一台支持三层功能的交换机做核心就够了。对于大型网络可能需要核心-汇聚-接入三层架构核心和汇聚层用三层交换机接入层用二层交换机。7. 从实验到生产实际部署中的经验补充7.1 实验环境和生产环境的差异在实验环境里配通VLAN间通信可能十分钟就搞定了。但放到生产环境里要考虑的东西多得多。我总结了几个差异点规模实验里两三个VLAN生产里可能几十个VLANIP规划要更有条理。冗余实验里一台交换机生产里要考虑双机冗余、链路冗余。安全实验里不关心ACL生产里每个VLAN之间的访问都要有明确的策略。监控实验里不通了再查生产里要提前监控流量、CPU、内存等指标。变更管理实验里随便改生产里改之前要评估影响、做备份、选变更窗口。7.2 部署前的检查清单我在实际项目里养成了一个习惯正式配置之前先过一遍检查清单。VLAN ID和IP网段规划表是否完成每台设备的配置文件是否已备份变更窗口是否已确认影响范围是否已通知回滚方案是否准备好测试终端是否准备好测试用例是否明确监控告警是否已配置这些看起来是流程上的事但真到出问题的时候有没有备份、有没有回滚方案差别就是几分钟恢复还是几个小时恢复。7.3 验证与验收配置完成后不能只ping通就完事了。我一般会做这几项验证所有VLAN内的终端都能ping通自己的网关。任意两个VLAN的终端之间能互相ping通如果策略允许。跨VLAN的TCP应用比如HTTP、数据库能正常访问。路由表完整没有意外的路由条目。ACL策略生效该拦的拦住了该放的放行了。冗余链路切换正常如果有冗余。性能指标正常CPU和内存没有异常升高。这些验证做完才算真正交付。7.4 后续扩展的考虑网络不是一成不变的今天配好的东西明天可能就要改。所以在初始配置的时候我会留一些扩展空间VLAN ID留出余量不要连续用满。IP网段用/24而不是/25或/26虽然浪费一些地址但扩展方便。路由协议选OSPF而不是静态路由虽然配置复杂一点但以后加设备不用手动改路由。端口预留一些空闲的方便以后加设备。我个人在实际操作中的体会是三层交换机做VLAN间通信技术本身不复杂难的是规划清楚、配置规范、验证到位。把这三步做好了后面运维就省心。最后再分享一个小技巧配置的时候养成随手show run和show ip route的习惯每配几步就确认一下比配完一大段再排查要高效得多。
阅读完成 · 觉得有帮助?
咨询建站