Linux 虚拟化网络技术 — 物理网卡的虚拟化(MACVLAN 和 MACVTAP)
目录
文章目录
- 目录
- 物理网卡的虚拟化(MACVLAN 和 MACVTAP)
- MACVLAN
- MACVLAN 与 VLAN 子接口、Bridge 之间的区别
- Private 模式
- VEPA 模式
- Bridge 模式
- Passthru 模式
- MACVTAP
物理网卡的虚拟化(MACVLAN 和 MACVTAP)
MACVLAN
有时候我们可能会需求对一块 Physical NIC 绑定多个 IP 以及多个 MAC 地址。绑定多个 IP 很容易,但是这些 IP 会共享 Physical NIC 的 MAC 地址,这样就无法满足我们的设计需求,所以就有了物理网卡的虚拟化技术 —— macvlan 设备。
通过 MACVLAN 可以将一个 Physical NIC 虚拟成多个 Virtual Sub-NIC(虚拟网络子接口),这些 VNIs 可以拥有自己独立的 MAC/IP 地址,且与主机网络处在同一个 LAN 里面,共享同一个广播域。
MACVLAN 是 Linux Kernel 的新特性,在 Linux kernel v3.9-3.19 和 v4.0+ 版本中支持。比较稳定的版本推荐 4.0+,它一般以内核模块的形式存在。
# modprobe macvlan
# lsmod | grep macvlan
macvlan 24576 0
MACVLAN 与 VLAN 子接口、Bridge 之间的区别
MACVLAN 这种技术听起来有点像 Linux VLAN device for 802.1.q(Linux VLAN 子接口),但它们的实现机制是完全不一样的。MACVLAN 子接口和原来的主接口是完全独立的,可以单独配置 MAC 地址和 IP 地址,而 VLAN 子接口和主接口共用相同的 MAC 地址。VLAN 用来划分广播域,而 MACVLAN 共享同一个广播域。
另外,MACVLAN 与 Bridge 也很类型,但相比,MACVLAN 没有了 Bridge 带来的 MAC 地址学习和翻译的负担,是一种高效直接的互联技术。
其工作方式如下:
通过不同的子接口,MACVLAN 做到了流量的隔离。MACVLAN 会根据数据帧的目的 MAC 地址来判断这个帧需要交给哪张 VNI,VNI 再把包交给上层的内核协议栈处理。
根据 MACVLAN 子接口之间的通信模式,MACVLAN 有四种网络模式。MACVLAN 具有非常类型 SR-IOV PF/VFs 网卡的特性。
NOTE:虽然 MACVLAN 主接口和子接口在同一个 LAN,但是在 Host 上通过主接口是没有办法直接和子接口通信的。需要额外建立一个子接口,把主接口的 IP 配置给这个子接口,这样才能借助原来主接口的 IP 地址和子接口进行通信。
Private 模式
这种模式下,主接口会过滤掉交换机返回来的来自其子接口的报文,同一主接口下的不同子接口之间彼此隔离,不能通信。即使从外部的物理交换机导流,也会被无情地丢掉。
VEPA 模式
VEPA(Virtual Ethernet Port Aggregator,虚拟以太网端口聚合器)mode ,Hairpin mode(发夹流量模式)。
这种模式下,子接口之间的通信流量会被主接口发送出去到外部交换机,交换机再发送到对应的目标 MAC 地址,即使目标 MAC 地址就是主接口上的其它子接口。
这个模式需要主接口连接的交换机支持 VEPA/802.1Qbg 特性(可以是物理的或者虚拟的)。这种方式允许一个主接口上的多个子接口借助外部交换机进行相互通信,而 LAN 里面的广播包也会被主接口转发到所有子接口。
这个种方式的一个典型应用是如果在外部交换机上有一些策略(e.g. 流量检测),则可以使用 VEPA 模式让所有子接口交互的包都会经由外部交换机的处理,便于统一管理整个子网的所有物理和虚拟接口。
注: 802.1Qbg/VPEA 功能简单说就是交换机要支持发夹(Hairpin) 功能,也就是数据包从一个接口上收上来之后还能再扔回去。
Bridge 模式
Bridge mode(桥模式)模拟的是 Linux bridge 的功能。通过 Host 上的 MACVLAN Bridge 将主接口的所有子接口连接在一起,不同子接口之间能够不借助外部交换机而进行直接通信,不需要将报文发送到 Host 之外;
另外,比 Linux bridge 要好的一点是:因为所有子接口的 MAC 地址都是已知的,所以 MACVLAN Bridge 也不需要 MAC 地址学习和 STP 的能力,所以是一个高效的 Bridge 实现。
种模式下,子接口之间就是直接可以通信的。
Passthru 模式
Passthru mode(直通模式)将主接口直通到 Container。Container 可以直接使用主机的网络接口,并具有对接口进行参数调整的能力。
注意,这种模式,只允许单个子接口连接主接口,且必须设置成混杂模式,一般用于子接口桥接和创建 VLAN 子接口的场景。
MACVTAP
macvtap 是对 macvlan 的改进,把 macvlan 与 tap 特点结合了,使用 macvlan 的方式收发数据包,但是收到的包不交给内核网络协议栈处理,而是直接交个 tap 的 /dev/tapX 字符设备文件,再进入特定的 APP 处理。由于 macvlan 是工作在 MAC 层的,所以 macvtap 也只能工作在 MAC 层,不会有 macvtun 这样的设备。
macvtap 结合 Network namespace 使用可以构建这样的网络:
由于 macvlan 与 eth0 处于不同的 Network namespace,它们拥有不同的内核网络协议栈,这样就不需要 bridge 也能在 namespace 里面使用网络了。
Linux 虚拟化网络技术 — 物理网卡的虚拟化(MACVLAN 和 MACVTAP)相关推荐
- Linux 虚拟化网络技术 — 虚拟二层网卡(Tap)与虚拟三层隧道网卡(Tun)
目录 文章目录 目录 虚拟二层网卡(Tap)与虚拟三层隧道网卡(Tun) tap/tun 作为用户空间与内核空间的数据传输通道 tap/tun 与内核网络协议栈的数据传输 虚拟二层网卡(Tap)与虚拟 ...
- Linux 虚拟化网络技术 — KVM + Linux Bridge 的网络虚拟化解决方案
目录 文章目录 目录 KVM 虚拟机应用 Linux Bridge + VLAN 实现网络隔离 TSG: Failed to restart network KVM 虚拟机应用 Linux Bridg ...
- Linux 容器化技术详解(虚拟化、容器化、Docker)
虚拟化是过去用来充分利用物理资源的最常用方法.早年间,我们可以用一台服务器运行一个操作系统,处理一个任务,带来的问题是资源利用率极其不足,计算机的潜能并不能完全发挥,而后多道批处理系统.分时系统相继出 ...
- Red Hat Enterprise Linux 5 (RHEL5)中物理网卡被peth0占用无法联网的问题解决方法
环境:VMware7中的虚拟机 RHEL5 联网方式:桥接 近两日在RHEL5中测试系统和虚拟机中的其他Linux主机的通信,结果提示是联网状态,但无法ping通.vmware虚拟的AMD物理网卡却 ...
- Linux 虚拟化网络技术 — 虚拟网络协议栈
目录 文章目录 目录 前言 Neutron L3 agent 概述 L3 agent的配置 虚拟路由器实现原理 总结 前言 本文通过 OpenStack Neutron L3 Agent 实现的 Li ...
- Linux 虚拟化网络技术 — 虚拟网线(Veth-pair)
目录 文章目录 目录 虚拟网线(Veth-pair) 虚拟网线(Veth-pair) Veth-pair 不是一个设备,而是一对设备,作为虚拟网线用于连接两个虚拟网络设备.veth pair 是根据数 ...
- 档案用虚拟化服务器还是物理机,利用虚拟化将一台NAS满足不同部门
[IT168 资讯]企业环境中如果存在多个域,在不同域中就必须建设不同的NAS系统,所以容易造成管理复杂和资源分散,但通过NAS虚拟化技术可解决这样的问题,能将一台NAS系统仿真成多台虚拟设备,每一台 ...
- 漫谈云计算网络(一):云计算网络技术介绍
声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载. 作者:张钦,云途腾高级云解决方案架构师,负责企业级云计算网络解决方案的架构设计及客户培训.曾就职于金山云和中国电信,任职售前解决方案架 ...
- linux内核网络协议栈--数据包的接收过程(二十)
本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例. 本示例里列出的函数调用关系来自于kerne ...
最新文章
- python获取当前目录路径和文件
- Python中将dict转换为kwargs
- linux查看占用的命令,linux内存占用查看命令
- Mock2 moco框架的http协议get方法Mock的实现
- 项目不能使用fn标签_无服务器,Java和FN项目的第一步
- 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)
- android 弹起键盘把ui顶上去的解决办法
- Linux内存管理:内存描述之高端内存
- 碎裂效果尝试(clip-path篇)
- HTML5前端开发真的会被取代吗?
- 【vim编辑器的使用】
- 破解wifi密码最简单教程 就三步
- 国内qq邮箱服务器,qq邮箱的服务器在国内吗(注册qq邮箱的服务器是什么)
- Unity鼠标控制相机上下左右环视360度旋转(Quaternion.AngleAxis)
- 融入动画技术的交互应用——解压小游戏“蒲公英与星”
- Zero-shot Adversarial Quantization论文翻译+解读
- C++ 几个特殊符号
- mac系统上最好用的3款epub阅读器
- 35个非常有创意的 Flash 网站作品欣赏
- 一个优秀IT专家的成长历程-献给所有的颓废或即将颓废的人们
热门文章
- dSploitzANTI渗透教程之安装zANTI工具
- swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程
- 2017android开发找不到工作,揭秘蒋多多2017生活现状,30岁找不到工作曾绝望自杀...
- 选择之后触_如果有朋友在做选择时左右为难,我应该该给出什么样的建议
- 计算机应用基础形考报告2020,放大学计算机应用基础形考本学习报告
- mac 上搭建gitlabel_在mac终端中使用git(适用于github、gitlabel)
- 丹佛斯变频器模拟量速度输入_变频器与PLC是如何协同作战的?了解这几个控制方式很有必要...
- 虚数有物理意义吗?潘建伟范靖云团队最新量子力学研究同日登顶刊,引发基础数理热议...
- 苹果自己出钱给第三方App投广告,开发者却不乐意了
- 谁是谢源?广西理科探花、清华电子系学霸、阿里AI芯片带头大哥、新晋ACM Fellow...