macvlan 和 ipvlan 实现原理及设计案例详解

news2025/4/5 20:57:02

在这里插入图片描述

一、macvlan 实现原理
1. 核心概念
  • macvlan 允许在单个物理网络接口上创建多个虚拟网络接口,每个虚拟接口拥有 独立的 MAC 地址IP 地址
  • 工作模式
    • bridge 模式(默认):虚拟接口之间可直接通信,类似交换机。
    • private 模式:虚拟接口之间隔离,仅能与物理接口通信。
    • vepa 模式(Virtual Ethernet Port Aggregator):依赖外部交换机实现通信。
    • passthru 模式:将物理接口直接映射到容器(较少使用)。
2. 实现原理
  • MAC 地址隔离:每个 macvlan 接口有唯一的 MAC 地址,物理网络通过 MAC 地址识别不同虚拟接口。
  • 混杂模式(Promiscuous Mode):物理接口需启用混杂模式,以接收所有目标 MAC 地址的流量。
  • 数据包转发:物理接口将流量按 MAC 地址分发到对应的 macvlan 虚拟接口。
3. 适用场景
  • 容器需要独立 MAC 地址(如 Docker 的 macvlan 驱动)。
  • 多租户网络,每个租户需独立网络身份。

二、ipvlan 实现原理
1. 核心概念
  • ipvlan 允许在单个物理接口上创建多个虚拟接口,共享物理接口的 MAC 地址,但使用 独立 IP 地址
  • 工作模式
    • L2 模式:虚拟接口在数据链路层(Layer 2)工作,共享广播域。
    • L3 模式:虚拟接口在网络层(Layer 3)工作,独立路由表。
2. 实现原理
  • MAC 地址共享:所有 ipvlan 接口共享物理接口的 MAC 地址,仅通过 IP 地址区分。
  • 流量隔离:L2 模式通过 VLAN 或防火墙规则隔离;L3 模式通过路由表隔离。
  • 无混杂模式依赖:物理接口无需启用混杂模式。
3. 适用场景
  • MAC 地址受限的环境(如公有云虚拟机)。
  • 需要节省 MAC 地址资源的容器网络。

三、macvlan 设计案例

案例目标
  • 在同一物理接口(如 eth0)上创建两个 macvlan 虚拟接口,分配给两个网络命名空间(ns1ns2)。
  • 验证:
    1. 命名空间之间可互相通信。
    2. 命名空间可通过物理接口访问外部网络。
    3. 宿主机无法直接访问命名空间 IP(隔离性验证)。
实现步骤
  1. 创建命名空间

    sudo ip netns add ns1
    sudo ip netns add ns2
    
  2. 创建 macvlan 接口并分配到命名空间

    # 物理接口 eth0 上为 ns1 创建 macvlan(bridge 模式)
    sudo ip link add macvlan1 link eth0 type macvlan mode bridge
    sudo ip link set macvlan1 netns ns1
    
    # 为 ns2 创建 macvlan
    sudo ip link add macvlan2 link eth0 type macvlan mode bridge
    sudo ip link set macvlan2 netns ns2
    
  3. 配置 IP 地址并启用接口

    sudo ip netns exec ns1 ip addr add 192.168.1.101/24 dev macvlan1
    sudo ip netns exec ns1 ip link set macvlan1 up
    sudo ip netns exec ns1 ip route add default via 192.168.1.1  # 假设网关为 192.168.1.1
    
    sudo ip netns exec ns2 ip addr add 192.168.1.102/24 dev macvlan2
    sudo ip netns exec ns2 ip link set macvlan2 up
    sudo ip netns exec ns2 ip route add default via 192.168.1.1
    
  4. 验证功能

    # 1. 命名空间之间互通
    sudo ip netns exec ns1 ping -c 3 192.168.1.102
    
    # 2. 命名空间访问外网
    sudo ip netns exec ns1 ping -c 3 8.8.8.8
    
    # 3. 宿主机无法访问命名空间 IP(隔离性)
    ping -c 3 192.168.1.101   # 应失败
    

四、ipvlan 设计案例

案例目标
  • 在物理接口 eth0 上创建两个 ipvlan 虚拟接口(L2 模式),分配给两个网络命名空间(ns1ns2)。
  • 验证:
    1. 命名空间之间可通信(同一子网)。
    2. 命名空间可通过物理接口访问外网。
    3. 宿主机无法直接访问命名空间 IP(隔离性)。
