网络虚拟化相关的Linux接口介绍

这篇具有很好参考价值的文章主要介绍了网络虚拟化相关的Linux接口介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux拥有丰富的网络虚拟化功能,能被虚拟机,容器还有云网络使用。在这篇文章中,我会给出所有通用网络虚拟化接口的简要介绍。没有代码分析,只有简短的接口介绍和在Linux上的使用操作。这系列接口都可以使用ip link命令实现。

这篇文章介绍的网络虚拟化接口如下,有些接口容易与其他接口混淆:

  • Bridge
  • Bonded Interface
  • Team device
  • VLAN(Virtual LAN)
  • VXLAN
  • MACLAN
  • IPLAN
  • MACVTAP/IPVTAP
  • MACsec
  • VETH
  • VCAN
  • VXCAN

网桥

Linux的网桥表现起来就像一个网络交换机。它会在其连接的接口间转发数据包。它通常被使用在路由器,网关或一台主机上的虚拟机间和网络命名空间间转发数据包。它也支持STP,VLAN过滤和组播snooping。

网络虚拟化相关的Linux接口介绍,网络虚拟化

当你想在虚拟机间,容器间,或主机间设置通信通道时,可以使用网桥来达到目的。

以下演示如何创建网桥:

# ip link add br0 type bridge
# ip link set eth0 master br0
# ip link set tap1 master br0
# ip link set tap2 master br0
# ip link set veth1 master br0

以上命令是先创建一个网桥设备br0,然后把两个TAP设备(tap1,tap2),一个VETH设备(veth1),和物理设备eth0关联到这个网桥,就像上面拓扑图显示的一样。

Bonded Interface

Linux聚合驱动提供了一种可以将多个网络接口聚合成一个单独的逻辑"bonded"接口的方法。聚合接口的行为取决于模式,一般来讲,模式有热备份或负载均衡模式。

网络虚拟化相关的Linux接口介绍,网络虚拟化

使用聚合接口,你可以在你的服务器上增加带宽或者实现故障转移。

以下演示如何创建一个聚合接口:

# ip link add bond1 type bond miimon 100 mode active-backup
# ip link set eth0 master bond1
# ip link set eth1 master bond1

上面使用热备份模式创建了一个聚合端口bond1,其他模式设置,可参看kernel documentation。

Team device

类似于聚合端口,team device的目的是为了提供一种在二层网络将多个网络端口打包成一个逻辑端口的机制。

网络虚拟化相关的Linux接口介绍,网络虚拟化

team设备并不是要复制或效仿一个聚合端口,而是要采用不同的方法,比如使用无锁数据流机制和模块化设计。

但bonded接口与team接口之间会有一些不同,比如,team接口支持LACP的负载均衡,NS/NA(IPV6)的链接检测,D-Bus接口等等,这些在聚合接口上都是不支持的。bonging和team之间的不同,可参考更详细的文档Bonding与Team的对比。

使用team device,你会用到一些聚合端口不能提供的特性。

以下演示如何创建team接口:

# teamd -o -n -U -d -t team0 -c '{"runner": {"name": "activebackup"},"link_watch": {"name": "ethtool"}}'
# ip link set eth0 down
# ip link set eth1 down
# teamdctl team0 port add eth0
# teamdctl team0 port add eth1

以上以热备份模式创建了一个名叫team0的team接口,随后将eth0和eth1添加为team0的子接口。

最近一个新的名叫net_failover的驱动被添加到Linux里。如下图所示,将半虚拟化的网卡方案和passthru方案聚合成一个界面。增加了抵抗设备出错的风险。

网络虚拟化相关的Linux接口介绍,网络虚拟化

VLAN

VLAN就是通过给网络数据包添加VLAN标签分割广播域。

VLAN的报文头看起来如下图所示:

网络虚拟化相关的Linux接口介绍,网络虚拟化

使用VLAN,你就可以在虚拟机间,网络命名空间或主机间隔离出子网。

以下演示如何创建一个VLAN:

# ip link add link eth0 name eth0.2 type vlan id 2
# ip link add link eth0 name eth0.3 type vlan id 3

以上的命令是说在eth0上创建eth0.2带上VLAN 2标签;在eth0上创建eth0.3带上VLAN 3标签。

网络拓扑如下:

网络虚拟化相关的Linux接口介绍,网络虚拟化

