使用openwrt搭建ipsec隧道

server/2025/2/3 11:43:05/

背景:最近同事遇到了个ipsec问题,做的ipsec特性,ftp下载ipv6性能只有100kb, 正面定位该问题也蛮久了,项目没有用openwrt, 不过用了开源组件strongswan, 加密算法这些也是内核自带的,想着开源的不太可能有问题,想着我帮他调试一下开源的,他继续正面定位。顺便学习一下怎么玩一下ipsec。ipsec和strongswanWan网上资料很多,这里我们不再做过多的介绍,我们主要先介绍一下针对同事的该问题,环境怎么搭建。

环境搭建:我们知道ipsec 主要是实现不同局域网网段之间的加密传输,实际对于现网用户的话需要服务器和客户端之间有公网ip,我们这里没有用公网ip也没有什么影响,环境top图如下:

ipsec编译:一开始想着能不能直接用opkg在线安装,发现安装之后会遇到各种各样的问题,解决一个又接着下一个,这条路暂时行不通。我们直接去编译一下带ipsec的openwrt的固件,遇到问题也好解决一点,这里我选择的lean大佬的openwrt源码,在国内我们玩openwrt的玩家基本都在用lean的代码,因为lean的代码适配了国内基本上常见的路由器固件,我们只需要make menuconfig开一下对应产品的宏就可以编译,非常简单上手。

我这里编译的路由器型号是gl.mt3000,lean帮忙我们适配了其它ipsec依赖的strongswan对应的宏,不需要我们去开,截图如下

我们可以看到lean的源码web界面适配了ipsec  ikev1版本,不支持ikev2

我们可以需要自己去改一下ipsec的配置文件ipsec.conf就可以让客户端和服务端连接,配置文件内容如下:

config setupconn %defaultikelifetime=28800keylife=20mrekeymargin=3mkeyingtries=1keyexchange=ikev2conn site_to_siteleft=192.168.250.40 #这里填当前路由器wan ipleftsubnet=192.168.1.0/24 #这里填当前路由器网段leftid=192.168.250.40 #这里填当前路由器wan ipleftauth=secretrightauth=secretright=192.168.250.94 #这里填对方路由器wan iprightsubnet=192.168.10.0/24 #这里填对方路由器网段rightid=192.168.250.94 #这里填对方路由器wan ipike=aes128-sha1-modp2048!esp=aes128-sha1!auto=start

ipsec.secrets配置psk,服务器和客户端psk要保存一致

root@OpenWrt:/etc# cat  ipsec.secrets 
# /etc/ipsec.secrets - strongSwan IPsec secrets file
: PSK "1"
mw : XAUTH "1"

另外一台路由器我们也需要这样配置,就是上面ipsec.conf里面填写ip地址的地方需要和上面反过来就可以了。

我们都编辑好之后,如果之前ipsec进程已经运行了,我们可以用执行命令ipsec restarts,如果之前没有运行,我们需要执行ipsec start, 然后我们可以执行ipsec statusall查看当前的转态,我们可以看到有个connecting,说明正在连接中,如果up前面不是0,那么说明我们ipsec 已经连接上了。

我们配置好ipsec.conf后,发现死活连接不上,up前面一直是0,然后做了一个尝试,把配置文件里面的ipsec.conf里面的ikv2改成了ikv1发现连接上了,之前一直怀疑加密算法有问题,看来加密算法是没有问题,此刻阻塞了。刚好手机拍下了日志,把日志往群里发了一下,细心的群友看出了问题点。

openssl制作证书的时候需要,这里不知道为啥ikv1可以ikv2不行,可以找一下提示的这个函数openssl_plugin_create在哪里定义,安装试一下

然后我搜了一下这个函数是在哪个地方定义的,只需要我们去开一下对应的宏就行

然后重新编译了一下版本,发现连接上去了。

我们简单测试一下:发现只能ping通网关,2台路由器下面的lan侧设备不能互相ping通,之前怀疑策略路由有问题,命令如下

