MacVlan允许在主机的一个网络接口上配置多个虚拟的网络接口,这些网络网卡有自己独立的 MAC 地址,也可以配置上 IP 地址进行通信。MacVlan本质上是一种网卡虚拟化技术,最大的优点就是性能优秀。
只要是从macvlan 子接口发来的数据包,物理网卡只接收数据包,不处理数据包,所以这就引出了一个问题:本机macvlan网卡上面的IP无法和物理网卡上面的 IP 通信。
MacVlan 模式
模式 | 说明 | 场景 |
Bridge | 允许虚拟子接口通过物理接口连接到物理网络,并与物理网络中的其他设备通信。 | 用于容器、虚拟机或物理服务器 |
VEPA | 允许 Macvlan 子接口连接到物理网络上的 VEPA 桥接设备,该桥接设备负责将流量引导到正确的虚拟子接口。 | 用于虚拟交换机和交换机基础设施中,支持虚拟机的网络连接 |
Private | 创建了一个隔离的网络域,其中 Macvlan 子接口之间无法直接通信,但它们仍然可以连接到物理网络 | 用于实现多租户环境,确保不同租户之间的网络隔离 |
Passthru | 允许将数据包传递给具有特定 MAC 地址的物理设备,而不是在 Linux 主机上处理它们 | 通常与虚拟化环境中的物理网卡直通(SR-IOV)一起使用 |
MacVlan 操作
动作 | 命令 | 说明 |
创建 | ip link add link eth0 macvlan1 type macvlan mode bridge | |
查看 | ip link show type macvlan | macvlan1@eth0 |
删除 | ip link delete macvlan1 |
主机1
## 开启混杂模式
ip link set eth0 promisc on
## 创建 macvlan 接口和命名空间
ip netns add container1
ip netns add container2
ip link add link eth0 macvlan1 type macvlan mode bridge
ip link add link eth0 macvlan2 type macvlan mode bridge
## 将 macvlan 接口添加到命名空间
ip link set macvlan1 netns container1
ip link set macvlan2 netns container2
## 配置IP
ip netns exec container1 ip link set dev macvlan1 up
ip netns exec container1 ip addr add / dev macvlan1
ip netns exec container2 ip link set dev macvlan2 up
ip netns exec container2 ip addr add / dev macvlan2
## 网络连通性,同主机不同命名空间ping
ip netns exec container1 ping -c1 -W1
ip netns exec container1 ping -c1 -W1
主机2
## 开启混杂模式
ip link set eth0 promisc on
## 创建 macvlan 接口和命名空间
ip netns add container3
ip link add link eth0 macvlan3 type macvlan mode bridge
## 将 macvlan 接口添加到命名空间
ip link set macvlan3 netns container3
## 配置IP
ip netns exec container3 ip link set dev macvlan3 up
ip netns exec container3 ip addr add / dev macvlan3
## 网络连通性,同主机不同命名空间ping
ip netns exec container3 ping -c1 -W1
ip netns exec container3 ping -c1 -W1
清理环境
## 清理环境
ip netns delete container1
ip netns delete container2
ip netns delete container3
ip link delete macvlan1
ip link delete macvlan2
ip link delete macvlan3
Macvlan局限性
虽然Macvlan是一种强大的网络虚拟化技术,但它也存在一些局限性,需要在使用时考虑:
- 复杂性:配置和管理Macvlan子接口可能相对复杂,特别是对于网络新手来说。需要小心管理,以确保正确的网络配置和隔离。
- 性能隐患:尽管Macvlan通常具有较高的性能,但在某些情况下,可能会出现性能问题,特别是当大量Macvlan子接口与物理网络接口绑定时。
- 不适用于所有网络场景:Macvlan适用于某些特定用例,如容器和虚拟机环境,但不适用于所有网络场景。在某些情况下,其他网络虚拟化技术,如Linux Bridge或VXLAN,可能更适合。
- 广播和多播限制:Macvlan子接口通常无法在同一VLAN内进行广播和多播通信,这可能需要额外的配置才能实现。这可能会对某些应用程序造成问题。
- IP地址管理:在Macvlan配置中,需要管理IP地址的分配和管理。这可能需要更多的网络规划和配置工作,以确保正确的IP地址分配。
- MAC地址冲突:由于每个Macvlan子接口都有独立的MAC地址,如果不小心管理,可能会导致MAC地址冲突。这可能会引起网络问题。
- 不支持跨子网通信:Macvlan子接口通常不支持不同子网之间的通信,除非进行额外的配置。