VLAN 与安全隔离:从配置错误到 VLAN Hopping 攻击
文章目录
一、为什么「划了 VLAN」不等于「已经隔离」?
企业里常见一种安全感幻觉:
研发 VLAN 10、办公 VLAN 20、访客 VLAN 30
→ 广播隔离了 → 感觉「安全分区」做完了
现实往往是:
| 预期 | 现场常见情况 |
|---|---|
| 访客上不了内网 | 访客口误配成 Trunk,或 Native VLAN 与内网相同 |
| 服务器区不可达办公网 | 三层上随便开了互通,ACL 为空 |
| 运维口最安全 | 管理 VLAN 与业务 VLAN 混跑,且允许 DTP |
| 「Hopping 是老漏洞」 | 老交换机、默认配置、厂商差异仍可能中招 |
VLAN(Virtual LAN)解决的是 二层广播域划分,不是完整零信任。
本文从 802.1Q 原理 → 典型配错 → VLAN Hopping 两类攻击 → 加固清单 一条线讲透:
隔离靠设计,安全靠配置纪律。
二、VLAN 在做什么:一张图建立直觉
2.1 没有 VLAN 时
同一交换机下所有端口属于一个广播域:ARP、DHCP Discover、部分协议洪泛,所有人互相「听得见」。
2.2 有 VLAN 时
交换机在内部为端口打上 VLAN ID,同一 VLAN 内二层互通,不同 VLAN 默认二层不通。跨 VLAN 访问必须经过三层设备(路由 / SVI / 防火墙),这时才能挂 ACL、做策略。
┌──────── Switch ────────┐
VLAN10 │ PC-A PC-B │ ← 二层互通
VLAN20 │ PC-C PC-D │ ← 二层互通
└───────────┬────────────┘
│ Trunk(允许多 VLAN)
▼
Router / L3 SW
(跨 VLAN 才在这里相遇)
2.3 802.1Q 标签长什么样(够用版)
Trunk 上传输时,帧会被插入 4 字节 802.1Q Tag(简化理解):
| Dest MAC | Src MAC | 802.1Q Tag | EtherType | Payload | FCS |
│
TPID=0x8100
PCP / DEI / VLAN ID(12bit)
- Access 口:连接终端,通常进交换机时「打上本 VLAN」,出交换机时「剥掉标签」。
- Trunk 口:连接交换机/路由器,可携带多个 VLAN 的带标签帧。
- Native VLAN:Trunk 上 不打标签 的那个 VLAN(默认真常见是 VLAN 1)——这里埋了很多坑。
三、Access / Trunk / Native:安全相关的三个旋钮
| 概念 | 作用 | 安全关注点 |
|---|---|---|
| Access | 终端接入,单 VLAN | 勿把用户口配成 Trunk |
| Trunk | 链路聚合多 VLAN | 限制 allowed vlan,关 DTP |
| Native VLAN | Trunk 上无标签帧所属 VLAN | 勿与用户 VLAN 相同;两端一致 |
Cisco 风格示意(不同厂商命令不同,思路通用):
! 用户接入口:Access + 关协商
interface Gi0/2
switchport mode access
switchport access vlan 20
switchport nonegotiate
spanning-tree portfast
spanning-tree bpduguard enable
! 上联口:Trunk + 显式允许 + 独立 Native
interface Gi0/1
switchport trunk encapsulation dot1q
switchport mode trunk
switchport nonegotiate
switchport trunk native vlan 999
switchport trunk allowed vlan 10,20,30,999
记住一句话:
用户口永远像「死 Access」;Trunk 永远「显式、最小、可协商关闭」。
四、从配置错误到隔离失效(比攻击更常见)
真实事故里,配错远比黑客多。下面几类几乎每年都能在巡检里见到。
4.1 用户口误开 Trunk / 开着 DTP
- 现象:接入口
dynamic desirable/dynamic auto,对端一协商就变成 Trunk。 - 后果:攻击者或误接设备可能声明自己是交换机,形成 Switch Spoofing 前提。
- 修复:接入口强制
access+nonegotiate(或厂商等价:关自动 Trunk)。
4.2 Native VLAN 与业务 VLAN 重合
- 现象:Trunk Native = VLAN 10,而办公网也是 VLAN 10。
- 后果:无标签帧被当成 VLAN 10;配合 Double Tagging 时更容易「蹭」进业务网。
- 修复:Native 使用 空 VLAN / 专用 VLAN(如 999),且全网 Trunk 两端一致。
4.3 Trunk allowed vlan = all
- 现象:图省事允许全部 VLAN。
- 后果:任意 VLAN 标签都能上 Trunk;隔离边界形同虚设。
- 修复:按需放行,定期审计。
4.4 管理 VLAN 与用户 VLAN 混用
- 现象:交换机管理地址落在办公 VLAN,且无 ACL。
- 后果:内网任意主机可打管理面(弱口令、旧 SNMP、未改默认社区字)。
- 修复:独立管理 VLAN + ACL/管理口隔离 + 带外更佳。
4.5 「二层隔了,三层全开」
- 现象:VLAN 划得很漂亮,核心路由
permit ip any any。 - 后果:隔离只挡了广播,挡不住有路由的横向移动。
- 修复:跨 VLAN 默认拒绝,按业务最小放行;有条件上防火墙分区。
4.6 语音 VLAN / 物联网 VLAN 口令松
- 现象:IP 电话、摄像头、门禁共用「宽松 VLAN」,再 Trunk 到核心。
- 后果:IoT 沦陷后一跳进业务区。
- 修复:IoT/访客单独 VRF 或严格 ACL;禁用设备间任意互访(PVLAN/微隔离更佳)。
五、VLAN Hopping 是什么?
VLAN Hopping:攻击者位于 VLAN A,通过滥用 Trunk/标签处理机制,让流量进入 本不该到达的 VLAN B,从而绕过「二层隔离」的心理预期。
经典两类(教材与厂商文档中最常见):
- Switch Spoofing(交换机欺骗)
- Double Tagging(双标签 / 双标记)
注意:现代交换机默认加固后,成功率下降;但 旧设备、默认配置、错误 Trunk 环境里仍值得重视。蓝队价值在于:用攻击模型反推配置基线。
六、攻击一:Switch Spoofing(交换机欺骗)
6.1 原理
许多交换机支持 DTP(Dynamic Trunking Protocol) 等链路协商:
若端口处于「可协商成 Trunk」的状态,对端只要表现得像一台交换机,就可能把链路谈成 Trunk。
攻击者(假装交换机) 接入交换机
│ DTP / 协商 Trunk │
│ ─────────────────────────► │
│ 链路变成 Trunk │
│ ◄───────────────────────── │
│ 可收发多个 VLAN 标签帧 │
谈成 Trunk 后,攻击者主机(或中间设备)就可能:
- 加入多个 VLAN 的流量视角;
- 对原本隔离的网段做侦察、欺骗、横向(再叠加三层可达性时危害更大)。
6.2 利用前提(防御侧要盯死)
- 用户口未强制 Access;
- 开启了自动 Trunk / DTP(或厂商类似特性);
- 对端可发送协商报文(物理接入已成功)。
6.3 防御要点
1. 所有用户口:mode access + 关闭协商(nonegotiate / 等效)
2. 明确 Trunk 口:静态 trunk,禁止动态
3. Trunk 限制 allowed vlan
4. 未使用口:shutdown + 垃圾 VLAN + 无协商
5. 有条件:802.1X / MAB,降低「插上网线就进生产」的概率
七、攻击二:Double Tagging(双标签)
7.1 原理(理解 Native VLAN 是关键)
攻击者发送一帧带 两层 802.1Q 标签 的报文:
外层 Tag:Native VLAN(或交换机剥掉的那一层)
内层 Tag:目标 VLAN(想跳进的 VLAN)
典型处理路径(简化):
攻击者 Access 口(假设属于 VLAN 10,且 Native=10)
│
│ 发出: [外层 VLAN10][内层 VLAN20][Payload]
▼
接入交换机:认为外层=Native → 剥掉外层,上 Trunk 时可能不再打标签
│
│ Trunk 上走的是「看起来像无标签 / 或处理异常」的帧,内层 Tag 仍在
▼
对端交换机:把剩余的内层 Tag 当成合法 802.1Q → 送进 VLAN 20
结果:攻击者 单向 把流量「塞进」另一 VLAN(常用于侦察、对脆弱服务发包)。
是否双向、是否稳定,取决于设备实现、生成树、是否有回流路径——但 隔离假设已经被打破。
7.2 利用前提
- Trunk 使用 802.1Q;
- 攻击者所在 VLAN = Trunk 的 Native VLAN(经典条件);
- 对端会按内层标签转发;
- 目标 VLAN 在 Trunk
allowed列表中。
7.3 防御要点
1. Native VLAN ≠ 任何用户/业务 VLAN(专用空 VLAN)
2. 两端 Native 一致,避免环路与奇妙行为
3. 明确 trunk allowed vlan,不要 all
4. 用户口禁止 Trunk;关 DTP
5. 对管理/关键 VLAN 在三层严格 ACL,即使二层被蹭也不易扩大战果
八、实验环境建议(授权靶场)
目标:验证错误配置会导致 Hopping 前提成立,再验证加固后失效——而不是追求「打穿生产」。
8.1 推荐拓扑
[Attacker PC] ----(Access)---- [SW1] ====Trunk==== [SW2] ----(Access)---- [Victim PC]
VLAN 10 VLAN 20
工具任选其一即可:
- Cisco Packet Tracer / CML
- GNS3 / EVE-NG + 交换机镜像
- 两台二手交换机 + 笔记本(最接近真机)
8.2 实验步骤(蓝队视角)
- 基线错误配置:用户口
dynamic desirable,Native=VLAN10,allowed=all。 - 观察:对端协商、Trunk 状态、
show interface trunk。 - 加固:按本文 Access/Trunk 模板改。
- 对比:协商失败、非法标签被丢弃、跨 VLAN 侦察不可达。
- 记录:改前改后各截一张
show run/show vlan/show int trunk。
8.3 Wireshark 看什么
在 Trunk 镜像口或虚拟链路抓包,过滤:
vlan || eth.type == 0x8100
对照:单标签、双标签、无标签(Native)三种帧形态,比背概念记得牢。
九、加固清单(可直接当巡检表)
9.1 端口角色矩阵
| 端口角色 | mode | Native | allowed | 其他 |
|---|---|---|---|---|
| 用户/打印机 | access | — | — | nonegotiate,BPDU Guard,Portfast |
| 服务器 | access 或受限 trunk | 非业务 | 最小集 | 同上 |
| 交换机互联 | static trunk | 专用空 VLAN | 最小集 | nonegotiate |
| 未使用口 | access + shutdown | 垃圾 VLAN | — | 防私接 |
9.2 组织级措施
- 配置模板化:禁止手敲「dynamic / allowed all」。
- 变更审计:Trunk/Native/allowed 变更进工单。
- 定期巡检脚本:拉取配置,匹配高危模式(DTP、Native=1、allowed all)。
- 纵深:二层隔离 + 三层 ACL/防火墙 + 主机防火墙,不把宝押在 VLAN alone。
- 访客/外包:Portal 或独立出口,禁止进办公网段路由。
9.3 和高阶隔离的关系
| 技术 | 粒度 | 说明 |
|---|---|---|
| VLAN | 二层广播域 | 基础分区 |
| PVLAN | VLAN 内再隔离 | 适合云主机/托管 |
| VRF | 三层路由隔离 | 多租户 |
| 微隔离 / 零信任 | 工作负载级 | 不替代交换机基线 |
VLAN 是地板,不是天花板。
十、踩坑 FAQ
Q1:关了 VLAN 1 是不是就安全了?
不一定。关键是 Native 不用业务 VLAN、用户口不做 Trunk、跨 VLAN 有策略。VLAN 1 只是默认号,换个号配错一样中招。
Q2:三层交换机上建了 SVI,还需要防火墙吗?
看资产价值。SVI+ACL 能做基础控制;对 DMZ、核心库、办公与生产之间,更建议 防火墙分区,策略可视、可审计。
Q3:VLAN Hopping 还能打到今天的新设备吗?
很多新设备默认更严,但 配置回退、级联老设备、无线桥接、错误 Native 仍可能创造条件。巡检配置比争论 CVE 年份更有用。
Q4:无线里的「VLAN」和有线一样吗?
SSID 常映射到 VLAN,但还要管 AP 管理、控制器、隧道、PSK/802.1X。无线侧配错,一样绕过你想象中的隔离。
Q5:渗透测试报告里怎么写这类问题?
写清:端口模式、Native、allowed、是否可协商,附 show 证据,给「强制 Access / 专用 Native / 最小 allowed」三条修复,避免只写「存在 VLAN Hopping 风险」空话。
十一、小结
- VLAN 的本质是二层广播域划分;跨 VLAN 安全取决于 三层策略,不取决于「划了几个 VLAN」。
- Access / Trunk / Native 三个旋钮配错,隔离会在无攻击者时自己失效。
- Switch Spoofing 吃的是「用户口能协商成 Trunk」;Double Tagging 吃的是「Native = 用户 VLAN + 宽松 Trunk」。
- 防御口诀:用户口死 Access、Trunk 静态且最小、Native 独立且一致、跨 VLAN 默认拒绝。
- 把本文清单做成巡检项,比在实验室追求「完美复现攻击包」更能保护真实网络。
附录 A:巡检命令速查(Cisco 风格示例)
show vlan brief
show interfaces trunk
show interfaces switchport
show running-config | section interface
! 高危信号示例:
! - Administrative Mode: dynamic auto / dynamic desirable
! - Negotiation of Trunking: On
! - Native vlan 与 access vlan 相同
! - Trunking VLANs Allowed: ALL
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)