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

And*_*rew 14 openvpn

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

问题是我OpenVPN刚好在 1 小时后与服务器断开连接,我无法理解什么指令/选项对此负责。可能是客户端的问题?我尝试了不同的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"
Run Code Online (Sandbox Code Playgroud)

服务器日志(不是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
Run Code Online (Sandbox Code Playgroud)

客户端日志

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
Run Code Online (Sandbox Code Playgroud)

非常感谢。

the*_*bit 12

罪魁祸首似乎是您的身份验证配置。您正在使用plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login这将要求客户端提供有效的用户名/密码组合以进行连接。显然,重新生成密钥时也需要这样做,并且您的 OpenVPN 客户端似乎无法从stdin( ERROR: could not read Auth username from stdin)请求用户名。

至于为什么在您的服务器配置中提高 reneg-sec 没有帮助的原因,这是因为必须在两者中指定参数 - 服务器和客户端的配置才能有效地提高到默认值 3600 秒以上(碰巧导致一小时 - 您看到的断开连接)。

所以你的选择是

  • 使用不需要用户输入的身份验证方法(想到证书)
  • 排查为什么您的客户端在建立连接后无法提示输入用户名/密码组合
  • 延长重新生成密钥的时间或完全禁用重新生成密钥(这会削弱您的连接的安全性,因此它肯定只是您问题的一种较差的解决方法)


Arn*_*aud 8

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

https://duo.com/docs/openvpn

https://tldrify.com/m80

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