实现步骤
  1. 创建命名空间

    sudo ip netns add ns1
    sudo ip netns add ns2
    
  2. 创建 ipvlan 接口并分配到命名空间

    # 物理接口 eth0 上为 ns1 创建 ipvlan(L2 模式)
    sudo ip link add ipvlan1 link eth0 type ipvlan mode l2
    sudo ip link set ipvlan1 netns ns1
    
    # 为 ns2 创建 ipvlan
    sudo ip link add ipvlan2 link eth0 type ipvlan mode l2
    sudo ip link set ipvlan2 netns ns2
    
  3. 配置 IP 地址并启用接口

    sudo ip netns exec ns1 ip addr add 192.168.1.101/24 dev ipvlan1
    sudo ip netns exec ns1 ip link set ipvlan1 up
    sudo ip netns exec ns1 ip route add default via 192.168.1.1
    
    sudo ip netns exec ns2 ip addr add 192.168.1.102/24 dev ipvlan2
    sudo ip netns exec ns2 ip link set ipvlan2 up
    sudo ip netns exec ns2 ip route add default via 192.168.1.1
    
  4. 验证功能

    # 1. 命名空间之间互通
    sudo ip netns exec ns1 ping -c 3 192.168.1.102
    
    # 2. 命名空间访问外网
    sudo ip netns exec ns1 ping -c 3 8.8.8.8
    
    # 3. 宿主机无法访问命名空间 IP(隔离性)
    ping -c 3 192.168.1.101   # 应失败
    

五、macvlan 与 ipvlan 对比

维度macvlanipvlan
MAC 地址每个虚拟接口独立 MAC共享物理接口 MAC
物理网络要求需支持混杂模式无特殊要求
适用场景容器需要独立 MAC(如 Docker macvlan)MAC 受限环境(如公有云)
广播流量处理所有虚拟接口接收广播L2 模式共享广播域,L3 模式隔离
性能高(内核直接转发)高(无 MAC 地址转换)

六、总结

  • macvlan 适合需要独立 MAC 地址的场景,但依赖物理网络支持混杂模式。
  • ipvlan 适合 MAC 地址受限或物理网络不支持混杂模式的场景,共享 MAC 但通过 IP 隔离。
  • 隔离性验证:无论使用 macvlan 还是 ipvlan,宿主机默认无法直接访问命名空间 IP,确保网络隔离。
  • 扩展应用:可结合 VLAN 或 SDN 控制器实现更复杂的多租户网络隔离。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝桥杯】每日练习 Day19,20

目录 前言 蒙德里安的梦想 分析 最短Hamilton路径 分析 代码 乌龟棋 分析 代码 松散子序列 分析 代码 代码 前言 今天不讲数论(因为上课学数论真是太难了,只学了高斯消元)所以今天就不单独拿出来讲高斯消元了。今天讲一下昨天和…

《AI大模型应知应会100篇》第7篇:Prompt Engineering基础:如何与大模型有效沟通

第7篇:Prompt Engineering基础:如何与大模型有效沟通 摘要 Prompt Engineering(提示工程)是与大模型高效沟通的关键技能。通过精心设计的Prompt,可以让模型生成更准确、更有用的结果。本文将从基础知识到高级策略&…

Spring实现WebScoket

SpringWeb编程方式分为Servlet模式和响应式。Servlet模式参考官方文档:Web on Servlet Stack :: Spring Framework,响应式(Reacive)参考官方文档:Web on Reactive Stack :: Spring Framework。 WebSocket也有两种编程方…

odoo-045 ModuleNotFoundError: No module named ‘_sqlite3‘

文章目录 一、问题二、解决思路 一、问题 就是项目启动,本来好好地,忽然有一天报错,不知道什么原因。 背景: 我是在虚拟环境中使用的python3.7。 二、解决思路 虚拟环境和公共环境直接安装 sqlite3 都会报找不到这个库的问题…

前端JS高阶技法:序列化、反序列化与多态融合实战

✨ 摘要 序列化与反序列化作为数据转换的核心能力,与多态这一灵活代码设计的核心理念,在现代前端开发中协同运作,提供了高效的数据通信与扩展性支持。 本文从理论到实践,系统解析: 序列化与反序列化的实现方式、使用…

RustDesk 开源远程桌面软件 (支持多端) + 中继服务器伺服器搭建 ( docker版本 ) 安装教程

在需要控制和被控制的电脑上安装软件 github开源仓库地址 https://github.com/rustdesk/rustdesk/releases 蓝奏云盘备份 ( exe ) https://geek7.lanzouw.com/iPf592sadqrc 密码:4esi 中继服务器设置 使用docker安装 sudo docker image pull rustdesk/rustdesk-server sudo…

