在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。
服务器如果拥有TUN/TAP模块,就可以开启VPN代理功能。
虚拟网卡TUN/TAP 驱动程序设计原理:

20151120120604752.jpg (553×396)ottom;padding:1px;" src="http://files.jb51.net/file_images/article/201511/20151120120604752.jpg?2015102012612">

tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。
利用tun/tap 驱动,可以将TCP/IP协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。
开源项目openvpn ( http://openvpn.sourceforge.net)和Vtun( http://vtun.sourceforge.net)都是利用tun/tap驱动实现的隧道封装。

1. 确认内核是否支持tun/tap
确认内核是否有tun模块

[root@VM_196_26_centos ~]# modinfo tun

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

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.2

srcversion: B59BCB1255A36FBC7557FC3

depends:

intree: Y

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

signer: CentOS Linux kernel signing key

sig_key: 79:AD:88:6A:11:3C:A0:22:35:26:33:6C:0F:82:5B:8A:94:29:6A:B3

sig_hashalgo: sha256

加载内核模块

[root@VM_196_26_centos ~]# modprobe tun

[root@VM_196_26_centos ~]# lsmod | grep tun

tun 27141 0

执行以上命令后,出现如上输出,说明模块加载成功

2. 创建和配置虚拟网卡
确认是否有tunctl命令,如果没有通过yum安装即可

centos6通过直接通过yum install tunctl -y安装

(以上参考的http://www.jb51.net/LINUXjishu/401735.html

centos7安装之前需要新增yum源(参考的https://pkgs.org/centos-7/nux-misc-x86_64/tunctl-1.5-12.el7.nux.x86_64.rpm.html

Install Howto

  1. Create the repository config file /etc/yum.repos.d/nux-misc.repo:

    [nux-misc]
    name=NuxMisc
    baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
    enabled=0
    gpgcheck=1
    gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
  2. Install tunctl rpm package:

    #yum--enablerepo=nux-miscinstalltunctl

创建虚拟网卡设备


[root@VM_196_26_centos ~]# tunctl -t tap0 -u root

Set 'tap0' persistent and owned by uid 0

[root@VM_196_26_centos ~]# ifconfig tap0 192.168.0.1 netmask 255.255.255.0 promisc

[root@VM_196_26_centos ~]# ifconfig tap0

tap0: flags=4355<UP,broADCAST,PROMISC,MULTICAST> mtu 1500

inet 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255

ether 5e:04:f6:78:9a:01 txqueuelen 500 (Ethernet)

RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 0 bytes 0 (0.0 B)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

经过如上操作后,虚拟网卡已经建立和配置好了。

下面再用另一个命令添加一个tap1(参考https://www.mylinuxplace.com/create-taptun-device-centos-7/)


[root@VM_196_26_centos ~]# ip tuntap add tap1 mode tap

[root@VM_196_26_centos ~]# ifconfig tap1 10.0.0.1/30

[root@VM_196_26_centos ~]# ifconfig tap1

tap1: flags=4099<UP,MULTICAST> mtu 1500

inet 10.0.0.1 netmask 255.255.255.252 broadcast 10.0.0.3

ether 2e:69:ab:20:0d:a7 txqueuelen 500 (Ethernet)

RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 0 bytes 0 (0.0 B)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


3.最后怎么删除tap0、tap1呢?(参考的http://blog.csdn.net/zhaihaifei/article/details/23168621

[root@VM_196_26_centos ~]#tunctl -d tap0

Set 'tap0' nonpersistent

[root@VM_196_26_centos ~]#tunctl -d tap1

Set 'tap1' nonpersistent

wKioL1glt42AtAaXAAB3KlT59k8433.png

CentOS下使用TUN/TAP虚拟网卡的基本教程的更多相关文章

  1. XCode 5远程调试OS X应用程序

    我正在使用XCode5.0.2在OSX10.9上开发一个应用程序并获得了一个我无法在这台开发机器上重现的错误报告.但是,我有一个10.7虚拟机出现崩溃,所以我想调试那里没有在这个VM中安装XCode.我搜索了有关远程调试的信息,但我没有得到有用的答案.我甚至担心它根本不受支持.但无论如何我还是要问一下.或者,除了执行完整的XCode安装等之外,还有哪些其他选项来调试这样的问题?

  2. ios – 在UITableViewCell中检测UIImageView上的点击

    我有一个自定义复合UITableViewCell,其中有许多视图.我有一个UIImageView,在特定条件下可见.当它可见时,>当用户点击UIImageView时,我必须执行一些操作.>我知道我必须触发这个任务的选择器.但是我也想传递一个值到该方法(请参阅–(void)onTapContactAdd:(id)sender:(Nsstring*)uid在下面)将被称为在UITableViewCel

  3. ios – XCTestCase:等待应用程序空闲

    我的UI测试失败,因为测试等待无休止,直到应用程序空闲.我看不出有什么事情发生在后台,像一个加载微调.它只发生在一个选项卡上.所有其他选项卡都可以插入,但测试在屏幕3上失败.我在屏幕3上检测到测试后,单击另一个选项卡,测试恢复并成功完成.有任何想法吗?

  4. 如何在iOS swift中获取分接点(坐标)

    我正试图在屏幕上获取触摸的坐标,以显示弹出菜单如何在页面视图控制器中使用我在这做错了什么?

  5. ios – 为SpriteKit转换UITapGestureRecognizer的触摸位置 – Swift

    解决方法试试这个,它对我来说很准确:–

  6. swift: unrecognized selector sent to instance

    经研究,引起此错误的原因可能有两个:初始化时,action参数中没有带:。此冒号何时需有,何时不需有?详细的解释请参考:Selectoraction参数所指向的method所在实例在你tap之前已被释放。引起该问题的常见做法是将实例定义成函数内变量,故,将其改为成员变量,应该就好了。以上两种错误在我这里都出现了,不知还有否更多可能。

  7. cinder swift的区别

    [原]OpenStack入门以及一些资料之2014-4-29阅读1144评论0注:本文内容均来自网络,我只是在此做了一些摘抄和整理的工作,来源均有注明。它拥有自己的文件系统,通过网络文件系统NFS或通用文件系统CIFS对外提供文件访问服务。Raid,不同的raid等级在增加数据可靠性以及增加存储器(群)读写性能间取得平衡。卷组描述区域,和磁盘将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷的VGDA中。

  8. OpenStack中Swift和cinder区别

    swift是objectstorage,将object存储到bucket里,你可以用swift创建container,然后上传文件,例如视频,照片,这些文件会被replication到不同服务器上以保证可靠性,swift可以不依靠虚拟机工作。如果你把这个虚拟机terminate了,这个volume和里边的数据依然还在,你还可以把它接到其他虚拟机上继续使用里边的数据。cinder创建的volume必须被接到虚拟机上才能工作。

  9. 在xib中给view添加手势swift

    {case1://点击了view1printbreakcase2://点击了view2printbreakdefault:break}}即可。

  10. 使用Swift在任何位置触摸可关闭iOS键盘

    我一直在寻找这一切,但我似乎找不到它。我知道如何使用Objective-C关闭键盘,但我不知道如何使用Swift?

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部