1. 什么是单臂路由

在交换网络中,VLAN(Virtual Local Area Network,虚拟局域网)的划分可以在二层实现广播域的隔离,但仅靠二层交换机无法让不同 VLAN 之间相互通信。要做到 VLAN 间路由,通常有三种方式:

  • 使用三层交换机,通过 SVI(Switch Virtual Interface)实现;
  • 为每个 VLAN 单独连接一台路由器的物理接口;
  • 单臂路由(Router-on-a-Stick):路由器与交换机之间只使用一条物理链路,通过 802.1Q Trunk 承载多个 VLAN 的流量。

单臂路由的核心思想是:在路由器的一个物理接口上创建多个子接口(Subinterface),每个子接口对应一个 VLAN,并作为该 VLAN 的网关。交换机与路由器相连的接口配置为 Trunk 模式,不同 VLAN 的数据帧打上 802.1Q 标签后在同一条物理链路上传输。

单臂路由通常用于中小型网络,或者只有二层交换机、没有三层交换机的场景,它是一种成本较低、配置灵活的 VLAN 间路由方案。

2. 单臂路由的工作原理

2.1 数据转发流程

假设有两台主机 PC-A(VLAN 10)和 PC-B(VLAN 20),它们的网关分别指向路由器的子接口 G0/0.10G0/0.20。PC-A 访问 PC-B 时,大致流程如下:

  1. PC-A 发现目标地址与自己不在同一网段,于是把数据包发送给默认网关;
  2. 交换机从 Access 端口收到来自 VLAN 10 的以太网帧,在转发到 Trunk 口时打上 VLAN 10 的 802.1Q 标签;
  3. 路由器物理接口收到带标签的帧,根据标签把帧交给对应的子接口 G0/0.10
  4. 子接口 G0/0.10 剥掉 802.1Q 标签,解析 IP 数据包,查路由表发现目标属于 VLAN 20,于是把数据包交给子接口 G0/0.20
  5. 子接口 G0/0.20 重新封装以太网帧并打上 VLAN 20 的标签,从物理接口发回交换机;
  6. 交换机根据 VLAN 20 标签把帧从对应的 Access 端口转发给 PC-B。

整个过程可以用下面的流程图表示:

PC-A(VLAN 10)

交换机 Access 端口

交换机 Trunk 端口打 802.1Q 标签

路由器物理接口 G0/0

按标签分发到子接口

G0/0.10 剥标签并路由

查路由表转发到 G0/0.20

G0/0.20 重新打 VLAN 20 标签

交换机 Trunk 端口

PC-B(VLAN 20)

2.2 802.1Q 与 Native VLAN

802.1Q 是 IEEE 定义的 VLAN Trunk 封装标准。单臂路由的子接口通过封装指定 VLAN:

encapsulation dot1Q 10

这条命令表示该子接口处理带有 VLAN 10 标签的帧。

需要特别注意 Native VLAN(本征 VLAN)的概念:在 Trunk 链路上,Native VLAN 的帧默认不打标签。思科建议不要在单臂路由的子接口上使用 Native VLAN 承载用户数据,因为某些二层攻击(如 VLAN Hopping)与 Native VLAN 有关。通常的配置习惯是:

  • 用户数据 VLAN 使用带标签的子接口;
  • Native VLAN 保持默认或专门指定为一个不承载业务的管理 VLAN。

3. 组网拓扑与需求

下面以一个典型场景为例:一台二层交换机连接两个部门的主机,分别是 VLAN 10(技术部)和 VLAN 20(市场部),路由器通过单臂路由实现两个 VLAN 之间的互通。

路由器 Router
G0/0 Trunk

交换机 Switch
G0/1

PC-A
VLAN 10
192.168.10.10/24

PC-B
VLAN 20
192.168.20.20/24

规划信息如下:

网段 VLAN 网关地址 网关子接口
192.168.10.0/24 VLAN 10 192.168.10.1 G0/0.10
192.168.20.0/24 VLAN 20 192.168.20.1 G0/0.20

设备连接关系:

  • 路由器 G0/0 连接交换机 G0/1
  • 交换机 G0/2 连接 PC-A(VLAN 10);
  • 交换机 G0/3 连接 PC-B(VLAN 20)。

4. 配置步骤详解

4.1 交换机侧配置

交换机的任务是创建 VLAN、把连接 PC 的端口划入对应 VLAN,并配置连接路由器的端口为 Trunk。

Switch> enable
Switch# configure terminal

! 创建 VLAN 10 与 VLAN 20
Switch(config)# vlan 10
Switch(config-vlan)# name TECH
Switch(config-vlan)# exit
Switch(config)# vlan 20
Switch(config-vlan)# name MARKET
Switch(config-vlan)# exit

! 把连接 PC-A 的端口划入 VLAN 10
Switch(config)# interface gigabitEthernet 0/2
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 10
Switch(config-if)# exit

! 把连接 PC-B 的端口划入 VLAN 20
Switch(config)# interface gigabitEthernet 0/3
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 20
Switch(config-if)# exit