STM32单片机入门学习——第3-4节: [2-1、2]软件安装和新建工程

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.01 STM32开发板学习——第一节: [1-1]课程简介 前言开发板说明引用解答和…

intellij Idea 和 dataGrip下载和安装教程

亲测有效 第一步:卸载老版本idea/Datagrip (没有安装过的可跳过此步骤) 第二步:下载idea/dataGrip安装包 建议选择2022以后的版本 官网: https://www.jetbrains.com/datagrip/download/other.html 选择dataGrip 的…

轻量级搜索接口技术解析:快速实现关键词检索的Java/Python实践

Hi,你好! 轻量级搜索接口技术解析:快速实现关键词检索的Java/Python实践 接口特性与适用场景 本接口适用于需要快速集成搜索能力的开发场景,支持通过关键词获取结构化搜索结果。典型应用场景包括: 垂直领域信息检索…

架构设计基础系列:事件溯源模式浅析

图片来源网络,侵权删 ‌1. 引言‌ ‌1.1 研究背景‌ 传统CRUD模型的局限性:状态覆盖导致审计困难、无法追溯历史。分布式系统复杂性的提升:微服务架构下数据一致性、回滚与调试的需求激增。监管合规性要求:金融、医疗等领域对数…

【力扣hot100题】(035)二叉树的中序遍历

正常方法递归很简单,于是又学了一种栈的方法。 原理如下:每次循环先尽量将目前节点入栈并左移,没有左节点时回到栈首节点将目前节点放入结果容器中并移出栈外,目前节点变为该节点的右节点,循环结束条件是目前节点为nu…

《数字图像处理》教材寻找合作者

Rafael Gonzalez和Richard Woods所著的《数字图像处理》关于滤波器的部分几乎全错,完全从零开始写,困难重重。关于他的问题已经描述在《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》。 现寻找能够共同讨论、切磋、…

批量删除 txt/html/json/xml/csv 等文本文件中的重复行

在文本文件中,可能会存在一些重复的数据行,这可能不是我们期望的,因此我们会碰到需要删除文本文件中重复行的情况。如果是人工删除,当文件较大或者数量较多的时候,处理的难度会较大。今天就给大家介绍一下批量删除文本…

基于微信小程序的智慧乡村旅游服务平台【附源码】

基于微信小程序的智慧乡村旅游服务平台(源码L文说明文档) 目录 4系统设计 4.1系统功能设计 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1旅游景点管理…

80. Linux内核定时器实验

一、Linux内核定时器原理 1.1、内核时间管理 1、Cortex-M内核使用systick作为系统定时器。 2、硬件定时器、软件定时器,原理是依靠系统定时器来驱动。 3、linux内核频率可以配置,图形化界面配置。 4、重点,HZ表示系统节拍率, 1.…

C++类与对象(上):从入门到实践

目录 一、引言 二、面向过程和面向对象初步认识 2.1 面向过程编程 2.2 面向对象编程 三、类的引入 四、类的定义 4.1 定义格式 4.2 定义方式 4.3 成员变量命名规则建议 五、类的访问限定符及封装 5.1 访问限定符 5.2 封装 六、类的作用域 七、类的实例化 7.1 概念…

Lumerical ------ Edge coupler design

Lumerical ------ Edge coupler design 引言正文无 Si Substrate 的仿真步骤有 Si Substrate 的仿真步骤引言 本文,我们将使用官方提供的 Edge coupler 设计教程,但是中间会带有作者本人的设计的感悟。 正文 无 Si Substrate 的仿真步骤 打开 Edge_Coupler_No_Substrate.l…

大语言模型本质上还是自动化,而不是智能化

大语言模型本质上仍然是自动化或高级自动化,而非真正的智能化,原因可以从以下几个方面进行分析:1、自动化与智能化的本质区别自动化:大语言模型通过预训练和微调,基于大量数据和规则生成输出。它的行为是基于输入数据的…

python数据结构——链表、栈、队列

一、思维梳理: 二、双向循环链表: class Node:def __init__(self,data):self.data dataself.next Noneself.prev Noneclass DoubleLink:def __init__(self):self.size 0self.head Nonedef is_empty(self):return self.size 0def add_end(self,dat…

centos操作系统如何更换yum镜像源

CentOS Linux 是一个免费提供的、社区支持的Linux发行版,由CentOS项目社区贡献者开发、分发和维护。2020年CentOS项目宣布将把全部投资转移到CentOS Stream,作为即将发布的 Red Hat Enterprise Linux版本的上游开发平台。因此,CentOS Linux更新和发布将在2021年至2024年期间…