很多人第一次学 VLAN 互通时会遇到一个“拧巴”的问题:
VLAN 是二层隔离,交换机负责转发
不同 VLAN 要互通,需要三层转发(路由器)
但路由器端口不够怎么办?
于是就有了经典方案:单臂路由(router-on-a-stick)+ VLAN。它的核心不是“神奇路由”,而是把 VLAN 标签(tag)当作“身份识别”,让同一条物理链路同时承载多个 VLAN 的三层入口。
1. 先从“端口不够”讲起:为什么要单臂路由?
假设你有两个 VLAN:
VLAN 10:
192.168.10.0/24VLAN 20:
192.168.20.0/24
互通需要路由器做网关。最直观的做法是:
方案 1:每个 VLAN 用路由器一个口(多口三层)
路由器口 A 接 VLAN 10 网段
路由器口 B 接 VLAN 20 网段
优点:直观、没有 VLAN tag 的复杂度
缺点:路由器口越来越不够、布线越来越麻烦。
方案 2:单臂路由(router-on-a-stick)
路由器只用一个物理接口
交换机到路由器这条链路变成 Trunk(中继)
VLAN 通过 802.1Q 标签携带过去
路由器再用**子接口(sub-interface)**分别处理 VLAN 10、VLAN 20
一句话总结:
单臂路由用“标签 + 子接口”把多 VLAN 的三层入口塞进同一条物理口里。
2. VLAN 与路由器到底“怎么配合”?关键概念拆解
2.1 VLAN 在这里扮演什么角色?
VLAN 的作用是让交换机在二层层面把流量划分到不同广播域。
但 VLAN 本身并不负责跨网段路由。
2.2 Router-on-a-stick 的关键点是什么?
关键点是两件事同时成立:
交换机到路由器的链路必须是 trunk(能携带多个 VLAN)
路由器在同一物理接口上创建子接口,每个子接口绑定一个 VLAN ID
子接口 = VLAN 对应的三层网关(IP 地址)
3. 最核心的原理:一条链路“带很多 VLAN”,路由器如何分辨?
想象交换机到路由器的中继链路像“包裹传送带”。
每个包裹里放着以太网帧,但每个包裹会带一个“身份标签”:
VLAN=10 的帧,标签写 10
VLAN=20 的帧,标签写 20
路由器收到后就能做分流:
看到 VLAN=10 → 交给
Gi0/0.10(子接口)看到 VLAN=20 → 交给
Gi0/0.20(子接口)
这就是所谓的 “stick”:
路由器“贴在”交换机这条链路上,依靠 trunk 把多个 VLAN 的帧带到路由器。
4. 一次完整通信过程(强烈建议你对照理解)
我们用最常见的场景:VLAN10 主机访问 VLAN20 主机。
4.1 网络设定(例子)
VLAN 10:
192.168.10.0/24,网关192.168.10.1VLAN 20:
192.168.20.0/24,网关192.168.20.1
PC1 在 VLAN 10(IP:192.168.10.10/24,GW:192.168.10.1)
PC2 在 VLAN 20(IP:192.168.20.20/24)
4.2 通信时序(一步步)
PC1 发包
目标 IP:
192.168.20.20由于目标不在本地网段 → PC1 只会把包发给默认网关
192.168.10.1二层上目的 MAC 会先指向路由器 VLAN10 那个子接口的 MAC(ARP 完成后)
交换机接入端口接收到 VLAN 10 帧
PC1 所在交换机端口是
access vlan 10交换机知道“这个帧属于 VLAN 10”
交换机把帧从 trunk 发到路由器
因为是 trunk,所以会给帧加 802.1Q tag
帧变成:
VLAN tag = 10
路由器物理口收到 tagged 帧
路由器能看到 VLAN=10
它会将这帧“交给 VLAN10 子接口”处理(比如
Gi0/0.10)
路由器做三层转发
子接口
Gi0/0.10上的路由逻辑知道目的网段属于 VLAN20(或其路由表)然后从
Gi0/0.20子接口转出去
路由器从 VLAN20 子接口发回
这次发出的帧会带
VLAN tag = 20
交换机把帧送到 VLAN 20 的接入口
trunk 进入交换机后,再根据 VLAN tag=20 送到
access vlan 20的端口PC2 接收并回应
整个过程你可以抓住一句话:
二层靠 VLAN tag 标记,三层靠子接口作为网关。
5. 配置到底要配什么?按“交换机侧 / 路由器侧”分别看
下面以典型结构讲清楚“必须要点”,你不需要一开始死记命令。
5.1 交换机配置(你需要保证:接入口是 access,中继是 trunk)
(1) 用户接入口:Access 模式
PC1 所在端口:
access vlan 10PC2 所在端口:
access vlan 20
(2) 交换机到路由器:Trunk 模式 + 放行 VLAN
端口模式:trunk
允许 VLAN:
10, 20(至少要放行你需要的 VLAN)
常见错误:忘记在 trunk 放行 VLAN,导致路由器永远收不到某些 VLAN 的帧。
5.2 路由器配置(你需要保证:子接口绑定对应 VLAN ID,并配置网关 IP)
(1) 物理接口启用
no shutdown
(2) 创建子接口(每个 VLAN 一个)
Gi0/0.10:encapsulation dot1Q 10
IP:
192.168.10.1/24
Gi0/0.20:encapsulation dot1Q 20
IP:
192.168.20.1/24
注意:子接口的 VLAN ID 必须和交换机 trunk 传过来的 VLAN tag 一致。
6. 用一个“故障排查清单”帮你快速定位问题
当你部署了 router-on-a-stick 后,如果 ping 不通,通常不是“路由器坏了”,而是某个关键条件没满足。按这个顺序排最省时间:
检查 1:PC 的默认网关是否正确?
PC 在 VLAN10 → 默认网关应是
192.168.10.1PC 在 VLAN20 → 默认网关应是
192.168.20.1
检查 2:交换机到路由器是否真的是 trunk?
端口模式是否 trunk
trunk 是否允许 VLAN 10/20
检查 3:路由器子接口是否“up/up”
子接口 VLAN 配置是否正确(尤其是 802.1Q VLAN ID)
路由器上子接口 IP 是否正确
检查 4:路由表是否需要额外路由?
如果只是直连网段互通(VLAN10 与 VLAN20 都直接配置在子接口上)通常无需静态路由
如果 VLAN 还要访问其他网段,可能需要静态路由/动态路由
7. 应用场景:
7.1 适合的场景
中小型网络:VLAN 数量不是特别多
路由器端口有限:你希望用少量物理口完成多网段网关
实验/课程实验:router-on-a-stick 是经典必做题
7.2 不太适合的场景
VLAN 非常多、频繁变动:子接口会越来越多,管理复杂
高性能需求:单臂路由的瓶颈可能更集中在那条链路与路由器上
(大规模更常见的是三层交换机 SVIs、或更先进的架构)
8. 你可以用一句“通俗总结”记住它
VLAN 让交换机分隔广播域;Trunk 把不同 VLAN 的帧一起运到路由器;子接口把每个 VLAN 变成路由器上的三层网关。
评论