1. 介绍
macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。**macvlan 本质上是一种网卡虚拟化技术(最大优点是性能极好)**
可以在linux命令行执行`lsmod | grep macvlan` 查看当前内核是否加载了该driver;如果没有查看到,可以通过`modprobe macvlan`来载入,然后重新查看。内核代码路径/drivers/net/macvlan.c
Macvlan 允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 `interface` 有自己独立的 MAC 地址,也可以配置上 IP 地址进行通信。Macvlan 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。Macvlan 和 `Bridge` 比较相似,但因为它省去了 Bridge 的存在,所以配置和调试起来比较简单,而且效率也相对高。除此之外,Macvlan 自身也完美支持 `VLAN`。
2. 工作模式(Bridge VS MACVlan)
2.1 Bridge Mode
Bridge 是二层设备,仅用来处理二层的通讯。
Bridge 使用 MAC 地址表来决定怎么转发帧(Frame)。
Bridge 会从 host 之间的通讯数据包中学习 MAC 地址。
可以是硬件设备,也可以是纯软件实现(例如:Linux Bridge)。
提示:
Bridge 有可能会遇到二层环路,如有需要,可以开启 STP 来防止出现环路。
2.2 MACVlan Mode
可让使用者在同一张实体网卡上设定多个 MAC 地址。
上述设定的 MAC 地址的网卡称为子接口(sub interface);而实体网卡则称为父接口(parent interface)。
parent interface 可以是一个物理接口(eth0),可以是一个 802.1q 的子接口(eth0.10),也可以是 bonding 接口。
可在 parent/sub interface 上设定的不只是 MAC 地址,IP 地址同样也可以被设定。
sub interface 无法直接与 parent interface 通讯 (带有 sub interface 的 VM 或容器无法与 host 直接通讯)。
若 VM 或容器需要与 host 通讯,那就必须额外建立一个 sub interface 给 host 用。
sub interface 通常