CentOS下使用TUN/TAP虚拟网卡的基本教程

CentOS下使用TUN/TAP虚拟网卡的基本教程

计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行操作系统上的软件提供与硬件的网络设备完全相同的功能
TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
操作系统通过TUN/TAP设备向绑定该设备的用户空间程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。
服务器如果拥有TUN/TAP模块,就可以开启VPN代理功能。
虚拟网卡TUN/TAP 驱动程序设计原理:
650) this.width=650;" alt="20151120120604752.webp (553×396)" src="/d/know/2023030409/1td0nysxcyh.webp" data-src="/d/know/2023030409/x1rqug5ygpj.webp?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=Nux Miscbaseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/enabled=0gpgcheck=1gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
  2. Install tunctl rpm package:

    # yum --enablerepo=nux-misc install tunctl

创建虚拟网卡设备


[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,BROADCAST,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

650) this.width=650;" src="/d/know/2023030409/1td0nysxcyh.webp" title="删除tap0 tap1.webp" alt="wKioL1glt42AtAaXAAB3KlT59k8433.webp" data-src="http://s2.51cto.com/wyfs02/M02/8A/12/wKioL1glt42AtAaXAAB3KlT59k8433.webp">

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部