电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1908 人浏览分享

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

[复制链接]
1908 0

在计算机网络中,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模块

  1. [root@VM_196_26_centos ~]# modinfo tun
  2. filename:       /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/net/tun.ko
  3. alias:          devname:net/tun
  4. alias:          char-major-10-200
  5. license:        GPL
  6. author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
  7. description:    Universal TUN/TAP device driver
  8. rhelversion:    7.2
  9. srcversion:     B59BCB1255A36FBC7557FC3
  10. depends:        
  11. intree:         Y
  12. vermagic:       3.10.0-327.el7.x86_64 SMP mod_unload modversions
  13. signer:         CentOS Linux kernel signing key
  14. sig_key:        79:AD:88:6A:11:3C:A0:22:35:26:33:6C:0F:82:5B:8A:94:29:6A:B3
  15. sig_hashalgo:   sha256
复制代码


加载内核模块

  1. [root@VM_196_26_centos ~]# modprobe tun
  2. [root@VM_196_26_centos ~]# lsmod | grep tun
  3. 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-mi ... nux.x86_64.rpm.html
Install Howto


  1. Create the repository config file /etc/yum.repos.d/nux-misc.repo:
  2. [nux-misc]
  3. name=Nux Misc
  4. baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
  5. enabled=0
  6. gpgcheck=1
  7. gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
  8. Install tunctl rpm package:
  9. # yum --enablerepo=nux-misc install tunctl
复制代码


创建虚拟网卡设备

  1. [root@VM_196_26_centos ~]# tunctl -t tap0 -u root
  2. Set 'tap0' persistent and owned by uid 0
  3. [root@VM_196_26_centos ~]# ifconfig tap0 192.168.0.1 netmask 255.255.255.0 promisc
  4. [root@VM_196_26_centos ~]# ifconfig tap0                                          
  5. tap0: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500
  6.         inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255
  7.         ether 5e:04:f6:78:9a:01  txqueuelen 500  (Ethernet)
  8.         RX packets 0  bytes 0 (0.0 B)

  9.         RX errors 0  dropped 0  overruns 0  frame 0
  10.         TX packets 0  bytes 0 (0.0 B)
复制代码

      
  1. TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
复制代码


经过如上操作后,虚拟网卡已经建立和配置好了。
下面再用另一个命令添加一个tap1(参考https://www.mylinuxplace.com/create-taptun-device-centos-7/)


  1. [root@VM_196_26_centos ~]# ip tuntap add tap1 mode tap
  2. [root@VM_196_26_centos ~]# ifconfig tap1 10.0.0.1/30
  3. [root@VM_196_26_centos ~]# ifconfig tap1
  4. tap1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
  5.         inet 10.0.0.1  netmask 255.255.255.252  broadcast 10.0.0.3
  6.         ether 2e:69:ab:20:0d:a7  txqueuelen 500  (Ethernet)
  7.         RX packets 0  bytes 0 (0.0 B)
  8.         RX errors 0  dropped 0  overruns 0  frame 0
  9.         TX packets 0  bytes 0 (0.0 B)
  10.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
复制代码


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

  1. [root@VM_196_26_centos ~]# tunctl -d tap0
  2. Set 'tap0' nonpersistent
  3. [root@VM_196_26_centos ~]# tunctl -d tap1
  4. Set 'tap1' nonpersistent
复制代码






您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.