TLS 密钥不同步?为什么我的 VPN 连接在一小时后超时?

TLS 密钥不同步?为什么我的 VPN 连接在一小时后超时?

设置非常简单。对于我的家庭服务器,我使用:

  1. 具有 Pfsense 2.3.4-RELEASE(最新版本)作为操作系统/防火墙的服务器
  2. OpenVPN 设置(集成 PfSense 版本)作为 TCP 隧道(此外,为了解决这个问题,我添加了reneg-sec 0;keepalive 10 120OpenVPN 菜单下高级设置下的自定义选项,并重新启动了 OpenVPN 服务,但没有任何效果)
  3. FreeRADIUS 作为 OpenVPN 设置的身份验证后端。

在 FreeRADIUS 中,我已设置 MOTP。因此,我使用手机上的一款应用和密码来生成一次性密码 (OTP) 以进行登录。

一切正常,持续了大约一个小时。然后连接开始重置,显然不会成功,因为 OTP 已过期。

我尝试persist-tun从本地 ovpn 文件中删除该选项。因为这解决了多个人的类似问题。这也不起作用。

仔细检查日志后,我注意到客户端只显示:

Connection reset, restarting [0]

服务器确实显示以下内容(并可能解释原因)。在连接重置之前,服务器每秒都会注册大约 2 分钟的消息,如下所示:

TLS Error: local/remote TLS keys are out of sync:

然后:

  1. Inactivity timeout (--ping-restart), restarting
  2. TCP connection established with
  3. user '' could not authenticate.
  4. WARNING: Failed running command (--auth-user-pass-verify): external program exited with error status: 1
  5. TLS Auth Error: Auth Username/Password verification failed for peer
  6. Peer Connection Initiated with
  7. Connection reset, restarting [0]

我明白为什么它无法重新连接(参见日志 3 和 5),OTP 显然已过期。我理解的意思是,问题在于,TLS keys are out of sync在断开连接并使用不正确的凭据重新连接之前,问题可能就出在这里。现在的问题是:

我该如何修复这个问题?在哪里修复?在 Pfsense、OpenVPN、FreeRADIUS 的服务器端还是在 OVPN 配置文件的客户端?

另外我的 ovp 配置文件如下所示:

dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote [XXXXXX] 1194 tcp-client
auth-user-pass
ns-cert-type server

<ca>
-----BEGIN CERTIFICATE-----
[XXXXXX]
-----END CERTIFICATE-----
</ca>
setenv CLIENT_CERT 0
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
[XXXXXX]
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1

答案1

经过一番努力,我找到了解决问题的方法。

设置reneg-sec 0;客户端 OpenVPN 配置文件,禁用 TLS 重新协商。也为 OpenVPN 服务器设置一个数字,例如reneg-sec 28800;允许服务器在 8 小时后开始重新协商(最终由于不同步而终止会话)。基本上就是使会话超时。我建议将客户端设置为无限制,将服务器设置为有限制,reneg-sec这样您将始终能够更改服务器配置,而无需实际更改所有客户端配置文件。

这样的设置确实绕过了 TLS 重新协商,这基本上是解决实际问题的一种解决方法。真正的问题是找出不同步的原因并修复它。我还没有找到解决方案。但这种解决方法现在对我来说已经足够了。

答案2

检查客户端和服务器上的系统时钟是否通过您最喜欢的 NTP 客户端正确同步。即使几秒钟的差异也可能导致此问题。

相关内容