1. 项目背景与核心需求拆解
1.1 为什么会有跨VLAN通信这个需求
刚接触网络工程的朋友经常会遇到一个很典型的场景:公司里不同部门被划分到了不同的VLAN,财务部在VLAN 10,技术部在VLAN 20,行政部在VLAN 30。划分VLAN本身是为了隔离广播域、提升安全性,但问题随之而来——财务部需要访问技术部共享的文件服务器,行政部需要连到技术部的打印服务器。VLAN之间默认是二层隔离的,广播包过不去,单播包也过不去,这时候就必须引入三层转发能力。
跨VLAN通信的方案有好几种,常见的有单臂路由、三层交换机SVI、静态路由配合多台设备等。这次我做的项目比较特殊:手头有两台二层交换机,没有三层交换机可用,但有一台路由器。需求是让连接在不同交换机上的不同VLAN能够互相通信。这个场景在中小型网络改造、实验室环境、临时项目部署中非常常见,因为预算有限或者设备利旧,不可能所有位置都换成三层设备。
静态路由在这里扮演的角色是:让路由器知道去往各个VLAN网段的下一跳在哪里。二层交换机负责VLAN划分和Trunk链路,路由器负责三层转发,两者配合就能实现跨交换机的VLAN间路由。这套方案的核心价值在于用最低的成本盘活现有设备,不需要额外采购三层交换机就能打通全网。
1.2 适合哪些人参考这套方案
这套方案特别适合以下几类朋友:一是正在备考网络方向认证的学员,静态路由和VLAN间路由是必考实操点;二是中小企业里兼管网络的运维人员,设备不多但需要把网络理清楚;三是做弱电集成的工程师,经常遇到客户要求划分VLAN又要互通的情况;四是网络技术爱好者,想在家里或实验室搭一套贴近真实环境的小型网络。
我这次用的设备组合是两台二层可管理交换机加一台路由器。交换机负责VLAN创建、端口划分、Trunk配置,路由器负责子接口配置和静态路由编写。整个方案不依赖动态路由协议,配置量小,排错路径清晰,非常适合作为静态路由的实战练习。
注意:静态路由适合网络拓扑稳定、规模不大的场景。如果网络经常变动或者有几十个网段,建议考虑动态路由协议,否则后期维护成本会很高。
2. 网络拓扑设计与地址规划思路
2.1 拓扑结构的选择与理由
我设计的拓扑是这样的:路由器R1的物理接口G0/0通过Trunk链路连接到交换机SW1的上行口,SW1和SW2之间也用Trunk链路互联。SW1上创建VLAN 10和VLAN 20,SW2上创建VLAN 20和VLAN 30。VLAN 20横跨两台交换机,用来验证跨交换机的同一VLAN通信;VLAN 10和VLAN 30分别只在其中一台交换机上,用来验证不同VLAN跨交换机的路由通信。
为什么这样设计?因为我想一次性覆盖两个验证点:同一VLAN跨交换机通信是否正常,以及不同VLAN跨交换机通信是否正常。如果只验证后者,拓扑可以更简单,但实际项目中这两种情况往往同时存在,分开验证反而浪费时间。
路由器与SW1之间用Trunk而不是Access,是因为路由器要承载多个VLAN的网关,必须通过子接口来区分不同VLAN的流量。如果路由器接口配成Access,那它只能属于一个VLAN,其他VLAN的流量就上不来了。这是单臂路由的典型做法,一根物理线缆承载多个VLAN的三层转发。
2.2 IP地址规划与VLAN分配
地址规划这块我遵循几个原则:每个VLAN一个独立网段,网关统一放在路由器子接口上,网段划分留足余量方便后续扩展。具体分配如下表:
| 设备 | 接口/子接口 | VLAN | IP地址 | 用途 |
|---|---|---|---|---|
| R1 | G0/0.10 | VLAN 10 | 192.168.10.1/24 | VLAN 10网关 |
| R1 | G0/0.20 | VLAN 20 | 192.168.20.1/24 | VLAN 20网关 |
| R1 | G0/0.30 | VLAN 30 | 192.168.30.1/24 | VLAN 30网关 |
| SW1 | Vlanif 1 | 管理 | 192.168.1.1/24 | 交换机管理地址 |
| SW2 | Vlanif 1 | 管理 | 192.168.1.2/24 | 交换机管理地址 |
| PC1 | 网卡 | VLAN 10 | 192.168.10.10/24 | 测试终端 |
| PC2 | 网卡 | VLAN 20 | 192.168.20.10/24 | 测试终端 |
| PC3 | 网卡 | VLAN 30 | 192.168.30.10/24 | 测试终端 |
网关地址统一用网段的第一个可用地址,这是行业惯例,方便记忆和排错。PC的地址用第二个可用地址往后排,避免和网关冲突。管理网段单独用192.168.1.0/24,和生产网段分开,这样即使业务VLAN出问题,管理通道还在,方便远程排查。
提示:实际项目中建议把管理VLAN单独划分,不要用默认的VLAN 1。默认VLAN存在安全隐患,而且容易和其他设备的默认配置冲突。
2.3 静态路由的设计逻辑
静态路由的核心就一句话:告诉路由器去往某个网段应该从哪个接口出去、下一跳是谁。在这个拓扑里,路由器直连了三个VLAN网段,这三个网段是路由器自己知道的,不需要写静态路由。但如果网络里还有其他网段,比如SW1和SW2的管理网段192.168.1.0/24,路由器就需要一条静态路由指向这个网段。
我这次的设计里,路由器需要知道192.168.1.0/24怎么走。因为管理网段在交换机上,路由器不直连,所以需要写一条静态路由:目标网段192.168.1.0/24,下一跳指向SW1的VLAN 10接口地址或者SW1的管理地址。但这里有个细节:SW1的管理地址在VLAN 1,而路由器子接口在VLAN 10,跨VLAN的下一跳需要交换机有对应的三层能力。二层交换机没有三层转发能力,所以这条静态路由实际上需要指向路由器自己能直达的地址。
等等,这里需要重新理清。二层交换机上配置的Vlanif接口地址,实际上是交换机自己的管理地址,用于远程登录,不参与数据转发。所以路由器无法通过静态路由直接访问到交换机的管理网段,除非交换机支持三层功能。在纯二层交换机加路由器的架构里,管理网段通常不参与业务转发,或者通过带外管理方式访问。
所以在这个项目里,静态路由的主要作用是:如果后续增加了新的网段(比如在路由器另一侧接了一个新网络),路由器需要知道去往新网段的路径。或者如果拓扑扩展成多台路由器,静态路由用来打通路由器之间的网段。在当前这个单路由器加两台二层交换机的场景里,路由器直连了所有业务网段,静态路由的配置更多是为了演示和后续扩展。
我实际配置时会加一条默认路由指向外部网络,再加几条明细静态路由用于特定网段。这样既保证了灵活性,又不会让路由表过于臃肿。
3. 核心配置与实操步骤详解
3.1 交换机VLAN创建与端口划分
先搞定SW1的配置。创建VLAN 10和VLAN 20,把连接PC1的端口划入VLAN 10,连接SW2的端口配成Trunk并允许VLAN 20通过,连接路由器的端口配成Trunk并允许VLAN 10和VLAN 20通过。
# SW1配置 system-view sysname SW1 vlan batch 10 20 # 连接PC1的端口 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit # 连接路由器的端口 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20 quit # 连接SW2的端口 interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass vlan 20 quit这里有个关键点:SW1和SW2之间的Trunk只允许VLAN 20通过,因为VLAN 20是跨交换机的VLAN,VLAN 10只在SW1上,不需要传到SW2。这样做的目的是减少不必要的广播流量,提升网络效率。如果允许所有VLAN通过,虽然也能通,但广播包会泛洪到不需要的交换机上,浪费带宽。
SW2的配置类似,创建VLAN 20和VLAN 30,连接PC3的端口划入VLAN 30,连接PC2的端口划入VLAN 20,连接SW1的端口配成Trunk允许VLAN 20通过。
# SW2配置 system-view sysname SW2 vlan batch 20 30 interface GigabitEthernet0/0/1 port link-type access port default vlan 20 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 30 quit interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass vlan 20 quit注意:Trunk链路两端的允许VLAN列表必须匹配。如果一端允许VLAN 20,另一端不允许,VLAN 20的流量就会被丢弃。我见过很多次因为两端配置不一致导致VLAN不通的情况,排错时优先检查这个。
3.2 路由器子接口配置与单臂路由实现
路由器这边是核心。物理接口G0/0先开启,不配IP地址,然后创建三个子接口分别对应三个VLAN。每个子接口封装对应的VLAN ID,配置网关地址。
# R1配置 system-view sysname R1 interface GigabitEthernet0/0 undo shutdown quit # VLAN 10子接口 interface GigabitEthernet0/0.10 dot1q termination vid 10 ip address 192.168.10.1 24 arp broadcast enable quit # VLAN 20子接口 interface GigabitEthernet0/0.20 dot1q termination vid 20 ip address 192.168.20.1 24 arp broadcast enable quit # VLAN 30子接口 interface GigabitEthernet0/0.30 dot1q termination vid 30 ip address 192.168.30.1 24 arp broadcast enable quit这里有几个容易踩坑的地方。第一,dot1q termination vid这个命令是华为设备上的写法,不同厂商命令不一样。思科设备上是encapsulation dot1q 10,华三设备上是vlan-type dot1q vid 10。配置前先确认设备型号和系统版本。
第二,arp broadcast enable这条命令很多人会漏掉。子接口默认不开启ARP广播功能,如果不配这条,路由器无法解析下游设备的MAC地址,ping不通。我刚开始做实验的时候就因为这个卡了半天,后来查文档才发现是ARP广播没开。
第三,子接口的VLAN ID必须和交换机Trunk允许的VLAN一致。如果路由器子接口配了VLAN 10,但交换机Trunk没允许VLAN 10通过,那VLAN 10的流量根本到不了路由器。
3.3 静态路由配置与验证
路由器直连了三个网段,路由表里会自动生成直连路由。但如果要访问其他网段,就需要静态路由。我这次加一条默认路由指向模拟的外网出口,再加一条去往管理网段的静态路由。
# 默认路由 ip route-static 0.0.0.0 0.0.0.0 192.168.10.254 # 去往管理网段的静态路由 ip route-static 192.168.1.0 255.255.255.0 192.168.10.1第一条默认路由的意思是:所有不知道往哪走的流量,都发给192.168.10.254这个下一跳。这个地址是我模拟的上游设备地址,实际项目中可能是防火墙或者运营商网关。
第二条静态路由的意思是:去往192.168.1.0/24的流量,下一跳是192.168.10.1。但这里有个问题,192.168.10.1是路由器自己的子接口地址,下一跳不能是自己。所以这条路由实际上需要指向交换机上某个能到达管理网段的地址。在纯二层交换机场景下,这个下一跳可能不存在,所以这条路由更多是演示语法。
实际项目中,如果交换机支持三层功能,可以在交换机上配置Vlanif接口地址,然后路由器静态路由指向那个地址。如果交换机是纯二层的,管理网段通常通过带外管理或者单独的管理口访问,不需要走业务路由。
验证配置是否生效,用以下命令:
# 查看路由表 display ip routing-table # 查看子接口状态 display ip interface brief # 从PC1 ping PC2 ping 192.168.20.10 # 从PC1 ping PC3 ping 192.168.30.10如果ping不通,按以下顺序排查:先看子接口状态是不是up,再看ARP表有没有学到MAC,再看路由表有没有对应条目,最后看交换机Trunk配置是否正确。
4. 常见问题与排错经验实录
4.1 子接口配置后ping不通网关
这是最常见的问题。PC配了网关地址,但ping不通网关。原因通常有三个:一是子接口没有开启ARP广播,二是子接口的VLAN ID和交换机Trunk不匹配,三是物理接口没有up。
排查步骤:先在路由器上display ip interface brief看子接口状态,如果是down,检查物理接口是否up。如果子接口up但ping不通,在路由器上display arp看有没有学到PC的MAC。如果没有,检查arp broadcast enable是否配置。如果ARP学到了但还是不通,检查交换机Trunk的允许VLAN列表。
我遇到过一次,子接口配置都对,ARP也学到了,但就是ping不通。后来发现是交换机连接路由器的端口没有配成Trunk,还是默认的Access模式。Access模式只能属于一个VLAN,其他VLAN的流量全被丢弃了。改成Trunk后立刻通了。
4.2 跨交换机同一VLAN不通
VLAN 20横跨两台交换机,PC2和另一台交换机上的VLAN 20设备应该能互通。如果不通,检查两台交换机之间的Trunk是否允许VLAN 20通过。我见过有人两端都配了Trunk,但一端允许VLAN 20,另一端只允许VLAN 1,结果VLAN 20的流量过不去。
还有一个隐蔽的问题:如果两台交换机之间的链路是Access模式,那只能承载一个VLAN的流量。跨交换机的VLAN通信必须用Trunk,这是二层转发的基本要求。
4.3 静态路由写了但不生效
静态路由不生效的原因通常有几个:下一跳不可达、出接口配置错误、路由优先级问题。下一跳不可达是最常见的,如果下一跳地址不在直连网段内,路由器不会把这条路由加入路由表。
检查方法:display ip routing-table看路由表里有没有这条静态路由。如果没有,用display ip routing-table protocol static看静态路由的状态。如果是inactive,说明下一跳不可达。这时候需要检查下一跳地址是否在直连网段内,或者是否有其他路由能到达下一跳。
提示:静态路由的下一跳必须是直连网段内的地址,或者通过其他路由能到达的地址。如果下一跳不可达,路由不会生效。
4.4 排错速查表
| 现象 | 可能原因 | 排查命令 | 解决方法 |
|---|---|---|---|
| PC ping不通网关 | 子接口未开ARP广播 | display arp | 子接口下加arp broadcast enable |
| 跨交换机VLAN不通 | Trunk未允许该VLAN | display port vlan | Trunk下加allow-pass vlan |
| 静态路由不生效 | 下一跳不可达 | display ip routing-table | 检查下一跳是否在直连网段 |
| 部分VLAN通部分不通 | Trunk允许列表不匹配 | display port vlan | 两端Trunk允许列表保持一致 |
| 子接口状态down | 物理接口未up | display interface brief | 物理接口undo shutdown |
5. 实操心得与进阶建议
5.1 配置顺序很重要
我习惯的配置顺序是:先配交换机VLAN和端口,再配路由器子接口,最后配静态路由。为什么这个顺序?因为如果先配路由器子接口,子接口会因为没有VLAN流量而处于down状态,虽然不影响后续配置,但看着不舒服。先配交换机,VLAN起来了,路由器子接口一配就是up状态,验证起来更直观。
另外,配置完每一层都验证一下。交换机配完VLAN,先看VLAN是否创建成功,端口是否划入正确VLAN。路由器配完子接口,先看子接口是否up,ARP是否能学到。最后配静态路由,看路由表是否生效。分层验证的好处是,出问题时能快速定位是哪一层的配置有问题。
5.2 保存配置的习惯
很多人配置完直接关设备,结果重启后配置全丢了。华为设备用save命令保存,思科设备用write memory或copy running-config startup-config。我习惯配置完一段就保存一次,避免意外断电导致配置丢失。
# 华为设备保存配置 save # 确认输入y # 思科设备保存配置 write memory5.3 静态路由的适用边界
静态路由不是万能的。网络规模小、拓扑稳定的时候,静态路由简单可靠,不占CPU,不占带宽。但网络一大,静态路由的维护成本就上来了。每加一个网段,所有路由器都要加一条路由,改一个网段,所有相关路由器都要改。这种时候就该上动态路由协议了。
我的经验是:网段数量在10个以内,拓扑半年不变,用静态路由没问题。超过10个网段,或者经常有变动,直接上OSPF。OSPF配置一次,后续加网段自动学习,省心很多。
5.4 安全加固建议
VLAN间路由打通了,但安全不能忽视。不同VLAN之间应该根据业务需求做访问控制。比如财务VLAN不应该能访问技术VLAN的某些敏感服务器。这时候可以在路由器子接口上配ACL,或者在交换机上配ACL。
# 在路由器子接口上配ACL示例 acl number 3000 rule 5 deny ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 rule 10 permit ip quit interface GigabitEthernet0/0.10 traffic-filter inbound acl 3000 quit这条ACL的意思是:禁止VLAN 10的流量访问VLAN 20,其他流量放行。实际项目中根据业务需求调整规则,不要照搬。
5.5 后续扩展方向
这套基础架构搭好后,可以往几个方向扩展。一是加一台三层交换机替换路由器做VLAN间路由,性能更好,配置更简洁。二是加一条链路做冗余,配合STP或者链路聚合提升可靠性。三是引入动态路由协议,把静态路由替换成OSPF,适应更大规模的网络。四是加防火墙做安全隔离,把VLAN间流量引到防火墙做深度检测。
我个人在实际操作中的体会是,静态路由配合单臂路由的方案,虽然看起来简单,但把二层和三层的关系理得很清楚。搞懂了这个,再学三层交换机的SVI配置、动态路由协议,都会容易很多。基础打牢了,后面学什么都快。