来源:《OpenStack 管理手册》网络管理章节 + 《OpenStack 实验手册》第 6 章 + PPT《07 OpenStack 网络管理》。
Neutron 是 OpenStack 九大核心服务里公认最难的一个------但拆开看,它的地基就是四个 Linux 网络虚拟化技术,主体就是「概念 + 架构 + 流量」三件事。这篇讲理论和架构,实操篇见第 2 篇。

一、先分清:物理网络 vs 虚拟网络
物理服务器虚拟化以后,一台机器里住着一堆虚拟机,网络这件事也跟着被「虚拟」了一份:
| 物理世界 | 虚拟世界 | 说明 |
|---|---|---|
| Switch 物理交换机 | vSwitch 虚拟交换机 | 物理交换机有 cisco、华为等品牌;虚拟交换机有 linuxbridge、OVS、OVN 等软件 |
| NIC 网卡 | vNIC 虚拟网卡 | 虚拟机的「网卡」,接在 vSwitch 的端口上 |
Neutron 最核心的工作,就是对二层物理网络的抽象与管理:各个 vNIC 连接在 vSwitch 的端口上,vSwitch 再通过物理服务器的物理网卡访问外部物理网络。理解了这条链,后面所有概念都是在这条链上加功能。
二、Linux 网络虚拟化四大件
Neutron 自己不发明网络技术,它把 Linux 系统上现成的网络虚拟化技术组织起来用。四大件分三类:
2.1 网卡虚拟化:TAP / TUN / VETH-PAIR
| 设备 | 层级 | 特点 |
|---|---|---|
| TAP | 二层 | 模拟一个二层网络设备,可以接收和发送以太网帧 |
| TUN | 三层 | 模拟一个三层网络设备,只操作 IP 包 |
| VETH-PAIR | 成对 | 一端发出的网包会被另一端接收,像一根「虚拟网线」 |
三句话理解:
- TAP/TUN 在主机内虚拟了一套网络接口,和物理接口没区别------可以配 IP、可以路由流量,只是流量只在主机内流通;
- TUN 只操作三层的 IP 包,TAP 操作二层的以太网帧------记住「TAP 二层、TUN 三层」;
- VETH-PAIR 成对出现、一端进一端出,专门用来连接不同的虚拟网络组件------连 Linux Bridge、连 OVS、连容器,OpenStack Neutron 就是用它构建复杂网络拓扑的。
2.2 交换机虚拟化:Linux Bridge 与 Open vSwitch
Linux Bridge:工作于二层的网络设备,功能类似物理交换机。
- Bridge 可以绑定 Linux 上的其他网络设备(eth0、tap0、tap1......),把它们虚拟化成自己的端口------相当于往物理交换机上插网线;
- 收到数据包后交给 br0,br0 根据 MAC 地址与端口的映射关系转发;
- 工作在二层,所以绑上去的从设备不需要再设 IP,只需给 br0 设 IP------即使 eth0 原本有自己的 IP,绑进 bridge 后也会失效,只有目的地址为 br0 IP 的包才会被 Linux 接收;
- 管理命令
brctl:brctl addbr BRIDGE建桥、brctl addif BRIDGE DEVICE加接口。
Open vSwitch(OVS):产品级的虚拟交换机。
- Linux Bridge 适合小规模、主机内部通信;OVS 适合大规模、多主机间通信(华为 FusionCompute 的 DVS 就基于 OVS);
- 为什么有了 Linux Bridge 还要 OVS?因为 OVS 让云环境的虚拟网络管理、状态和流量监控更容易:可以像配置物理交换机一样把 VM 分到不同 VLAN、给端口配 QoS,还支持 NetFlow、sFlow 等标准管理接口;
- OVS 在各种虚拟化平台上实现了分布式虚拟交换机------一台物理服务器上的 vSwitch 可以透明地与另一台上的 vSwitch 连在一起;
- 管理命令
ovs-vsctl:add-br建桥、add-port加端口、show查看配置、dump-flows查流表。
2.3 网络隔离:Network Namespace
Network Namespace(网络命名空间)是 Linux 的网络隔离机制:每个 namespace 有自己独立的网卡、路由表。
它在 Neutron 里的重要性:Neutron 的 router 就是用 network namespace 实现的。由此产生一个经典结论------不同 network 的 subnet CIDR 可以重叠而不冲突,因为不同 router 的路由表是独立的(详见第四节的 subnet 部分)。
三、Neutron 是什么:定位与功能
3.1 为什么需要 Neutron
传统网络管理靠管理员手工配置维护硬件设备;而云环境(特别是多租户场景)里,用户随时可能创建、修改、删除网络,连通性和隔离没法靠手工保证。「软件定义网络(SDN)」的灵活性和自动化优势使它成为云时代网络管理的主流。
Neutron 的设计目标是实现「网络即服务(Networking as a Service,NaaS)」:设计上遵循基于 SDN 实现网络虚拟化的原则,实现上充分利用 Linux 系统的各种网络技术。
3.2 四大功能
| 功能 | 说明 |
|---|---|
| 二层交换 Switching | 实例通过虚拟交换机接入虚拟二层网络;支持 Linux Bridge 和 OVS,可创建 VLAN 网络和基于隧道的 Overlay 网络(VxLAN、GRE) |
| 三层路由 Routing | 虚拟路由器(router)实现跨网段通信,通过 IP forwarding、iptables 实现路由和 NAT |
| 负载均衡 LBaaS | Grizzly 版本首次引入 Load-Balancing-as-a-Service,把负载分发到多个实例;不同实现以 Plugin 形式集成,目前默认是 HAProxy |
| 防火墙 Firewalling | 两条路线:安全组(Security Group) 用 iptables 限制进出实例 的包;FWaaS 限制进出虚拟路由器的包 |
注意防火墙两条线的区别:安全组管「实例的口」,FWaaS 管「路由器的口」------都是 iptables 实现,管的对象不同。
四、核心概念:Network / Subnet / Port / Router / 两种 IP

