linux下安装tun模块详细教程

   原本是要看tcp/ip协议栈,找到了https://github.com/chobits/tapip这个。然后需要支持tun,完了开始安装。

       TUN/TAP是一个虚拟网络设备,用于实现用户态程序和内核网络协议栈之间的数据交互。

1、安装环境

我的系统是ubuntu16.04 VMWare虚拟机,原来是这个版本。

410ed9fe90a3da5409ec91d1f8b05b07.png

2、环境检查

modinfotun
modinfo:ERROR: Module tun not found

结论:没有安装。

3、安装过程预总结

1> ubuntu 16.04、ubuntu 18.04、ubuntu 22.04的标准镜像中默认没有tun模块。

2> 使用sudo apt-get install linux-source方式下载源码,使用Tab补全,我选的第二个;

    另外觉得可以只编译一个模块,参考文末4>,可以大幅减少编译耗时,不过不要高兴太早;modprobe tun时会这样——modprobe: ERROR: could not insert 'tun': Exec format error;用dmesg | grep tun看看—— tun: no symbol version for module_layout。

我当时的错误:could not insert module tun.ko: Invalid module format

错误提示Invalid module format 表示加载的tun.ko 模块与当前运行的内核版本不匹配。这通常是因为模块是针对不同版本的内核编译的。

检查模块编译时的内核版本:

模块编译时的版本信息存储在 .modinfo中,可以查看模块的 vermagic信息:

modinfo tun.ko

输出中的 vermagic字段应该与 uname -r的输出匹配。如果不匹配,需要重新编译模块。

c56bb3e7d47ef467bf4fd35f7f10fdca.png

结论——需要全部编译一遍!

这块就可以进行内核裁剪了,不过不是主要目的,all in !

 4、内核编译流程

 4.1下载内核源码

由安装过程预总结2>中sudo apt-get install linux-source方式获取到源码后,源码在/usr/src下。使用tar xvjf解压

363ffc93501a7f539f79ec4fd661e4bf.png

4.2 配置内核源码

在源码目录下,加载系统当前内核的配置文件:

cp/boot/config-$(uname -r) .configmake oldconfigmake preparemake modules_prepare

 4.3使能tun模块

make menuconfig

用其他失败的

ubuntu版本图片替代。

↑和↓选择”Device Drivers" ,然后Enter

a7bb59d19ffbdc7d01bb48e66bc2f176.png

↑和↓选择”Network device support" ,然后Enter。

7ddb447af02627d5d0e9808e249feba4.png

↑和↓选择”Universal TUN/TAP driver support" ,然后按M键,使得选项前变成<M>,如图所示。然后按←或→选择save以及Exit。(Exit需要选择几次)

ee7b7e95ac728bc37d7b0494a07ab219.png

4098fe11862175c1fb383f15e9966618.png

这个名字使用默认的即可。

4.4 编译前环境安装

sudo apt-get updatesudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev

4.5 开始编译

不同电脑性能,编译时间不同,另外注意磁盘空间,保守估计要20G吧。

sudo make -j16

sudo make modules_install

sudo make install

4.6新内核

804feba48a08a3eba7f34964a4067237.png

5、tun模块安装与查看

将tun.ko放在/lib/modules/4.15.18/kernel/net目录下

5.1 modinfo tun结果

root@ubuntu:~# modinfo tun

filename:/lib/modules/4.15.18/kernel/drivers/net/tun.ko

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

srcversion: D608899B5055658635FDD9C

depends: 

retpoline: Y

intree: Y

name: tun

vermagic: 4.15.18 SMP mod_unload

5.2 最终确认

root@ubuntu:~# modprobe tun

root@ubuntu:~# lsmod | grep tun

tun 36864  0

root@ubuntu:~#

最后,单独编译tun模块还遇到了其他错误,就不一一列出了,这是在所难免的。因为种种原因,报错不可避免,遇到就解决或者规避,就ok~

祝各位顺利!

欢迎关注:

1>用户态tcp协议栈调研——https://www.cnblogs.com/zafu/p/7698590.html

2>Ubuntu安装tun模块——https://blog.youkuaiyun.com/qq_34160841/article/details/104901266

3>Ubuntu16.04虚拟网络tun安装https://blog.youkuaiyun.com/lishuhuakai/article/details/70305543

4>Linux内核源码单独编译某模块https://www.cnblogs.com/dream397/p/13984263.html

其他网络相关笔记:

3_TCP/IP连接三次握手与断开四次挥手

2_linux下使用代码获取网卡信息

linux下使用代码设置ip

记一次网络无法ping通的排查

1_linux系统网络性能如何优化——几种开源网络协议栈比较

7_计算机网络五层体系结构

Modbus发送的报文何时等到应答

tcp通信测试报告单1——connect和send

libmodbus库的一些使用经历

6_协议与层次划分

5_计算机网络体系结构的形成

4_计算机网络在我国的发展_20241024

3_路由器分组交换知多少?20241009

2_互联网概述_20241007

1_计算机网络体系结构的形成_20241006

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值