百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Linux虚拟网络接口

bigegpt 2024-08-05 11:47 4 浏览

本文重点介绍以下几种常用的虚拟网络接口:

  • 虚拟网桥:bridge
  • 接口捆绑:bonded和team
  • VLAN
  • MACVLAN和IPVLAN
  • 虚拟路由和转发:vrf
  • Overlay与Tunnel:gre、vxlan、geneve
  • macvtap、ipvtap
  • veth
  • dummy
  • nlmon
  • netdevsim

虚拟网桥 (bridge)Permalink

Linux bridge类似于一台网络交换机,把一台机器上的若干个物理或者虚拟的网络接口“连接”起来,负责相连网络接口之间的数据包的二层转发,既可用于和外部路由器或者网关之间收发数据包,也用于转发位于同一台主机上不同虚拟机(VMs)或网络命名空间(network namespace)之间的数据包。Linux bridge支持STP, VLAN filter以及组播侦听(multicast snooping)。

使用下面的ip link命令,创建如上图所示的虚拟网桥br0,并将主机的物理接口eth0、连接虚拟机的tap1和tap2、以及网络命名空间的veth1虚拟接口连接到br0上。

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

通常,也可以使用bridge-utils包中brctl命令创建和管理虚拟网桥。

接口捆绑:bonded和teamPermalink

接口捆绑将多个网络接口组合成一个逻辑接口,从而提供冗余和带宽聚合。Linux提供了bonded和team两个driver。

bonding和teaming这两个术语因为都跟接口捆绑或链路聚合有关,它们也经常被混为一谈,但Linux在实现上是有区别的。

使用如下命令,创建一个bonded接口bond1,将主机上的两个物理接口eth0和eth1捆绑成一个逻辑的聚合接口,该聚合接口工作在主备模式,提供了链路的冗余和备份。

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

teaming可以作为接口聚合的首选方案,因为它提供了比bonding更全面的功能和特性。关于两者在功能特性上的具体区别,可以参考Comparison of network teaming and bonding features。

在下面的命令行中,使用teamd创建一个team0聚合接口,并将主机上的eth0和eth1加入到这个聚合接口。

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

VLAN技术Permalink

VLAN通过在数据帧上加标签的方式,将一个物理局域网在逻辑上划分成多个广播域,实现广播域的隔离。同一个VLAN内的主机间可以直接通信,而不同VLAN之间不能直接通信,从而将广播报文限制在一个VLAN内。

当需要对虚拟机、容器或者主机进行子网划分时,可以使用VLAN。创建VLAN如下:

vconfig add eth0 2
ip link set eth0.2 up
vconfig add eth0 3
ip link set eth0.3 up

以上命令创建了名为eth0.2的VLAN 2和名为eth0.3的VLAN 3。拓扑图如下:

MACVLAN和IPVLANPermalink

MACVLANPermalink

使用VLAN,可以在单个接口上创建多个虚拟接口,通过VLAN tag对数据包进行过滤。使用macvlan,可以在单个接口上创建多个虚拟接口,这些虚拟接口都有自己的MAC地址。

在不用macvlan时,如果要把虚拟机或者网络命名空间连接到物理网络,需要创建TAP或者veth设备,并且附加到Linux bridge上,同时,需要把物理接口接到bridge上用来连接到物理网络。但是,使用macvlan之后,网络命名空间就可以直接通过macvlan绑定到物理接口,而无需bridge。如下图所示。

MACVLAN有4种模式,如下图所示。

其中,最常用的是bridge模式。以下命令创建两个bridge模式的macvlan实例,分别分配到两个不同的网络命名空间。

ip link add macv1 link eth0 type macvlan mode bridge
ip link add macv2 link eth0 type macvlan mode bridge
ip netns add net1
ip netns add net2
ip link set macv1 netns net1
ip link set macv2 netns net2

IPVLANPermalink

ipvlan和macvlan非常类似,最大的不同之处在于ipvlan虚拟子接口具有和其父接口相同的mac地址。如下图所示:

ipvlan提供L2和L3两种模式。就功能而言,ipvlan L2模式几乎跟macvlan bridge模式没什么区别,父接口看起来就像一个bridge或者switch。类似地,在IPVLAN L3模式下,父接口就像一台路由器,端点之间的数据包通过它进行路由,这种模式具有更好的扩展性。

使用如下命令,在父接口eth0上创建两个ipvlan虚拟设备,并分别添加到两个不同的网络命名空间。

