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

我的OpenVPNconfiguration有一个相当奇怪的问题。 我从Windows 7与官方最新的OpenVPN客户端连接到我的OpenVPN服务器( OpenVPN 2.1.4 i386-redhat-linux-gnu )。

问题是我刚刚1小时后从我的OpenVPN服务器断开,我不明白什么指令/选项是负责这一点。 也许这是一个客户端问题? 我已经尝试了不同的Windows系统和Windows VPN客户端。 Linux客户端按预期工作,没有断开连接。

你能帮我解决这个问题吗? 我试过看书和Googlesearch,有人build议玩keepalivereneg-sec指令。 但是这似乎没有帮助。

OpenVPN服务器configuration

 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 

非常感谢你。

罪魁祸首似乎是你的身份validationconfiguration。 您正在使用plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login ,这将要求客户端提供一个有效的用户名/密码组合来连接。 显然,这也需要重新键入,你的OpenVPN客户端似乎无法从stdin请求用户名( ERROR: could not read Auth username from stdin )。

至于为什么在你的服务器configuration中引发reneg-sec没有任何帮助,这是因为参数必须在两个参数中指定 – 服务器和客户端的configuration要高于默认的3600秒(这恰好发生在导致一小时 – 断开你看到)。

所以你的select是

  • 使用一种不需要用户input的authentication方法(authentication证书)
  • 排除连接build立后客户端无法提示用户名/密码组合的原因
  • 提高密钥更新期限或完全禁用密钥更新(这会削弱您连接的安全性,所以它肯定只是解决您的问题的一个较差的解决方法)

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

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

警告:此configuration可能会caching内存中的密码 – 使用auth-nocache选项来防止这种情况

所以我想我只是添加这个选项,看看会发生什么。 那么,上面的警告消失了,但一小时之后popup一个对话框,询问我的用户名和密码。

我注意到,由Andrew的上述configuration不包含此选项,所以我有点困惑,为什么它不caching密码。 也许这是因为我正在使用openvpn的更新版本,或者可能会在服务器configuration中将此选项推送到客户端。

这是看到:OpenVPN的2.2.1-8 + deb7u2与OpenVPN GUI v5的Windows。

你可以尝试在你的server.conf reneg-sec 0

https://duo.com/docs/openvpn

https://tldrify.com/m80

这真的很简单。 由于OpenVPN默认每3600秒尝试重新build立一个新的TLS会话,所以每次都需要使用新的OTP重新进行身份validation。 为了避免这种行为,只需要告诉openvpn永远不要拒绝TLS会话,并保持现有的会话活着,如果结合keepalive指令和reneg-sec 0 ,你将有一个稳定的连接,没有renegociation无论如何。