4.1 Network:隔离的二层广播域
Network 是一个隔离的二层广播域,支持五种类型:

| 类型 | 特点 | 记忆点 |
|---|---|---|
| local | 与其他网络和节点隔离,同节点同网络才能通 | 单机测试用 |
| flat | 无 VLAN tagging,可跨节点 | 不打标签 |
| VLAN | 802.1q tagging,二层广播域,可跨节点 | 应用最广泛 |
| VxLAN | 隧道 overlay 网络,用 VNI(segmentation ID)区分,二层包封装成 UDP 传输 | 克服 VLAN 与物理网络设施的限制 |
| GRE | 与 VxLAN 类似的 overlay,用 IP 封装(不是 UDP) | 和 VxLAN 成对记 |
三条补充规则:
- 不同 network 之间在二层上是隔离的------比如 VLAN 网络会给 network A、B 分不同的 VLAN ID,A 的广播包不会跑到 B;但借助路由器,不同 network 在三层上可以通信;
- Network 必须属于某个 Project(租户),Project 与 Network 是 1 对多;
- 实现选择上:Linux Bridge 只支持 VxLAN(不支持 GRE),OVS 两者都支持。
4.2 Subnet:IP 地址段
Subnet 是 IPv4 或 IPv6 地址段,实例的 IP 从 subnet 中分配,每个 subnet 要定义地址范围和掩码。
Network 与 Subnet 是 1 对多 :一个 subnet 只属于一个 network;一个 network 可以有多个 subnet(不同 IP 段),但 CIDR 不能重叠。
- 同一 network 内:10.10.1.0/24 和 10.10.1.0/24 两个 subnet------无效(CIDR 重叠);
- 不同 network 间:两个 network 各自一个 10.10.1.0/24------有效。
CIDR 重叠为什么不会冲突?因为 Neutron 的 router 用 network namespace 实现,每个 router 有自己独立的路由表:两个 subnet 走同一个 router,只有指定的一个可被路由;走不同 router,各自都能路由。
4.3 Port:虚拟交换机上的端口
Port 可以看做虚拟交换机上的一个端口,上面定义了 MAC 地址和 IP 地址。实例的虚拟网卡 VIF(Virtual Interface)绑定到 port 时,port 把 MAC 和 IP 分配给 VIF。
Subnet 与 Port 是 1 对多:一个 port 必须属于某个 subnet,一个 subnet 可以有多个 port。
4.4 资源概念链(背下来)
text
Project 1:m Network 1:m Subnet 1:m Port 1:1 VIF (m:1 Instance)
4.5 Fixed IP 与 Floating IP
| Fixed IP | Floating IP | |
|---|---|---|
| 来源 | 从所属 subnet 分配 | 从外部网络(External) 分配 |
| 用途 | 实例间内部通信 | 外部访问实例 |
| 变化 | 创建即固定 | 动态绑定/解绑,映射到 Fixed IP |
4.6 安全组(Security Group)
- 通过 iptables 限制进出实例的网络包;
- default 安全组的默认行为:允许所有出口流量,入口只放「来自内部」的流量------外部默认进不来,这就是实验里要自建安全组放行 ICMP/TCP 的原因(实操篇展开)。
4.7 Provider 网络与 Self-service 网络
- Provider Network(提供商网络):由管理员创建、映射到数据中心现有物理网络的网络,虚拟机直接「骑」在真实网络上;
- Self-service Network(自助网络):租户自己创建的虚拟网络,对外通信要经过虚拟路由器 + 外部网络做 SNAT/浮动 IP。
五、Neutron 架构:一个请求怎么变成真实网络
与 OpenStack 其他服务一样,Neutron 采用分布式架构,由多个组件共同对外提供网络服务:
| 组件 | 职责 |
|---|---|
| Neutron Server | 对外提供 OpenStack 网络 API,接收请求并调用 Plugin 处理 |
| Plugin | 处理 Server 发来的请求,维护 OpenStack 逻辑网络状态,并调用 Agent 处理请求;分 Core Plugin (核心二层/三层实现)和 Service Plugin(路由器、防火墙、LBaaS 等扩展服务) |
| Agent | 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能 |
| Network Provider | 提供网络服务的虚拟或物理网络设备:Linux Bridge、OVS 或支持 Neutron 的物理交换机 |
| Queue | Server、Plugin、Agent 之间通过消息队列通信和调用 |
| Database | 存放网络状态信息:Network、Subnet、Port、Router 等 |
记住处理链路:API → Server → Plugin →(消息队列)→ Agent → Provider------「API 管接单,Plugin 管调度,Agent 管干活」。
六、典型场景:流量到底怎么走
理论部分的落脚点是会分析流量走向。两个最典型的场景组合:
Linux Bridge + Flat/VLAN 网络:实例 vNIC → TAP 设备 → Linux Bridge → 物理网卡。Flat 网络不打标签直接出物理网络;VLAN 网络在桥上打 802.1q 标签后出去。
Open vSwitch + VXLAN 网络:实例 vNIC → VETH/Br-int → OVS 打 VNI 封装成 UDP → 物理网络 → 对端 OVS 解封装。跨节点的「同网段」其实是隧道在三层网络上又拉出来的一层二层。
南北向与东西向:
- 南北向流量:实例与外部网络之间的流量。用 Fixed IP 时出去走 SNAT;外部进来访问要用 Floating IP(DNAT 映射);
- 东西向流量 :实例之间的流量。同一个网络 里直接二层交换可达;不同网络要经 router 三层路由。
一句话总结:二层看交换机(同网),三层看路由器(跨网),进出看 NAT(南北),隔离看安全组(门口)。
七、命令速查(理论篇涉及的基础命令)
| 命令 | 关键选项/参数 | 说明 |
|---|---|---|
brctl addbr BRIDGE |
--- | 创建 Linux Bridge(需 bridge-utils) |
brctl addif BRIDGE DEVICE |
--- | 把设备(如 eth0、tap0)加入桥 |
ovs-vsctl add-br BRIDGE |
--- | 创建 OVS 网桥 |
ovs-vsctl add-port BRIDGE PORT |
--- | 往 OVS 网桥加端口 |
ovs-vsctl show |
--- | 查看 OVS 配置全貌 |
ovs-vsctl dump-flows BRIDGE |
--- | 查看流表(转发规则) |
ip netns 相关 |
--- | 查看/操作 network namespace(router 的实现载体) |
📖 建网络、子网、路由器、浮动 IP、安全组的实操命令与界面步骤,见第 2 篇《Neutron 网络管理(实操)》;架构与九大服务总览见《OpenStack 装了却说不清它是什么?》7.8 节。
附:关键英文全称
| 缩写 | 全称 | 含义 |
|---|---|---|
| NaaS | Networking as a Service | 网络即服务,Neutron 的设计目标 |
| SDN | Software-Defined Networking | 软件定义网络 |
| NIC | Network Interface Card | 网卡 |
| vNIC / VIF | Virtual NIC / Virtual Interface | 虚拟网卡 / 虚拟网络接口 |
| OVS | Open vSwitch | 开源虚拟交换机 |
| VNI | VXLAN Network Identifier | VxLAN 的分段 ID |
| LBaaS | Load-Balancing as a Service | 负载均衡服务(默认 HAProxy) |
| FWaaS | Firewall as a Service | 防火墙服务(管路由器,区别于安全组) |
| SNAT / DNAT | Source / Destination NAT | 源地址转换(出去)/ 目的地址转换(浮动 IP 进来) |