核心原理:为什么需要特殊配置?
想象一下这个场景:

- 你有一台路由器(或防火墙),它有一个连接互联网的接口(
WAN口,IP地址为2.3.4)。 - 你有一台支持VLAN的二层交换机,下面连接了三个部门:销售部、技术部和访客部,分别属于 VLAN 10, 20, 30。
- 销售部电脑的IP地址是
168.10.x,技术部是168.20.x,访客部是168.30.x。
问题来了: 交换机是二层设备,它只认识MAC地址,不认识IP地址,它知道 168.10.x 属于VLAN 10,但它不知道这个数据包该如何发往互联网(2.3.4)。
解决方案: 我们需要一个三层网关来扮演“翻译官”的角色,这个网关需要:
- 连接到交换机,并能处理多个VLAN的流量。
- 连接到互联网(比如路由器的WAN口)。
- 为每个VLAN分配一个网关地址(VLAN 10的网关是
168.10.1,VLAN 20的网关是168.20.1)。
当销售部的电脑要访问 8.8.8 时:
- 它发现目标地址不在自己的
168.10.0/24网段,于是把数据包发往自己的网关168.10.1。 - 三层网关收到数据包,发现它需要发往互联网。
- 网关会进行网络地址转换,将源IP
168.10.x替换成它自己的公网IP2.3.4,然后再发送出去。 - 从互联网返回的数据包,目标地址是
2.3.4,网关收到后,根据会话表记录,再将数据包转发回最初发起请求的168.10.x电脑。
这个“三层网关”角色通常由以下设备之一来扮演:

