1。Macvlan简介
在Macvlan出现之前,我们只能为一块以太网卡添加多个IP地址,却不能添加多个MAC地址,因为MAC地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建ethx: y这样的方式,你会发现所有这些“网卡”的MAC地址和ethx都是一样的,本质上,它们还是一块网卡,这将限制你做很多二层的操作。有了Macvlan技术,你可以这么做了。
Macvlan允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络接口有自己独立的MAC地址,也可以配置上IP地址进行通信.Macvlan下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域.Macvlan和桥比较相似,但因为它省去了桥的存在,所以配置和调试起来比较简单,而且效率也相对高。除此之外,Macvlan自身也完美支持VLAN。
同一VLAN间数据传输是通过二层互访,即MAC地址实现的,不需要使用路由。不同VLAN的用户单播默认不能直接通信,如果想要通信,还需要三层设备做路,由Macvlan也是如此。用Macvlan技术虚拟出来的虚拟网卡,在逻辑上和物理网卡是对等的。物理网卡也就相当于一个交换机,记录着对应的虚拟网卡和MAC地址,当物理网卡收到数据包后,会根据目的MAC地址判断这个包属于哪一个虚拟网卡。这也就意味着,只要是从Macvlan子接口发来的数据包(或者是发往Macvlan子接口的数据包),物理网卡只接收数据包,不处理数据包,所以这就引出了一个问题:本机Macvlan网卡上面的IP无法和物理网卡上面的IP通信!关于这个问题的解决方案我们下一节再讨论。
我们用一个Linux主机,通过配置其路由表和iptables,将其配成一个路由器(当然是虚拟的),就可以完成不同macvlan网络之间的数据交换,当然用物理路由器也是没毛病的。
3。Macvlan的特点:
1。可让使用者在同一张实体网卡上设定多个MAC地址。
2。承上,带有上述设定的MAC地址的网卡称为子接口(子接口),而实体网卡则称为父接口(父接口)。
3。父接口可以是一个物理接口(eth0),可以是一个802.1 q的子接口(eth0.10),也可以是成键接口。
4。可在父/子界面上设定的不只是MAC地址,IP地址同样也可以被设定。
5。子接口无法直接与父接口通讯(带有子接口的虚拟机或容器无法与主机直接通讯)。
承上,若VM或容器需要与主机通讯,那就必须额外建立一个下标6.接口给主机用。
7。子接口通常以mac0@eth0的形式来命名以方便区別。
用张图来解释一下设定Macvlan后的样子: