Docker MacVlan(Linux)

一、介绍

    macvlan是一种linux虚拟化网卡技术,可以将一块物理网卡虚拟化成为多块虚拟网卡,并且每个 虚拟网卡都可以将其虚拟mac并且指定相应的IP地址。但是需要linux内核支持macvlan技术。检测方法如下,如果出现报错或者不返回结果则当前系统不支持macvlan。

#!/bin/bash
lsmod | grep macvlan

1.1 工作模式

1.1.1 Private

    private模式下于VEPA模式类似,都是各个子设备之间不可用进行通讯,而此模式不同的是,也不能使用外部交换机链接进行通讯,是完全隔离的!

1.1.2 Virtal Ethernet Port Aggregator

    各个子设备无法直接进行通讯,需要外部交换机支持(需支持802.1Qbg/VPEA功能——数据可从接口接受并且可以回传),外部通信正常。

image

1.1.3 Bridge

    桥接模式,各个虚拟的子网卡都被链接到一个虚拟网桥上面可以进行相互通讯,不需要外部交换机支持(内部虚拟)。

image

1.1.4 Passthrough

        这种模式下会完全接管父接口的所有流量信息,并且每个父接口只允许一个macvlan设备进行连接。并且主接口必须改为混杂模式!

#!/bin/bash
#修改混杂模式命令:
ifconfig 查看网卡,记录网卡编号(XXXX)
ip link set XXXX promisc on
ifconfig 查看是否开启混杂模式,网卡属性中含有PROMISC字样即开启

image

二、配合namespace基本使用

#!/bin/bash
ip link add [link DEV] [ name ] NAME
[ txqueuelen PACKETS ]
[ address LLADDR ]
[ broadcast LLADDR ]
[ mtu MTU ]
[ numtxqueues QUEUE_COUNT ]
[ numrxqueues QUEUE_COUNT ]
type TYPE [ ARGS ]
option:
link DEVICE:指定要操作的物理设备
name NAME:指定新虚拟设备的名称
type TYPE:指定新设备的类型
bridge - Ethernet Bridge device
bond - Bonding device
dummy - Dummy network interface
ifb - Intermediate Functional Block device
ipoib - IP over Infiniband device
macvlan - Virtual interface base on link layer address (MAC)
macvtap - Virtual interface based on link layer address (MAC) and TAP.
vcan - Virtual Controller Area Network interface
veth - Virtual ethernet interface
vlan - 802.1q tagged virtual LAN interface
vxlan - Virtual eXtended LAN
ip6tnl - Virtual tunnel interface IPv4|IPv6 over IPv6
ipip - Virtual tunnel interface IPv4 over IPv4
sit - Virtual tunnel interface IPv6 over IPv4
gre - Virtual tunnel interface GRE over IPv4
gretap - Virtual L2 tunnel interface GRE over IPv4
ip6gre - Virtual tunnel interface GRE over IPv6
ip6gretap - Virtual L2 tunnel interface GRE over IPv6
vti - Virtual tunnel interface
nlmon - Netlink monitoring device
geneve - GEneric NEtwork Virtualization Encapsulation
macsec - Interface for IEEE 802.1AE MAC Security (MACsec)
numtxqueues QUEUE_COUNT:指定新设备的传输队列数
numrxqueues QUEUE_COUNT:指定新设备的接收队列数

macvvlan创建
ip link add link DEVICE name NAME type { macvlan | macvtap } mode { private | vepa | bridge | passthru [ nopromisc ] }
范例:ip link add eth0 dev macvlan1 type macvlan mode bridge
创建一个于eth0链接的macvlan网卡,其是桥接模式
  1. 创建macvlan接口
    1. ip link add eth0 dev macvlan1 type macvlan mode bridge
  2. 创建namespace空间
    1. ip netns add namespace1 创建命名空间
    2. ip link set macvlan1 netns namespace1 将macvlan1绑定到命名空间1上
  3. 配置macvlan网络‘
    1. ip netns exec amespace1 ip addr add 10.0.0.2/24 dev macvlan1 配置macvlan ip

namespace :对于linux而言,其每个子进程类似的都有一个运行空间,这个运行空间内部的看起来就像一个独立的主机(虚拟化)子容器进程映射到父容器上,子容器与子容器相互隔离,但是父容器可以掌管控制子容器的进程。

image

ip netns exec namespace ping xxxx 使用指定的namespace运行网络命令