Linux接口之虚拟网络接口介绍
nanshan 2024-12-03 17:01 7 浏览 0 评论
Linux具有丰富的虚拟网络功能,可用作托管VM和容器以及云环境的基础。本文将简要介绍所有常用的虚拟网络接口类型。内容没有代码分析,仅简要介绍了接口及其在Linux上的用法。可以使用ip link help命令获取接口列表的帮助。
内容涵盖了以下常用的接口以及一些易于相互混淆的接口:
- Bridge
- Bonded interface
- Team device
- VLAN (Virtual LAN)
- VXLAN (Virtual eXtensible Local Area Network)
- MACVLAN
- IPVLAN
- MACVTAP/IPVTAP
- MACsec (Media Access Control Security)
- VETH (Virtual Ethernet)
- VCAN (Virtual CAN)
- VXCAN (Virtual CAN tunnel)
- IPOIB (IP-over-InfiniBand)
- NLMON (NetLink MONitor)
- Dummy interface
- IFB (Intermediate Functional Block)
- netdevsim
阅读本文之后,我们将了解这些接口是什么,它们之间的区别,何时使用它们以及如何创建它们。
Bridge
Linux网桥的行为类似于网络交换机。它在与其连接的接口之间转发数据包。它通常用于在路由器,网关或虚拟机与主机上的网络命名空间之间转发数据包。它还支持STP,VLAN过滤和多播侦听。
如果想要在VM,容器和主机之间建立通信通道,请使用网桥。
以下是创建网桥的方法:
# 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)作为它的从设备,如上图所示。
Bond
Linux bond驱动提供了一种用于将多个网络接口聚合为单个逻辑“绑定”接口的方法。绑定接口的行为取决于模式。一般来说,提供热备用或负载平衡两种模式。
如果想提高链接速度或在服务器上进行故障转移时,请使用bond接口。
以下是创建bond接口的方法:
ip link add bond1 type bond miimon 100 mode active-backup
ip link set eth0 master bond1
ip link set eth1 master bond1
上述命令创建了一个名称为bond1的active-backup模式的bond接口。对于其他模式,请参阅 内核文档。
Team device
与bond接口类似,team device的目的是提供一种在L2层将多个NIC(端口)分组为一个逻辑端口(teamdev)的机制。
需要注意的是,team device不会尝试复制或模仿bond接口。它的作用是使用不同的方法来解决相同的问题。
但是bond和team device之间也存在一些功能差异。例如,team device支持LACP负载平衡,NS/NA(IPV6)链接监视,D-Bus接口等,而这些功能在bond中是不存在的。有关bond和team device之间差异的更多详细信息,请参见 bond vs team device。
综上,如果想使用bond无法提供的某些功能,请使用team device。
创建team device的方法如下:
# 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 device,且模式为active-backup,并添加eth0 和 eth1作为team0的子接口。
最近,一个名为net_failover的新驱动已添加到Linux内核。它是用于虚拟化的另一种故障转移网络设备,并管理主([passthru/VF虚拟功能] 设备)从网络设备和备用(原始超虚拟接口)从网络设备。
VLAN
VLAN(也称为虚拟LAN)通过向网络数据包添加标签来分隔广播域。VLAN使网络管理员可以将同一台交换机下或不同交换机之间的主机分组。
VLAN标头如下所示:
如果想在VM,命名空间或主机中分隔子网,请使用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.2的VLAN2和名为eth0.3的VLAN 3 。拓扑如下所示:
注意:在配置VLAN时,需要确保连接到主机的交换机能够处理VLAN标签,例如,通过将交换机端口设置为中继模式。
VXLAN
VXLAN(虚拟可扩展局域网)是一种隧道协议,旨在解决IEEE 802.1q中有限的VLAN ID(4,096)的问题。由IETF RFC 7348描述。
通过24位网段ID(又称为VXLAN网络标识符(VNI)),VXLAN最多允许2 ^ 24(16,777,216)个虚拟LAN,这是VLAN容量的4,096倍。
VXLAN将带有VXLAN标头的第2层帧封装到UDP-IP数据包中,如下所示:
VXLAN通常部署在虚拟主机上的数据中心中,该主机可以分布在多个机架上。
下面是使用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标记过滤数据包。使用MACVLAN,我们可以在一个接口上创建具有不同第2层(即以太网MAC)地址的多个接口。
在使用MACVLAN之前,如果要从VM或命名空间连接到物理网络,则需要创建TAP/VETH设备,并将一侧连接到网桥,并同时将物理接口连接到主机上的网桥,如下所示。
现在,借助MACVLAN,我们可以将与MACVLAN关联的物理接口直接绑定到命名空间,而无需桥接。
MACVLAN有五种类型:
1.Private:即使外部交换机支持hairpin模式,也不允许同一物理接口上的MACVLAN实例之间进行通信。
- VEPA:同一物理接口上从一个MACVLAN实例到另一个MACVLAN实例的数据通过该物理接口传输。连接的交换机需要支持hairpin模式,或者必须有TCP/IP路由器转发数据包才能进行通信。
- Bridge:所有端点都通过物理接口通过简单的桥接器直接相互连接。
- Passthru:允许将单个VM直接连接到物理接口。
- Source:该模式用于基于允许的源MAC地址列表过滤流量,以创建基于MAC的VLAN关联。请参阅提交消息。
模式是根据不同的需求选择的。桥接模式是最常用的。如果要从容器直接连接到物理网络时,请使用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相似,区别在于端点具有相同的MAC地址。
IPVLAN支持L2和L3模式。IPVLAN L2模式在桥接模式下的行为类似于MACVLAN。父接口看起来像一个网桥或交换机。
在IPVLAN L3模式下,父接口的行为就像路由器,并且数据包在端点之间路由,从而提供了更好的可伸缩性。
关于何时使用IPVLAN, IPVLAN内核文档 说MACVLAN和IPVLAN在许多方面都非常相似,并且可以依据特定的场景很好地定义选择哪个。如果以下情况之一定义我们需要的场景,则可以选择使用ipvlan: (a)连接到外部交换机/路由器的Linux主机已配置了策略,每个端口仅允许一个mac。 (b)在主服务器上创建的虚拟设备均未超过mac容量,并且无法将NIC置于混杂模式,因此性能下降是一个问题。 (c)如果要将从设备放入敌对/不受信任的网络命名空间中,则从设备上的L2可能会被更改/滥用。
设置IPVLAN实例的方法如下:
# ip netns add ns0
# ip link add name ipvl0 link eth0 type ipvlan mode l2
# ip link set dev ipvl0 netns ns0
上述命令将创建一个名为ipvl0L2的IPVLAN设备,并分配给ns0命名空间。
MACVTAP/IPVTAP
MACVTAP/IPVTAP是一种新的设备驱动,旨在简化虚拟化桥接网络。当在物理接口顶部创建MACVTAP/IPVTAP实例时,内核还将创建一个字符设备/dev/tapX,以与TUN/TAP设备一样使用,并可以由KVM / QEMU直接使用。
使用MACVTAP/IPVTAP,我们可以用单个模块替换TUN/TAP和网桥驱动的组合:
通常,MACVLAN/IPVLAN用于使访客和主机都直接显示在主机所连接的交换机上。MACVTAP和IPVTAP之间的差异与MACVLAN/IPVLAN相同。
以下是创建MACVTAP实例的方法:
# ip link add link eth0 name macvtap0 type macvtap
MACsec
MACsec(媒体访问控制安全)是用于有线以太网LAN中安全性的IEEE标准。与IPsec相似,作为第2层规范,MACsec不仅可以保护IP流量,还可以保护ARP,NS(邻居发现)和DHCP。MACsec标头如下所示:
MACsec的主要用例是保护标准LAN上的所有消息(包括ARP,NS和DHCP消息)的安全。
MACsec配置的方法如下:
# ip link add macsec0 link eth1 type macsec
注意:上述命令仅在eth1设备上添加了名为macsec0的MACsec。有关更详细的配置,请参阅Sabrina DubrocaMACsec简介“配置示例”部分 。
VETH
VETH(虚拟以太网)设备是本地以太网隧道。设备是成对创建的,如下图所示。在VETH对中的一个设备上传输的数据包将立即在另一设备上接收。当任何一台设备关闭时,该VETH对的链接状态为关闭。
当任意命名空间需要与主机命名空间或彼此之间进行通信时,请使用VETH配置。
以下是设置VETH配置的方法:
# ip netns add net1
# ip netns add net2
# ip link add veth1 netns net1 type veth peer name veth2 netns net2
上述命令将创建两个名称空间net1和net2,以及一对VETH设备,并将veth1分配给net1,veth2分配给net2。这两个命名空间与此VETH对相连。分配一对IP地址,这样就可以在两个命名空间之间通信。
VCAN
与网络环回设备类似,VCAN(虚拟CAN)驱动提供了虚拟本地CAN(控制器局域网)接口,因此用户可以通过VCAN接口发送/接收CAN消息。如今,CAN主要用于汽车领域。
有关更多CAN协议信息,请参考 内核CAN文档。
如果需要在本地主机上测试CAN协议实现时,请使用VCAN。
创建VCAN的方法如下:
# ip link add dev vcan1 type vcan
VXCAN
与VETH驱动类似,VXCAN(虚拟CAN隧道)在两个VCAN网络设备之间实现本地CAN流量隧道。创建VXCAN实例时,两个VXCAN设备将成对创建。当一端接收到数据包时,该数据包出现在设备对上,反之亦然。VXCAN可用于跨命名空间通信。
如果想跨命名空间发送CAN消息时,请使用VXCAN配置。
设置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
IPOIB设备支持IP-over-InfiniBand协议。这将通过InfiniBand(IB)传输IP数据包,因此我们可以将IB设备用作快速NIC。
IPoIB驱动支持两种操作模式:datagram和connected。在datagram模式下,使用IB UD(不可靠数据包)传输。在connected模式下,使用IB RC(可靠连接)传输。connected模式利用了IB传输的连接特性,并允许MTU最多达到64K的最大IP数据包大小。
有关更多详细信息,请参见 IPOIB内核文档。
如果想拥有IB设备并想通过IP与远程主机通信时,请使用IPOIB设备。
以下是创建IPOIB设备的方法:
# 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
上述命令将创建一个名称为NLMON的nlmon0设备并进行设置。使用数据包嗅探器(例如, tcpdump)捕获Netlink消息。Wireshark的最新版本具有对Netlink消息进行解码的功能。
Dummy interface
虚拟接口完全是虚拟的,例如loopback接口。虚拟接口的目的是提供一种设备,可以在不实际传输数据包的情况下路由数据包。
使用虚拟接口使无效的SLIP(串行Internet协议)地址看起来像本地程序的真实地址。如今,虚拟接口主要用于测试和调试。
以下是创建虚拟接口的方法:
# ip link add dummy1 type dummy
# ip addr add 1.1.1.1/24 dev dummy1
# ip link set dummy1 up
IFB
IFB(中间功能块)驱动提供了一种设备,该设备允许集中来自多个源的流量并调整传入流量,而不是将其丢弃。
如果想要排队和调整传入流量时,请使用IFB接口。
以下是创建IFB接口的方法:
# ip link add ifb0 type ifb
# ip link set ifb0 up
# tc qdisc add dev ifb0 root sfq
# tc qdisc add dev eth0 handle ffff: ingress
# tc filter add dev eth0 parent ffff: u32 match u32 0 0 action mirred egress redirect dev ifb0
上述命令将创建一个名为ifb0的IFB设备,并将根据qdisc调度程序替换为SFQ(随机公平队列),SFQ是无类排队调度程序。然后,在eth0上添加一个qdisc调度程序,并将所有入口流量重定向到ifb0。
有关更多IFB qdisc用例,请参考 IFB上的Linux Foundation Wiki。
netdevsim接口
netdevsim是一种模拟的联网设备,用于测试各种联网API。目前,它特别专注于测试硬件卸载,tc/XDP BPF和SR-IOV。
如下命令可以创建一个netdevsim设备
# ip link add dev sim0 type netdevsim
# ip link set dev sim0 up
要启用tc卸载:
# ethtool -K sim0 hw-tc-offload on
加载XDP BPF或tc BPF程序:
# ip link set dev sim0 xdpoffload obj prog.o
要添加用于SR-IOV测试的VF,请执行以下操作:
# echo 3 > /sys/class/net/sim0/device/sriov_numvfs
# ip link set sim0 vf 0 mac
要更改vf编号,需要先完全禁用它们:
# echo 0 > /sys/class/net/sim0/device/sriov_numvfs
# echo 5 > /sys/class/net/sim0/device/sriov_numvfs
注意:默认情况下,RHEL中没有编译netdevsim。
- 上一篇:Linux怎么进入命令行界面
- 下一篇:阿里云服务器中挖矿病毒
相关推荐
- Let’s Encrypt免费搭建HTTPS网站
-
HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入...
- 使用Nginx配置TCP负载均衡(nginx tcp负载)
-
假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息:Nginx(CenOS8Minimal)-192.168.1.50Kube...
- Nginx负载均衡及支持HTTPS与申请免费SSL证书
-
背景有两台minio文件服务器已做好集群配置,一台是192.168.56.41:9000;另一台是192.168.56.42:9000。应用程序通过Nginx负载均衡调用这两台minio服务,减轻单点...
- HTTPS配置实战(https配置文件)
-
原因现在网站使用HTTPS是规范操作之一,前些日子买了腾讯云服务,同时申请了域名http://www.asap2me.top/,目前该域名只支持HTTP,想升级为HTTPS。关于HTTPS的链接过程大...
- 只有IP地址没有域名实现HTTPS访问方法
-
一般来说,要实现HTTPS,得有个注册好的域名才行。但有时候呢,咱只有服务器的IP地址,没注册域名,这种特殊情况下,也能照样实现HTTPS安全访问,按下面这些步骤来就行:第一步,先确认公网...
- 超详解:HTTPS及配置Django+HTTPS开发环境
-
众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种。在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数...
- Godaddy购买SSL之后Nginx配置流程以及各种错误的解决
-
完整流程:参考地址:https://sg.godaddy.com/zh/help/nginx-generate-csrs-certificate-signing-requests-3601生成NGI...
- Nginx从安装到高可用,一篇搞定(nginx安装与配置详解)
-
一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yuminstallgc...
- 阿里云免费证书申请,配置安装,使用tomcat,支持http/https访问
-
参数说明商品类型默认已选择云盾证书服务(无需修改)。云盾证书服务类型SSL证书服务的类型。默认已选择云盾SSL证书(无需修改),表示付费版SSL证书。如果您需要免费领取或付费扩容DV单域名证书【免费试...
- 你试过两步实现Nginx的规范配置吗?极速生成Nginx配置小工具
-
NGINX是一款轻量级的Web服务器,最强大的功能之一是能够有效地提供HTML和媒体文件等静态内容。NGINX使用异步事件驱动模型,在负载下提供可预测的性能。是当下最受欢迎的高性能的Web...
- 从零开始搭建HTTPS服务(搭建https网站)
-
搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...
- 群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问
-
安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其实会面临着很多安...
- 让网站快速升级HTTPS协议提高安全性
-
为什么用HTTPS网络安全越来越受到重视,很多互联网服务网站,都已经升级改造为https协议。https协议下数据包是ssl/tcl加密的,而http包是明文传输。如果请求一旦被拦截,数据就会泄露产生...
- 用Https方式访问Harbor-1.9版本(https访问流程)
-
我上周在头条号写过一篇原创文章《Docker-Harbor&Docker-kitematic史上最详细双系统配置手册》,这篇算是它的姊妹篇吧。这篇文章也将用到我在头条写的另一篇原创文章的...
- 如何启用 HTTPS 并配置免费的 SSL 证书
-
在Linux服务器上启用HTTPS并配置免费的SSL证书(以Let'sEncrypt为例)可以通过以下步骤完成:---###**一、准备工作**1.**确保域名已解析**...
你 发表评论:
欢迎- 一周热门
-
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
【系统配置】信创终端挂载NAS共享全攻略:一步到位!
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WindowsServer2022|配置NTP服务器的命令
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)