本文目录导读:

- Bridge 模式(桥接模式)——最常用
- VEPA 模式(虚拟以太网端口聚合器)
- Private 模式(私有模式)
- Passthrough 模式(直通模式)
- 对比总结表
- 核心注意事项:为什么虚拟机与宿主机无法通信?
macvtap 是一种基于 macvlan 的虚拟网络技术,主要用于 KVM/QEMU 虚拟机,它允许虚拟机直接连接到宿主机的物理网络。
它的核心特点是:每个虚拟机虚拟网卡都有一个独立的 MAC 地址和 IP 地址,从外部网络看,它们就像物理网络上的独立主机。
macvtap 主要有以下几种网络模式,决定了虚拟机之间的通信方式以及它们与宿主机之间的通信方式:
Bridge 模式(桥接模式)——最常用
- 原理:将虚拟机的 macvtap 接口直接桥接到宿主机的物理网卡(如
eth0),虚拟机发出的数据包直接通过物理网卡发送到外部交换机。 - 通信方式:
- 虚拟机 ↔ 外部网络:可以直接通信,就像局域网中的独立电脑。
- 虚拟机 ↔ 虚拟机:可以直接通信(通过外部交换机或宿主机内部转发)。
- 虚拟机 ↔ 宿主机:默认情况下无法通信,宿主机无法直接访问虚拟机,虚拟机也无法访问宿主机,这是 bridge 模式的主要限制。
- 适用场景:虚拟机需要直接接入物理局域网,获取局域网 IP 地址(如 DHCP),且不需要与宿主机通信时。
VEPA 模式(虚拟以太网端口聚合器)
- 原理:强制所有虚拟机发出的流量都发送到外部物理交换机,即使两个虚拟机在同一台宿主机上,外部交换机需要支持 1Qbg 标准(通常称为 VEPA 或 VN-Tag),并且需要配置为将流量反射回宿主机(发夹模式)。
- 通信方式:
- 虚拟机 ↔ 外部网络:正常通信。
- 虚拟机 ↔ 虚拟机:需要外部交换机支持并启用“发夹模式”,否则无法直接通信。
- 虚拟机 ↔ 宿主机:无法通信。
- 适用场景:数据中心环境下,希望所有虚拟网络流量都经过外部交换机进行策略控制(如 ACL、流量监控)。
Private 模式(私有模式)
- 原理:在宿主机内部强制隔离同一个物理网卡上的所有 macvtap 接口。
- 通信方式:
- 虚拟机 ↔ 外部网络:正常通信。
- 虚拟机 ↔ 虚拟机:完全不能通信(即使它们在同一宿主机上,也无法通过 ARP 或广播通信)。
- 虚拟机 ↔ 宿主机:无法通信。
- 适用场景:严格安全隔离场景,防止同一宿主机上的虚拟机互相访问。
Passthrough 模式(直通模式)
- 原理:直接将宿主机的物理网卡(或其某个 SRIOV 虚拟功能 VF)直通给一个虚拟机,宿主机失去对该网卡的控制权。
- 通信方式:
- 虚拟机 ↔ 外部网络:正常通信(性能最佳,接近物理机)。
- 虚拟机 ↔ 虚拟机:无法进行与 macvtap 相关的通信,因为只有一个虚拟机在使用该物理网卡。
- 虚拟机 ↔ 宿主机:无法通信,因为宿主机已经没有这个网卡了。
- 适用场景:追求极致网络性能的单虚拟机应用,或使用 SRIOV 功能拆分物理网卡给多个虚拟机。
对比总结表
| 特性 | Bridge | VEPA | Private | Passthrough |
|---|---|---|---|---|
| 虚拟机 ↔ 外部网络 | ✅ 直接连接 | ✅ 直接连接 | ✅ 直接连接 | ✅ 直接连接 |
| 虚拟机 ↔ 虚拟机 | ✅ 可以 | ⚠️ 需交换机支持 | ❌ 完全隔离 | ❌ 单VM独占 |
| 虚拟机 ↔ 宿主机 | ❌ 不能 | ❌ 不能 | ❌ 不能 | ❌ 不能 |
| 性能 | 较高 | 中等(依赖交换机) | 较高 | 最高 |
| 常用场景 | 大多数虚拟机网络 | 数据中心流量监控 | 安全隔离 | 高性能直通 |
核心注意事项:为什么虚拟机与宿主机无法通信?
这是 macvtap 的一个硬伤,因为 macvtap 的设计原理是绕过宿主机网络栈,直接将流量送到物理网卡。
- 当宿主机访问虚拟机时,数据包会从宿主机网络栈出发,通过物理网卡发送到外部交换机,如果交换机发现目标 MAC 地址就是自己(宿主机自身),会将数据包丢弃(除非交换机支持发夹模式且开启),从而导致宿主机无法 ping 通虚拟机。
- 解决方案:如果必须让宿主机和虚拟机通信,通常建议:
- 使用 Linux Bridge(即传统的网桥,如
br0)而不是 macvtap。 - 或者给宿主机额外创建一个虚拟网卡连接到同一个网桥。
- 如果坚持用 macvtap,可以给宿主机添加一个 macvlan 接口(与虚拟机相同的 parent 接口和模式),并为其配置同一网段 IP,但这样配置较复杂,且容易导致网络拓扑异常。
- 使用 Linux Bridge(即传统的网桥,如
- Bridge:最通用,虚拟机像独立主机,但无法与宿主机通信。
- VEPA:流量都走交换机,适合需要外部策略控制的场景。
- Private:严格隔离同宿主机上的虚拟机。
- Passthrough:性能怪兽,但独占物理网卡。
对于大多数 KVM 用户,如果你希望虚拟机获得宿主机所在局域网的真实 IP,且不与宿主机直接交互,Bridge 模式就是最佳选择,如果你需要让宿主机也能访问虚拟机,建议换回传统的 Linux Bridge 或 OVS (Open vSwitch)。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。