Linux:虚拟网卡技术tun/tap

news/2024/11/14 14:18:59/

一、介绍          

        Linux中的TAP网络接口详解是Linux网络管理中的很重要的一部分,它可以用来建立虚拟网络,模拟网络,管理网络流量以及实现安全网络功能等。本文将介绍TAP网络接口的基本原理、如何使用它进行网络管理、与以太网的区别,以及它的更多应用场景。

        TAP,即Tunneling traffic access point,是一种在Linux上使用的虚拟网卡技术,它可以为应用程序提供安全的网络连接。TAP的设计是它的一个虚拟网卡,和现实的以太网卡一样,可以被映射到网络中,然后可以收发网络数据包。TAP网络接口可以用来建立虚拟网络,模拟网络,管理网络流量以及实现安全网络功能等。

Linux通过TAP网络接口可以实现两个甚至多台计算机之间的直接数据包传输,也可以通过多个路由器实现网络隔离,从而安全地传输数据。使用TAP网络接口,用户不仅可以按一定规则向用户提供网络服务,还可以通过控制来管理网络流量,从而保证网络的安全。

使用TAP网络接口可以实现虚拟网络,这种虚拟网络可以为应用程序提供一个类似真实网络的环境,用来在软件中测试,而无需建立实际的网络条件。TAP网络接口也有助于管理网络流量,可以从网络中过滤无用的数据包,保护网络安全,减少网络速度和网络质量的依赖。

与以太网技术相比,TAP技术更加适合在Linux系统上建立虚拟网络,比如网络安全、网络隔离、使用网络代理等。TAP也可以和以太网结合起来使用,从而发挥网络资源的双重功效。

通过以上介绍可以看出,TAP网络接口在Linux网络管理中有着广泛的应用,它可以用来建立虚拟网络,模拟网络,管理网络流量以及实现安全网络功能等。

总之,TAP网络接口是一种在Linux系统上非常常用的网络技术,它不仅可以用来连接不同的计算机,还可以用来建立虚拟网络,实现网络安全和网络隔离,以更有效地利用网络资源。

tap 和 tun 的区别:

tap位于网络OSI模型的二层(数据链路层),tun位于网络的三层。

二、原理

tun/tap可以通过网络接口和字符设备两种方式进行操作。

当应用程序使用标准网络接口socket API操作tun/tap设备时,和操作一个真实网卡完全一致。

当应用程序使用字符设备操作tun/tap设备时,字符设备即充当了用户空间和内核空间的桥梁直接读写二层或三层的数据报文。在 Linux 内核 2.6.x 之后的版本中,tun/tap 对应的字符设备文件分别为:
 

tun:/dev/net/tun
tap:/dev/tap0

当应用程序打开字符设备时,系统会自动创建对应的虚拟网络设备接口,一般以tunX和tapX方式命名,虚拟网络设备接口创建成功后,可以为其配置IP、MAC地址、路由等。

当一切配置完毕,应用程序通过此字符文件设备写入IP封包或以太网数据帧,tun/tap的驱动程序会将数据报文直接发送到内核空间,内核空间收到数据后再交给系统的网络协议栈进行处理,最后网络协议栈选择合适的物理网卡将其发出,到此发送流程完成。

而物理网卡收到数据报文时会交给网络协议栈进行处理,网络协议栈匹配判断之后通过tun/tap的驱动程序将数据报文原封不动的写入到字符设备上,应用程序从字符设备上读取到IP封包或以太网数据帧,最后进行相应的处理,收取流程完成。

当应用程序关闭字符设备时,系统也会自动删除对应的虚拟设备接口,并且会删除掉创建的路由等信息。
 

三、使用

        如果想使用linux命令行操作一个tap,首先Linux得有tun模块(Linux使用tun模块实现了tun和tap)。

检查方法:

# 如果使用命令 modinfo tun,有输出的话,就说明具有tun模块

[root@public ~]# modinfo tun

filename:       /lib/modules/3.10.0-693.11.1.el7.x86_64/kernel/drivers/net/tun.ko.xz

alias:          devname:net/tun

alias:          char-major-10-200

license:        GPL

author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>

description:    Universal TUN/TAP device driver

rhelversion:    7.4

srcversion:     4E9F57A6269CFD0F4BE4021

depends:

intree:         Y

vermagic:       3.10.0-693.11.1.el7.x86_64 SMP mod_unload modversions

signer:         CentOS Linux kernel signing key

sig_key:        61:B8:E8:7B:84:11:84:F6:2F:80:D6:07:79:AB:69:2A:49:D8:3B:AF

sig_hashalgo:   sha256

当Linux版本具有tun模块时,还得看看其是否已经加载,检查方式:

# 使用该命令检查后,无回显,表示当前未加载该模块

[root@public ~]# lsmod | grep tun

[root@public ~]#

# 使用该命令加载该模块

[root@public ~]# modprobe tun

[root@public ~]#

[root@public ~]# lsmod | grep tun

tun                    31621  0

加载模块后,还需要Linux是否有操作tun/tap的命令行工具tunctl。

# 可以使用yum直接安装,如果yum源中没有的话,可以去阿里源的网站中下载rpm包然后安装。

[root@public ~]# yum -y install tunctl

具备tun模块和tunctl以后,就可以创建一个tap设备,命令:

