每小时与 OpenVPN 服务器断开连接

每小时与 OpenVPN 服务器断开连接

我的配置出现了一个相当奇怪的问题。我使用官方最新客户端OpenVPN连接到我的服务器 ( )。Windows 7OpenVPNOpenVPNOpenVPN 2.1.4 i386-redhat-linux-gnu

问题是我刚好在 1 小时后与服务器断开连接OpenVPN,我不明白哪个指令/选项导致了这种情况。也许是客户端问题?我尝试了不同的Windows系统和Windows VPN客户端。Linux客户端工作正常,没有断开连接。

您能帮我解决这个问题吗?我试过阅读书籍和谷歌搜索,有些人建议使用keepalivereneg-sec指令。但这似乎没有帮助。

OpenVPN 服务器配置

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 192.168.2.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.0.0.0"
client-config-dir ccd
route 192.168.51.0 255.255.255.0
keepalive 60 600
reneg-sec 5000
hand-window 15
tls-auth ta.key 0
comp-lzo
max-clients 50
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 4
crl-verify crl.pem
management localhost 11111
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login
push "dhcp-option DNS 192.168.2.1"
push "dhcp-option DOMAIN example.com"
push "dhcp-option SEARCH example.com"

服务器日志(问题不是出在reinit_src=1吗?)

Oct  9 07:23:38 vpn openvpn[19495]: user/192.168.253.20:54568 TLS Error: TLS handshake failed
Oct  9 07:23:38 vpn openvpn[19495]: user/192.168.253.20:54568 TLS: move_session: dest=TM_LAME_DUCK src=TM_ACTIVE reinit_src=1
Oct  9 07:24:53 vpn openvpn[19495]: user/192.168.253.20:54568 TLS Error: TLS handshake failed
Oct  9 07:26:08 vpn openvpn[19495]: user/192.168.253.20:54568 TLS Error: TLS key negotiation failed to occur within 15 seconds (check your network connectivity)
Oct  9 07:26:08 vpn openvpn[19495]: user/192.168.253.20:54568 TLS Error: TLS handshake failed
Oct  9 07:26:39 vpn openvpn[19495]: user/192.168.253.20:54568 [UNDEF] Inactivity timeout (--ping-restart), restarting
Oct  9 07:26:39 vpn openvpn[19495]: user/192.168.253.20:54568 SIGUSR1[soft,ping-restart] received, client-instance restarting

客户端日志

RwrWRwRwRwRwTue Oct 09 07:26:39 2012 us=796000 TLS: soft reset sec=0 bytes=7405621/0 pkts=9459/0
Tue Oct 09 07:26:39 2012 us=600000 ERROR: could not read Auth username from stdin
Tue Oct 09 07:26:39 2012 us=600000 Exiting
Tue Oct 09 07:26:39 2012 us=600000 C:\WINDOWS\system32\route.exe DELETE 192.168.2.1 MASK 255.255.255.255 192.168.100.150
Tue Oct 09 07:26:39 2012 us=600000 Route deletion via IPAPI succeeded [adaptive]
Tue Oct 09 07:26:39 2012 us=600000 C:\WINDOWS\system32\route.exe DELETE 10.0.0.0 MASK 255.0.0.0 192.168.100.150
Tue Oct 09 07:26:39 2012 us=600000 Route deletion via IPAPI succeeded [adaptive]
Tue Oct 09 07:26:39 2012 us=600000 Closing TUN/TAP interface

非常感谢。

答案1

罪魁祸首似乎是您的身份验证配置。您使用的配置要求客户端提供有效的用户名/密码组合才能连接。显然,这也是重新密钥时的要求,而您的 OpenVPN 客户端似乎无法从( )plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login请求用户名。stdinERROR: could not read Auth username from stdin

至于为什么在服务器配置中提高 reneg-sec 没有起到作用,这是因为必须在服务器和客户端的配置中都指定该参数,才能有效地将其提高到默认值 3600 秒以上(这恰好导致了您看到的一小时断开连接)。

所以你的选择是

  • 使用不需要用户输入的身份验证方法(想到证书)
  • 解决客户端在建立连接后无法提示输入用户名/密码组合的问题
  • 增加密钥更新周期或完全禁用密钥更新(这会削弱您的连接的安全性,因此它肯定只是解决您问题的一种较差的解决方法)

答案2

您可以尝试reneg-sec 0server.conf

https://duo.com/docs/openvpn

https://tldrify.com/m80

其实很简单。由于 OpenVPN 默认每 3600 秒尝试重新协商新的 TLS 会话,因此每次您都必须使用新的 OTP 重新进行身份验证。为了避免这种行为,只需告诉 openvpn 永远不要重新协商 TLS 会话并保持现有会话处于活动状态,如果您将keepalive指令和结合起来reneg-sec 0,您将拥有稳定的连接,完全不需要重新协商。

答案3

当我在客户端配置中添加“auth-nocache”选项时,我也遇到了类似的效果。我使用证书和用户名+密码组合进行身份验证。

有几次我在连接日志中注意到 openvpn 报告了以下警告:

警告:此配置可能会在内存中缓存密码 - 使用 auth-nocache 选项来防止这种情况

所以我想我只需添加此选项,看看会发生什么。好吧,上面的警告确实消失了,但一小时后弹出一个对话框,要求我输入用户名和密码。

我注意到 Andrew 的上述配置不包含此选项,所以我有点困惑为什么它不缓存密码。也许是因为我使用的是较新版本的 openvpn,或者可以在服务器配置上设置以将此选项推送到客户端。

这是在以下版本中看到的:OpenVPN 2.2.1-8+deb7u2 和适用于 Windows 的 OpenVPN GUI v5。

相关内容