当前位置: 首页 > article >正文

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.csdn.net/qq_34160841/article/details/104901266

3>Ubuntu16.04虚拟网络tun安装https://blog.csdn.net/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


http://www.kler.cn/a/466690.html

相关文章:

  • 热备份路由HSRP及配置案例
  • HTML——56.表单发送
  • 【MySQL】九、表的内外连接
  • DATACOM-DHCP-复习-实验
  • 《计算机网络A》单选题-复习题库
  • 我的博客年度之旅:感恩、成长与展望
  • 基于FPGA的2FSK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
  • 算法-大整数反转
  • UE4_用户控件_10_用图像来显示场景捕获的渲染目标
  • 企业三要素如何用PHP实现调用
  • IIS设置IP+端口号外网无法访问的解决方案
  • 【Python系列】Flask 与 FastAPI:两个 Python Web 框架的对比分析
  • 组合模式详解
  • 依赖冲突`npm install --no-audit --save @testing-library/jest-dom@^5.14.1...` failed
  • CTE与子查询的区别及运行效率比较
  • 使用Dockerfile构建镜像
  • centos8 部署 kubernetes集群
  • 网易云的ip归属地是什么意思?为什么变来变去
  • Segment Anything C++ 项目【Part2:修改源码+自动分割】
  • 我的博客年度之旅:感恩、成长与展望
  • MySQL 表结构在线变更:优雅地解决停机问题
  • 【Rust自学】10.2. 泛型
  • 医学AI公开课第二期|写给癌症研究者的人工智能指南|公开课·25-01-03
  • 论述数据、数据库、数据库管理系统、数据库系统的概念。
  • 利用矢量数据库增强大型语言模型应用
  • Leffa 虚拟试衣论文笔记