Linux:虚拟网卡技术tun/tap

news2024/11/26 12:32:08

一、介绍          

        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.coloradmin.cn/o/587379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 I/O 看未来 | Flutter 和 Dart 最新进展

作者 / Google 开发者框架和语言 (含 Flutter、Dart 和 Go) 产品经理/用户体验总监 Tim Sneath 今年的 Google I/O 大会在位于加利福尼亚州山景城的总部附近举办&#xff0c;我们怀着无比激动的心情面向全球直播了这场盛会&#xff01; 就在三个多月前&#xff0c;我们在肯尼亚…

软考A计划-试题模拟含答案解析-卷十二

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

带电接10kV空载电缆线路与架空线路连接引线(绝缘手套作业法)

一、现场复勘 1.核对线路及杆塔号 线路双重名称及杆号无误。 2.检查杆身质量 3.检查电杆埋深 4.检查导线固定情况 检查作业点导线有无烧伤、断股。 5.检查气象条件 作业前需进行湿度和风速的测量&#xff0c;风力大于5级&#xff0c;或湿度大于80%时&#xff0c;不宜带电作…

Microsoft Build 2023 After Party - 上海站

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0…

企业级信息系统开发讲课笔记4.4 Spring Boot加载自定义配置文件

文章目录 零、学习目标一、为什么需要加载自定义配置文件二、使用PropertySource加载自定义配置文件&#xff08;一&#xff09;创建Spring Boot项目&#xff08;二&#xff09;创建自定义配置文件&#xff08;三&#xff09;创建自定义配置类&#xff08;四&#xff09;编写测…

一款射频芯片的layout设计指导案例-篇章1

RTL8762C是瑞昱一款超低功耗蓝牙芯片&#xff0c;瑞昱的硬件设计指导书中&#xff0c;关于该芯片的layout设计指导很有普适性的参考指导意义&#xff0c;如下为笔者做过一定简化的芯片最小系统原理图—— PCB Layout建议分如下几个点—— 元件布局顺序 按如下顺序布置元件&…

可视化搭建 - 场景实战

接下来用实战来说明该可视化搭建框架是否好用&#xff0c;以下几条原则需要始终贯穿在下面每个实战场景中&#xff1a; 复杂的业务场景&#xff0c;背后使用的框架 API 是简单的。底层 API 并不为业务场景特殊编写&#xff0c;而是具有很强的抽象性&#xff0c;很容易挖掘出其他…

23种设计模式之状态模式(State Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的状态模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

Zabbix API开发实战,创建报警媒介和代码示例(付源码)

Zabbix API开始发挥重要作用&#xff0c;尤其是在Zabbix与第三方软件&#xff08;如配置和事件管理系统&#xff09;的集成以及日常任务的自动化方面。如果没有一些自动化&#xff0c;管理对数千台主机的监控是非常困难的。 API是在Zabbix 1.8中引入的&#xff0c;并且已经被广…

多语言电商系统_国际化电商系统流程

跨境电商系统是基于计算机技术和互联网平台的一种电子商务系统。它通常包括前端电商网站或应用程序、后台管理系统、物流管理系统、支付系统等多个模块&#xff0c;可以通过网络实现商品展示、订单管理、支付结算、物流配送等电商流程的自动化处理。 跨境电商系统基本流程包括…

JWT | 一分钟掌握JWT | 概念及实例

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 什么是JWT JWT的全称是Json Web Token。是基于RFC 7519开放标准的&#xff…

玩转ChatGPT:视频制作

一、写在前面 最近&#xff0c;在码深度学习图像识别的相关知识和代码&#xff0c;这一part&#xff0c;看看能否用小Chat搞一个介绍视频。 简单问小Chat&#xff1a; 咒语&#xff1a;我怎么使用你做一个视频&#xff1f;需要配合什么软件生成&#xff1f;&#xff1f; 大意…

2023.5.22-5.28 AI行业周刊(第149期):毕业10年后的实验室聚会

周末和实验室&#xff0c;无锡这边师兄弟们相聚了一次&#xff0c;之前在无锡这边的江南大学读书&#xff0c;后来工作后大家大多数也都留在了无锡。 我们研究生时的实验室&#xff0c;专门有一个微信群&#xff0c;从02年入学&#xff0c;到17年入学&#xff0c;多年各界的师…

Node.JS学习 | Babel | webpack | ES6

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Node.JS Node.JS能够在服务器端运行JavaScript的开放源代码、跨平台运行环境&#xff1b;Node.js采用Google开发的V8运行代码&#xff0c;使用事件驱动、非阻塞IO和异…

Python常用数据结构

Python 提供了多种内置的数据结构&#xff0c;用于存储和组织数据。以下是一些常见的 Python 数据结构&#xff1a; 1.列表&#xff08;List&#xff09;&#xff1a;列表是一个有序、可变的数据集合&#xff0c;可以包含任意类型的元素。列表使用方括号 [] 表示&#xff0c;元…

谷歌周彦祺:LLM浪潮中的女性科学家多面手丨智源大会嘉宾风采

导读 大模型研发竞赛如火如荼&#xff0c;谷歌紧随OpenAI其后推出PalM2、Gemini等系列模型。Scaling Law是否仍然适用于当下的大模型发展&#xff1f;科技巨头与初创企业在竞争中各有哪些优势和劣势&#xff1f;模型研究者应秉持哪些社会责任&#xff1f; 2023智源大会「基础模…

华为OD机试真题B卷 Java 实现【最长的连续子序列】,附详细解题思路

一、题目描述 有N个正整数组成的一个序列,给定一个整数sum,求长度最长的的连续子序列使他们的和等于sum,返回该子序列的长度,如果没有满足要求的序列返回-1。 二、输入描述 第1行有N个正整数组成的一个序列。 第2行给定一个整数sum。 求最长连续子序列,只要遍历计算连…

补贴平价好书影响上亿读者:有一种力量叫“至拙”

通过一种“至拙”的力量&#xff0c;“多多读书月”带来诸多可喜的变化。 全民拼书&#xff1a;“多多读书月”带来平价好书 如果你也是一位热爱读书的小伙伴&#xff0c;那么想来一定不会不知道“多多读书月”。 2020年&#xff0c;在“三区三州”地区助力脱贫攻坚的公益活动中…

转转前端周刊第六十七期

转转前端周刊 本刊意在将整理业界精华文章给大家&#xff0c;期望大家一起打开视野 如果你有发现一些精华文章想和更多人分享&#xff0c;可以点击我们的公众号名称&#xff0c;将文章链接和你的解读文案发给我们&#xff01;我们会对内容进行筛选和审核&#xff0c;保留你的推…

详细理解GPT2模型结构及其训练过程—GPT系列训练与部署

本文为博主原创文章&#xff0c;未经博主允许不得转载。 本文为专栏《Python从零开始进行AIGC大模型训练与推理》系列文章&#xff0c;地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。 GPT2模型环境搭建与调试请参考博文《GPT系列训练与部署—GPT2环境配…