[root@public ~]# tunctl -t tap_test

Set 'tap_test' persistent and owned by uid 0

[root@public ~]# ip link list

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

    link/ether fa:16:3e:08:0b:39 brd ff:ff:ff:ff:ff:ff

3: tap_test: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000

    link/ether ce:cc:18:91:1e:ba brd ff:ff:ff:ff:ff:ff

[root@public ~]#

添加IP地址:

[root@public ~]# ip addr add local 192.168.10.100/24 dev tap_test

[root@public ~]# ip a s

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether fa:16:3e:08:0b:39 brd ff:ff:ff:ff:ff:ff

    inet 192.168.10.93/24 brd 192.168.10.255 scope global noprefixroute dynamic eth0

       valid_lft 75733sec preferred_lft 75733sec

    inet6 fe80::f816:3eff:fe08:b39/64 scope link

       valid_lft forever preferred_lft forever

3: tap_test: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000

    link/ether ce:cc:18:91:1e:ba brd ff:ff:ff:ff:ff:ff

    inet 192.168.10.100/24 scope global tap_test

       valid_lft forever preferred_lft forever

四、示例

        Linux 提供了一些命令行程序方便我们来创建持久化的tun/tap设备,但是如果没有应用程序打开对应的文件描述符,tun/tap的状态一直会是DOWN,还好的是这并不会影响我们把它当作普通网卡去使用。

使用ip tuntap help查看使用帮助

Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]
 [ mode { tun | tap } ] [ user USER ] [ group GROUP ]
 [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]
 
Where: USER  := { STRING | NUMBER }
 GROUP := { STRING | NUMBER }

操作示例

# 创建 tap 
ip tuntap add dev tap0 mode tap 
# 创建 tun
ip tuntap add dev tun0 mode tun 
 
# 删除 tap
ip tuntap del dev tap0 mode tap
# 删除 tun
ip tuntap del dev tun0 mode tun 

tun/tap 设备创建成功后可以当作普通的网卡一样使用,因此我们也可以通过ip link命令来操作它。

# 例如使用ip link命令也可以删除tun/tap设备
ip link del tap0
ip link del tun0

另,附上大神的博客:

Linux 虚拟网络设备之 TUN/TAP 设备


http://www.ppmy.cn/news/105408.html

相关文章

docker 镜像/容器的打包、导出、导入

目录 一、将变动过的容器打包生成新的镜像 二、对镜像进行导出导入 1、将镜像导出为一个镜像img文件 2、将img镜像文件导入&#xff0c;复制出一个完全一样镜像 三、对容器进行导入导出 1、将容器导出为一个镜像tar文件 2、将镜像tar文件导入&#xff0c;生成一个新镜像…

盘点!Instruction Tuning 时代的大模型(下)

作者 | Kevin吴嘉文 整理 | NewBeeNLP 公众号 https://zhuanlan.zhihu.com/p/617302168 Alpaca&#xff0c;ChatGLM 6B 等模型的效果可以接受&#xff0c;下文总结部分笔记&#xff0c;为训练自定义小型化&#xff08;7B&#xff09;模型提供点知识储备。 之前我们分享了LaM…

【观察】浪潮信息:自研液环式真空CDU技术,将被动应对变为主动防御

毫无疑问&#xff0c;在“双碳”战略的大环境下&#xff0c;数据中心走向绿色低碳和可持续发展已成为“不可逆”的大趋势&#xff0c;特别是随着全国一体化大数据中心、新型数据中心等政策文件的出台、“东数西算”工程的正式启动&#xff0c;数据中心的建设规模和数量呈现出快…

我用低代码结合ChatGPT开发,每天多出1小时摸鱼

&#x1f449;腾小云导读 GPT 出现之后&#xff0c;很多人推测大量的软件都会因为其出现而重写。本文主要是低代码平台与 ChatGPT 结合的一些思考以及实践。期望与各位读者一起搭上 AI 这列快车&#xff0c;为开发提提速&#xff5e; &#x1f449;目录 1 背景 2 Demo 演示 3 思…

权限维持-SSP-DLL 加载

前言 继续学习中&#xff0c;今天是权限维持的东西&#xff0c;大家永远不要忘记初心&#xff0c;要一起奋斗哦&#xff01; 注&#xff1a;单机环境和域环境都可以使用 复现 一.进程注入lsass.exe 使用mimikatz将伪造的SSP注入内存&#xff0c;这样用户在注销重新登录的时候就…

知识点滴 - POSIX vs SUS vs LSB

SUS扩展了POSIX&#xff1b;LSB扩展了POSIX和SUS&#xff0c;但有一些冲突。 只有经过SUS认证的操作系统才能被称为 "Unix"&#xff08;因为SUS的所有者Open Group拥有Unix商标&#xff09;&#xff1b;并非所有的Linux发行版都符合LSB&#xff0c;例如Debian和Ubunt…

ThreadLocal精讲

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

如何使用 Megatron-LM 训练语言模型

在 PyTorch 中训练大语言模型不仅仅是写一个训练循环这么简单。我们通常需要将模型分布在多个设备上&#xff0c;并使用许多优化技术以实现稳定高效的训练。Hugging Face &#x1f917; Accelerate 的创建是为了支持跨 GPU 和 TPU 的分布式训练&#xff0c;并使其能够非常容易的…