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
相关文章
- 宿主系统为Ubuntu 14,CentOS 6.5 安装VirtualBox增强工具失败:Building the OpenGL support module[FAILED]
- centos定时删除log文件
- CENTOS运行报错java.lang.OutOfMemoryError
- CentOS下软件对应的软件包名
- 在CentOS 7上安装Kafka
- centos安装maven
- CentOS安装LVM方式
- 如何在CentOS 6.x x64系统中创建超过16TB的ext4文件系统
- yum安装centos-7版nginx
- CentOS 7下编译安装Nginx+PHP
- 【收藏】CentOS 7 安装NFS
- CentOS 7.3安装GNOME桌面步骤
- 如何在windows上安装centos单系统,以及安装事项和 centOS Linux和centOS Stream区别
- CentOS 7.x安装ELK(Elasticsearch+Logstash+Kibana)
- centos 6.10 安装mysql 5.7.27 出现缺少libnuma.so.1的问题
- CentOS 7 安装mongodb 4.4——筑梦之路
- redhat 8 更换yum源 使用centos国内软件源
- Centos 7 xfs 文件系统 lvm 分区容量调整
- 修改 CentOS 中的 repo