我有一个OpenVPN服务器,设置为通过TCP连接与各种远程networking上的一堆其他服务器进行隧道连接。 除了其中一台远程服务器之外,这一切都非常可靠。 对于那个远程服务器,大约每天一次,我们不能通过VPN从VPN服务器连接到在该服务器上运行的Web服务器。 大约15分钟后,远程服务器上的OpenVPN将在日志中显示此消息:
read TCPv4_CLIENT [NO-INFO]: Connection timed out (code=110)
然后远程服务器将重新启动OpenVPN连接,它的工作原理。
我已经能够在远程服务器和VPN服务器上运行tcpdump,而在远程服务器上远程服务器上远程服务器上的远程服务器上运行远程服务器。
TUN0:
17:23:35.965732 IP vpn-server > remote-server.http: Flags [S], seq 1905371748, win 29200, options [mss 1460,sackOK,TS val 234388092 ecr 0,nop,wscale 7], length 0
为eth0:
17:23:51.981758 IP vpn-server.51194 > remote-server.55840: Flags [P.], seq 1035:1138, ack 1, win 28288, options [nop,nop,TS val 234392096 ecr 529325214,nop,nop,sack 1 {1016:14557}], length 103 17:23:52.024782 IP remote-server.55840 > vpn-server.51194: Flags [.], ack 1138, win 1002, options [nop,nop,TS val 529365753 ecr 234392096], length 0
我没有从远程服务器方便的痕迹,但在远程服务器上,我可以看到eth0和tun0上的传入数据包以及eth0和tun0上的传出数据包。 当发生问题时,我还可以在远程服务器上看到OpenVPN保持活动的数据包。
所以对我来说,这看起来像从远程login的初始数据包正在发送到远程服务器,并返回一个响应数据包,但该响应数据包永远不会放在tun0。
因为这只发生在我们的远程服务器之一,我假设这是networking连接有问题,但我不知道是什么。 也许这是一些丢失的数据包或者什么东西,但是当这个问题发生时,当我在远程服务器上时,据我所知,networking连接工作正常。 另外,我真的很喜欢它,如果它可以更快地检测到这个问题,并在发生这种情况时重新启动openvpn连接。
我在configuration文件中设置了“keepalive 5 30”,但是当这个问题发生时,看起来OpenVPN保持活动数据包实际上在VPN服务器和远程服务器之间来回切换。
客户端configuration:
client dev tun proto tcp remote remote-server 51194 resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun ca ca-cert.pem cert client-cert.pem key client-key.pem ns-cert-type server comp-lzo verb 3 script-security 2 keepalive 5 30
服务器configuration:
ca ca-cert.pem cert server-cert.pem client-config-dir clients comp-lzo dev tun dh dh1024.pem ifconfig-pool-persist ipp.txt group nogroup key server-key.pem max-clients 100 persist-key persist-tun ping 10 port 51194 proto tcp push "route 10.0.0.0 255.255.0.0" server 10.242.0.0 255.255.0.0 status openvpn-status.log topology subnet user nobody verb 4