
注意对比Server 和Client的关键信息,看看哪部分不一致,或者哪一部分缺失了
再补充一个关键信息,无论用户名和密码设置如何,都会报相同的错误
我们大体上定位了错误发生的位置,在TLS校验成功后,且在用户认证之前
通过浏览源码我们发现,这一步其实在进行socks握手 (socks handshake),且报错也是在这个阶段发生的,原因就是socks握手失败了
/openv9n/src/openv9n/socks.c
establish_socks_proxy_passthru(struct socks_proxy_info *p,
socket_descriptor_t sd,
const char *host,
const char *servname,
volatile int *signal_received)
char buf[270];
size_t len;
if (!socks_handshake(p, sd, signal_received))
goto error;
buf[0] = '\x05';
buf[1] = '\x01';
buf[2] = '\x00';
buf[3] = '\x03';
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;
if (!recv_socks_reply(sd, NULL, signal_received))
goto error;
return;
error:
if (!*signal_received)
*signal_received = SIGUSR1;
return;
可以明显看到报错的位置。
下面通过追踪握手信息发现了异常的地方:

原来这部分握手信息早就打印出来了,通过对比RouterOS的设置返现,没有设置cipher的信息。而由于openwrt使用的Ov9n client版本是2.5.x版本,它客户端默认的cipher就是 AES-256-GCM:AES-128-GCM
,但是这两种算法我们的RouterOS均不支持


所以在握手期间就发生了错误,因为cipher算法不被支持。
所以我们手动在配置文件中添加cipher项目(从2.5文档中来看cipher项目还可以在配置中使用)
改进后的配置:

可以看见新的配置中auth和cipher均对应RouterOS中的配置,再尝试连接

可以看见连接成功建立,但是也会有提示,BF-CBC作为一种加密算法已经过时了,它面临着Sweet32生日攻击,需要注意保护通信的内容,毕竟这是连接到互联网上的vpn环境。所以建议及时更换新的Ov9n Server,以支持更高级别的加密算法。
Ov9n 在国内风评不是很好,但是作为一种企业连接的VPN工具,它的性能和安全性都是非常好的,且有着广泛的兼容环境,非常适合小企业使用,而大中企业可以选择更加高效和安全的硬件级别SSL VPN方案。
排错过程就到这里了,感谢大家观看。
现在发现了一个问题,
- 当你的用户名和密码不对时,也会出现该问题。
- 如果在Routeros的用户secret中未指定
Remote_Address
,也会出现问题。
下载链接:https://swupdate.openvpn.org/community/releases/tap-windows-9.21.1.exe
下载之后,就安装,一直 Next 就好了
安装好之后,看一下网络连接 是否 有 ”TAP-Windows Adapter V9“
确保有了之后,试一下用openvpn 连接是否可以连接成功,发现是可以的
[root@C8-194 ~]# cat > /usr/lib/systemd/system/openvpn@.service << SUN
> [Unit]
> Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
> After=network.target