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

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

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模块

[[email protected]_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 <[email protected]>

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

加载内核模块

[[email protected]_196_26_centos ~]# modprobe tun

[[email protected]_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 Misc
    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-misc install tunctl

创建虚拟网卡设备

[[email protected]_196_26_centos ~]# tunctl -t tap0 -u root

Set ‘tap0‘ persistent and owned by uid 0

[[email protected]_196_26_centos ~]# ifconfig tap0 192.168.0.1 netmask 255.255.255.0 promisc

[[email protected]_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/)

[[email protected]_196_26_centos ~]# ip tuntap add tap1 mode tap

[[email protected]_196_26_centos ~]# ifconfig tap1 10.0.0.1/30

[[email protected]_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

[[email protected]_196_26_centos ~]# tunctl -d tap0

Set ‘tap0‘ nonpersistent

[[email protected]_196_26_centos ~]# tunctl -d tap1

Set ‘tap1‘ nonpersistent

时间: 2024-10-12 23:32:26

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

QEMU启动时插入tap虚拟网卡

1.利用brctl命令创建虚拟网桥br0 brctl addbr br0 ifconfig br0 up //上述两条命令分开执行会导致网络断开 2.将虚拟网桥br0与物理网卡eth0绑定 brctl addif br0 eth0 ifconfig eth0 0.0.0.0 //网桥类似于交换机,此时可以认为eth0只是该交换机上的一个端口,可以认为所有数据包都从eth0进,但是最终由网桥决定包的流向,因此只要标记网桥的IP即可,端口并不需要 3.使用DHCP为br0分配IP dhclient

图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN

Linux的网卡驱动中内含了很多"虚拟网卡".早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对"网络虚拟化"的支持,不光是为了支持"虚拟机"技术,更多的是给了用户和程序员更多的选择.       这些对网络虚拟化的支持技术包括任何重量级的虚拟化技术,比较重的比如对虚拟机技术的支持,轻量级的则是net namespace技术.近期的工作基于net namespace技术,关于这个技

虚拟网卡TUN/TAP 驱动程序设计原理

昨天韦哥写了<Linux下Tun/Tap设备通信原理>一文,只提到了两个使用Tun的用户进程之间的通信路径,并没有说明Tun虚拟网卡驱动是如何实现的,而正好看到了这里的一篇讲解这方面的文章,果断转载了,感谢作者,原文在这里:虚拟网卡TUN/TAP 驱动程序设计原理 简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路. tun

Linux的虚拟网卡TUN和TAP

TUN/TAP 提供了给用户空间程序的包的接收和传输,它可以看成是简单的点对点设备或是以太网设备.它不是从物理设备接收包,而是从用户空间程序接收包.它发送包不是通过物理设备来发送包,而是将这些包写入用户空间程序来发送.为了应用这个驱动,应用程序需要打开/dev/net/tun 设备(字符设备),然后发出一个控制(ioctl)来注册一个网卡设备,一个网络设备将命名为tunXX 或tapXX.依赖于你所设定的标志位.当应用程序关闭文件描述符的时候,网络设备和其他相关的路由将会消失.依赖于所选择的设备

Linux下Tun/Tap设备通信原理

Tun/Tap都是虚拟网卡,没有直接映射到物理网卡,是一种纯软件的实现.Tun是三层虚拟设备,能够处理三层即IP包,Tap是二层设备,能处理链路层网络包如以太网包.使用虚拟网络设备,可以实现隧道,如OpenVPN的实现.这篇文章我主要根据自己画的一个图来简单说明在隧道实现中两个虚拟网络设备数据包的流程. 上面的图中,左右两边分别为两台机器.一台有一块物理网卡配置了IP:172.16.1.11,这台机器的系统里有一个Tun(以Tun为例,不讲Tap了)设备,配置了IP:192.168.1.11;

vmware 虚拟机安装centos 本机没有出现VMnet0和VMnet8虚拟网卡的解决办法

没有出现虚拟网卡VMnet0和VMnet8的话,就关掉正在运行的centos ,然后安装如图所示操作即可,途中可能会被360阻挡,选择信任即可,或者关掉360安全卫士再进行操作 完成后打开虚拟机电源即可.

CentOS设置虚拟网卡做NAT方式和Bridge方式桥接

http://www.centoscn.com/CentOS/config/2015/0225/4736.html 摘要:KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式.Bridge方式的配置原理和步骤.Bridge方式适用于服务器主机的虚拟化.问题?客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信.事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接. KVM 客户机网络连接有两种方式: 用户网络(User Networking):让虚拟机

Linux下双物理网卡设置成虚拟网卡

为了提供网络的高可用我们需要将多块网卡绑定设置成一块虚拟的网卡对外提供服务,这样可以防止一块网卡损坏或者防止网线连接故障造成的连接中断. 下面我们使用eth0与eth1来虚拟成为bond0为例:------绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片. 操作平台:OLE Linux 6.6 1.创建虚拟网络接口配置文件ifcfg-bond0,并指定网卡IP:vi /etc/sysconfig/ network-scripts/ifcfg-bond0 cat /etc/s

CentOS 6.3下安装Vsftp,虚拟用户

CentOS 6.3下安装Vsftp,虚拟用户一.安装:1.安装Vsftpd服务相关部件:[[email protected] ~]# yum install vsftpd*Dependencies Resolved============================================================================= Package                 Arch       Version          Repository