openwrt routeros openvpn client 无线重连报错的原因分析

2023-10-24 11:20

本文主要是介绍openwrt routeros openvpn client 无线重连报错的原因分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本人使用routeos ovn客户端,并打算使用openwrt 的ovn 连接,结果遇到了加密算法不兼容的问题,而且报错也比较隐晦,很难从里面发现信息。

先看一眼报错信息

Server

Error Msg

duplicate packet, dropping
TCP connection established from xxx
duplicate packet, dropping
TCP connection established from xxx
duplicate packet, dropping
TCP connection established from xxx
... 无限重试、循环

Client

error_msg
可以看到报错信息:

Connection reset, restarting [0]
TCP/UDP: Closing socket
SIGUSR1[soft,connection-reset] received, process restarting
Restart pause, 5 second(s)

注意报错信息出现的时机,实在TLS校验完成后报错,且不含关键信息

配置详情

RourterOS Ov9n ServerRouterOS Ov9n Server

OperWRT Ov9n Client

在这里插入图片描述
注意对比Server 和Client的关键信息,看看哪部分不一致,或者哪一部分缺失了

再补充一个关键信息,无论用户名和密码设置如何,都会报相同的错误

排错过程

我们大体上定位了错误发生的位置,在TLS校验成功后,且在用户认证之前
通过浏览源码我们发现,这一步其实在进行socks握手 (socks handshake),且报错也是在这个阶段发生的,原因就是socks握手失败了
/openv9n/src/openv9n/socks.c

void
establish_socks_proxy_passthru(struct socks_proxy_info *p,socket_descriptor_t sd,  /* already open to proxy */const char *host,        /* openvpn server remote */const char *servname,    /* openvpn server port */volatile int *signal_received)
{char buf[270];size_t len;if (!socks_handshake(p, sd, signal_received)){goto error;}/* format Socks CONNECT message */buf[0] = '\x05';            /* VER = 5 */buf[1] = '\x01';            /* CMD = 1 (CONNECT) */buf[2] = '\x00';            /* RSV */buf[3] = '\x03';            /* ATYP = 3 (DOMAINNAME) */len = strlen(host);len = (5 + len + 2 > sizeof(buf)) ? (sizeof(buf) - 5 - 2) : len;buf[4] = (char) len;memcpy(buf + 5, host, len);int port = port_from_servname(servname);if (port ==0){msg(D_LINK_ERRORS, "establish_socks_proxy_passthrough: Cannot convert %s to port number", servname);goto error;}buf[5 + len] = (char) (port >> 8);buf[5 + len + 1] = (char) (port & 0xff);{const ssize_t size = send(sd, buf, 5 + len + 2, MSG_NOSIGNAL);if ((int)size != 5 + (int)len + 2){msg(D_LINK_ERRORS | M_ERRNO, "establish_socks_proxy_passthru: TCP port write failed on send()");goto error;}}/* receive reply from Socks proxy and discard */if (!recv_socks_reply(sd, NULL, signal_received)){goto error;}return;
error:if (!*signal_received){*signal_received = SIGUSR1; /* SOFT-SIGUSR1 -- socks error */}return;
}

可以明显看到报错的位置。
下面通过追踪握手信息发现了异常的地方:

hankshake_msg
原来这部分握手信息早就打印出来了,通过对比RouterOS的设置返现,没有设置cipher的信息。而由于openwrt使用的Ov9n client版本是2.5.x版本,它客户端默认的cipher就是 AES-256-GCM:AES-128-GCM,但是这两种算法我们的RouterOS均不支持
在这里插入图片描述
在这里插入图片描述
所以在握手期间就发生了错误,因为cipher算法不被支持。
所以我们手动在配置文件中添加cipher项目(从2.5文档中来看cipher项目还可以在配置中使用)
改进后的配置:
new_client_conf
可以看见新的配置中auth和cipher均对应RouterOS中的配置,再尝试连接
succcessful_connection_msg
可以看见连接成功建立,但是也会有提示,BF-CBC作为一种加密算法已经过时了,它面临着Sweet32生日攻击,需要注意保护通信的内容,毕竟这是连接到互联网上的vpn环境。所以建议及时更换新的Ov9n Server,以支持更高级别的加密算法。

Ov9n 在国内风评不是很好,但是作为一种企业连接的VPN工具,它的性能和安全性都是非常好的,且有着广泛的兼容环境,非常适合小企业使用,而大中企业可以选择更加高效和安全的硬件级别SSL VPN方案。

排错过程就到这里了,感谢大家观看。

补充信息

现在发现了一个问题,

  • 当你的用户名和密码不对时,也会出现该问题
  • 如果在Routeros的用户secret中未指定Remote_Address,也会出现问题。

这篇关于openwrt routeros openvpn client 无线重连报错的原因分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274778

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字