设置非常简单。对于我的家庭服务器,我使用:
- 具有 Pfsense 2.3.4-RELEASE(最新版本)作为操作系统/防火墙的服务器
- OpenVPN 设置(集成 PfSense 版本)作为 TCP 隧道(此外,为了解决这个问题,我添加了
reneg-sec 0;keepalive 10 120
OpenVPN 菜单下高级设置下的自定义选项,并重新启动了 OpenVPN 服务,但没有任何效果)。 - FreeRADIUS 作为 OpenVPN 设置的身份验证后端。
在 FreeRADIUS 中,我已设置 MOTP。因此,我使用手机上的一款应用和密码来生成一次性密码 (OTP) 以进行登录。
一切正常,持续了大约一个小时。然后连接开始重置,显然不会成功,因为 OTP 已过期。
我尝试persist-tun
从本地 ovpn 文件中删除该选项。因为这解决了多个人的类似问题。这也不起作用。
仔细检查日志后,我注意到客户端只显示:
Connection reset, restarting [0]
。
服务器确实显示以下内容(并可能解释原因)。在连接重置之前,服务器每秒都会注册大约 2 分钟的消息,如下所示:
TLS Error: local/remote TLS keys are out of sync:
然后:
Inactivity timeout (--ping-restart), restarting
TCP connection established with
user '' could not authenticate.
WARNING: Failed running command (--auth-user-pass-verify): external program exited with error status: 1
TLS Auth Error: Auth Username/Password verification failed for peer
Peer Connection Initiated with
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 客户端正确同步。即使几秒钟的差异也可能导致此问题。