! 配置连接路由器的端口为 Trunk
Switch(config)# interface gigabitEthernet 0/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)# end

Switch# write memory

说明:部分新款思科交换机只支持 802.1Q,可能不再要求输入 switchport trunk encapsulation dot1q,直接配置 switchport mode trunk 即可。如果命令报错,可跳过封装命令。

4.2 路由器侧配置

在路由器的物理接口上先开启接口,然后为每个 VLAN 创建逻辑子接口。子接口号通常与 VLAN 号对应,便于管理。

Router> enable
Router# configure terminal

! 开启物理接口
Router(config)# interface gigabitEthernet 0/0
Router(config-if)# no shutdown
Router(config-if)# exit

! 子接口 G0/0.10,作为 VLAN 10 的网关
Router(config)# interface gigabitEthernet 0/0.10
Router(config-subif)# encapsulation dot1Q 10
Router(config-subif)# ip address 192.168.10.1 255.255.255.0
Router(config-subif)# exit

! 子接口 G0/0.20,作为 VLAN 20 的网关
Router(config)# interface gigabitEthernet 0/0.20
Router(config-subif)# encapsulation dot1Q 20
Router(config-subif)# ip address 192.168.20.1 255.255.255.0
Router(config-subif)# end

Router# write memory

配置完成后,可以使用 show ip route 查看直连路由:

Router# show ip route
Codes: C - connected, S - static, R - RIP, O - OSPF

C    192.168.10.0/24 is directly connected, GigabitEthernet0/0.10
C    192.168.20.0/24 is directly connected, GigabitEthernet0/0.20

5. 验证与排错

5.1 检查 Trunk 状态

在交换机上查看 Trunk 端口是否正常,以及允许通过的 VLAN:

Switch# show interfaces trunk
Port        Mode             Encapsulation  Status        Native vlan
Gig0/1      on               802.1q         trunking      1

Port        Vlans allowed on trunk
Gig0/1      10,20

5.2 检查 VLAN 与端口划分

Switch# show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Gig0/0, Gig0/4, Gig0/5
10   TECH                             active    Gig0/2
20   MARKET                           active    Gig0/3

5.3 测试连通性

在 PC-A 上执行 ping 测试:

PC-A> ping 192.168.20.20

Pinging 192.168.20.20 with 32 bytes of data:
Reply from 192.168.20.20: bytes=32 time=1ms TTL=127

如果 ping 不通,建议按以下顺序排查:

  1. 确认 PC 的 IP 地址、子网掩码、默认网关是否配置正确;
  2. 确认交换机 Access 端口是否划入正确的 VLAN;
  3. 确认交换机与路由器相连端口是否为 Trunk,并且允许相关 VLAN 通过;
  4. 确认路由器子接口的 encapsulation dot1Q 编号与 VLAN 号是否一致;
  5. 确认路由器物理接口已经 no shutdown
  6. 检查 PC 防火墙是否拦截了 ICMP 回显请求。

6. 单臂路由的优缺点

6.1 优点

  • 节省物理接口:只需要路由器的一个物理接口就能实现多个 VLAN 间的路由;
  • 配置灵活:新增 VLAN 时,只需增加子接口并在交换机 Trunk 上放行对应 VLAN;
  • 成本较低:二层交换机即可配合路由器实现 VLAN 间通信,无需购置三层交换机。

6.2 缺点

  • 带宽瓶颈:所有 VLAN 间流量都经过同一条物理链路,链路成为汇聚点,容易形成瓶颈;
  • 单点故障:路由器或该物理链路一旦故障,所有 VLAN 间通信都会中断;
  • 转发性能限制:路由转发依赖路由器 CPU,子接口在软件转发场景下性能通常低于三层交换机的专用硬件;
  • 不适合大规模网络:当 VLAN 数量多、跨 VLAN 流量大时,建议改用三层交换机。

7. 常见配置注意事项

  • 子接口编号建议与 VLAN 一致:如 G0/0.10 对应 VLAN 10,便于排错和维护;
  • 封装命令必须在子接口上配置encapsulation dot1Q <vlan-id> 是子接口命令,不要配在物理主接口上;
  • 不要在 Native VLAN 上配置子接口 IP:尽量为 Native VLAN 单独处理,避免使用 encapsulation dot1Q <vlan-id> native 承载业务数据;
  • Trunk 上明确允许的 VLAN:建议使用 switchport trunk allowed vlan 限制允许通过的 VLAN,减少广播和不必要的流量;
  • 物理接口必须先开启:路由器物理接口若处于 shutdown 状态,所有子接口都无法转发数据。

8. 总结

单臂路由是一种经典的 VLAN 间路由方案,它通过 802.1Q Trunk 和路由器子接口,在一条物理链路上实现多个 VLAN 的网关功能。虽然它在带宽和冗余方面存在天然局限,但在中小型网络中依然是一种简单、经济和实用的选择。

掌握单臂路由的配置,是理解 VLAN 间通信、Trunk 封装以及路由器子接口的重要基础,也是学习三层交换 SVI 和动态路由之前值得熟练掌握的技能。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