# 简单了解 Macvlan

macvlan 是一种网络虚拟化技术,它允许在一个物理网络接口上配置多个虚拟网络接口,简单的说 macvlan 类型类似于子接口,但是相对于子接口来说,macvlan 的每个虚拟网络接口都有自己独立的 MAC 地址,并且可以配置上 IP 地址进行通信

  • 查询当前内核是否加载 macvlan 内核
    查询驱动
    1
    lsmod | grep macvlan

    如果没有查询到,则可以手动载入,内核代码路径为 /drivers/net/macvlan.c
    载入驱动
    1
    modprobe macvlan
  • macvlan 四种模式
    • vepa 模式:各个子设备直接无法直接通信(可以通过支持端口聚合的交换机通信),可以和外部通信。
    • private 模式:和 vepa 模式类似,各个子设备之间无法通信,即使通过支持端口聚合的交换机也不能。
    • bridge 模式:各个子设备之间可以通信,通过虚拟桥接模式
    • passthru 模式:会接管父设备(网口),父设备不能接收数据包,并且每个父设备只允许存在一个 macvlan 设备

# 通过 macvlan 实现容器与外部主机通信

  • 网卡开启混杂模式

    混杂模式
    1
    2
    3
    4
    #网卡开启混杂模式
    ifconfig eno1 promisc
    #网卡关闭混杂模式
    ifconfig eno1 -promisc

  • 创建 macvlan 网络模式

    创建网络模式
    1
    docker network create -d macvlan --subnet=192.168.128.0/24 --gateway=192.168.128.2 -o parent=eth0 -o macvlan_mode=vepa vepamv 

    --subnet 为子网掩码 CIDR 格式

    --gateway 为网关

    parent 为网卡名称

  • 创建两个容器 mac1 与 mac2

    创建容器
    1
    docker run -itd --name mac1 --net=vepamv --ip=192.168.128.222 -v /sys/fs/cgroup:/sys/fs/cgroup --privileged=true  --restart=always  mac:latest /usr/sbin/init

    查看存在两 mac 地址

    查看模式信息
    1
    2
    #查看网络模式信息
    docker network inspect vepamv

    mac1 与 mac2 容器之间相互无法 ping 通,删除上述网络模式与容器

  • 创建 bridge 模式的 macvlan 网络,重新新建 mac1 与 mac2 发现能够相互 ping 通

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

位菠萝 微信支付

微信支付

位菠萝 支付宝

支付宝

位菠萝 贝宝

贝宝