注意:当你配置VLAN的是,你需要确保与主机直连的交换机是可以处理VLAN标签的,例如,将交换机端口设置为trunk模式。

VXLAN

VXLAN(Virtual eXtensible Local Area Network)一种隧道协议,被设计用来解决VLAN ID局限在4096个的问题上。VXLAN在IETF RFC 7348上有描述。

因为VNI有24位长度,VXLAN可以达到2^24(16777216)个虚拟机局域网,是VLAN的4096倍。

VXLAN将二层帧用VXLAN头封装金UDP-IP数据包内,封装格式如下图所示:

网络虚拟化相关的Linux接口介绍,网络虚拟化

VXLAN典型应用于数据中心的虚拟主机上,可在多种架构中部署。

网络虚拟化相关的Linux接口介绍,网络虚拟化

以下演示创建VXLAN:

# ip link add vx0 type vxlan id 100 local 1.1.1.1 remote 2.2.2.2 dev eth0 dstport 4789

其他参考,你可以阅读VXLAN内核文档或VXLAN介绍。

MACVLAN

有了VLAN,你就可以在一个物理接口上创建多个带VLAN tag的逻辑接口,并根据VLAN tag过滤数据包。有了MACVLAN,你可以在一个物理接口上用不用的二层地址,也就是MAC地址创建多个逻辑接口。

在有MACVLAN之前,如果你想连接一个虚拟机或者网络命令空间的里物理网络,你可能需要创建TAP/VETH设备,并同时把这个设备与物理接口绑定到主机的网桥设备上,就下如下拓扑图所示:

网络虚拟化相关的Linux接口介绍,网络虚拟化

现在,有了MACVLAN,你能将关联MACVLAN的物理接口直接绑定到命名空间里,而不在需要网桥。如下图所示:

网络虚拟化相关的Linux接口介绍,网络虚拟化

一共有五种MACVLAN类型:

1. Private: 该模式下,各个端点只能与外界通信。MACVLAN端点之间不能通信。

网络虚拟化相关的Linux接口介绍,网络虚拟化

2. VEPA: 该模式下,各个端点可以与外界通信。MACVLAN端点之间通信需要外部Switch支持一个叫发夹弯(hairpin)的功能才可以。

网络虚拟化相关的Linux接口介绍,网络虚拟化

3. Bridge: 该模式下,各个端点之间可以通信,与外界也可以通信。功能和Bridge + VETH一致。

网络虚拟化相关的Linux接口介绍,网络虚拟化

4. Passthru: 该模式可以让Container直接连接外部Switch。

网络虚拟化相关的Linux接口介绍,网络虚拟化

5. Source: 该模式主要用于traffic过滤,是一种基于MAC的VLAN。可参考 源代码

可根据不同的需求选用不同的模式。Bridge模式是最常用的模式。

当你想从容器直连到物理网口就使用MACVLAN.

以下演示如何创建MACVLAN:

# ip link add macvlan1 link eth0 type macvlan mode bridge
# ip link add macvlan2 link eth0 type macvlan mode bridge
# ip netns add net1
# ip netns add net2
# ip link set macvlan1 netns net1
# ip link set macvlan2 netns net2

以上命令是创建两个新的网桥模式的MACVLAN设备,并将它们塞给两个不同的命名空间。

IPVLAN

IPVLAN与MACVLAN类似,不同点是IPVLAN的endpoints使用相同的MAC地址。区别如下图所示:

网络虚拟化相关的Linux接口介绍,网络虚拟化

IPVLAN支持二层和三层模式。

IPVLAN的二层模式表现的像是网桥模式下的MACVLAN,父接口看起来就像一个网桥或者交换机。

网络虚拟化相关的Linux接口介绍,网络虚拟化

IPVLAN的三层模式,父节点表现的就像一个路由器,数据包在endpoits间通过路由转发,提供更好的伸缩性。

网络虚拟化相关的Linux接口介绍,网络虚拟化

MACVLAN与 IPVLAN在很多方面相似。下面介绍只需使用 IPVLAN 而非 MACVLAN的场景。

  • 1) 如果host连接的外部交换机只允许一个MAC地址。
  • 2) 如果出于性能考虑,需要关闭网卡混杂模式(promiscuous mode), MACVLAN需要网卡运行在混杂模式。
  • 3) 创建的virtual device 超过了父设备的MAC地址容量。
  • 4) 如果工作在不安全的L2网络。

