相关文章推荐
骑白马的领带  ·  DataTable.Load 方法 ...·  1 年前    · 
大力的面包  ·  用php向MySQL ...·  1 年前    · 
逆袭的日光灯  ·  flutter 消息推送 - ...·  1 年前    · 

在使用虚拟机搭建Openstack多节点环境时,虚拟机节点中的计算节点和控制节点至少需要两个网卡接口,但是默认的云端虚拟机只有一个网卡接口。

所以需要在Linux虚拟机上搭建至少一块假网卡来完成Openstack多节点的搭建。

先来介绍下tun/tap:

一:tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。

利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。
开源项目openvpn ( http://openvpn.sourceforge.net )和Vtun( http://vtun.sourceforge.net )都是利用tun/tap驱动实现的隧道封装。

二:Tun/Tap驱动程序工作原理

做为虚拟网卡驱动,Tun/Tap驱动程序的数据接收和发送并不直接和真实网卡打交道,他在Linux内核中添加了一个TUN/TAP虚拟网络设备的驱动程序和一个与之相关连的字符设备 /dev/net/tun,字符设备tun作为用户空间和内核空间交换数据的接口。当内核将数据包发送到虚拟网络设备时,数据包被保存在设备相关的一个队 列中,直到用户空间程序通过打开的字符设备tun的描述符读取时,它才会被拷贝到用户空间的缓冲区中,其效果就相当于,数据包直接发送到了用户空间。通过 系统调用write发送数据包时其原理与此类似。

在linux下,要实现内核空间和用户空间数据的交互,有多种方式:
(1)可以通用socket创建特殊套接字,利用套接字实现数据交互;
(2)通过proc文件系统创建文件来进行数据交互;
(3)还可以使用设备文件的方式,访问设备文件会调用设备驱动相应的例程,设备驱动本身就是内核空间和用户空间的一个接口,Tun/tap驱动就是利用设备文件实现用户空间和内核空间的数据交互。
从结构上来说,Tun/tap驱动并不单纯是实现网卡驱动,同时它还实现了字符设备驱动部分。以字符设备的方式连接用户空间和内核空间。下面是示意图:

这里写图片描述
这里盗用下别人的图片。
Tun/tap 驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分。利用网卡驱动部分接收来自TCP/IP协议栈的网络分包并发送或者反过来将接收到的网络分包传给协议栈处理,
而字符驱动部分则将网络分包在用户空间和内核空间之间传送,模拟物理链路的数据接收和发送。Tun/tap驱动很好的实现了两种驱动的结合。

三:现在进入最为重要的安装步骤

这篇文章主要针对centos7tun/tap网卡的安装,下面是具体的步骤:

//1. 确认内核是否支持tun/tap,确认内核是否有tun模块
  [root@guanxiaojue]# modinfo tun
  filename:       /lib/modules/2.6.34.7-56.fc13.i686.PAE/kernel/drivers/net/tun.ko
  alias:          char-major-10-200
  license:        GPL
  author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
  description:    Universal TUN/TAP device driver
  srcversion:     880DE258930FE60D765B735
  depends:        
  vermagic:       2.6.34.7-56.fc13.i686.PAE SMP mod_unload 686 
//如上所示,则说明内核支持tun/tap虚拟网卡
//2.加载内核模块 
  [root@guanxiaojue ~]#  modprobe tun
  [root@guanxiaojue ~]# lsmod | grep tun
  tun                    10548  1 
//如上显示,则说明内核模块加载成功
//3.添加centos7的tunctl源
(1)创建下面的文件: /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)安装tunctl rpm包
    # yum --enablerepo=nux-misc install tunctl
//4.使用tunctl新建虚拟网卡
(1)创建网卡的设备文件:
    [root@guanxiaojue ~]# tunctl -t tap0 -u root//如果是非root用户则需要sudo下2)设置虚拟网卡:
    [root@guanxiaojue ~]# ifconfig tap0 192.168.0.1  netmask 255.255.255.0 promisc
经过如上操作后,虚拟网卡已经建立和配置好了。
//5.作为系统服务启动网卡
编写配置脚本(符合chkconfig规范)
  [root@guanxiaojue ~]# cat /etc/init.d/config_tap 
  #!/bin/bash
  # config_tap          Start up the tun/tap virtual nic
  # chkconfig: 2345 55 25
  USER="root"
  TAP_NETWORK="192.168.0.1"
  TAP_DEV_NUM=0
  DESC="TAP config"
  do_start() {
    if [ ! -x /usr/sbin/tunctl ]; then
      echo "/usr/sbin/tunctl was NOT found!"
      exit 1
    tunctl -t tap$TAP_DEV_NUM -u root
    ifconfig tap$TAP_DEV_NUM ${TAP_NETWORK}  netmask 255.255.255.0 promisc
    ifconfig tap$TAP_DEV_NUM
  do_stop() {
    ifconfig tap$TAP_DEV_NUM down 
  do_restart() {
    do_stop
    do_start
  check_status() {
    ifconfig tap$TAP_DEV_NUM 
  case $1 in 
    start)    do_start;;
    stop)     do_stop;;
    restart)  do_restart;;
    status)
              echo "Status of $DESC: "
              check_status
              exit "$?"
  echo "Usage: $0 {start|stop|restart|status}"
  exit 1 
