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

一、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 虚拟接口,分配给两个网络命名空间(ns1和ns2)。 - 验证:
- 命名空间之间可互相通信。
- 命名空间可通过物理接口访问外部网络。
- 宿主机无法直接访问命名空间 IP(隔离性验证)。
实现步骤
-
创建命名空间
sudo ip netns add ns1 sudo ip netns add ns2 -
创建 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 -
配置 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.1sudo 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 -
验证功能
# 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 模式),分配给两个网络命名空间(ns1和ns2)。 - 验证:
- 命名空间之间可通信(同一子网)。
- 命名空间可通过物理接口访问外网。
- 宿主机无法直接访问命名空间 IP(隔离性)。
实现步骤
-
创建命名空间
sudo ip netns add ns1 sudo ip netns add ns2 -
创建 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 -
配置 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.1sudo 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 -
验证功能
# 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 对比
| 维度 | macvlan | ipvlan |
|---|---|---|
| MAC 地址 | 每个虚拟接口独立 MAC | 共享物理接口 MAC |
| 物理网络要求 | 需支持混杂模式 | 无特殊要求 |
| 适用场景 | 容器需要独立 MAC(如 Docker macvlan) | MAC 受限环境(如公有云) |
| 广播流量处理 | 所有虚拟接口接收广播 | L2 模式共享广播域,L3 模式隔离 |
| 性能 | 高(内核直接转发) | 高(无 MAC 地址转换) |
六、总结
- macvlan 适合需要独立 MAC 地址的场景,但依赖物理网络支持混杂模式。
- ipvlan 适合 MAC 地址受限或物理网络不支持混杂模式的场景,共享 MAC 但通过 IP 隔离。
- 隔离性验证:无论使用 macvlan 还是 ipvlan,宿主机默认无法直接访问命名空间 IP,确保网络隔离。
- 扩展应用:可结合 VLAN 或 SDN 控制器实现更复杂的多租户网络隔离。
相关文章:
macvlan 和 ipvlan 实现原理及设计案例详解
一、macvlan 实现原理 1. 核心概念 macvlan 允许在单个物理网络接口上创建多个虚拟网络接口,每个虚拟接口拥有 独立的 MAC 地址 和 IP 地址。工作模式: bridge 模式(默认):虚拟接口之间可直接通信,类似交…...
【蓝桥杯】每日练习 Day19,20
目录 前言 蒙德里安的梦想 分析 最短Hamilton路径 分析 代码 乌龟棋 分析 代码 松散子序列 分析 代码 代码 前言 今天不讲数论(因为上课学数论真是太难了,只学了高斯消元)所以今天就不单独拿出来讲高斯消元了。今天讲一下昨天和…...
《AI大模型应知应会100篇》第7篇:Prompt Engineering基础:如何与大模型有效沟通
第7篇:Prompt Engineering基础:如何与大模型有效沟通 摘要 Prompt Engineering(提示工程)是与大模型高效沟通的关键技能。通过精心设计的Prompt,可以让模型生成更准确、更有用的结果。本文将从基础知识到高级策略&…...
微服务架构技术栈选型避坑指南:10大核心要素深度拆解
微服务架构的技术栈选型直接影响系统的稳定性、扩展性和可维护性。以下从10大核心要素出发,结合主流技术方案对比、兼容性评估、失败案例及优化策略,提供系统性选型指南。 1. 服务框架与通信 关键考量点 扩展性:框架需支持定制化扩展&#x…...
Elasticsearch 正排索引
一、正排索引基础概念 在 Elasticsearch 中,正排索引用于存储完整的文档内容,以便通过文档ID 快速定位文档的字段值。正排索引通过 Doc Values 和 Store Fields 两种形式,为聚合、排序、脚本计算等场景提供高效支持。Doc Values 的列式存储设…...
Spring实现WebScoket
SpringWeb编程方式分为Servlet模式和响应式。Servlet模式参考官方文档:Web on Servlet Stack :: Spring Framework,响应式(Reacive)参考官方文档:Web on Reactive Stack :: Spring Framework。 WebSocket也有两种编程方…...
Token是什么?
李升伟 整理 “Token” 是一个多义词,具体含义取决于上下文。以下是几种常见的解释: 1. 计算机科学中的 Token 定义:在编程和计算机科学中,Token 是源代码经过词法分析后生成的最小单位,通常用于编译器和解释器。 …...
odoo-045 ModuleNotFoundError: No module named ‘_sqlite3‘
文章目录 一、问题二、解决思路 一、问题 就是项目启动,本来好好地,忽然有一天报错,不知道什么原因。 背景: 我是在虚拟环境中使用的python3.7。 二、解决思路 虚拟环境和公共环境直接安装 sqlite3 都会报找不到这个库的问题…...
cesium加载CTB生成的地形数据
由于CTB生成的地形数据是压缩的(gzip)格式,需要在nginx加上特殊配置才可以正常加载,NGINX全部配置如下 worker_processes 1; events {worker_connections 1024; } http {include mime.types;default_type application/o…...
前端JS高阶技法:序列化、反序列化与多态融合实战
✨ 摘要 序列化与反序列化作为数据转换的核心能力,与多态这一灵活代码设计的核心理念,在现代前端开发中协同运作,提供了高效的数据通信与扩展性支持。 本文从理论到实践,系统解析: 序列化与反序列化的实现方式、使用…...
TS中的Class
基本用法 implements implements 关键字用于传递对类产生约束的数据类型 interface AnimalInfo{name:stringrace:stringage:number }interface AnimalCls{info:AnimalInfosayName():void} class Animal implements AnimalCls{info:AnimalInfoconstructor(info:AnimalInfo) {t…...
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…...
【计网速通】计算机网络核心知识点与高频考点——数据链路层(二)
数据链路层核心知识点(二) 涵盖局域网、广域网、介质访问控制(MAC层)及数据链路层设备 上文链接:https://blog.csdn.net/weixin_73492487/article/details/146571476 一、局域网(LAN,Loacl Area Network&am…...
STM32单片机入门学习——第3-4节: [2-1、2]软件安装和新建工程
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.01 STM32开发板学习——第一节: [1-1]课程简介 前言开发板说明引用解答和…...
W3C XML Schema 活动
W3C XML Schema 活动 概述 W3C XML Schema(XML Schema)是万维网联盟(W3C)定义的一种数据描述语言,用于定义XML文档的结构和约束。XML Schema为XML文档提供了一种结构化的方式,确保数据的一致性和有效性。本文将详细介绍W3C XML Schema的活动,包括其发展历程、主要特点…...
爬虫【Scrapy-redis分布式爬虫】
Scrapy-redis分布式爬虫 1.Scrapy-redis实现增量爬虫 增量爬虫的含义 就是前面所说的的暂停、恢复爬取 安装 # 使用scrapy-redis之前最好将scrapy版本保持在2.8.0版本, 因为2.11.0版本有兼容性问题 pip install scrapy==2.8.0 pip install scrapy-redis -i https://pypi.tun…...
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模型的局限性:状态覆盖导致审计困难、无法追溯历史。分布式系统复杂性的提升:微服务架构下数据一致性、回滚与调试的需求激增。监管合规性要求:金融、医疗等领域对数…...
ResNet系列和ViT系列预训练模型权重文件下载
一、简单介绍 OpenAI CLIP项目提供的预训练模型权重文件列表,主要包含两种架构系列和不同规模配置: ResNet系列 (RN) 基础版本:RN50(ResNet-50)扩展版本:RN50x4、RN50x16、RN50x64(宽度扩展&am…...
【力扣hot100题】(035)二叉树的中序遍历
正常方法递归很简单,于是又学了一种栈的方法。 原理如下:每次循环先尽量将目前节点入栈并左移,没有左节点时回到栈首节点将目前节点放入结果容器中并移出栈外,目前节点变为该节点的右节点,循环结束条件是目前节点为nu…...
《数字图像处理》教材寻找合作者
Rafael Gonzalez和Richard Woods所著的《数字图像处理》关于滤波器的部分几乎全错,完全从零开始写,困难重重。关于他的问题已经描述在《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》。 现寻找能够共同讨论、切磋、…...
批量删除 txt/html/json/xml/csv 等文本文件中的重复行
在文本文件中,可能会存在一些重复的数据行,这可能不是我们期望的,因此我们会碰到需要删除文本文件中重复行的情况。如果是人工删除,当文件较大或者数量较多的时候,处理的难度会较大。今天就给大家介绍一下批量删除文本…...
LangChain 使用向量数据库介绍与使用
LangChain 是一个用于构建大语言模型(LLM)应用的框架,而向量数据库在 LangChain 中主要用于实现检索增强生成(RAG, Retrieval-Augmented Generation),即通过向量搜索从外部知识库中快速检索相关信息,辅助大模型生成更准确的回答。以下是具体的使用方法: 1. 核心流程 L…...
基于微信小程序的智慧乡村旅游服务平台【附源码】
基于微信小程序的智慧乡村旅游服务平台(源码L文说明文档) 目录 4系统设计 4.1系统功能设计 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1旅游景点管理…...
d202542
一、142.环形链表I 142. 环形链表 II - 力扣(LeetCode) 用set统计一下 如果再次出现那么就环的第一个return返回就行 public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();ListNode cur head;while(cur ! …...
NodeTextFileCollectorScrapeError 报警原因及解决方法
现象 prometheus 经常有告警 NodeTextFileCollectorScrapeError 查看 node-exporter 日志出现如下报错 time2025-04-01T06:43:18.266Z levelERROR sourcetextfile.go:248 msg"failed to collect textfile data" collectortextfile fileipmitool.prom err"fail…...
RapidJSON 处理 JSON(高性能 C++ 库)(四)
第四部分:RapidJSON 处理 JSON(高性能 C++ 库) 📢 快速掌握 JSON!文章 + 视频双管齐下 🚀 如果你觉得阅读文章太慢,或者更喜欢 边看边学 的方式,不妨直接观看我录制的 RapidJSON 课程视频!🎬 视频里会用更直观的方式讲解 RapidJSON 的核心概念、实战技巧,并配有…...
80. Linux内核定时器实验
一、Linux内核定时器原理 1.1、内核时间管理 1、Cortex-M内核使用systick作为系统定时器。 2、硬件定时器、软件定时器,原理是依靠系统定时器来驱动。 3、linux内核频率可以配置,图形化界面配置。 4、重点,HZ表示系统节拍率, 1.…...
Java 可变参数全解析:动态参数传递的实践指南
Java 可变参数全解析:动态参数传递的实践指南 一、可变参数:Java 方法的灵活扩展 在狂神说 Java 第 49 集课程中,我们系统学习了 Java 可变参数的核心原理。作为 Java SE 5 引入的重要特性,可变参数允许方法接受动态数量的输入&…...
