linux下安装tun模块详细教程

news2025/1/4 19:20:36

   原本是要看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.coloradmin.cn/o/2270034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ajax数据爬取

有时我们用requests 抓取页面得到的结果&#xff0c;可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据&#xff0c;而使用requests 得到的结果中并没有这些数据。这是因为 requests 获取的都是原始 HTML 文档&#xff0c;而浏览器中的页面是JavaScript 处理…

Docker 安装与配置 Nginx

摘要 1、本文全面介绍了如何在 Docker 环境中安装和配置 Nginx 容器。 2、文中详细解释了如何设置 HTTPS 安全连接及配置 Nginx 以实现前后端分离的代理服务。 2、同时&#xff0c;探讨了通过 IP 和域名两种方式访问 Nginx 服务的具体配置方法 3、此外&#xff0c;文章还涵…

SpringCloud微服务架构

文章目录 认识微服务&#xff1a;SpringCloud 服务拆分及远程调用实现夸远程服务调用使用RestTemplateEureka注册中心 搭建EruekaServer注册服务服务发现 Ribbon负载均衡 修改负载均衡规则解饿加载 Nacos注册中心&#xff08;nacos一部分功能&#xff09; 服务注册到nacosnacos…

WireShark4.4.2浏览器网络调试指南:TCP传输包分析(七)

概述 在使用Wireshark进行网络分析时&#xff0c;理解每一个数据包的组成部分对于网络分析非常重要。特别是在TCP协议中的“三次握手”过程中&#xff0c;每个数据包会包含多个层次的信息&#xff0c;从帧信息到TCP协议的详细内容。下面是对TCP握手过程中第一个SYN数据包的详细…

kafka使用常见问题

连接不上kafka,报下边的错 org.apache.kafka.common.KafkaException: Producer is closed forcefully.at org.apache.kafka.clients.producer.internals.RecordAccumulator.abortBatches(RecordAccumulator.java:760) [kafka-clients-3.0.2.jar:na]at org.apache.kafka.client…

用uniapp写一个播放视频首页页面代码

效果如下图所示 首页有导航栏&#xff0c;搜索框&#xff0c;和视频列表&#xff0c; 导航栏如下图 搜索框如下图 视频列表如下图 文件目录 视频首页页面代码如下 <template> <view class"video-home"> <!-- 搜索栏 --> <view class…

深入浅出:从入门到精通大模型Prompt、SFT、RAG、Infer、Deploy、Agent

阅读原文 渐入佳境 我们都知道&#xff0c;通过编写一个提示词&#xff08;prompt&#xff09;&#xff0c;我们可以引导大模型生成回答&#xff0c;从而开启愉快的人工智能对话&#xff0c;比如让模型介绍一下卡皮巴拉。上边简图描述了这个过程&#xff0c;我们拆成两部分 pr…

Unity-Mirror网络框架-从入门到精通之Basic示例

文章目录 前言Basic示例场景元素预制体元素代码逻辑BasicNetManagerPlayer逻辑SyncVars属性Server逻辑Client逻辑 PlayerUI逻辑 最后 前言 在现代游戏开发中&#xff0c;网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架&#xff0c;专为多人…

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令&#xff0c;它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip &#xff08;Python 的包管理工具&#xf…

自动化测试-Pytest测试

目录 pytest简介 基本测试实例 编写测试文件 执行测试 pytest运行时参数 mark标记 Fixture pytest插件 Allure测试报告 测试步骤 pytest简介 Pytest‌是一个非常流行的Python测试框架&#xff0c;它支持简单的单元测试和复杂的功能测试&#xff0c;具有易于上手、功…

Java-33 深入浅出 Spring - FactoryBean 和 BeanFactory BeanPostProcessor

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

MySQL 服务器简介

通常所说的 MySQL 服务器指的是mysqld程序&#xff0c;当运⾏mysqld后对外提供MySQL 服务&#xff0c;这个专题的内容涵盖了以下关于MySQL 服务器以及相关配置的内容&#xff0c;包括&#xff1a; 服务器⽀持的启动选项。可以在命令⾏和配置⽂件中指定这些选项。 服务器系统变…

分布式版本管理工具——Git关联远程仓库(github+gitee)

Git远程仓库&#xff08;Github&#xff09;的基本使用 一、前言二、Git远程仓库介绍三、演示1. 关联github远程仓库2. 关联gitee&#xff08;码云&#xff09;远程仓库3. 重命名远程仓库名4. 移除远程仓库 四、结束语 一、前言 古之立大事者&#xff0c;不惟有超世之才&#x…

ZLib库使用详细教程 以及标准ZLib函数和QT自带压缩函数比较

1. 下载Zlib 官网下载地址如下&#xff1a;http://www.zlib.net/ 2. 利用cmake编译zlib 有两种方法可以打开cmake-gui winR输入cmd打开命令行&#xff0c;在命令行中输入cmake-gui可以直接打开应用界面找到你一开始安装cmake的文件夹&#xff0c;在bin子文件夹中双击cmake-…

加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍 在使用Hugging Face的transformers库加载Tokenizer和基础模型时&#xff0c;涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用&#xff0c;同时结合代码片段进行解析。 下图是我本地下载好模…

SpringAI从入门到熟练

学习SpringAI的记录情况 文章目录 前言 因公司需要故而学习SpringAI文档&#xff0c;故将自己所见所想写成文章&#xff0c;供大佬们参考 主要是为什么这么写呢&#xff0c;为何不抽出来呢&#xff0c;还是希望可以用的时候更加方便一点&#xff0c;如果大家有需求可以自行去…

嵌入式系统中C++的基本使用方法

大家好,今天主要给大家分享一下,最近操作C++代码的控制方法。 什么是构造函数?构造函数在对象实例化时被系统自动调用,仅且调用一次。 什么是析构函数?与构造函数相反, 在对象结束其生命周期时系统自动执行析构函数。 第一个:析构函数与构造函数区别 实例代码: #inclu…

【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget

目录 QListWidget 核心属性&#xff1a; 核心方法&#xff1a; 核心信号&#xff1a; 例子&#xff1a; QListWidgetItem QTableWidget 核心方法&#xff1a; 核心信号 QTableWidgetItem 例子&#xff1a; QTreeWidget 核心方法&#xff1a; 核心信号&#xff1a…

HTML5 标签输入框(Tag Input)详解

HTML5 标签输入框&#xff08;Tag Input&#xff09;详解 标签输入框&#xff08;Tag Input&#xff09;是一种用户界面元素&#xff0c;允许用户输入多个标签或关键词&#xff0c;通常用于表单、搜索框或内容分类等场景。以下是实现标签输入框的详细讲解。 1. 任务概述 标…

前端加载自己制作的栅格切片服务充当底图

注意mapview的center属性和tilelayer.fullExtent的区别。 前者是设置mapview显示的中心点坐标&#xff0c; const view new MapView({ container: "viewDiv", map: map, center:[100,25] }); 后者是读…