ip link add ipv1 link eth0 type ipvlan mode l2
ip link add ipv2 link eth0 type ipvlan mode l2
ip netns add net1
ip netns add net2
ip link set dev ipv1 netns net1
ip link set dev ipv2 netns net2

macvlan和ipvlan不能同时用在同一个父接口下面。既然macvlan和ipvlan在很多方面都类似,那么什么时候用ipvlan,什么时候用macvlan呢?在ipvlan内核文档中指出,在下列几种情况下应考虑选择ipvlan:

  • 主机所连接的外部交换机或路由器配置了规则:每个端口只允许一个mac地址连接(mac地址绑定)。
  • 在主设备上创建的虚拟设备数量超过了mac地址容量,网卡配置混杂模式之后,会损失性能。
  • 你需要一个更加高级的网络场景,例如你需要把在VM或容器中运行的服务利用BGP守护进程向外通告出去。

参考文献Permalink

Introduction to Linux interfaces for virtual networking



相关推荐

程序员请收好:10个非常有用的 Visual Studio Code 插件

一个插件列表,可以让你的程序员生活变得轻松许多。作者|Daan译者|Elle出品|CSDN(ID:CSDNnews)以下为译文:无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人...

PADS在WIN10系统中菜单显示不全的解决方法

决定由AD转PADS,打开发现菜单显示不正常,如下图所示:这个是由于系统的默认字体不合适导致,修改一下系统默认字体即可,修改方法如下:打开开始菜单-->所有程序-->Windows系统--...

一文讲解Web前端开发基础环境配置

先从基本的HTML语言开始学习。一个网页的所有内容都是基于HTML,为了学好HTML,不使用任何集成工具,而用一个文本编辑器,直接从最简单的HTML开始编写HTML。先在网上下载notepad++文...

TCP/IP协议栈在Linux内核中的运行时序分析

本文主要是讲解TCP/IP协议栈在Linux内核中的运行时序,文章较长,里面有配套的视频讲解,建议收藏观看。1Linux概述  1.1Linux操作系统架构简介Linux操作系统总体上由Linux...

从 Angular Route 中提前获取数据

#头条创作挑战赛#介绍提前获取意味着在数据呈现在屏幕之前获取到数据。本文中,你将学到,在路由更改前怎么获取到数据。通过本文,你将学会使用resolver,在AngularApp中应用re...

边做游戏边划水: 基于浅水方程的水面交互、河道交互模拟方法

以下文章来源于腾讯游戏学堂,作者Byreave篇一:基于浅水方程的水面交互本文主要介绍一种基于浅水方程的水体交互算法,在基本保持水体交互效果的前提下,实现了一种极简的水面模拟和物体交互方法。真实感的...

Nacos介绍及使用

一、Nacos介绍Nacos是SpringCloudAlibaba架构中最重要的组件。Nacos是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态DNS...

Spring 中@Autowired,@Resource,@Inject 注解实现原理

使用案例前置条件:现在有一个Vehicle接口,它有两个实现类Bus和Car,现在还有一个类VehicleService需要注入一个Vehicle类型的Bean:publicinte...

一文带你搞懂Vue3 底层源码

作者:妹红大大转发链接:https://mp.weixin.qq.com/s/D_PRIMAD6i225Pn-a_lzPA前言vue3出来有一段时间了。今天正式开始记录一下梗vue3.0.0-be...

一线开发大牛带你深度解析探讨模板解释器,解释器的生成

解释器生成解释器的机器代码片段都是在TemplateInterpreterGenerator::generate_all()中生成的,下面将分小节详细展示该函数的具体细节,以及解释器某个组件的机器代码...

Nacos源码—9.Nacos升级gRPC分析五

大纲10.gRPC客户端初始化分析11.gRPC客户端的心跳机制(健康检查)12.gRPC服务端如何处理客户端的建立连接请求13.gRPC服务端如何映射各种请求与对应的Handler处理类14.gRP...

聊聊Spring AI的Tool Calling

序本文主要研究一下SpringAI的ToolCallingToolCallbackorg/springframework/ai/tool/ToolCallback.javapublicinter...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockers...

在MySQL登录时出现Access denied for user ~~ (using password: YES)

Windows~~~在MySQL登录时出现Accessdeniedforuser‘root‘@‘localhost‘(usingpassword:YES),并修改MySQL密码目录适用...

mysql 8.0多实例批量部署script

背景最近一个项目上,客户需要把阿里云的rdsformysql数据库同步至线下,用作数据的灾备,需要在线下的服务器上部署mysql8.0多实例,为了加快部署的速度,写了一个脚本。解决方案#!/bi...