在Linux系统下使用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驱动实现的隧道封装。
在使用virtualbox虚拟机测试网络启动服务时,由于主机的网络接口是通过DHCP获得ip地址,每次重新启动机器后,都需要更改dhcp的配置文件.
非常麻烦,所以想到使用虚拟网卡(TUN/TAP)来生成一个虚拟的网卡,设置静态ip,将virtualbox网络设置为桥接模式,而且可以和主机网络做到相对隔离(不同网段)
下面我们就以fedora13 来举例,来看看如何创建虚拟网卡设备

1. 确认内核是否支持tun/tap
确认内核是否有tun模块

代码如下:

[root@hunterfu]# 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
description:    Universal TUN/TAP device driver
srcversion:     880DE258930FE60D765B735
depends:
vermagic:       2.6.34.7-56.fc13.i686.PAE SMP mod_unload 686@qualcomm.com>

加载内核模块 -

代码如下:

[root@hunterfu ~]#  modprobe tun
[root@hunterfu ~]# lsmod | grep tun
tun                    10548  1

执行以上命令后,出现如上输出,说明模块加载成功

2. 创建和配置虚拟网卡
确认是否有tunctl命令,如果没有通过yum安装即可

代码如下:

[root@hunterfu ~]# yum install tunctl

创建虚拟网卡设备

代码如下:

[root@hunterfu ~]# tunctl -t tap0 -u root

设置虚拟网卡

代码如下:

[root@hunterfu ~]# ifconfig tap0 192.168.0.1  netmask 255.255.255.0 promisc

经过如上操作后,虚拟网卡已经建立和配置好了。
3. 作为系统服务随系统自动启动创建虚拟网卡
编写配置脚本(符合chkconfig规范)

代码如下:

[root@hunterfu ~]# 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
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

可以根据具体需求修改此脚本
加入到系统服务中

代码如下:

[root@hunterfu ~]# chkconfig --add config_tap
[root@hunterfu ~]# chkconfig --level 345 config_tap on

操作完成后,就可以像其他标准服务一样,通过 service config_tap start 来进行创建和启动操作。

时间: 2025-01-21 09:36:43

在Linux系统下使用TUN/TAP虚拟网卡的基本教程的相关文章

linux下TUN/TAP虚拟网卡的使用

转载:http://wushank.blog.51cto.com/3489095/1306849 tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装.利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中.开源项目openvpn (http://openvpn.sourceforge.net)和Vtun(http://vt

Linux系统下安装跨平台团队开发工具Vagrant的教程

Vagrant 是一个可创建轻量级.高复用性和便于移植的开发环境的工具. 在非专业人士眼里,这意味着Vagrant抛弃开发环境中所有让人头痛的设置代之为了一个单一的配置文件,你可以选择你的服务器所需要的特性予以保留.你将不会再被XAMMP,手动配置虚拟环境,或者使用FTP远程编辑所卡住. Vagrant 是一个强有力的工具,它的功能和价值超出这篇文章所覆盖的范围以及我的理解所能到达之处.这篇文章将介绍Vagrant中一些相当酷的事情,比如: 在你的机器中使用PHP5.4版本的LAMP. 如何在你

讲解Linux系统下如何自动备份MySQL数据的基本教程_Mysql

1.先创建一个数据库备份目录: mkdir backup cd backup mkdir mysqlbackup cd mysqlbackup 2.创建备份脚本 vi mysqlautobackup 3.编写脚本: filename=`date +%Y%m%d` /mysql的bin目录/mysqldump --opt 数据库名 -u(mysql账号) -p(mysql密码) | gzip > /备份到哪个目录/name$filename.gz 说明:以上采用gzip压缩,name可随意写,注意

sharly浅谈虚拟主机linux系统下的安全设置

美国虚拟主机大都使用Linux操作系统,因此当用户在使用美国虚拟主机的时候,Linux系统的安全问题就成为了使用者最为关心的问题,毕竟谁都希望自己操作的是一个稳定又安全的系统. 什么是Linux呢?Liunx的官方定义:"Linux是一种UNIX操作系统的克隆,它(的内核)由Linux Torvalds以及网络上组织松散的黑客队伍一起从零开始编写而成.LINUX的目标是保持和POSIX的兼容."众所周知,Linux是一种开放源代 码的操作系统,由于它的自由开放性和技术先进性,顺应了广大

在Linux系统下利用ProFTPD架设一台FTP服务器

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   ProFTPD:一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序,它是在自由软件基金会的版权声明(GPL)下开发.发布的免费软件,也就是说任何人只要遵守GPL版权声明,都可以随意修改源始码. ProFTPD设计目标是实现一个安全且易于设定的FTP Server.目前Unix或类Unix平台上 FTP Server十分有

日志-linux系统下有Sense Key:recovered error [current]错误

问题描述 linux系统下有Sense Key:recovered error [current]错误 日志里有大量如图报警,不知道是什么原因引起的,查了ASC和ASCP也没有什么结果,拜托有知道的大神,给小弟指条明路 解决方案 看看是不是硬盘有坏道,或者文件破坏 参考:http://blog.itpub.net/25362835/viewspace-1058637/ 解决方案二: http://bbs.chinaunix.net/thread-4086486-1-1.html

ext下拉框在linux系统下,输入框有XX的关闭

问题描述 ext下拉框在linux系统下,输入框有XX的关闭 如果所示,在linux系统,可输入的下拉框有XX的按钮,但是本地却没有,不知道这个该怎么设置,现在的问题是,linux系统上点那个XX没有效果,点击为空后,鼠标放到别的地方时,当时选得值又出现了,有没有人知道这个梗.

Linux系统下使用mail发送Internet邮件的配置方法

  用惯了windows系统的用户可能一开始对linux系统掌握不好,很多功能可能用起来不是很习惯.本文就介绍了linux系统的一个小应用:在Linux系统下使用mail发送Internet邮件.不过在介绍mail之前先来看一下先来看一下sendmail服务. Red Hat上sendmail服务一般是自动启动的.可以通过下面的命令查看sendmail服务的状态: service sendmail status 如果sendmail服务未启动可以使用如下命令启动: service sendmai

Linux系统下的文件传输工具:RZSZ的用法

Linux系统下传输方式很多,比如:通过FTP SFTP - 等等.linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地,根据RZSZ特性,这里我们通过SecureCRT提供ZModem配合RZSZ传输工具进行讲解 首先先了解与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地机器 rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到