zl程序教程

您现在的位置是:首页 >  系统

当前栏目

CentOS 7 Tunctl 安装 虚拟网卡

2023-09-14 09:11:27 时间

Tun/Tap 简介

在计算机网络中,Tun/Tap是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。

Tap 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。Tun 模拟了网络层设备,操作第三层数据包比如IP数据封包。

操作系统通过Tun/Tap设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,Tun/Tap设备向操作系统的网络栈投递(或"注入")数据包,从而模拟从外部接受数据的过程。

应用场景:Tun 用于 vpn,Tap 用于 libvirt 虚拟机

工作原理

从下图可以更直观的看出 tun/tap 设备和物理设备的区别:虽然它们的一端都是连着网络协议栈,但是物理网卡另一端连接的是物理网络,而 tun/tap 设备另一端连接的是一个应用层程序,这样协议栈发送给 tun/tap  的数据包就可以被这个应用程序读取到,此时这个应用程序可以对数据包进行一些自定义的修改(比如封装成 UDP),然后又通过网络协议栈发送出去——其实这就是目前大多数"代理"的工作原理。

Tun/tap 设备提供的虚拟网卡驱动,从tcp/ip协议栈的角度而言,它与真实网卡驱动并没有区别。

 一、安装

1、确认内核是否有 tun 模块

modinfo tun

# 显示成功
filename:       /lib/modules/3.10.0-957.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
retpoline:      Y
rhelversion:    7.6
srcversion:     A215175F959FA6FE8B76ECD
depends:        
intree:         Y
vermagic:       3.10.0-957.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        B7:0D:CF:0D:F2:D9:B7:F2:91:59:24:82:49:FD:6F:E8:7B:78:14:27
sig_hashalgo:   sha256

2、安装 tunctl

# 配置 YUM 源
vim /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

 3、安装

yum --enablerepo=nux-misc install tunctl

4、创建 虚拟网卡 tap0

tunctl -t tap0 -u root


# 删除
tunctl -d tap0

5、设置 虚拟网卡 IP 和 子网码

ifconfig tap0 192.168.88.1 netmask 255.255.255.0 promisc

6、查看,成功显示

[root@localhost ~]# ifconfig tap0

tap0: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500
        inet 192.168.88.1  netmask 255.255.255.0  broadcast 192.168.88.255
        ether 56:34:da:0b:62:98  txqueuelen 1000  (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

三、开机脚本

这里注意的是:创建的虚拟网卡在系统重启后会丢失,所以要自定义开机自启

1、设置开机启动服务

vim /etc/init.d/tuntap

  #!/bin/bash
  #
  # config_tap          Start up the tun/tap virtual nic
  #
  # chkconfig: 2345 55 25
  
  USER="root"
  TAP_NETWORK="192.168.88.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
    fi
    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 
  esac

2、加入系统服务

chmod +x /etc/init.d/tuntap

chkconfig --add tuntap
chkconfig --level 345 tuntap on

3、启动

service tuntap start