以下演示如何创建IPVLAN实例:

# ip netns add ns0
# ip link add name ipvl0 link eth0 type ipvlan mode l2
# ip link set dev ipvl0 netns ns0

上面创建了一个L2模式的名为ipvl0的IPVLAN设备,并将ipvl0塞给命名空间ns0。

MACVTAP/IPVTAP

类似 MACVLAN用以取代 Bridge + VETH 来连接不同的namespace. MACVTAP 用以取代 Bridge + TUN/TAP来连接不同的VMs。MACVLAN / IPVLAN 连接不同的namespace, 旨在将Guest namespace和Host的网络接口直接程序给外部Switch。MACVTAP / IPVTAP 连接不同VMs, 内核为其创建了设备文件/dev/tapX,可以直接被虚拟化软件QEMU使用。MACVTAP与 IPVTAP的区别 和 MACVLAN 与 IPVLAN的区别相类似。

有了MACVTAP/IPVTAP,你就可以用一个单独的模块取代以前的TUN/TAP+Bridge的组合。

网络虚拟化相关的Linux接口介绍,网络虚拟化

以下演示如何创建MACVLAN实例:

# ip link add link eth0 name macvtap0 type macvtap

MACsec

MACsec(Media Access Control Security)是一种为大局域网安全设计的IEEE标准。类似于IPsec,只是工作在二层,MACsec不仅保护IP报文,还保护ARP,邻居发现报文和DHCP报文。MACsec报文头格式如下:

网络虚拟化相关的Linux接口介绍,网络虚拟化

MACsec的主要应用场景是加密标准局域网里的所有信息,包括ARP,NS,和DHCP消息。

网络虚拟化相关的Linux接口介绍,网络虚拟化

以下演示如何设置MACsec配置: 

# ip link add macsec0 link eth1 type macsec

注意: 上述配置只在eth1接口上添加了一个名家macsec0的MACsec设备。

为查看更详细的配置信息,可查看“MACsec introduction by Sabrina Dubroca”文章的"Configuration example"章节。

VETH

VETH(虚拟以太)设备是一个本地的以太网隧道。设备是成对创建的,具体拓扑如下图所示。

当数据包传输到配对设备上的一个时,另一个设备也会立刻收到数据包。当其中一个配对设备下线时,另一个设备也会下线。

网络虚拟化相关的Linux接口介绍,网络虚拟化

当namespaces间需要相互通信时,就要用到VETH配置了。

以下演示VETH配置:

# ip netns add net1
# ip netns add net2
# ip link add veth1 netns net1 type veth peer name veth2 netns net2

上面创建了两个namespaces,分别叫net1和net2,并配对为一对VETH设备veth1和veth2,并将veth1与net1绑定,veth2与net2绑定。这样两个namespaces就通过VETH设备对联系起来。分别给veth设备对分配IP地址,这样你就能让这两个namespaces相互通信了。

VCAN

与网络loopback设备类似,VCAN(virtual CAN)驱动提供一种虚拟CAN接口叫VCAN。具体参见内核CAN文档

以下演示如何创建一个VCAN设备:

# ip link add dev vcan1 type vcan

VXCAN

VXCAN可以作为一种本地隧道连接两个VCAN网络设备。与VETH类似,你会创建一个VXCAN对, 用于连接不同namespaces的VCAN。

以下演示设置一个VXCAN实例:

# ip netns add net1
# ip netns add net2
# ip link add vxcan1 netns net1 type vxcan peer name vxcan2 netns net2

注意: 在Red Hat Enterprise Linux系统上并不支持VXCAN.

IPOIB

An IPOIB device supports the IP-over-InfiniBand protocol. This transports IP packets over InfiniBand (IB) so you can use your IB device as a fast NIC.

The IPoIB driver supports two modes of operation: datagram and connected. In datagram mode, the IB UD (Unreliable Datagram) transport is used. In connected mode, the IB RC (Reliable Connected) transport is used. The connected mode takes advantage of the connected nature of the IB transport and allows an MTU up to the maximal IP packet size of 64K.

For more details, please see the IPOIB kernel documentation.

Use an IPOIB device when you have an IB device and want to communicate with a remote host via IP.

Here's how to create an IPOIB device:

# ip link add ib0 name ipoib0 type ipoib pkey IB_PKEY mode connected

NLMON

NLMON是一个Netlink检测设备。