可是不管怎么去改策略路由还是不行,还在页面上去配置了静态路由器,之前在bibi看到过有说需要配置一下静态路由,只能病急乱投医,做了很多尝试还是不行。又继续查询资料,说的是关闭防火墙,因为之前我已经做过了一个尝试,就是只关闭一台路由器的防火墙,没有关闭另外一台路由器的,这次我尝试2台路由器都关闭了,竟然都ping通了。

关闭防火墙命令如下:

etc/init.d/firewall stop

ipsec报文是加密的,我们抓包看一下,是否是这样的,用tcpdump抓了一下,然后报文没有加密,很疑惑,转念一想,不应该呀。可能是抓包点位的问题,我们tcpdump是在协议栈入口抓的,可能还没有经过ipsec加密的地方,然后我又抓了一下wan口的报文,这次对得上了。

我们用iperf3打流测试一下ipv4看一下性能怎么样,性能不是很高,只有20bps,不过规格说的是10bps, 也满足了要求。接下来我们看一下ipv6性能怎么样,直接ftp下载一下文件,速率和ipv4差不多,也是20bps左右。ipv6的配置文件如下:主要和ipv4的区别就是填写ipv4地址的地方都写ipv6的就行。


http://www.ppmy.cn/server/164602.html

相关文章

IM 即时通讯系统-45-merua0oo0 IM 分布式聊天系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术,提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

验证二叉搜索树(力扣98)

根据二叉搜索树的特性,我们使用中序遍历,保证节点按从小到大的顺序遍历。既然要验证,就是看在中序遍历的条件下,各个节点的大小关系是否符合二叉搜索树的特性。双指针法和适合解决这个问题,一个指针指向当前节点&#…

C++泛型编程指南04-(对默认调用参数的类型推断)

文章目录 问题描述解决方案示例代码 关键点解释进一步改进:结合概念约束 你提到的情况确实是一个常见的问题:在C中,类型推断不适用于默认调用参数。这意味着如果你希望函数模板能够通过默认参数来实例化,你需要为模板参数提供一个…

windows蓝牙驱动开发-生成和发送蓝牙请求块 (BRB)

以下过程概述了配置文件驱动程序生成和发送蓝牙请求块 (BRB) 应遵循的一般流程。 BRB 是描述要执行的蓝牙操作的数据块。 生成和发送 BRB 分配 IRP。 分配BRB,请调用蓝牙驱动程序堆栈导出以供配置文件驱动程序使用的 BthAllocateBrb 函数。;初始化 BRB…

机器学习优化算法:从梯度下降到Adam及其变种

机器学习优化算法:从梯度下降到Adam及其变种 引言 最近deepseek的爆火已然说明,在机器学习领域,优化算法是模型训练的核心驱动力。无论是简单的线性回归还是复杂的深度神经网络,优化算法的选择直接影响模型的收敛速度、泛化性能…

记录一次Sqoop从MySQL导入数据到Hive问题的排查经过

个人博客地址:记录一次Sqoop从MySQL导入数据到Hive问题的排查经过 | 一张假钞的真实世界 问题描述 MySQL中原始数据有790W+的记录数,在Sqoop抽取作业成功的情况下在Hive中只有500W左右的记录数。 排查过程 数据导入脚本Log 通过Log可以发现以下信息: 该Sqoop任务被分解…

三甲医院大型生信服务器多配置方案剖析与应用(2024版)

一、引言 1.1 研究背景与意义 在当今数智化时代,生物信息学作为一门融合生物学、计算机科学和信息技术的交叉学科,在三甲医院的科研和临床应用中占据着举足轻重的地位。随着高通量测序技术、医学影像技术等的飞速发展,生物医学数据呈爆发式…

[Linux]el8安全配置faillock:登录失败达阈值自动锁定账户配置

前言 本篇文章的配置仅使用于el8版本的Linux,目前已在centos8、BCLinux8上验证成功,其他版本系统是否可行还得考查。 el8中管理用户登录失败锁定账户所用的模块是faillock.so,如果想要将配置应用与其他版本的Linux,建议确认Linux…