- 路由器(特别是支持子接口或中继功能的路由器)
- 三层交换机(功能强大,集二层交换和三层路由于一体)
- 防火墙(最常见、最安全的方案)
- 带路由功能的软路由(如 pfSense, OpnSense, OpenWRT等)
常用技术实现方案
主要有两种主流技术来实现多VLAN的网关功能:Router-on-a-Stick (单臂路由) 和 三层交换。
Router-on-a-Stick (单臂路由)
这是在传统路由器和普通二层交换机之间非常流行的方案。
- 核心思想: 在路由器上创建多个子接口,每个子接口对应一个VLAN,并配置该VLAN的网关IP地址,交换机和路由器之间通过一条中继链路 连接,允许所有VLAN的流量都通过这条物理链路传输。
- 拓扑:
- 交换机:连接PC的端口划入对应VLAN,连接路由器的端口设置为
Trunk模式。 - 路由器:物理接口连接交换机,在该接口上创建多个逻辑子接口(如
G0/0.10,G0/0.20),每个子接口绑定一个VLAN ID和IP地址。
- 交换机:连接PC的端口划入对应VLAN,连接路由器的端口设置为
- 优点:
- 灵活,利用现有设备(普通交换机+路由器)即可实现。
- 配置相对简单。
- 缺点:
- 所有VLAN间的流量和互联网流量都经过这条物理链路,可能成为性能瓶颈。
- 路由器性能可能成为瓶颈。
三层交换
这是现代企业网络中最推荐、性能最高的方案。
- 核心思想: 使用一台三层交换机,它同时具备二层交换和三层路由的能力,直接在交换机上为每个VLAN创建SVI (Switch Virtual Interface),即VLAN接口,并配置网关IP地址。
- 拓扑:
- 交换机:连接PC的端口划入对应VLAN,交换机内部直接路由VLAN间的流量。
- 交换机:将一个物理接口作为路由接口(或连接到防火墙/路由器的接口),用于连接互联网。
- 优点:
- 性能极高:VLAN间的流量在交换机内部通过硬件转发,速度快,延迟低。
- 架构简洁:一台设备即可完成大部分工作,简化网络拓扑。
- 可扩展性强:易于添加新的VLAN和网关。
- 缺点:
设备成本相对较高(需要三层交换机)。
(图片来源网络,侵删)
详细配置步骤(以方案一:Router-on-a-Stick为例)
假设我们使用以下环境:
- 交换机: Cisco Catalyst 2960
- 路由器: Cisco ISR 4000系列
- VLAN规划:
- VLAN 10: 销售部, 网段
168.10.0/24, 网关168.10.1 - VLAN 20: 技术部, 网段
168.20.0/24, 网关168.20.1 - VLAN 30: 访客部, 网段
168.30.0/24, 网关168.30.1
- VLAN 10: 销售部, 网段
- 互联网连接: 路由器
G0/1接口连接ISP,IP为0.113.10,网关为0.113.1。
步骤1:在交换机上配置VLAN和Trunk
-
创建VLAN:
Switch> enable Switch# configure terminal Switch(config)# vlan 10 Switch(config-vlan)# name Sales Switch(config-vlan)# exit Switch(config)# vlan 20 Switch(config-vlan)# name Tech Switch(config-vlan)# exit Switch(config)# vlan 30 Switch(config-vlan)# name Guest Switch(config-vlan)# exit
-
将端口划入VLAN (假设连接销售部PC的端口是F0/1):
Switch(config)# interface range f0/1-5 // 假设F0/1到F0/5是销售部端口 Switch(config-if-range)# switchport mode access Switch(config-if-range)# switchport access vlan 10 Switch(config-if-range)# exit Switch(config)# interface range f0/6-10 // 技术部 Switch(config-if-range)# switchport mode access Switch(config-if-range)# switchport access vlan 20 Switch(config-if-range)# exit Switch(config)# interface range f0/11-15 // 访客部 Switch(config-if-range)# switchport mode access Switch(config-if-range)# switchport access vlan 30 Switch(config-if-range)# exit
-
配置连接路由器的Trunk链路 (假设是F0/24):
Switch(config)# interface f0/24 Switch(config-if)# switchport mode trunk Switch(config-if)# switchport trunk allowed vlan 10,20,30 // 允许所有VLAN通过 Switch(config-if)# end Switch# write memory // 保存配置
步骤2:在路由器上配置子接口和NAT
-
创建子接口并配置IP地址 (网关):
Router> enable Router# configure terminal // 配置VLAN 10的子接口 Router(config)# interface g0/0.10 Router(config-subif)# encapsulation dot1Q 10 // 绑定VLAN 10 Router(config-subif)# ip address 192.168.10.1 255.255.255.0 // 设置VLAN 10的网关 Router(config-subif)# exit // 配置VLAN 20的子接口 Router(config)# interface g0/0.20 Router(config-subif)# encapsulation dot1Q 20 Router(config-subif)# ip address 192.168.20.1 255.255.255.0 Router(config-subif)# exit // 配置VLAN 30的子接口 Router(config)# interface g0/0.30 Router(config-subif)# encapsulation dot1Q 30 Router(config-subif)# ip address 192.168.30.1 255.255.255.0 Router(config-subif)# exit
-
配置连接互联网的接口和默认路由:
Router(config)# interface g0/1 Router(config-if)# ip address 203.0.113.10 255.255.255.252 // ISP分配的公网IP Router(config-if)# no shutdown Router(config-if)# exit // 设置默认路由,所有未知流量都发往ISP网关 Router(config)# ip route 0.0.0.0 0.0.0.0 203.0.113.1
-
配置网络地址转换: 这是让内网PC能上网的关键,我们使用最简单的PAT (Port Address Translation),也叫NAT Overload,让所有内网PC共享一个公网IP。
// 定义一个ACL,匹配所有内网地址 Router(config)# ip access-list standard NAT_ACL Router(config-std-nacl)# permit 192.168.10.0 0.0.0.255 Router(config-std-nacl)# permit 192.168.20.0 0.0.0.255 Router(config-std-nacl)# permit 192.168.30.0 0.0.0.255 Router(config-std-nacl)# exit // 在连接互联网的接口上应用NAT Router(config)# interface g0/1 Router(config-if)# ip nat outside // 定义为外部接口 Router(config-if)# exit Router(config)# interface g0/0 Router(config-if)# ip nat inside // 定义为内部接口(物理接口本身,子接口会继承) Router(config-if)# exit // 应用NAT规则 Router(config)# ip nat inside source list NAT_ACL interface g0/1 overload
-
保存配置:
Router# write memory
一个更完整、更安全的方案:引入防火墙
在生产环境中,通常不会直接用路由器做网关,而是使用防火墙,防火墙集成了路由、NAT、状态检测、访问控制等强大功能,安全性更高。
拓扑变为:
互联网 -> 防火墙 -> 交换机
配置思路:
-
防火墙配置:
- WAN口: 连接ISP,配置公网IP。
- LAN口: 连接交换机,将此接口设置为
Trunk模式,并允许所有VLAN通过。 - VLAN接口: 在防火墙上为每个VLAN创建对应的接口(逻辑子接口),并配置内网网关IP(
168.10.1,168.20.1等)。 - NAT策略: 配置和上面路由器一样的PAT策略,将内网地址转换为WAN口IP。
- 安全策略: 这是防火墙的核心优势,可以配置精细的访问控制,
- 允许 所有内网用户访问互联网。
- 禁止 访客部 访问公司服务器(VLAN 10, 20)。
- 禁止 访客部 使用公司内部的打印机等特定服务。
-
交换机配置:
- 和之前一样,创建VLAN,划分端口。
- 连接防火墙的端口设置为
Trunk模式。
这种架构下,防火墙成为了所有流量的安全检查点,既能实现多VLAN上网,又能保障网络安全,是企业部署的最佳实践。
排错思路
如果配置完成后无法上网,请按以下步骤排查:
-
检查PC端:
- PC的IP地址、子网掩码、默认网关是否配置正确?(网关必须是
168.x.1) ping自己的网关地址(如ping 192.168.10.1),看是否通,如果不通,说明PC到网关的链路有问题。ping同一VLAN内的其他PC,看是否通,如果不通,说明二层交换有问题。
- PC的IP地址、子网掩码、默认网关是否配置正确?(网关必须是
-
检查交换机端:
- PC连接的交换机端口是否正确划入了VLAN? (
show vlan brief) - 连接路由器/防火墙的Trunk端口是否配置正确? (
show interfaces trunk)
- PC连接的交换机端口是否正确划入了VLAN? (
-
检查路由器/防火墙端:
- 子接口/VLAN接口是否
up/up状态? (show ip interface brief) - 能否
ping通各个VLAN的网关地址? - 能否
ping通互联网的下一跳(ISP网关0.113.1)? - 检查NAT配置是否正确,NAT转换是否生效? (
show ip nat translations) - 检查路由表是否有默认路由? (
show ip route)
- 子接口/VLAN接口是否
通过以上步骤,您应该能够成功实现多VLAN访问互联网的需求。