可以根据具体需求修改此脚本
//6.加入到系统服务中
  [root@guanxiaojue ~]# chkconfig --add config_tap 
  [root@guanxiaojue ~]# chkconfig --level 345 config_tap on
操作完成后,就可以像其他标准服务一样,通过service config_tap start来进行创建和启动操作

欢迎加入:QQ300844612

ifconfig tap0 10.0.1.2/24 (如果ifconfig命令执行不了,则要用系镜像文件安装)创建完成后通过ifconfig tap0命令查看系统内所有网络信息。下面创建一个简单的TAP网卡,本地通信检查TAP网卡的功能。首先检查内核是否支持TUN/TAP,可以通过以下命令检查。安装TUN/TAP的管理工具tunctl。创建名称为tap0的虚拟网卡。为虚拟网卡配置临时IP。1 检查TUN模块。2 加载TUN模块。 TUN/TAP虚拟网络设备为用户空间程序提供了网络数据包的发送和接收能力。他既可以当做点对点设备(TUN),也可以当做以太网设备(TAP)。实际上,不仅Linux支持TUN/TAP虚拟网络设备,其他UNIX也是支持的,他们之间只有少许差别。 TUN/TAP 虚拟网络设备的原理比较简单,他在Linux内核中添加了一个TUN/TAP虚拟网络设备的驱动程序和一个与之相关连的字符设备 tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。 开源项目openvpn (http://openvpn.sourceforge.net)和Vtun(http 长期以来对tuntap这对兄弟分不太清,今天下定决心研究了一下代码,总算是搞明白了。 首先它们都是从/dev/net/tun里ioctl出来的虚拟设备,一个是通过IFF_TUN,另一个是 IFF_TAP。最好的例子莫过于vpnc里面的代码了。 PLAIN 1.1 什么是虚拟网络设备 所谓虚拟的网络设备,是相对于实体的网络设备而言的,实体的网络设备,用设备名,也称为接口名。物理的网络网络设有实在的物理的接口,从物理层接收外部MAC层数据,并提交给TCP/IP协议,应用程序通过socket的读数据。同时应用程序,可以通过socket write向接口写入数据,并通过物理网络把数据发送出去。 如下图的网 tun是一种虚拟网络设备,tun设备一端连接着用户程序,一端连接着内核协议栈,任何时候从协议栈发到tun网卡的数据都能从用户程序中读到,而从用户程序写入/dev/net/tun的数据都会被内核协议栈收到。...... Linux添加虚拟网卡的多种方法 有时候,一台服务器需要设置多个ip,但又不想添加多块网卡,那就需要设置虚拟网卡.这里介绍几种方式在linux服务器上添加虚拟网卡.  我们向eth0中添加一块虚拟网卡: 第一种方法:快递创建\删除虚拟网卡 sudo ifconfig eth0:0 192.168.10.10 up 以上的命令就可以在eth0网卡创建一个叫eth0:0的虚拟网卡,他的地址 利用TUN创建虚拟网络 TUN/TAP是操作Linux操作系统内核中的虚拟网络设备。如果想要具体了解的可以去问“度娘”,哪里介绍的专业多了,我就简单的创建一个TAP网卡,通过本地来检查TAP网卡的功能 1、检查TUN模块 modinfo tun #一般只要Linux内核在2.4后的都有tun/tap模块的,如果内核版本太低的话就要手动更新了 [root@localhost ~]# modinfo tun filename: /lib/modules/3.10.0-1062.el7.x 原文地址::https://blog.csdn.net/hshl1214/article/details/52936065相关文章1、linux驱动程序之虚拟以太网设备vmeth----https://blog.csdn.net/hnhbdss/article/details/15376052、LinuxTun/Tap设备通信原理----https://blog.csdn.net/flyforf... https://www.kernel.org/doc/Documentation/networking/tuntap.txt https://www.cnblogs.com/bakari/p/10450711.html - linux云计算网络 一图胜千言,进入正题: 物理网卡TUN, TAP, VETH 四种模型的数据收发如下图所示 TAP/TUN tap/tunLinux 内核 2.4.x 版本之后实现的虚拟网络设备,不同于物理网卡靠硬件网路板卡实现,tap/tun 虚拟网 [网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP] https://blog.kghost.info/2013/03/27/linux-network-tun/ TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便得模拟网络行为。先来看看物理设备是如何工作的: From right to left 所有物理网卡收到的包会交给内核的 Network