3. 网络虚拟化入门:VLAN 与 VXLAN 的区别、虚拟交换机(OVS)、网络隔离与安全组
好,咱们今天聊聊网络虚拟化。说实话,这是云计算里最绕、也最容易踩坑的一块。很多新手一上来就被 VLAN、VXLAN、OVS 这些缩写搞晕了。别急,我带你一个一个拆开看。
3.1 VLAN 与 VXLAN:从“贴标签”说起
先问个问题:物理网络里,两台机器怎么隔离?传统做法是拉不同的网线、接不同的交换机。但虚拟化环境下,成百上千台虚拟机跑在同一个物理网络上,怎么让它们“老死不相往来”?
答案就是——打标签。
3.1.1 VLAN:传统的“楼层隔离”
VLAN,全称是虚拟局域网。它的原理很简单:在以太网帧里加一个 12 位的标签(VLAN ID)。这个标签就像楼层号,告诉交换机:“这包数据是 10 楼的,别送到 20 楼去。”
我在项目中遇到过一个问题:某客户内部有财务部和研发部,要求完全隔离。用 VLAN 划分后,两个部门虽然共用同一台物理交换机,但数据包互不可见。效果立竿见影。
但 VLAN 有个硬伤——VLAN ID 只有 12 位,最多 4096 个。你想想看,公有云里租户成千上万,4096 个隔离网络哪够用?
核心要点:VLAN 适合小规模隔离,但扩展性差。它工作在 OSI 模型的第 2 层(数据链路层)。
3.1.2 VXLAN:打破 4096 天花板
VXLAN 就是来解决这个问题的。它把原来的二层数据包,再包一层 UDP 头(外层 IP 是物理网络地址)。这样一来,VXLAN 的“网络标识符”有 24 位,支持 1600 万个隔离网络。
说白了,VXLAN 是在三层网络上“隧道”传输二层数据。我刚开始学的时候也觉得绕,但后来想通了:你只需要记住,VXLAN 让虚拟机感觉自己在同一个二层网络里,哪怕它们物理上隔了半个地球。
| 特性 | VLAN | VXLAN |
|---|---|---|
| 标识符位数 | 12 位 | 24 位 |
| 最大网络数 | 4096 | 约 1600 万 |
| 封装方式 | 直接修改以太网帧 | UDP 隧道封装 |
| 跨数据中心 | 困难 | 原生支持 |
我的建议:如果你的环境只有几十个网络,VLAN 完全够用,配置也简单。但如果你在搭建公有云或大型私有云,直接上 VXLAN,别犹豫。
3.2 虚拟交换机:OVS 到底在干什么
物理世界有物理交换机,虚拟世界当然也有虚拟交换机。最出名的是 Open vSwitch(OVS)。
OVS 本质上是一个软件实现的交换机,运行在宿主机上。它的作用就是让同一台物理机上的虚拟机互相通信,或者通过物理网卡访问外部网络。
我记得第一次配置 OVS 时,被它的流表规则搞得很头疼。但后来发现,你不需要理解所有细节,只要掌握几个核心概念:
- Bridge(网桥):相当于一台虚拟交换机
- Port(端口):虚拟机网卡或物理网卡连接的地方
- Flow Table(流表):决定数据包怎么转发
举个例子,创建一个 OVS 网桥并连接虚拟机:
# 创建网桥
ovs-vsctl add-br br-int
# 添加物理网卡作为上行链路
ovs-vsctl add-port br-int eth0
# 查看状态
ovs-vsctl show
嗯,这里要注意:OVS 支持 OpenFlow 协议,这意味着你可以用编程的方式控制网络转发。这在 SDN(软件定义网络)里非常有用。
避坑指南:我曾经在生产环境里直接修改 OVS 配置,结果导致网络中断。后来学乖了——改之前先备份,改完先验证。OVS 的配置变更最好在维护窗口做。
3.3 网络隔离:不只是“隔开”那么简单
网络隔离,说白了就是让不该通信的机器不能通信。在云计算里,隔离手段主要有三种:
- 基于 VLAN/VXLAN 的隔离:不同网络段天然不通
- 基于安全组的隔离:在虚拟机层面控制进出流量
- 基于 ACL 的隔离:在虚拟交换机层面做访问控制
我个人习惯把安全组看作“虚拟防火墙”。每个虚拟机可以绑定一个或多个安全组,安全组里定义规则:允许谁访问哪个端口。
举个例子,一个 Web 服务器的安全组规则:
# 允许所有来源访问 80 端口
入站规则:来源 0.0.0.0/0,端口 80,协议 TCP
# 只允许公司内网访问 22 端口(SSH)
入站规则:来源 10.0.0.0/8,端口 22,协议 TCP
# 拒绝所有其他入站流量
入站规则:来源 0.0.0.0/0,动作 拒绝
你想想看,如果没有安全组,你需要在每台虚拟机上手动配置 iptables,那得多累?安全组把这些规则集中管理,而且状态化——你允许了出站,回包自动放行。
关键区别:VLAN/VXLAN 是“大网隔离”,安全组是“细粒度控制”。两者配合使用,才能做到既安全又灵活。
3.4 实战经验:一个典型的网络隔离方案
假设我们要搭建一个三层的 Web 应用:前端、后端、数据库。要求:
- 前端可以访问后端(80 端口)
- 后端可以访问数据库(3306 端口)
- 前端不能直接访问数据库
- 外部只能访问前端(80/443 端口)
我的做法是:
- 创建三个 VXLAN 网络:net-front、net-back、net-db
- 前端虚拟机只连 net-front
- 后端虚拟机连 net-front 和 net-back(双网卡)
- 数据库虚拟机只连 net-back
- 再配合安全组,精确控制端口
这样,即使有人攻破了前端,也无法直接访问数据库——因为网络层面就不通。这就是“纵深防御”的思想。
一个小技巧:调试网络隔离时,用 tcpdump 抓包是最直接的。我曾经花了两小时查一个“网络不通”的问题,最后发现是安全组规则写反了方向。嗯,从那以后我每次配完规则都会用抓包验证一遍。
好了,这一章的内容就到这里。网络虚拟化是云计算的基石,理解 VLAN、VXLAN、OVS 和安全组,你就能搭建出既隔离又灵活的网络架构。下一章我们聊聊存储虚拟化,到时候见。