原本是要看tcp/ip协议栈,找到了https://github.com/chobits/tapip这个。然后需要支持tun,完了开始安装。
TUN/TAP是一个虚拟网络设备,用于实现用户态程序和内核网络协议栈之间的数据交互。
1、安装环境
我的系统是ubuntu16.04 VMWare虚拟机,原来是这个版本。
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
的输出匹配。如果不匹配,需要重新编译模块。
结论——需要全部编译一遍!
这块就可以进行内核裁剪了,不过不是主要目的,all in !
4、内核编译流程
4.1下载内核源码
由安装过程预总结2>中sudo apt-get install linux-source方式获取到源码后,源码在/usr/src下。使用tar xvjf解压
4.2 配置内核源码
在源码目录下,加载系统当前内核的配置文件:
cp/boot/config-$(uname -r) .configmake oldconfigmake preparemake modules_prepare
4.3使能tun模块
make menuconfig
用其他失败的
ubuntu版本图片替代。
↑和↓选择”Device Drivers" ,然后Enter
↑和↓选择”Network device support" ,然后Enter。
↑和↓选择”Universal TUN/TAP driver support" ,然后按M键,使得选项前变成<M>,如图所示。然后按←或→选择save以及Exit。(Exit需要选择几次)
这个名字使用默认的即可。
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新内核
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