当你想要检测系统的Netlink消息时,可使用NLMON设备。

以下演示如何创建一个NLMON设备:

# ip link add nlmon0 type nlmon
# ip link set nlmon0 up
# tcpdump -i nlmon0 -w nlmsg.pcap

This creates an NLMON device named nlmon0 and sets it up. Use a packet sniffer (for example, tcpdump) to capture Netlink messages. Recent versions of Wireshark feature decoding of Netlink messages.

参考链接文章来源地址https://www.toymoban.com/news/detail-583001.html

到了这里,关于网络虚拟化相关的Linux接口介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux网络虚拟化2

    今天我们接着上节课介绍的 Linux 网络知识,继续来学习它们在虚拟化网络方面的应用,从而为后续学习容器编排系统、理解各个容器是如何通过虚拟化网络来协同工作打好基础。 这一篇内容较多,可以重点看标红部分和标粗部分​。实在可啃不下去可以直接看下一篇内容​

    2023年04月11日
    浏览(52)
  • 前置知识——Linux网络虚拟化

    信息是如何通过网络传输被另一个程序接收到的? 我们讨论的虚拟化网络是狭义的,它指容器间网络。 好了,下面我们就从 Linux 下网络通信的协议栈模型,以及程序如何干涉在协议栈中流动的信息来开始了解吧。 如果抛开虚拟化,只谈网络的话,那我认为首先应该了解的知

    2023年04月12日
    浏览(51)
  • 【Docker】Docker中Linux 容器、网络虚拟化与虚拟局域网的技术特点详细讲解

    前言 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介: 热爱跑步的恒川 ,致力于

    2024年02月09日
    浏览(46)
  • [ 云计算相关 ] KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序)

    👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋 🙏作者水平有

    2024年02月02日
    浏览(55)
  • 虚拟化技术 — VirtIO 虚拟设备接口标准

    VirtIO 由 Rusty Russell 开发,最初是为了支持自己开发的 lguest Hypervisor,其设计目标是在虚拟化环境下提供与物理设备相近的 I/O 功能和性能,并且避免在虚拟机中安装额外的驱动程序。基于这一目标,后来通过开源的方式将 VirtIO 延伸为一种虚拟化设备接口标准,并广泛的支持

    2023年04月25日
    浏览(42)
  • 硬件辅助虚拟化 之EPT(内存虚拟化)介绍

           这篇内容,通过从操作系统的虚拟地址介绍到虚拟机层面的内存虚拟化技术,并介绍这两种技术之间的关联。        (以下实例都以intel 64位处理器和win10 x64操作系统位例。 ) 一、虚拟地址        在保护模式下,每个进程拥有自己独立的虚拟内存,程序的代

    2024年02月02日
    浏览(47)
  • 什么是网络虚拟化 网络虚拟化简介

    这个概念产生的比较久了,VLAN,VPN, VPLS等 都可以归为网络虚拟化的技术。近年来,云计算的浪潮席卷IT界。几乎所有的IT基础构架都在朝着云的方向发展。在云计算的发展中,虚拟化技术一直是重要的推动因素。作为基础构架,服务器和存储的虚拟化已经发展的有声有色,

    2024年02月05日
    浏览(48)
  • 【虚拟化qemu】(一)--- qemu 虚拟化软件介绍与安装

    本文主要用于记录关于 qemu 虚拟化软件的介绍和安装。 qemu(quick emulator)是一款可执行硬件虚拟化的(hardware virtualization)开源仿真器(Emulator)。 对于 qemu 的介绍可以查看该关于 qemu 的 wiki 词条链接。 于嵌入式行业 qemu 可以帮助开发者:学习裸机编程,RTOS 的编程,网络协

    2024年02月16日
    浏览(37)
  • 虚拟化介绍及特点

    计算机虚拟化简介 虚拟化: 计算、存储、网络 虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以提高硬件的利用率(让资源在分配和利用上面更加合理),简化软件的重新配置过程。CPU的虚拟化技术可以单

    2024年02月05日
    浏览(44)
  • 【HCIA】虚拟化技术介绍

    虚拟化(Virtualization)的含义很广泛。将任何一种形式的资源抽象成另一种形式的技术都是虚拟化,是资源的一种逻辑表示。解除了物理硬件和操作系统之间的紧耦合关系。 •虚拟化是云计算的基础。简单地说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共

    2023年04月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包