本期重点 macvlan
没有 macvlan 之前 我们可以通过网卡别名给网卡绑定多个ip eth0 eth0.1 等等,但是这些网卡都有一个共同的mac 地址这个是无法改变的。
Macvlan接口可以看作是物理以太网接口的虚拟子接口。Macvlan允许用户在主机的一个网络接口上配置多个虚拟的网络接口,每个Macvlan接口都有自己的区别于父接口的MAC地址,并且可以像普通网络接口一样分配IP地址。因此,使用Macvlan技术带来的效果是一块物理网卡上可以绑定多个IP地址,每个IP地址都有自己的MAC地址。
Macvlan的主要用途是网络虚拟化(包括容器和虚拟机)。另外,有一些比较特殊的场景,例如,keepalived使用虚拟MAC地址。
Macvlan 必须和宿主网卡处在同一个广播域中,即同一个网段。
Macvlan支持5种模式,分别是bridge、VEPA、Private、Passthru和Source模式。
bridge 模式
该模式类似Linux bridge,是Macvlan最常用的模式,比较适合共享同一个父接口的Macvlan网卡进行直接通信的场景。在bridge模式下,拥有相同父接口的两块Macvlan虚拟网卡可以直接通信,不需要把流量通过父接口发送到外部网络,广播帧将会被洪泛到连接在“网桥”上的所有其他子接口和物理接口。网桥带双引号是因为实际上并没有网桥实体的产生,而是指在这些网卡之间数据流可以实现直接转发,这有点类似于Linux网桥。但Macvlan的bridge模式和Linux网桥不是一回事,它不需要学习MAC地址,也不需要生成树协议(STP),因此性能要优于Linux网桥。
VEPA 模式
VEPA(Virtual Ethernet Port Aggregator,虚拟以太网端口聚合)是默认模式。所有从Macvlan接口发出的流量,不管目的地址是什么,全部“一股脑”地发送给父接口——即使流量的目的地是共享同一个父接口的其他Macvlan接口。在二层网络下,由于生成树协议的原因,两个Macvlan接口之间的通信会被阻塞,这时就需要接入的外部交换机支持hairpin,把源和目的地址都是本地Macvlan接口地址的流量,发给相应的接口。在VEPA模式下,从父接口收到的广播包会洪泛给所有的子接口。
Private 模式
Private模式类似于VEPA模式,但又增强了VEPA模式的隔离能力,其完全阻止共享同一父接口的Macvlan虚拟网卡之间的通信。即使配置了hairpin,让从父接口发出的流量返回宿主机,相应的通信流量依然被丢弃
Passthru 模式
Passthru模式翻译过来就是直通模式。在这种模式下,每个父接口只能和一个Macvlan网卡捆绑,并且Macvlan网卡继承父接口的MAC地址。
Source模式
在这种模式下,寄生在物理设备上,Macvlan设备只接收指定的源Mac地址的数据包,其他数据包一概丢弃。
测试通信链路
ip link add eth0.1 link eth0 type macvlan mode bridge ip -d link show eth0.1 ip link set eth0.1 up